Module: wine Branch: master Commit: a84520169f95a9084dec7caea86a929573d819ec URL: http://source.winehq.org/git/wine.git/?a=commit;h=a84520169f95a9084dec7caea8...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Aug 1 00:59:48 2007 +0200
mshtml: Added IHTMLWindow::get_external implementation.
---
dlls/mshtml/htmlwindow.c | 11 +++++++++-- dlls/mshtml/tests/htmldoc.c | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 83adbdc..1acb6db 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -662,8 +662,15 @@ static HRESULT WINAPI HTMLWindow2_resizeBy(IHTMLWindow2 *iface, long x, long y) static HRESULT WINAPI HTMLWindow2_get_external(IHTMLWindow2 *iface, IDispatch **p) { HTMLWindow *This = HTMLWINDOW2_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, p); + + *p = NULL; + + if(!This->doc->hostui) + return S_OK; + + return IDocHostUIHandler_GetExternal(This->doc->hostui, p); }
#undef HTMLWINDOW2_THIS diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c index 2b32955..4379cdc 100644 --- a/dlls/mshtml/tests/htmldoc.c +++ b/dlls/mshtml/tests/htmldoc.c @@ -127,6 +127,7 @@ DEFINE_EXPECT(OnFocus_FALSE); DEFINE_EXPECT(RequestUIActivate); DEFINE_EXPECT(InPlaceFrame_SetBorderSpace); DEFINE_EXPECT(InPlaceUIWindow_SetActiveObject); +DEFINE_EXPECT(GetExternal);
static IUnknown *doc_unk; static BOOL expect_LockContainer_fLock; @@ -1861,8 +1862,9 @@ static HRESULT WINAPI DocHostUIHandler_GetDropTarget(IDocHostUIHandler2 *iface,
static HRESULT WINAPI DocHostUIHandler_GetExternal(IDocHostUIHandler2 *iface, IDispatch **ppDispatch) { - ok(0, "unexpected call\n"); - return E_NOTIMPL; + CHECK_EXPECT(GetExternal); + *ppDispatch = (void*)1; + return S_FALSE; }
static HRESULT WINAPI DocHostUIHandler_TranslateUrl(IDocHostUIHandler2 *iface, DWORD dwTranslate, @@ -3444,6 +3446,36 @@ static void test_Navigate(IUnknown *unk) IHlinkTarget_Release(hlink); }
+static void test_external(IUnknown *unk, BOOL initialized) +{ + IDispatch *external; + IHTMLDocument2 *doc; + IHTMLWindow2 *htmlwin; + HRESULT hres; + + hres = IUnknown_QueryInterface(unk, &IID_IHTMLDocument2, (void**)&doc); + ok(hres == S_OK, "QueryInterface(IID_IHTMLWindow2) failed: %08x\n", hres); + + hres = IHTMLDocument2_get_parentWindow(doc, &htmlwin); + IHTMLDocument2_Release(doc); + ok(hres == S_OK, "get_parentWindow failed: %08x\n", hres); + + if(initialized) + SET_EXPECT(GetExternal); + external = (void*)0xdeadbeef; + hres = IHTMLWindow2_get_external(htmlwin, &external); + if(initialized) { + ok(hres == S_FALSE, "get_external failed: %08x\n", hres); + CHECK_CALLED(GetExternal); + ok(external == (void*)1, "external != NULL\n"); + }else { + ok(hres == S_OK, "get_external failed: %08x\n", hres); + ok(external == NULL, "external != NULL\n"); + } + + IHTMLWindow2_Release(htmlwin); +} + static void test_StreamLoad(IUnknown *unk) { IPersistStreamInit *init; @@ -3528,6 +3560,7 @@ static void test_HTMLDocument(enum load_state_t ls) test_QueryInterface(unk); test_IsDirty(unk, S_FALSE); test_MSHTML_QueryStatus(unk, OLECMDF_SUPPORTED); + test_external(unk, FALSE); test_ConnectionPointContainer(unk); test_GetCurMoniker(unk, NULL, NULL); test_Persist(unk); @@ -3550,6 +3583,7 @@ static void test_HTMLDocument(enum load_state_t ls) test_OleCommandTarget(unk); test_OnAmbientPropertyChange(unk); test_Window(unk, TRUE); + test_external(unk, TRUE);
test_UIDeactivate(); test_OleCommandTarget(unk);