diff --git a/dlls/ieframe/ieframe.h b/dlls/ieframe/ieframe.h index d81e166d117..4c32e5245d0 100644 --- a/dlls/ieframe/ieframe.h +++ b/dlls/ieframe/ieframe.h @@ -237,6 +237,7 @@ void call_sink(ConnectionPoint*,DISPID,DISPPARAMS*) DECLSPEC_HIDDEN; HRESULT navigate_url(DocHost*,LPCWSTR,const VARIANT*,const VARIANT*,VARIANT*,VARIANT*) DECLSPEC_HIDDEN; HRESULT go_home(DocHost*) DECLSPEC_HIDDEN; HRESULT get_location_url(DocHost*,BSTR*) DECLSPEC_HIDDEN; +HRESULT set_dochost_url(DocHost*,const WCHAR*) DECLSPEC_HIDDEN; void handle_navigation_error(DocHost*,HRESULT,BSTR,IHTMLWindow2*) DECLSPEC_HIDDEN; HRESULT dochost_object_available(DocHost*,IUnknown*) DECLSPEC_HIDDEN; void set_doc_state(DocHost*,READYSTATE) DECLSPEC_HIDDEN; diff --git a/dlls/ieframe/navigate.c b/dlls/ieframe/navigate.c index ab009aab348..6c0ce41df25 100644 --- a/dlls/ieframe/navigate.c +++ b/dlls/ieframe/navigate.c @@ -110,7 +110,7 @@ static void set_status_text(BindStatusCallback *This, LPCWSTR str) IOleInPlaceFrame_SetStatusText(This->doc_host->frame, str); } -static HRESULT set_dochost_url(DocHost *This, const WCHAR *url) +HRESULT set_dochost_url(DocHost *This, const WCHAR *url) { WCHAR *new_url; diff --git a/dlls/ieframe/shellbrowser.c b/dlls/ieframe/shellbrowser.c index a81fa1682be..79ee37860c3 100644 --- a/dlls/ieframe/shellbrowser.c +++ b/dlls/ieframe/shellbrowser.c @@ -722,8 +722,44 @@ static HRESULT WINAPI DocObjectService_FireNavigateComplete2( DWORD dwFlags) { ShellBrowser *This = impl_from_IDocObjectService(iface); - FIXME("%p %p %x\n", This, pHTMLWindow2, dwFlags); - return E_NOTIMPL; + IHTMLPrivateWindow *priv_window; + VARIANTARG params[2]; + DISPPARAMS dp = {params, NULL, 2, 0}; + VARIANT url_var; + BSTR url; + HRESULT hres; + + TRACE("%p %p %x\n", This, pHTMLWindow2, dwFlags); + + hres = IHTMLWindow2_QueryInterface(pHTMLWindow2, &IID_IHTMLPrivateWindow, (void**)&priv_window); + if(FAILED(hres)) + return hres; + + hres = IHTMLPrivateWindow_GetAddressBarUrl(priv_window, &url); + IHTMLPrivateWindow_Release(priv_window); + if(FAILED(hres)) + return hres; + + TRACE("got URL %s\n", debugstr_w(url)); + set_dochost_url(This->doc_host, url); + + V_VT(params) = (VT_BYREF|VT_VARIANT); + V_BYREF(params) = &url; + + V_VT(params+1) = VT_DISPATCH; + V_DISPATCH(params+1) = This->doc_host->disp; + + V_VT(&url_var) = VT_BSTR; + V_BSTR(&url_var) = url; + + TRACE(">>>\n"); + call_sink(This->doc_host->cps.wbe2, DISPID_NAVIGATECOMPLETE2, &dp); + TRACE("<<<\n"); + + SysFreeString(url); + + This->doc_host->busy = VARIANT_FALSE; + return S_OK; } static HRESULT WINAPI DocObjectService_FireDownloadBegin(