static void html_window_navigate(DocHost *This, IHTMLPrivateWindow *window, BSTR url, BSTR headers, SAFEARRAY *post_data) { VARIANT headers_var, post_data_var; BSTR empty_str; HRESULT hres; hres = set_dochost_url(This, url); if(FAILED(hres)) return; empty_str = SysAllocStringLen(NULL, 0); if(headers) { V_VT(&headers_var) = VT_BSTR; V_BSTR(&headers_var) = headers; }else { V_VT(&headers_var) = VT_EMPTY; } if(post_data) { V_VT(&post_data_var) = VT_UI1|VT_ARRAY; V_ARRAY(&post_data_var) = post_data; }else { V_VT(&post_data_var) = VT_EMPTY; } set_doc_state(This, READYSTATE_LOADING); hres = IHTMLPrivateWindow_SuperNavigate(window, url, empty_str, NULL, NULL, &post_data_var, &headers_var, 0); SysFreeString(empty_str); if(FAILED(hres)) WARN("SuprtNavigate failed: %08x\n", hres); }
static HRESULT WINAPI BindStatusCallback_OnProgress(IBindStatusCallback *iface, ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText) { BindStatusCallback *This = impl_from_IBindStatusCallback(iface); TRACE("(%p)->(%d %d %d %s)\n", This, ulProgress, ulProgressMax, ulStatusCode, debugstr_w(szStatusText)); switch(ulStatusCode) { case BINDSTATUS_REDIRECTING: return set_dochost_url(This->doc_host, szStatusText); case BINDSTATUS_BEGINDOWNLOADDATA: set_status_text(This, szStatusText); /* FIXME: "Start downloading from site: %s" */ return S_OK; case BINDSTATUS_ENDDOWNLOADDATA: set_status_text(This, szStatusText); /* FIXME: "Downloading from site: %s" */ return S_OK; case BINDSTATUS_CLASSIDAVAILABLE: case BINDSTATUS_MIMETYPEAVAILABLE: case BINDSTATUS_BEGINSYNCOPERATION: case BINDSTATUS_ENDSYNCOPERATION: return S_OK; default: FIXME("status code %u\n", ulStatusCode); } return S_OK; }
static HRESULT WINAPI DocObjectService_FireNavigateComplete2( IDocObjectService* iface, IHTMLWindow2 *pHTMLWindow2, DWORD dwFlags) { ShellBrowser *This = impl_from_IDocObjectService(iface); DocHost *doc_host = This->doc_host; 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); update_navigation_commands(This->doc_host); if(doc_host->travellog.loading_pos != -1) { WARN("histupdate not notified\n"); doc_host->travellog.position = doc_host->travellog.loading_pos; doc_host->travellog.loading_pos = -1; } 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_VARIANTREF(params) = &url_var; V_VT(params+1) = VT_DISPATCH; V_DISPATCH(params+1) = (IDispatch*)doc_host->wb; V_VT(&url_var) = VT_BSTR; V_BSTR(&url_var) = url; /* Keep reference to This. It may be released in event handler. */ IShellBrowser_AddRef(&This->IShellBrowser_iface); TRACE(">>>\n"); call_sink(This->doc_host->cps.wbe2, DISPID_NAVIGATECOMPLETE2, &dp); TRACE("<<<\n"); SysFreeString(url); This->doc_host->busy = VARIANT_FALSE; IShellBrowser_Release(&This->IShellBrowser_iface); return S_OK; }
static HRESULT WINAPI DocObjectService_FireNavigateComplete2( IDocObjectService* iface, IHTMLWindow2 *pHTMLWindow2, DWORD dwFlags) { ShellBrowser *This = impl_from_IDocObjectService(iface); 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 bind_to_object(DocHost *This, IMoniker *mon, LPCWSTR url, IBindCtx *bindctx, IBindStatusCallback *callback) { IUnknown *unk = NULL; WCHAR *display_name; HRESULT hres; if(mon) { IMoniker_AddRef(mon); }else { hres = create_moniker(url, &mon); if(FAILED(hres)) return hres; } hres = IMoniker_GetDisplayName(mon, 0, NULL, &display_name); if(FAILED(hres)) { FIXME("GetDisplayName failed: %08x\n", hres); return hres; } hres = set_dochost_url(This, display_name); CoTaskMemFree(display_name); if(FAILED(hres)) return hres; IBindCtx_RegisterObjectParam(bindctx, (LPOLESTR)SZ_HTML_CLIENTSITE_OBJECTPARAM, (IUnknown*)&This->IOleClientSite_iface); hres = IMoniker_BindToObject(mon, bindctx, NULL, &IID_IUnknown, (void**)&unk); if(SUCCEEDED(hres)) { hres = S_OK; if(unk) IUnknown_Release(unk); }else if(try_application_url(url)) { hres = S_OK; }else { FIXME("BindToObject failed: %08x\n", hres); } IMoniker_Release(mon); return S_OK; }
static HRESULT WINAPI BindStatusCallback_OnProgress(IBindStatusCallback *iface, ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText) { BindStatusCallback *This = impl_from_IBindStatusCallback(iface); DWORD status_code; TRACE("(%p)->(%d %d %d %s)\n", This, ulProgress, ulProgressMax, ulStatusCode, debugstr_w(szStatusText)); switch(ulStatusCode) { case BINDSTATUS_REDIRECTING: return set_dochost_url(This->doc_host, szStatusText); case BINDSTATUS_BEGINDOWNLOADDATA: set_status_text(This, ulStatusCode, szStatusText); status_code = get_http_status_code(This->binding); if(status_code != HTTP_STATUS_OK) handle_navigation_error(This->doc_host, status_code, This->url, NULL); return S_OK; case BINDSTATUS_FINDINGRESOURCE: case BINDSTATUS_ENDDOWNLOADDATA: case BINDSTATUS_SENDINGREQUEST: set_status_text(This, ulStatusCode, szStatusText); return S_OK; case BINDSTATUS_CONNECTING: case BINDSTATUS_CACHEFILENAMEAVAILABLE: case BINDSTATUS_CLASSIDAVAILABLE: case BINDSTATUS_MIMETYPEAVAILABLE: case BINDSTATUS_BEGINSYNCOPERATION: case BINDSTATUS_ENDSYNCOPERATION: return S_OK; default: FIXME("status code %u\n", ulStatusCode); } return S_OK; }