diff --git a/dlls/mshtml/binding.h b/dlls/mshtml/binding.h index dfb14cf1f34..697370af2e1 100644 --- a/dlls/mshtml/binding.h +++ b/dlls/mshtml/binding.h @@ -114,3 +114,4 @@ HRESULT create_channelbsc(IMoniker*,const WCHAR*,BYTE*,DWORD,nsChannelBSC**) DEC HRESULT channelbsc_load_stream(nsChannelBSC*,IStream*) DECLSPEC_HIDDEN; void channelbsc_set_channel(nsChannelBSC*,nsChannel*,nsIStreamListener*,nsISupports*) DECLSPEC_HIDDEN; IUri *nsuri_get_uri(nsWineURI*) DECLSPEC_HIDDEN; +HRESULT create_relative_uri(HTMLWindow*,const WCHAR*,IUri**) DECLSPEC_HIDDEN; diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 25fd1cec313..67cf3fb55a9 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -814,10 +814,7 @@ static HRESULT WINAPI HTMLWindow2_open(IHTMLWindow2 *iface, BSTR url, BSTR name, return S_OK; } - if(This->uri) - hres = CoInternetCombineUrlEx(This->uri, url, URL_ESCAPE_SPACES_ONLY|URL_DONT_ESCAPE_EXTRA_INFO, &uri, 0); - else - hres = CreateUri(url, 0, 0, &uri); + hres = create_relative_uri(This, url, &uri); if(FAILED(hres)) return hres; diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c index 6cb7b729a00..f1310628d88 100644 --- a/dlls/mshtml/persist.c +++ b/dlls/mshtml/persist.c @@ -175,6 +175,13 @@ void set_current_mon(HTMLWindow *This, IMoniker *mon) set_script_mode(This, use_gecko_script(This) ? SCRIPTMODE_GECKO : SCRIPTMODE_ACTIVESCRIPT); } +HRESULT create_relative_uri(HTMLWindow *window, const WCHAR *rel_uri, IUri **uri) +{ + return window->uri + ? CoInternetCombineUrlEx(window->uri, rel_uri, URL_ESCAPE_SPACES_ONLY|URL_DONT_ESCAPE_EXTRA_INFO, uri, 0) + : CreateUri(rel_uri, 0, 0, uri); +} + void set_download_state(HTMLDocumentObj *doc, int state) { if(doc->client) {