IOleInPlaceFrame_SetStatusText(This->doc_host->frame, str);
}
+static HRESULT set_dochost_url(DocHost *This, const WCHAR *url)
+{
+ WCHAR *new_url;
+
+ if(url) {
+ new_url = heap_strdupW(url);
+ if(!new_url)
+ return E_OUTOFMEMORY;
+ }else {
+ new_url = NULL;
+ }
+
+ heap_free(This->url);
+ This->url = new_url;
+ return S_OK;
+}
+
#define BINDSC_THIS(iface) DEFINE_THIS(BindStatusCallback, BindStatusCallback, iface)
static HRESULT WINAPI BindStatusCallback_QueryInterface(IBindStatusCallback *iface,
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;
IBindStatusCallback *callback)
{
IUnknown *unk = NULL;
+ WCHAR *display_name;
HRESULT hres;
if(mon) {
return hres;
}
- CoTaskMemFree(This->url);
- hres = IMoniker_GetDisplayName(mon, 0, NULL, &This->url);
- if(FAILED(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*)CLIENTSITE(This));
static void html_window_navigate(DocHost *This, IHTMLPrivateWindow *window, BSTR url, BSTR headers, SAFEARRAY *post_data)
{
VARIANT headers_var, post_data_var;
- WCHAR *new_url;
BSTR empty_str;
- DWORD size;
HRESULT hres;
- size = (strlenW(url)+1)*sizeof(WCHAR);
- new_url = CoTaskMemAlloc(size);
- if(!new_url)
+ hres = set_dochost_url(This, url);
+ if(FAILED(hres))
return;
- memcpy(new_url, url, size);
- CoTaskMemFree(This->url);
- This->url = new_url;
empty_str = SysAllocStringLen(NULL, 0);
Flags, Flags ? V_VT(Flags) : -1, TargetFrameName,
TargetFrameName ? V_VT(TargetFrameName) : -1);
- if(PostData) {
- TRACE("PostData vt=%d\n", V_VT(PostData));
-
- if(V_VT(PostData) == (VT_ARRAY | VT_UI1)) {
- SafeArrayAccessData(V_ARRAY(PostData), (void**)&post_data);
- post_data_len = V_ARRAY(PostData)->rgsabound[0].cElements;
- }
+ if(PostData && V_VT(PostData) == (VT_ARRAY | VT_UI1)) {
+ SafeArrayAccessData(V_ARRAY(PostData), (void**)&post_data);
+ post_data_len = V_ARRAY(PostData)->rgsabound[0].cElements;
}
- if(Headers && V_VT(Headers) != VT_EMPTY && V_VT(Headers) != VT_ERROR) {
- if(V_VT(Headers) != VT_BSTR)
- return E_INVALIDARG;
-
+ if(Headers && V_VT(Headers) == VT_BSTR) {
headers = V_BSTR(Headers);
TRACE("Headers: %s\n", debugstr_w(headers));
}