Jacek Caban : mshtml: Split setting window URI from set_current_mon.
Alexandre Julliard
julliard at winehq.org
Tue Nov 15 13:17:33 CST 2011
Module: wine
Branch: master
Commit: bc701d59652ccefca78fd67a8255829f570af95c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bc701d59652ccefca78fd67a8255829f570af95c
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Nov 15 13:30:12 2011 +0100
mshtml: Split setting window URI from set_current_mon.
---
dlls/mshtml/persist.c | 51 ++++++++++++++++++++++++++++++------------------
1 files changed, 32 insertions(+), 19 deletions(-)
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 3107e92..ad7f4a6 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -70,9 +70,31 @@ static BOOL use_gecko_script(HTMLWindow *window)
return FAILED(hres) || scheme != URL_SCHEME_ABOUT;
}
+static void set_current_uri(HTMLWindow *window, IUri *uri)
+{
+ if(window->uri) {
+ IUri_Release(window->uri);
+ window->uri = NULL;
+ }
+
+ if(window->url) {
+ SysFreeString(window->url);
+ window->url = NULL;
+ }
+
+ if(!uri)
+ return;
+
+ IUri_AddRef(uri);
+ window->uri = uri;
+
+ IUri_GetDisplayUri(uri, &window->url);
+}
+
void set_current_mon(HTMLWindow *This, IMoniker *mon)
{
IUriContainer *uri_container;
+ IUri *uri = NULL;
HRESULT hres;
if(This->mon) {
@@ -80,15 +102,6 @@ void set_current_mon(HTMLWindow *This, IMoniker *mon)
This->mon = NULL;
}
- if(This->uri) {
- IUri_Release(This->uri);
- This->uri = NULL;
- }
-
- if(This->url) {
- SysFreeString(This->url);
- This->url = NULL;
- }
if(!mon)
return;
@@ -98,23 +111,26 @@ void set_current_mon(HTMLWindow *This, IMoniker *mon)
hres = IMoniker_QueryInterface(mon, &IID_IUriContainer, (void**)&uri_container);
if(SUCCEEDED(hres)) {
- hres = IUriContainer_GetIUri(uri_container, &This->uri);
+ hres = IUriContainer_GetIUri(uri_container, &uri);
IUriContainer_Release(uri_container);
if(hres != S_OK) {
WARN("GetIUri failed: %08x\n", hres);
- This->uri = NULL;
+ uri = NULL;
}
}
- if(!This->uri) {
+ if(!uri) {
WCHAR *url;
hres = IMoniker_GetDisplayName(mon, NULL, NULL, &url);
if(SUCCEEDED(hres)) {
- hres = CreateUri(url, 0, 0, &This->uri);
+ hres = CreateUri(url, 0, 0, &uri);
if(FAILED(hres)) {
WARN("CrateUri failed: %08x\n", hres);
+ set_current_uri(This, NULL);
This->url = SysAllocString(url);
+ CoTaskMemFree(url);
+ return;
}
CoTaskMemFree(url);
}else {
@@ -122,12 +138,9 @@ void set_current_mon(HTMLWindow *This, IMoniker *mon)
}
}
- if(!This->url && This->uri) {
- hres = IUri_GetDisplayUri(This->uri, &This->url);
- if(FAILED(hres))
- WARN("GetDisplayUri failed: %08x\n", hres);
- }
-
+ set_current_uri(This, uri);
+ if(uri)
+ IUri_Release(uri);
set_script_mode(This, use_gecko_script(This) ? SCRIPTMODE_GECKO : SCRIPTMODE_ACTIVESCRIPT);
}
More information about the wine-cvs
mailing list