Module: wine Branch: master Commit: 51e6cbdbd87293bbcb8f2c45d1a23a0167e8175d URL: https://source.winehq.org/git/wine.git/?a=commit;h=51e6cbdbd87293bbcb8f2c45d...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Mar 21 14:40:54 2019 +0100
mshtml: Return NULL for document not attached to window in IHTMLDocument7::get_defaultView.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mshtml/htmldoc.c | 14 ++++++++++---- dlls/mshtml/tests/dom.c | 12 ++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index f08db09..690ab08 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -1627,10 +1627,12 @@ static HRESULT WINAPI HTMLDocument_elementFromPoint(IHTMLDocument2 *iface, LONG static HRESULT WINAPI HTMLDocument_get_parentWindow(IHTMLDocument2 *iface, IHTMLWindow2 **p) { HTMLDocument *This = impl_from_IHTMLDocument2(iface); + HRESULT hres;
TRACE("(%p)->(%p)\n", This, p);
- return IHTMLDocument7_get_defaultView(&This->IHTMLDocument7_iface, p); + hres = IHTMLDocument7_get_defaultView(&This->IHTMLDocument7_iface, p); + return hres == S_OK && !*p ? E_FAIL : hres; }
static HRESULT WINAPI HTMLDocument_get_styleSheets(IHTMLDocument2 *iface, @@ -3248,12 +3250,16 @@ static HRESULT WINAPI HTMLDocument7_Invoke(IHTMLDocument7 *iface, DISPID dispIdM
static HRESULT WINAPI HTMLDocument7_get_defaultView(IHTMLDocument7 *iface, IHTMLWindow2 **p) { - HTMLDocument *This = impl_from_IHTMLDocument7(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument7(iface)->doc_node;
TRACE("(%p)->(%p)\n", This, p);
- *p = &This->window->base.IHTMLWindow2_iface; - IHTMLWindow2_AddRef(*p); + if(This->window && This->window->base.outer_window) { + *p = &This->window->base.outer_window->base.IHTMLWindow2_iface; + IHTMLWindow2_AddRef(*p); + }else { + *p = NULL; + } return S_OK; }
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 52d353f..c4d30ca 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -6924,6 +6924,7 @@ static void test_dom_implementation(IHTMLDocument2 *doc) IHTMLDocument2 *new_document2; IHTMLDocument7 *new_document; IHTMLLocation *location; + IHTMLWindow2 *window;
str = a2bstr("test"); hres = IHTMLDOMImplementation2_createHTMLDocument(dom_implementation2, str, &new_document); @@ -6932,9 +6933,20 @@ static void test_dom_implementation(IHTMLDocument2 *doc) test_disp((IUnknown*)new_document, &DIID_DispHTMLDocument, &CLSID_HTMLDocument, "[object]"); test_ifaces((IUnknown*)new_document, doc_node_iids);
+ hres = IHTMLDocument7_get_defaultView(new_document, &window); + ok(hres == S_OK, "get_defaultView returned: %08x\n", hres); + ok(!window, "window = %p\n", window); + + hres = IHTMLDocument7_get_parentWindow(new_document, &window); + ok(hres == S_OK, "get_parentWindow returned: %08x\n", hres); + ok(!window, "window = %p\n", window); + hres = IHTMLDocument7_QueryInterface(new_document, &IID_IHTMLDocument2, (void**)&new_document2); ok(hres == S_OK, "Could not get IHTMLDocument2 iface: %08x\n", hres);
+ hres = IHTMLDocument2_get_parentWindow(new_document2, &window); + ok(hres == E_FAIL, "get_parentWindow returned: %08x\n", hres); + hres = IHTMLDocument2_get_location(new_document2, &location); ok(hres == E_UNEXPECTED, "get_location returned: %08x\n", hres);