Jacek Caban : mshtml: Expose IHTMLDOMNode3 interface to scripts.

Alexandre Julliard julliard at winehq.org
Wed Jul 19 16:05:33 CDT 2017


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Jul 19 20:32:55 2017 +0200

mshtml: Expose IHTMLDOMNode3 interface to scripts.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/htmlelem.c            | 2 ++
 dlls/mshtml/htmlnode.c            | 9 ++++++++-
 dlls/mshtml/htmltextnode.c        | 7 ++++---
 dlls/mshtml/mshtml_private.h      | 2 ++
 dlls/mshtml/tests/documentmode.js | 2 ++
 5 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 4f7a383..dd23517 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -5176,6 +5176,8 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode)
 {
     static const DISPID elem2_ie11_blacklist[] = {DISPID_IHTMLELEMENT2_DOSCROLL, DISPID_UNKNOWN};
 
+    HTMLDOMNode_init_dispex_info(info, mode);
+
     dispex_info_add_interface(info, IHTMLElement2_tid, mode >= COMPAT_MODE_IE11 ? elem2_ie11_blacklist : NULL);
 
     if(mode >= COMPAT_MODE_IE8)
diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index d3c1473..8202803 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -436,7 +436,8 @@ static const tid_t HTMLDOMChildrenCollection_iface_tids[] = {
 static dispex_static_data_t HTMLDOMChildrenCollection_dispex = {
     &HTMLDOMChildrenCollection_dispex_vtbl,
     DispDOMChildrenCollection_tid,
-    HTMLDOMChildrenCollection_iface_tids
+    HTMLDOMChildrenCollection_iface_tids,
+    HTMLDOMNode_init_dispex_info
 };
 
 IHTMLDOMChildrenCollection *create_child_collection(HTMLDocumentNode *doc, nsIDOMNodeList *nslist)
@@ -1401,6 +1402,12 @@ static HRESULT HTMLDOMNode_clone(HTMLDOMNode *This, nsIDOMNode *nsnode, HTMLDOMN
     return create_node(This->doc, nsnode, ret);
 }
 
+void HTMLDOMNode_init_dispex_info(dispex_data_t *info, compat_mode_t mode)
+{
+    if(mode >= COMPAT_MODE_IE9)
+        dispex_info_add_interface(info, IHTMLDOMNode3_tid, NULL);
+}
+
 static const cpc_entry_t HTMLDOMNode_cpc[] = {{NULL}};
 
 static const NodeImplVtbl HTMLDOMNodeImplVtbl = {
diff --git a/dlls/mshtml/htmltextnode.c b/dlls/mshtml/htmltextnode.c
index edf8efd..a5587c1 100644
--- a/dlls/mshtml/htmltextnode.c
+++ b/dlls/mshtml/htmltextnode.c
@@ -361,7 +361,8 @@ static const tid_t HTMLDOMTextNode_iface_tids[] = {
 static dispex_static_data_t HTMLDOMTextNode_dispex = {
     NULL,
     DispHTMLDOMTextNode_tid,
-    HTMLDOMTextNode_iface_tids
+    HTMLDOMTextNode_iface_tids,
+    HTMLDOMNode_init_dispex_info
 };
 
 HRESULT HTMLDOMTextNode_Create(HTMLDocumentNode *doc, nsIDOMNode *nsnode, HTMLDOMNode **node)
@@ -377,8 +378,8 @@ HRESULT HTMLDOMTextNode_Create(HTMLDocumentNode *doc, nsIDOMNode *nsnode, HTMLDO
     ret->IHTMLDOMTextNode_iface.lpVtbl = &HTMLDOMTextNodeVtbl;
     ret->IHTMLDOMTextNode2_iface.lpVtbl = &HTMLDOMTextNode2Vtbl;
 
-    init_dispex(&ret->node.event_target.dispex, (IUnknown*)&ret->IHTMLDOMTextNode_iface,
-            &HTMLDOMTextNode_dispex);
+    init_dispex_with_compat_mode(&ret->node.event_target.dispex, (IUnknown*)&ret->IHTMLDOMTextNode_iface,
+                                 &HTMLDOMTextNode_dispex, doc->document_mode);
 
     HTMLDOMNode_Init(doc, &ret->node, nsnode);
 
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 3c32ffe..9bdb0844 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -151,6 +151,7 @@ typedef struct EventTarget EventTarget;
     XIID(IHTMLDOMImplementation) \
     XIID(IHTMLDOMNode) \
     XIID(IHTMLDOMNode2) \
+    XIID(IHTMLDOMNode3) \
     XIID(IHTMLDOMTextNode) \
     XIID(IHTMLDOMTextNode2) \
     XIID(IHTMLElement) \
@@ -1039,6 +1040,7 @@ void HTMLFrameBase_Init(HTMLFrameBase*,HTMLDocumentNode*,nsIDOMHTMLElement*,disp
 
 HRESULT HTMLDOMNode_QI(HTMLDOMNode*,REFIID,void**) DECLSPEC_HIDDEN;
 void HTMLDOMNode_destructor(HTMLDOMNode*) DECLSPEC_HIDDEN;
+void HTMLDOMNode_init_dispex_info(dispex_data_t*,compat_mode_t) DECLSPEC_HIDDEN;
 
 HRESULT HTMLElement_QI(HTMLDOMNode*,REFIID,void**) DECLSPEC_HIDDEN;
 void HTMLElement_destructor(HTMLDOMNode*) DECLSPEC_HIDDEN;
diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js
index a7340e2..84138e7 100644
--- a/dlls/mshtml/tests/documentmode.js
+++ b/dlls/mshtml/tests/documentmode.js
@@ -32,6 +32,8 @@ function test_elem_props() {
 
     test_exposed("doScroll", v < 11);
     test_exposed("querySelectorAll", v >= 8);
+    test_exposed("textContent", v >= 9);
+    test_exposed("prefix", v >= 9);
 
     next_test();
 }




More information about the wine-cvs mailing list