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)
|
static HRESULT WINAPI HTMLDocument_get_URL(IHTMLDocument2 *iface, BSTR *p)
|
||||||
{
|
{
|
||||||
FIXME("(%p)->(%p)\n", iface, p);
|
HTMLDocument *This = HTMLDOC_THIS(iface);
|
||||||
return E_NOTIMPL;
|
|
||||||
|
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)
|
static HRESULT WINAPI HTMLDocument_put_domain(IHTMLDocument2 *iface, BSTR v)
|
||||||
|
|
|
@ -102,6 +102,7 @@ struct HTMLDocument {
|
||||||
|
|
||||||
BSCallback *bscallback;
|
BSCallback *bscallback;
|
||||||
IMoniker *mon;
|
IMoniker *mon;
|
||||||
|
BSTR url;
|
||||||
|
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
HWND tooltips_hwnd;
|
HWND tooltips_hwnd;
|
||||||
|
|
|
@ -115,11 +115,27 @@ static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
|
||||||
|
|
||||||
void set_current_mon(HTMLDocument *This, IMoniker *mon)
|
void set_current_mon(HTMLDocument *This, IMoniker *mon)
|
||||||
{
|
{
|
||||||
if(This->mon)
|
HRESULT hres;
|
||||||
|
|
||||||
|
if(This->mon) {
|
||||||
IMoniker_Release(This->mon);
|
IMoniker_Release(This->mon);
|
||||||
if(mon)
|
This->mon = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(This->url) {
|
||||||
|
SysFreeString(This->url);
|
||||||
|
This->url = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!mon)
|
||||||
|
return;
|
||||||
|
|
||||||
IMoniker_AddRef(mon);
|
IMoniker_AddRef(mon);
|
||||||
This->mon = 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)
|
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->bscallback = NULL;
|
||||||
This->mon = 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)
|
static void test_GetCurMoniker(IUnknown *unk, IMoniker *exmon, LPCWSTR exurl)
|
||||||
{
|
{
|
||||||
|
IHTMLDocument2 *doc;
|
||||||
IPersistMoniker *permon;
|
IPersistMoniker *permon;
|
||||||
IMoniker *mon = (void*)0xdeadbeef;
|
IMoniker *mon = (void*)0xdeadbeef;
|
||||||
|
BSTR doc_url = (void*)0xdeadbeef;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
hres = IUnknown_QueryInterface(unk, &IID_IPersistMoniker, (void**)&permon);
|
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))
|
if(FAILED(hres))
|
||||||
return;
|
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);
|
hres = IPersistMoniker_GetCurMoniker(permon, &mon);
|
||||||
IPersistMoniker_Release(permon);
|
IPersistMoniker_Release(permon);
|
||||||
|
|
||||||
if(exmon) {
|
if(exmon) {
|
||||||
|
BSTR url;
|
||||||
|
BOOL exb = expect_GetDisplayName;
|
||||||
|
BOOL clb = called_GetDisplayName;
|
||||||
|
|
||||||
ok(hres == S_OK, "GetCurrentMoniker failed: %08x\n", hres);
|
ok(hres == S_OK, "GetCurrentMoniker failed: %08x\n", hres);
|
||||||
ok(mon == exmon, "mon(%p) != exmon(%p)\n", mon, exmon);
|
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) {
|
}else if(exurl) {
|
||||||
BSTR url;
|
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(hres == S_OK, "GetDisplayName failed: %08x\n", hres);
|
||||||
|
|
||||||
ok(!lstrcmpW(url, exurl), "unexpected url\n");
|
ok(!lstrcmpW(url, exurl), "unexpected url\n");
|
||||||
|
ok(!lstrcmpW(url, doc_url), "url != doc_url\n");
|
||||||
|
|
||||||
SysFreeString(url);
|
SysFreeString(url);
|
||||||
}else {
|
}else {
|
||||||
ok(hres == E_UNEXPECTED,
|
ok(hres == E_UNEXPECTED,
|
||||||
"GetCurrentMoniker failed: %08x, expected E_UNEXPECTED\n", hres);
|
"GetCurrentMoniker failed: %08x, expected E_UNEXPECTED\n", hres);
|
||||||
ok(mon == (IMoniker*)0xdeadbeef, "mon=%p\n", mon);
|
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)
|
if(mon && mon != (void*)0xdeadbeef)
|
||||||
IMoniker_Release(mon);
|
IMoniker_Release(mon);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue