Module: wine Branch: master Commit: 3f63a2968da6bdb56459ae5c46dcae92ba4e52f0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3f63a2968da6bdb56459ae5c46...
Author: Andrew Eikum aeikum@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)