Jacek Caban : mshtml: Store content window on HTMLIFrameElement creation.
Alexandre Julliard
julliard at winehq.org
Tue Nov 3 15:37:17 CST 2009
Module: wine
Branch: master
Commit: 20ed399b2865845bb3c539a720032a817a796e93
URL: http://source.winehq.org/git/wine.git/?a=commit;h=20ed399b2865845bb3c539a720032a817a796e93
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sun Nov 1 19:17:58 2009 +0100
mshtml: Store content window on HTMLIFrameElement creation.
---
dlls/mshtml/htmliframe.c | 76 ++++++++++++++++++++++++++-------------------
1 files changed, 44 insertions(+), 32 deletions(-)
diff --git a/dlls/mshtml/htmliframe.c b/dlls/mshtml/htmliframe.c
index 92f6e40..35aff3d 100644
--- a/dlls/mshtml/htmliframe.c
+++ b/dlls/mshtml/htmliframe.c
@@ -104,39 +104,13 @@ static HRESULT WINAPI HTMLIFrameBase2_get_contentWindow(IHTMLFrameBase2 *iface,
TRACE("(%p)->(%p)\n", This, p);
- if(!This->content_window) {
- nsIDOMWindow *nswindow;
- nsIDOMDocument *nsdoc;
- nsresult nsres;
-
- nsres = nsIDOMHTMLIFrameElement_GetContentDocument(This->nsiframe, &nsdoc);
- if(NS_FAILED(nsres)) {
- ERR("GetContentDocument failed: %08x\n", nsres);
- return E_FAIL;
- }
-
- if(!nsdoc) {
- FIXME("NULL contentDocument\n");
- return E_FAIL;
- }
-
- nswindow = get_nsdoc_window(nsdoc);
- nsIDOMDocument_Release(nsdoc);
- if(!nswindow)
- return E_FAIL;
-
- This->content_window = nswindow_to_window(nswindow);
- nsIDOMWindow_Release(nswindow);
- if(!This->content_window) {
- ERR("Could not get window object\n");
- return E_FAIL;
- }
-
+ if(This->content_window) {
IHTMLWindow2_AddRef(HTMLWINDOW2(This->content_window));
+ *p = HTMLWINDOW2(This->content_window);
+ }else {
+ WARN("NULL content window\n");
+ *p = NULL;
}
-
- IHTMLWindow2_AddRef(HTMLWINDOW2(This->content_window));
- *p = HTMLWINDOW2(This->content_window);
return S_OK;
}
@@ -265,7 +239,38 @@ static dispex_static_data_t HTMLIFrame_dispex = {
HTMLIFrame_iface_tids
};
-HTMLElement *HTMLIFrame_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem)
+static HTMLWindow *get_content_window(nsIDOMHTMLIFrameElement *nsiframe)
+{
+ HTMLWindow *ret;
+ nsIDOMWindow *nswindow;
+ nsIDOMDocument *nsdoc;
+ nsresult nsres;
+
+ nsres = nsIDOMHTMLIFrameElement_GetContentDocument(nsiframe, &nsdoc);
+ if(NS_FAILED(nsres)) {
+ ERR("GetContentDocument failed: %08x\n", nsres);
+ return NULL;
+ }
+
+ if(!nsdoc) {
+ FIXME("NULL contentDocument\n");
+ return NULL;
+ }
+
+ nswindow = get_nsdoc_window(nsdoc);
+ nsIDOMDocument_Release(nsdoc);
+ if(!nswindow)
+ return NULL;
+
+ ret = nswindow_to_window(nswindow);
+ nsIDOMWindow_Release(nswindow);
+ if(!ret)
+ ERR("Could not get window object\n");
+
+ return ret;
+}
+
+HTMLElement *HTMLIFrame_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLWindow *content_window)
{
HTMLIFrame *ret;
nsresult nsres;
@@ -281,5 +286,12 @@ HTMLElement *HTMLIFrame_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem)
if(NS_FAILED(nsres))
ERR("Could not get nsIDOMHTMLIFrameElement iface: %08x\n", nsres);
+ if(!content_window)
+ content_window = get_content_window(ret->nsiframe);
+
+ if(content_window)
+ IHTMLWindow2_AddRef(HTMLWINDOW2(content_window));
+ ret->content_window = content_window;
+
return &ret->framebase.element;
}
More information about the wine-cvs
mailing list