Jacek Caban : mshtml: Return content document in get_document for frame elements.

Alexandre Julliard julliard at winehq.org
Mon Nov 30 10:42:42 CST 2009


Module: wine
Branch: master
Commit: 999371724a1da36629a38caded1f011877417593
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=999371724a1da36629a38caded1f011877417593

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Nov 24 21:13:38 2009 +0100

mshtml: Return content document in get_document for frame elements.

---

 dlls/mshtml/htmlelem.c       |    4 +++-
 dlls/mshtml/htmlframebase.c  |   21 ++++++++++++++++++++-
 dlls/mshtml/htmliframe.c     |   21 ++++++++++++++++++++-
 dlls/mshtml/mshtml_private.h |    1 +
 4 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 0864e49..45338fe 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -569,9 +569,11 @@ static HRESULT WINAPI HTMLElement_get_document(IHTMLElement *iface, IDispatch **
     if(!p)
         return E_POINTER;
 
+    if(This->node.vtbl->get_document)
+        return This->node.vtbl->get_document(&This->node, p);
+
     *p = (IDispatch*)HTMLDOC(&This->node.doc->basedoc);
     IDispatch_AddRef(*p);
-
     return S_OK;
 }
 
diff --git a/dlls/mshtml/htmlframebase.c b/dlls/mshtml/htmlframebase.c
index b474a34..2526593 100644
--- a/dlls/mshtml/htmlframebase.c
+++ b/dlls/mshtml/htmlframebase.c
@@ -443,11 +443,30 @@ static void HTMLFrameElement_destructor(HTMLDOMNode *iface)
     HTMLFrameBase_destructor(&This->framebase);
 }
 
+static HRESULT HTMLFrameElement_get_document(HTMLDOMNode *iface, IDispatch **p)
+{
+    HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface);
+
+    if(!This->framebase.content_window || !This->framebase.content_window->doc) {
+        *p = NULL;
+        return S_OK;
+    }
+
+    *p = (IDispatch*)HTMLDOC(&This->framebase.content_window->doc->basedoc);
+    IDispatch_AddRef(*p);
+    return S_OK;
+}
+
 #undef HTMLFRAME_NODE_THIS
 
 static const NodeImplVtbl HTMLFrameElementImplVtbl = {
     HTMLFrameElement_QI,
-    HTMLFrameElement_destructor
+    HTMLFrameElement_destructor,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    HTMLFrameElement_get_document
 };
 
 HTMLElement *HTMLFrameElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLWindow *content_window)
diff --git a/dlls/mshtml/htmliframe.c b/dlls/mshtml/htmliframe.c
index 218638b..8c3c520 100644
--- a/dlls/mshtml/htmliframe.c
+++ b/dlls/mshtml/htmliframe.c
@@ -58,11 +58,30 @@ static void HTMLIFrame_destructor(HTMLDOMNode *iface)
     HTMLFrameBase_destructor(&This->framebase);
 }
 
+static HRESULT HTMLIFrame_get_document(HTMLDOMNode *iface, IDispatch **p)
+{
+    HTMLIFrame *This = HTMLIFRAME_NODE_THIS(iface);
+
+    if(!This->framebase.content_window || !This->framebase.content_window->doc) {
+        *p = NULL;
+        return S_OK;
+    }
+
+    *p = (IDispatch*)HTMLDOC(&This->framebase.content_window->doc->basedoc);
+    IDispatch_AddRef(*p);
+    return S_OK;
+}
+
 #undef HTMLIFRAME_NODE_THIS
 
 static const NodeImplVtbl HTMLIFrameImplVtbl = {
     HTMLIFrame_QI,
-    HTMLIFrame_destructor
+    HTMLIFrame_destructor,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    HTMLIFrame_get_document
 };
 
 static const tid_t HTMLIFrame_iface_tids[] = {
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index d1fe9f8..ef4642b 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -445,6 +445,7 @@ typedef struct {
     HRESULT (*call_event)(HTMLDOMNode*,DWORD,BOOL*);
     HRESULT (*put_disabled)(HTMLDOMNode*,VARIANT_BOOL);
     HRESULT (*get_disabled)(HTMLDOMNode*,VARIANT_BOOL*);
+    HRESULT (*get_document)(HTMLDOMNode*,IDispatch**);
 } NodeImplVtbl;
 
 struct HTMLDOMNode {




More information about the wine-cvs mailing list