mshtml: Added get_URL implementation.
This commit is contained in:
parent
068ce61523
commit
b95197ac19
|
@ -508,8 +508,15 @@ static HRESULT WINAPI HTMLDocument_put_URL(IHTMLDocument2 *iface, BSTR v)
|
|||
|
||||
static HRESULT WINAPI HTMLDocument_get_URL(IHTMLDocument2 *iface, BSTR *p)
|
||||
{
|
||||
FIXME("(%p)->(%p)\n", iface, p);
|
||||
return E_NOTIMPL;
|
||||
HTMLDocument *This = HTMLDOC_THIS(iface);
|
||||
|
||||
static const WCHAR about_blank_url[] =
|
||||
{'a','b','o','u','t',':','b','l','a','n','k',0};
|
||||
|
||||
TRACE("(%p)->(%p)\n", iface, p);
|
||||
|
||||
*p = SysAllocString(This->url ? This->url : about_blank_url);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDocument_put_domain(IHTMLDocument2 *iface, BSTR v)
|
||||
|
|
|
@ -102,6 +102,7 @@ struct HTMLDocument {
|
|||
|
||||
BSCallback *bscallback;
|
||||
IMoniker *mon;
|
||||
BSTR url;
|
||||
|
||||
HWND hwnd;
|
||||
HWND tooltips_hwnd;
|
||||
|
|
|
@ -115,11 +115,27 @@ static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
|
|||
|
||||
void set_current_mon(HTMLDocument *This, IMoniker *mon)
|
||||
{
|
||||
if(This->mon)
|
||||
HRESULT hres;
|
||||
|
||||
if(This->mon) {
|
||||
IMoniker_Release(This->mon);
|
||||
if(mon)
|
||||
IMoniker_AddRef(mon);
|
||||
This->mon = NULL;
|
||||
}
|
||||
|
||||
if(This->url) {
|
||||
SysFreeString(This->url);
|
||||
This->url = NULL;
|
||||
}
|
||||
|
||||
if(!mon)
|
||||
return;
|
||||
|
||||
IMoniker_AddRef(mon);
|
||||
This->mon = mon;
|
||||
|
||||
hres = IMoniker_GetDisplayName(mon, NULL, NULL, &This->url);
|
||||
if(FAILED(hres))
|
||||
WARN("GetDisplayName failed: %08x\n", hres);
|
||||
}
|
||||
|
||||
static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BOOL *bind_complete)
|
||||
|
@ -674,4 +690,5 @@ void HTMLDocument_Persist_Init(HTMLDocument *This)
|
|||
|
||||
This->bscallback = NULL;
|
||||
This->mon = NULL;
|
||||
This->url = NULL;
|
||||
}
|
||||
|
|
|
@ -2189,8 +2189,10 @@ static void test_ConnectionPointContainer(IUnknown *unk)
|
|||
|
||||
static void test_GetCurMoniker(IUnknown *unk, IMoniker *exmon, LPCWSTR exurl)
|
||||
{
|
||||
IHTMLDocument2 *doc;
|
||||
IPersistMoniker *permon;
|
||||
IMoniker *mon = (void*)0xdeadbeef;
|
||||
BSTR doc_url = (void*)0xdeadbeef;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IUnknown_QueryInterface(unk, &IID_IPersistMoniker, (void**)&permon);
|
||||
|
@ -2198,12 +2200,32 @@ static void test_GetCurMoniker(IUnknown *unk, IMoniker *exmon, LPCWSTR exurl)
|
|||
if(FAILED(hres))
|
||||
return;
|
||||
|
||||
hres = IUnknown_QueryInterface(unk, &IID_IHTMLDocument2, (void**)&doc);
|
||||
ok(hres == S_OK, "QueryInterface(IID_IHTMLDocument2) failed: %08x\n", hres);
|
||||
|
||||
hres = IHTMLDocument2_get_URL(doc, &doc_url);
|
||||
ok(hres == S_OK, "get_URL failed: %08x\n", hres);
|
||||
|
||||
hres = IPersistMoniker_GetCurMoniker(permon, &mon);
|
||||
IPersistMoniker_Release(permon);
|
||||
|
||||
if(exmon) {
|
||||
BSTR url;
|
||||
BOOL exb = expect_GetDisplayName;
|
||||
BOOL clb = called_GetDisplayName;
|
||||
|
||||
ok(hres == S_OK, "GetCurrentMoniker failed: %08x\n", hres);
|
||||
ok(mon == exmon, "mon(%p) != exmon(%p)\n", mon, exmon);
|
||||
|
||||
SET_EXPECT(GetDisplayName);
|
||||
hres = IMoniker_GetDisplayName(mon, NULL, NULL, &url);
|
||||
ok(hres == S_OK, "GetDisplayName failed: %08x\n", hres);
|
||||
CHECK_CALLED(GetDisplayName);
|
||||
expect_GetDisplayName = exb;
|
||||
called_GetDisplayName = clb;
|
||||
|
||||
SysFreeString(url);
|
||||
ok(!lstrcmpW(url, doc_url), "url != doc_url\n");
|
||||
}else if(exurl) {
|
||||
BSTR url;
|
||||
|
||||
|
@ -2213,13 +2235,18 @@ static void test_GetCurMoniker(IUnknown *unk, IMoniker *exmon, LPCWSTR exurl)
|
|||
ok(hres == S_OK, "GetDisplayName failed: %08x\n", hres);
|
||||
|
||||
ok(!lstrcmpW(url, exurl), "unexpected url\n");
|
||||
ok(!lstrcmpW(url, doc_url), "url != doc_url\n");
|
||||
|
||||
SysFreeString(url);
|
||||
}else {
|
||||
ok(hres == E_UNEXPECTED,
|
||||
"GetCurrentMoniker failed: %08x, expected E_UNEXPECTED\n", hres);
|
||||
ok(mon == (IMoniker*)0xdeadbeef, "mon=%p\n", mon);
|
||||
ok(!lstrcmpW(doc_url, about_blank_url), "doc_url is not about:blank\n");
|
||||
}
|
||||
|
||||
SysFreeString(doc_url);
|
||||
IHTMLDocument_Release(doc);
|
||||
if(mon && mon != (void*)0xdeadbeef)
|
||||
IMoniker_Release(mon);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue