mshtml: Added IHTMLLocation::put_href implementation.
This commit is contained in:
parent
4aa48041fa
commit
47c27742d0
|
@ -134,8 +134,15 @@ static HRESULT WINAPI HTMLLocation_Invoke(IHTMLLocation *iface, DISPID dispIdMem
|
||||||
static HRESULT WINAPI HTMLLocation_put_href(IHTMLLocation *iface, BSTR v)
|
static HRESULT WINAPI HTMLLocation_put_href(IHTMLLocation *iface, BSTR v)
|
||||||
{
|
{
|
||||||
HTMLLocation *This = HTMLLOCATION_THIS(iface);
|
HTMLLocation *This = HTMLLOCATION_THIS(iface);
|
||||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
|
||||||
return E_NOTIMPL;
|
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||||
|
|
||||||
|
if(!This->window || !This->window->doc) {
|
||||||
|
FIXME("No document available\n");
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return navigate_url(This->window->doc, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI HTMLLocation_get_href(IHTMLLocation *iface, BSTR *p)
|
static HRESULT WINAPI HTMLLocation_get_href(IHTMLLocation *iface, BSTR *p)
|
||||||
|
|
|
@ -608,6 +608,7 @@ BOOL install_wine_gecko(BOOL);
|
||||||
HRESULT nsuri_to_url(LPCWSTR,BOOL,BSTR*);
|
HRESULT nsuri_to_url(LPCWSTR,BOOL,BSTR*);
|
||||||
|
|
||||||
HRESULT hlink_frame_navigate(HTMLDocument*,LPCWSTR,nsIInputStream*,DWORD);
|
HRESULT hlink_frame_navigate(HTMLDocument*,LPCWSTR,nsIInputStream*,DWORD);
|
||||||
|
HRESULT navigate_url(HTMLDocumentNode*,OLECHAR*);
|
||||||
|
|
||||||
void call_property_onchanged(ConnectionPoint*,DISPID);
|
void call_property_onchanged(ConnectionPoint*,DISPID);
|
||||||
HRESULT call_set_active_object(IOleInPlaceUIWindow*,IOleInPlaceActiveObject*);
|
HRESULT call_set_active_object(IOleInPlaceUIWindow*,IOleInPlaceActiveObject*);
|
||||||
|
|
|
@ -41,6 +41,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||||
#define CONTENT_LENGTH "Content-Length"
|
#define CONTENT_LENGTH "Content-Length"
|
||||||
#define UTF16_STR "utf-16"
|
#define UTF16_STR "utf-16"
|
||||||
|
|
||||||
|
static WCHAR emptyW[] = {0};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const nsIInputStreamVtbl *lpInputStreamVtbl;
|
const nsIInputStreamVtbl *lpInputStreamVtbl;
|
||||||
|
|
||||||
|
@ -1217,3 +1219,26 @@ HRESULT hlink_frame_navigate(HTMLDocument *doc, LPCWSTR url,
|
||||||
IBindStatusCallback_Release(STATUSCLB(callback));
|
IBindStatusCallback_Release(STATUSCLB(callback));
|
||||||
return hres;
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT navigate_url(HTMLDocumentNode *doc, OLECHAR *url)
|
||||||
|
{
|
||||||
|
OLECHAR *translated_url = NULL;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
if(!url)
|
||||||
|
url = emptyW;
|
||||||
|
|
||||||
|
if(doc->basedoc.doc_obj->hostui) {
|
||||||
|
hres = IDocHostUIHandler_TranslateUrl(doc->basedoc.doc_obj->hostui, 0, url,
|
||||||
|
&translated_url);
|
||||||
|
if(hres == S_OK)
|
||||||
|
url = translated_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
hres = hlink_frame_navigate(&doc->basedoc, url, NULL, 0);
|
||||||
|
if(FAILED(hres))
|
||||||
|
FIXME("hlink_frame_navigate failed: %08x\n", hres);
|
||||||
|
|
||||||
|
CoTaskMemFree(translated_url);
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
|
|
@ -148,6 +148,7 @@ DEFINE_EXPECT(EnableModeless_FALSE);
|
||||||
DEFINE_EXPECT(Frame_EnableModeless_TRUE);
|
DEFINE_EXPECT(Frame_EnableModeless_TRUE);
|
||||||
DEFINE_EXPECT(Frame_EnableModeless_FALSE);
|
DEFINE_EXPECT(Frame_EnableModeless_FALSE);
|
||||||
DEFINE_EXPECT(Frame_GetWindow);
|
DEFINE_EXPECT(Frame_GetWindow);
|
||||||
|
DEFINE_EXPECT(TranslateUrl);
|
||||||
|
|
||||||
static IUnknown *doc_unk;
|
static IUnknown *doc_unk;
|
||||||
static IMoniker *doc_mon;
|
static IMoniker *doc_mon;
|
||||||
|
@ -665,6 +666,7 @@ static HRESULT WINAPI HlinkFrame_Navigate(IHlinkFrame *iface, DWORD grfHLNF, LPB
|
||||||
DWORD site_data = 0xdeadbeef;
|
DWORD site_data = 0xdeadbeef;
|
||||||
|
|
||||||
hres = IHlink_GetTargetFrameName(pihlNavigate, &frame_name);
|
hres = IHlink_GetTargetFrameName(pihlNavigate, &frame_name);
|
||||||
|
todo_wine
|
||||||
ok(hres == S_FALSE, "GetTargetFrameName failed: %08x\n", hres);
|
ok(hres == S_FALSE, "GetTargetFrameName failed: %08x\n", hres);
|
||||||
ok(frame_name == NULL, "frame_name = %p\n", frame_name);
|
ok(frame_name == NULL, "frame_name = %p\n", frame_name);
|
||||||
|
|
||||||
|
@ -676,6 +678,7 @@ static HRESULT WINAPI HlinkFrame_Navigate(IHlinkFrame *iface, DWORD grfHLNF, LPB
|
||||||
hres = IHlink_GetHlinkSite(pihlNavigate, &site, &site_data);
|
hres = IHlink_GetHlinkSite(pihlNavigate, &site, &site_data);
|
||||||
ok(hres == S_OK, "GetHlinkSite failed: %08x\n", hres);
|
ok(hres == S_OK, "GetHlinkSite failed: %08x\n", hres);
|
||||||
ok(site == NULL, "site = %p\n, expected NULL\n", site);
|
ok(site == NULL, "site = %p\n, expected NULL\n", site);
|
||||||
|
todo_wine
|
||||||
ok(site_data == 0xdeadbeef, "site_data = %x\n", site_data);
|
ok(site_data == 0xdeadbeef, "site_data = %x\n", site_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2107,8 +2110,13 @@ static HRESULT WINAPI DocHostUIHandler_GetExternal(IDocHostUIHandler2 *iface, ID
|
||||||
static HRESULT WINAPI DocHostUIHandler_TranslateUrl(IDocHostUIHandler2 *iface, DWORD dwTranslate,
|
static HRESULT WINAPI DocHostUIHandler_TranslateUrl(IDocHostUIHandler2 *iface, DWORD dwTranslate,
|
||||||
OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
|
OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
|
||||||
{
|
{
|
||||||
ok(0, "unexpected call\n");
|
CHECK_EXPECT(TranslateUrl);
|
||||||
return E_NOTIMPL;
|
ok(!dwTranslate, "dwTranslate = %x\n", dwTranslate);
|
||||||
|
ok(!strcmp_wa(pchURLIn, "about:blank"), "pchURLIn = %s\n", wine_dbgstr_w(pchURLIn));
|
||||||
|
ok(ppchURLOut != NULL, "ppchURLOut == NULL\n");
|
||||||
|
ok(!*ppchURLOut, "*ppchURLOut = %p\n", *ppchURLOut);
|
||||||
|
|
||||||
|
return S_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI DocHostUIHandler_FilterDataObject(IDocHostUIHandler2 *iface, IDataObject *pDO,
|
static HRESULT WINAPI DocHostUIHandler_FilterDataObject(IDocHostUIHandler2 *iface, IDataObject *pDO,
|
||||||
|
@ -2997,6 +3005,34 @@ static void test_Persist(IUnknown *unk, IMoniker *mon)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_put_href(IUnknown *unk)
|
||||||
|
{
|
||||||
|
IHTMLLocation *location;
|
||||||
|
IHTMLDocument2 *doc;
|
||||||
|
BSTR str;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IUnknown_QueryInterface(unk, &IID_IHTMLDocument2, (void**)&doc);
|
||||||
|
ok(hres == S_OK, "Could not get IHTMLDocument2 iface: %08x\n", hres);
|
||||||
|
|
||||||
|
location = NULL;
|
||||||
|
hres = IHTMLDocument2_get_location(doc, &location);
|
||||||
|
IHTMLDocument2_Release(doc);
|
||||||
|
ok(hres == S_OK, "get_location failed: %08x\n", hres);
|
||||||
|
ok(location != NULL, "location == NULL\n");
|
||||||
|
|
||||||
|
SET_EXPECT(TranslateUrl);
|
||||||
|
SET_EXPECT(Navigate);
|
||||||
|
str = a2bstr("about:blank");
|
||||||
|
hres = IHTMLLocation_put_href(location, str);
|
||||||
|
SysFreeString(str);
|
||||||
|
ok(hres == S_OK, "put_href failed: %08x\n", hres);
|
||||||
|
CHECK_CALLED(TranslateUrl);
|
||||||
|
CHECK_CALLED(Navigate);
|
||||||
|
|
||||||
|
IHTMLLocation_Release(location);
|
||||||
|
}
|
||||||
|
|
||||||
static const OLECMDF expect_cmds[OLECMDID_GETPRINTTEMPLATE+1] = {
|
static const OLECMDF expect_cmds[OLECMDID_GETPRINTTEMPLATE+1] = {
|
||||||
0,
|
0,
|
||||||
OLECMDF_SUPPORTED, /* OLECMDID_OPEN */
|
OLECMDF_SUPPORTED, /* OLECMDID_OPEN */
|
||||||
|
@ -4118,6 +4154,8 @@ static void test_HTMLDocument_http(void)
|
||||||
test_IsDirty(unk, S_FALSE);
|
test_IsDirty(unk, S_FALSE);
|
||||||
test_MSHTML_QueryStatus(unk, OLECMDF_SUPPORTED);
|
test_MSHTML_QueryStatus(unk, OLECMDF_SUPPORTED);
|
||||||
|
|
||||||
|
test_put_href(unk);
|
||||||
|
|
||||||
test_InPlaceDeactivate(unk, TRUE);
|
test_InPlaceDeactivate(unk, TRUE);
|
||||||
test_Close(unk, FALSE);
|
test_Close(unk, FALSE);
|
||||||
test_IsDirty(unk, S_FALSE);
|
test_IsDirty(unk, S_FALSE);
|
||||||
|
|
Loading…
Reference in New Issue