Jacek Caban : mshtml: Added IHTMLWindow::get_external implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Aug 1 05:16:49 CDT 2007


Module: wine
Branch: master
Commit: a84520169f95a9084dec7caea86a929573d819ec
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a84520169f95a9084dec7caea86a929573d819ec

Author: Jacek Caban <jacek at 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);




More information about the wine-cvs mailing list