mshtml: Use document.defaultView to get iframe contentWindow.
authorJacek Caban <jacek@codeweavers.com>
Fri, 2 Oct 2009 11:53:52 +0000 (13:53 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Fri, 2 Oct 2009 13:06:58 +0000 (15:06 +0200)
dlls/mshtml/htmliframe.c

index 5f3cafbfa7c3b8691926a11df64edd08866caa01..a482a5b05ae9b7225ea66d60c7ec9ece24a2db62 100644 (file)
@@ -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);