Andrew Eikum : mshtml: Implement IHTMLWindow2::get_top.

Alexandre Julliard julliard at winehq.org
Tue Nov 17 09:28:20 CST 2009


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

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Mon Nov 16 17:28:54 2009 -0600

mshtml: Implement IHTMLWindow2::get_top.

---

 dlls/mshtml/htmlwindow.c |   13 ++++++++++---
 dlls/mshtml/tests/dom.c  |   32 +++++++++++++++++++++++++++-----
 2 files changed, 37 insertions(+), 8 deletions(-)

diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
index 073a5ae..17d2bfe 100644
--- a/dlls/mshtml/htmlwindow.c
+++ b/dlls/mshtml/htmlwindow.c
@@ -730,9 +730,16 @@ static HRESULT WINAPI HTMLWindow2_get_self(IHTMLWindow2 *iface, IHTMLWindow2 **p
 
 static HRESULT WINAPI HTMLWindow2_get_top(IHTMLWindow2 *iface, IHTMLWindow2 **p)
 {
-    HTMLWindow *This = HTMLWINDOW2_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    HTMLWindow *This = HTMLWINDOW2_THIS(iface), *curr;
+    TRACE("(%p)->(%p)\n", This, p);
+
+    curr = This;
+    while(curr->parent)
+        curr = curr->parent;
+    *p = HTMLWINDOW2(curr);
+    IHTMLWindow2_AddRef(*p);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLWindow2_get_window(IHTMLWindow2 *iface, IHTMLWindow2 **p)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index c965c79..00c67a8 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -5601,8 +5601,8 @@ static void test_cond_comment(IHTMLDocument2 *doc)
 
 static void test_frame(IDispatch *disp, const char *exp_id)
 {
-    IHTMLWindow2 *frame2, *parent;
-    IHTMLDocument2 *parent_doc;
+    IHTMLWindow2 *frame2, *parent, *top;
+    IHTMLDocument2 *parent_doc, *top_doc;
     IHTMLWindow4 *frame;
     IHTMLFrameBase *frame_elem;
     IHTMLElement *html_elem;
@@ -5639,21 +5639,43 @@ static void test_frame(IDispatch *disp, const char *exp_id)
 
     hres = IHTMLWindow2_get_parent(frame2, &parent);
     ok(hres == S_OK, "IHTMLWindow2_get_parent failed: 0x%08x\n", hres);
-    IHTMLWindow2_Release(frame2);
-    if(FAILED(hres))
+    if(FAILED(hres)){
+        IHTMLWindow2_Release(frame2);
         return;
+    }
 
     hres = IHTMLWindow2_get_document(parent, &parent_doc);
     ok(hres == S_OK, "IHTMLWindow2_get_document failed: 0x%08x\n", hres);
     IHTMLWindow2_Release(parent);
-    if(FAILED(hres))
+    if(FAILED(hres)){
+        IHTMLWindow2_Release(frame2);
         return;
+    }
 
     hres = IHTMLDocument2_get_title(parent_doc, &bstr);
     ok(hres == S_OK, "IHTMLDocument2_get_title failed: 0x%08x\n", hres);
     ok(!strcmp_wa(bstr, "frameset test"), "Did not get the right parent. Expected \"frameset test\", found %s\n", wine_dbgstr_w(bstr));
     IHTMLDocument2_Release(parent_doc);
     SysFreeString(bstr);
+
+    /* test get_top */
+    hres = IHTMLWindow2_get_top(frame2, &top);
+    ok(hres == S_OK, "IHTMLWindow2_get_top failed: 0x%08x\n", hres);
+    IHTMLWindow2_Release(frame2);
+    if(FAILED(hres))
+        return;
+
+    hres = IHTMLWindow2_get_document(top, &top_doc);
+    ok(hres == S_OK, "IHTMLWindow2_get_document failed: 0x%08x\n", hres);
+    IHTMLWindow2_Release(top);
+    if(FAILED(hres))
+        return;
+
+    hres = IHTMLDocument2_get_title(top_doc, &bstr);
+    ok(hres == S_OK, "IHTMLDocument2_get_title failed: 0x%08x\n", hres);
+    ok(!strcmp_wa(bstr, "frameset test"), "Did not get the right parent. Expected \"frameset test\", found %s\n", wine_dbgstr_w(bstr));
+    IHTMLDocument2_Release(top_doc);
+    SysFreeString(bstr);
 }
 
 static void test_frameset(IHTMLDocument2 *doc)




More information about the wine-cvs mailing list