From b1a9b4fd2d014f95a16922caa2b3a1a534404303 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Fri, 2 Oct 2009 13:53:52 +0200 Subject: [PATCH] mshtml: Use document.defaultView to get iframe contentWindow. --- dlls/mshtml/htmliframe.c | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/dlls/mshtml/htmliframe.c b/dlls/mshtml/htmliframe.c index 5f3cafbfa7..a482a5b05a 100644 --- a/dlls/mshtml/htmliframe.c +++ b/dlls/mshtml/htmliframe.c @@ -43,6 +43,40 @@ typedef struct { #define HTMLFRAMEBASE2(x) (&(x)->lpIHTMLFrameBase2Vtbl) +static HRESULT create_content_window(HTMLIFrame *This, nsIDOMHTMLDocument *nsdoc, HTMLWindow **ret) +{ + nsIDOMDocumentView *nsdocview; + nsIDOMAbstractView *nsview; + nsIDOMWindow *nswindow; + nsresult nsres; + HRESULT hres; + + nsres = nsIDOMHTMLDocument_QueryInterface(nsdoc, &IID_nsIDOMDocumentView, (void**)&nsdocview); + if(NS_FAILED(nsres)) { + ERR("Could not get nsIDOMDocumentView: %08x\n", nsres); + return E_FAIL; + } + + nsres = nsIDOMDocumentView_GetDefaultView(nsdocview, &nsview); + nsIDOMDocumentView_Release(nsdocview); + if(NS_FAILED(nsres)) { + ERR("GetDefaultView failed: %08x\n", nsres); + return E_FAIL; + } + + nsres = nsIDOMAbstractView_QueryInterface(nsview, &IID_nsIDOMWindow, (void**)&nswindow); + nsIDOMAbstractView_Release(nsview); + if(NS_FAILED(nsres)) { + ERR("Coult not get nsIDOMWindow iface: %08x\n", nsres); + return E_FAIL; + } + + hres = HTMLWindow_Create(This->element.node.doc->basedoc.doc_obj, nswindow, ret); + + nsIDOMWindow_Release(nswindow); + return hres; +} + #define HTMLFRAMEBASE2_THIS(iface) DEFINE_THIS(HTMLIFrame, IHTMLFrameBase2, iface) static HRESULT WINAPI HTMLIFrameBase2_QueryInterface(IHTMLFrameBase2 *iface, REFIID riid, void **ppv) @@ -130,10 +164,10 @@ static HRESULT WINAPI HTMLIFrameBase2_get_contentWindow(IHTMLFrameBase2 *iface, return E_FAIL; } - hres = HTMLWindow_Create(This->element.node.doc->basedoc.doc_obj, NULL, &window); + hres = create_content_window(This, nshtmldoc, &window); if(FAILED(hres)) { - nsIDOMDocument_Release(nsdoc); - return hres; + nsIDOMHTMLDocument_Release(nshtmldoc); + return E_FAIL; } hres = create_doc_from_nsdoc(nshtmldoc, This->element.node.doc->basedoc.doc_obj, window, &content_doc); -- 2.33.8