-- v2: mshtml: Add support for text node prototype objects.
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmlselect.c | 14 ++++++++------ dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/tests/documentmode.js | 2 ++ 3 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index 765686a1260..31f0e33a2b4 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -1300,12 +1300,14 @@ static const tid_t HTMLSelectElement_tids[] = { 0 };
-static dispex_static_data_t HTMLSelectElement_dispex = { - "HTMLSelectElement", - &HTMLSelectElement_event_target_vtbl.dispex_vtbl, - DispHTMLSelectElement_tid, - HTMLSelectElement_tids, - HTMLElement_init_dispex_info +dispex_static_data_t HTMLSelectElement_dispex = { + .name = "HTMLSelectElement", + .id = PROT_HTMLSelectElement, + .prototype_id = PROT_HTMLElement, + .vtbl = &HTMLSelectElement_event_target_vtbl.dispex_vtbl, + .disp_tid = DispHTMLSelectElement_tid, + .iface_tids = HTMLSelectElement_tids, + .init_info = HTMLElement_init_dispex_info, };
HRESULT HTMLSelectElement_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HTMLElement **elem) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 7067d71bed7..f585d1920f4 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -430,6 +430,7 @@ typedef struct { X(HTMLObjectElement) \ X(HTMLOptionElement) \ X(HTMLScriptElement) \ + X(HTMLSelectElement) \ X(HTMLTitleElement) \ X(MutationObserver) \ X(Navigator) \ diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 2a557e0670f..f2b3968140f 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3182,4 +3182,6 @@ sync_test("prototypes", function() { check(HTMLEmbedElement.prototype, HTMLElement.prototype, "embed element prototype"); check(document.createElement("script"), HTMLScriptElement.prototype, "script element"); check(HTMLScriptElement.prototype, HTMLElement.prototype, "script element prototype"); + check(document.createElement("select"), HTMLSelectElement.prototype, "select element"); + check(HTMLSelectElement.prototype, HTMLElement.prototype, "select element prototype"); });
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmlstyleelem.c | 14 ++++++++------ dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/tests/documentmode.js | 2 ++ 3 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlstyleelem.c b/dlls/mshtml/htmlstyleelem.c index 3d23bff5da8..9a5d43ad36e 100644 --- a/dlls/mshtml/htmlstyleelem.c +++ b/dlls/mshtml/htmlstyleelem.c @@ -335,12 +335,14 @@ static const tid_t HTMLStyleElement_iface_tids[] = { HTMLELEMENT_TIDS, 0 }; -static dispex_static_data_t HTMLStyleElement_dispex = { - "HTMLStyleElement", - &HTMLStyleElement_event_target_vtbl.dispex_vtbl, - DispHTMLStyleElement_tid, - HTMLStyleElement_iface_tids, - HTMLStyleElement_init_dispex_info +dispex_static_data_t HTMLStyleElement_dispex = { + .name = "HTMLStyleElement", + .id = PROT_HTMLStyleElement, + .prototype_id = PROT_HTMLElement, + .vtbl = &HTMLStyleElement_event_target_vtbl.dispex_vtbl, + .disp_tid = DispHTMLStyleElement_tid, + .iface_tids = HTMLStyleElement_iface_tids, + .init_info = HTMLStyleElement_init_dispex_info, };
HRESULT HTMLStyleElement_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HTMLElement **elem) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index f585d1920f4..40bde4fd98e 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -431,6 +431,7 @@ typedef struct { X(HTMLOptionElement) \ X(HTMLScriptElement) \ X(HTMLSelectElement) \ + X(HTMLStyleElement) \ X(HTMLTitleElement) \ X(MutationObserver) \ X(Navigator) \ diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index f2b3968140f..a5703358b93 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3184,4 +3184,6 @@ sync_test("prototypes", function() { check(HTMLScriptElement.prototype, HTMLElement.prototype, "script element prototype"); check(document.createElement("select"), HTMLSelectElement.prototype, "select element"); check(HTMLSelectElement.prototype, HTMLElement.prototype, "select element prototype"); + check(document.createElement("style"), HTMLStyleElement.prototype, "style element"); + check(HTMLStyleElement.prototype, HTMLElement.prototype, "style element prototype"); });
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmltable.c | 40 +++++++++++++++++-------------- dlls/mshtml/mshtml_private.h | 2 ++ dlls/mshtml/tests/documentmode.js | 4 ++++ 3 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/dlls/mshtml/htmltable.c b/dlls/mshtml/htmltable.c index 19d03387539..be79b82e5fb 100644 --- a/dlls/mshtml/htmltable.c +++ b/dlls/mshtml/htmltable.c @@ -804,7 +804,7 @@ static const NodeImplVtbl HTMLTableRowImplVtbl = { .get_attr_col = HTMLElement_get_attr_col, };
-static const event_target_vtbl_t HTMLTableRow_event_target_vtbl = { +static const event_target_vtbl_t HTMLTableRowElement_event_target_vtbl = { { HTMLELEMENT_DISPEX_VTBL_ENTRIES, .query_interface= HTMLTableRow_query_interface, @@ -816,18 +816,20 @@ static const event_target_vtbl_t HTMLTableRow_event_target_vtbl = { .handle_event = HTMLElement_handle_event };
-static const tid_t HTMLTableRow_iface_tids[] = { +static const tid_t HTMLTableRowElement_iface_tids[] = { HTMLELEMENT_TIDS, IHTMLTableRow_tid, 0 };
-static dispex_static_data_t HTMLTableRow_dispex = { - "HTMLTableRowElement", - &HTMLTableRow_event_target_vtbl.dispex_vtbl, - DispHTMLTableRow_tid, - HTMLTableRow_iface_tids, - HTMLElement_init_dispex_info +dispex_static_data_t HTMLTableRowElement_dispex = { + .name = "HTMLTableRowElement", + .id = PROT_HTMLTableRowElement, + .prototype_id = PROT_HTMLElement, + .vtbl = &HTMLTableRowElement_event_target_vtbl.dispex_vtbl, + .disp_tid = DispHTMLTableRow_tid, + .iface_tids = HTMLTableRowElement_iface_tids, + .init_info = HTMLElement_init_dispex_info, };
HRESULT HTMLTableRow_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HTMLElement **elem) @@ -842,7 +844,7 @@ HRESULT HTMLTableRow_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HTMLEl ret->IHTMLTableRow_iface.lpVtbl = &HTMLTableRowVtbl; ret->element.node.vtbl = &HTMLTableRowImplVtbl;
- HTMLElement_Init(&ret->element, doc, nselem, &HTMLTableRow_dispex); + HTMLElement_Init(&ret->element, doc, nselem, &HTMLTableRowElement_dispex);
nsres = nsIDOMElement_QueryInterface(nselem, &IID_nsIDOMHTMLTableRowElement, (void**)&ret->nsrow); assert(nsres == NS_OK); @@ -1655,7 +1657,7 @@ static const NodeImplVtbl HTMLTableImplVtbl = { .get_attr_col = HTMLElement_get_attr_col, };
-static const event_target_vtbl_t HTMLTable_event_target_vtbl = { +static const event_target_vtbl_t HTMLTableElement_event_target_vtbl = { { HTMLELEMENT_DISPEX_VTBL_ENTRIES, .query_interface= HTMLTable_query_interface, @@ -1667,7 +1669,7 @@ static const event_target_vtbl_t HTMLTable_event_target_vtbl = { .handle_event = HTMLElement_handle_event };
-static const tid_t HTMLTable_iface_tids[] = { +static const tid_t HTMLTableElement_iface_tids[] = { HTMLELEMENT_TIDS, IHTMLTable_tid, IHTMLTable2_tid, @@ -1675,12 +1677,14 @@ static const tid_t HTMLTable_iface_tids[] = { 0 };
-static dispex_static_data_t HTMLTable_dispex = { - "HTMLTableElement", - &HTMLTable_event_target_vtbl.dispex_vtbl, - DispHTMLTable_tid, - HTMLTable_iface_tids, - HTMLElement_init_dispex_info +dispex_static_data_t HTMLTableElement_dispex = { + .name = "HTMLTableElement", + .id = PROT_HTMLTableElement, + .prototype_id = PROT_HTMLElement, + .vtbl = &HTMLTableElement_event_target_vtbl.dispex_vtbl, + .disp_tid = DispHTMLTable_tid, + .iface_tids = HTMLTableElement_iface_tids, + .init_info = HTMLElement_init_dispex_info, };
HRESULT HTMLTable_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HTMLElement **elem) @@ -1697,7 +1701,7 @@ HRESULT HTMLTable_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HTMLEleme ret->IHTMLTable2_iface.lpVtbl = &HTMLTable2Vtbl; ret->IHTMLTable3_iface.lpVtbl = &HTMLTable3Vtbl;
- HTMLElement_Init(&ret->element, doc, nselem, &HTMLTable_dispex); + HTMLElement_Init(&ret->element, doc, nselem, &HTMLTableElement_dispex);
nsres = nsIDOMElement_QueryInterface(nselem, &IID_nsIDOMHTMLTableElement, (void**)&ret->nstable); assert(nsres == NS_OK); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 40bde4fd98e..f8c16162862 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -432,6 +432,8 @@ typedef struct { X(HTMLScriptElement) \ X(HTMLSelectElement) \ X(HTMLStyleElement) \ + X(HTMLTableElement) \ + X(HTMLTableRowElement) \ X(HTMLTitleElement) \ X(MutationObserver) \ X(Navigator) \ diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index a5703358b93..c170addbad4 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3186,4 +3186,8 @@ sync_test("prototypes", function() { check(HTMLSelectElement.prototype, HTMLElement.prototype, "select element prototype"); check(document.createElement("style"), HTMLStyleElement.prototype, "style element"); check(HTMLStyleElement.prototype, HTMLElement.prototype, "style element prototype"); + check(document.createElement("table"), HTMLTableElement.prototype, "table element"); + check(HTMLTableElement.prototype, HTMLElement.prototype, "table element prototype"); + check(document.createElement("tr"), HTMLTableRowElement.prototype, "tr element"); + check(HTMLTableRowElement.prototype, HTMLElement.prototype, "tr element prototype"); });
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmltable.c | 26 +++++++++++++++++--------- dlls/mshtml/mshtml_private.h | 2 ++ dlls/mshtml/tests/documentmode.js | 3 +++ 3 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/dlls/mshtml/htmltable.c b/dlls/mshtml/htmltable.c index be79b82e5fb..64edc89fd41 100644 --- a/dlls/mshtml/htmltable.c +++ b/dlls/mshtml/htmltable.c @@ -430,7 +430,13 @@ static const NodeImplVtbl HTMLTableCellImplVtbl = { .get_attr_col = HTMLElement_get_attr_col, };
-static const event_target_vtbl_t HTMLTableCell_event_target_vtbl = { +dispex_static_data_t HTMLTableCellElement_dispex = { + .name = "HTMLTableCellElement", + .id = PROT_HTMLTableCellElement, + .prototype_id = PROT_HTMLElement, +}; + +static const event_target_vtbl_t HTMLTableDataCellElement_event_target_vtbl = { { HTMLELEMENT_DISPEX_VTBL_ENTRIES, .query_interface= HTMLTableCell_query_interface, @@ -442,18 +448,20 @@ static const event_target_vtbl_t HTMLTableCell_event_target_vtbl = { .handle_event = HTMLElement_handle_event };
-static const tid_t HTMLTableCell_iface_tids[] = { +static const tid_t HTMLTableDataCellElement_iface_tids[] = { HTMLELEMENT_TIDS, IHTMLTableCell_tid, 0 };
-static dispex_static_data_t HTMLTableCell_dispex = { - "HTMLTableDataCellElement", - &HTMLTableCell_event_target_vtbl.dispex_vtbl, - DispHTMLTableCell_tid, - HTMLTableCell_iface_tids, - HTMLElement_init_dispex_info +dispex_static_data_t HTMLTableDataCellElement_dispex = { + .name = "HTMLTableDataCellElement", + .id = PROT_HTMLTableDataCellElement, + .prototype_id = PROT_HTMLTableCellElement, + .vtbl = &HTMLTableDataCellElement_event_target_vtbl.dispex_vtbl, + .disp_tid = DispHTMLTableCell_tid, + .iface_tids = HTMLTableDataCellElement_iface_tids, + .init_info = HTMLElement_init_dispex_info, };
HRESULT HTMLTableCell_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HTMLElement **elem) @@ -468,7 +476,7 @@ HRESULT HTMLTableCell_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HTMLE ret->IHTMLTableCell_iface.lpVtbl = &HTMLTableCellVtbl; ret->element.node.vtbl = &HTMLTableCellImplVtbl;
- HTMLElement_Init(&ret->element, doc, nselem, &HTMLTableCell_dispex); + HTMLElement_Init(&ret->element, doc, nselem, &HTMLTableDataCellElement_dispex);
nsres = nsIDOMElement_QueryInterface(nselem, &IID_nsIDOMHTMLTableCellElement, (void**)&ret->nscell); assert(nsres == NS_OK); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index f8c16162862..5b73ddc967a 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -432,6 +432,8 @@ typedef struct { X(HTMLScriptElement) \ X(HTMLSelectElement) \ X(HTMLStyleElement) \ + X(HTMLTableCellElement) \ + X(HTMLTableDataCellElement) \ X(HTMLTableElement) \ X(HTMLTableRowElement) \ X(HTMLTitleElement) \ diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index c170addbad4..a6684be69dc 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3190,4 +3190,7 @@ sync_test("prototypes", function() { check(HTMLTableElement.prototype, HTMLElement.prototype, "table element prototype"); check(document.createElement("tr"), HTMLTableRowElement.prototype, "tr element"); check(HTMLTableRowElement.prototype, HTMLElement.prototype, "tr element prototype"); + check(document.createElement("td"), HTMLTableDataCellElement.prototype, "td element"); + check(HTMLTableDataCellElement.prototype, HTMLTableCellElement.prototype, "td element prototype"); + check(HTMLTableCellElement.prototype, HTMLElement.prototype, "table cell prototype"); });
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmltextarea.c | 14 ++++++++------ dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/tests/documentmode.js | 2 ++ 3 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c index de0cd735e9e..613fe629117 100644 --- a/dlls/mshtml/htmltextarea.c +++ b/dlls/mshtml/htmltextarea.c @@ -415,12 +415,14 @@ static const tid_t HTMLTextAreaElement_iface_tids[] = { 0 };
-static dispex_static_data_t HTMLTextAreaElement_dispex = { - "HTMLTextAreaElement", - &HTMLTextAreaElement_event_target_vtbl.dispex_vtbl, - DispHTMLTextAreaElement_tid, - HTMLTextAreaElement_iface_tids, - HTMLElement_init_dispex_info +dispex_static_data_t HTMLTextAreaElement_dispex = { + .name = "HTMLTextAreaElement", + .id = PROT_HTMLTextAreaElement, + .prototype_id = PROT_HTMLElement, + .vtbl = &HTMLTextAreaElement_event_target_vtbl.dispex_vtbl, + .disp_tid = DispHTMLTextAreaElement_tid, + .iface_tids = HTMLTextAreaElement_iface_tids, + .init_info = HTMLElement_init_dispex_info, };
HRESULT HTMLTextAreaElement_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HTMLElement **elem) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 5b73ddc967a..9696e4d5df5 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -436,6 +436,7 @@ typedef struct { X(HTMLTableDataCellElement) \ X(HTMLTableElement) \ X(HTMLTableRowElement) \ + X(HTMLTextAreaElement) \ X(HTMLTitleElement) \ X(MutationObserver) \ X(Navigator) \ diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index a6684be69dc..ecf6e826ade 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3193,4 +3193,6 @@ sync_test("prototypes", function() { check(document.createElement("td"), HTMLTableDataCellElement.prototype, "td element"); check(HTMLTableDataCellElement.prototype, HTMLTableCellElement.prototype, "td element prototype"); check(HTMLTableCellElement.prototype, HTMLElement.prototype, "table cell prototype"); + check(document.createElement("textarea"), HTMLTextAreaElement.prototype, "textarea element"); + check(HTMLTextAreaElement.prototype, HTMLElement.prototype, "textarea element prototype"); });
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/mshtml_private.h | 2 ++ dlls/mshtml/svg.c | 28 ++++++++++++++++------------ dlls/mshtml/tests/documentmode.js | 8 +++++++- 3 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 9696e4d5df5..3218582347b 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -441,6 +441,8 @@ typedef struct { X(MutationObserver) \ X(Navigator) \ X(Node) \ + X(SVGElement) \ + X(SVGSVGElement) \ X(Storage) \ X(Window) \ X(XMLHttpRequest) diff --git a/dlls/mshtml/svg.c b/dlls/mshtml/svg.c index c72046f1e3f..524a2aed62a 100644 --- a/dlls/mshtml/svg.c +++ b/dlls/mshtml/svg.c @@ -156,12 +156,14 @@ static const event_target_vtbl_t SVGElement_event_target_vtbl = { .handle_event = HTMLElement_handle_event };
-static dispex_static_data_t SVGElement_dispex = { - "HTMLUnknownElement", - &SVGElement_event_target_vtbl.dispex_vtbl, - DispHTMLUnknownElement_tid, - HTMLElement_iface_tids, - HTMLElement_init_dispex_info +dispex_static_data_t SVGElement_dispex = { + .name = "SVGElement", + .id = PROT_SVGElement, + .prototype_id = PROT_Element, + .vtbl = &SVGElement_event_target_vtbl.dispex_vtbl, + .disp_tid = DispHTMLUnknownElement_tid, + .iface_tids = HTMLElement_iface_tids, + .init_info = HTMLElement_init_dispex_info, };
static void init_svg_element(SVGElement *svg_element, HTMLDocumentNode *doc, nsIDOMSVGElement *nselem, dispex_static_data_t *dispex_data) @@ -656,12 +658,14 @@ static const event_target_vtbl_t SVGSVGElement_event_target_vtbl = { .handle_event = HTMLElement_handle_event };
-static dispex_static_data_t SVGSVGElement_dispex = { - "HTMLUnknownElement", - &SVGSVGElement_event_target_vtbl.dispex_vtbl, - DispHTMLUnknownElement_tid, - HTMLElement_iface_tids, - HTMLElement_init_dispex_info +dispex_static_data_t SVGSVGElement_dispex = { + .name = "SVGSVGElement", + .id = PROT_SVGSVGElement, + .prototype_id = PROT_SVGElement, + .vtbl = &SVGSVGElement_event_target_vtbl.dispex_vtbl, + .disp_tid = DispHTMLUnknownElement_tid, + .iface_tids = HTMLElement_iface_tids, + .init_info = HTMLElement_init_dispex_info, };
static HRESULT create_viewport_element(HTMLDocumentNode *doc, nsIDOMSVGElement *nselem, HTMLElement **elem) diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index ecf6e826ade..f3e8b99a6bd 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -19,6 +19,8 @@ var compat_version; var tests = [];
+var svg_ns = "http://www.w3.org/2000/svg"; + ok(performance.timing.navigationStart > 0, "navigationStart <= 0"); ok(performance.timing.fetchStart == performance.timing.navigationStart, "fetchStart != navigationStart"); ok(performance.timing.domainLookupStart >= performance.timing.fetchStart, "domainLookupStart < fetchStart"); @@ -347,6 +349,8 @@ sync_test("builtin_toString", function() { if(v >= 9) { document.body.innerHTML = "<!--...-->"; test("comment", document.body.firstChild, "Comment"); + + test("SVGSVGElement", document.createElementNS(svg_ns, "svg"), "SVGSVGElement"); } });
@@ -2228,7 +2232,6 @@ sync_test("elem_attrNS", function() { if(v < 9) return; /* not available */
var specialspace_ns = "http://www.mozilla.org/ns/specialspace"; - var svg_ns = "http://www.w3.org/2000/svg";
var elem = document.createElement("div"), r;
@@ -3195,4 +3198,7 @@ sync_test("prototypes", function() { check(HTMLTableCellElement.prototype, HTMLElement.prototype, "table cell prototype"); check(document.createElement("textarea"), HTMLTextAreaElement.prototype, "textarea element"); check(HTMLTextAreaElement.prototype, HTMLElement.prototype, "textarea element prototype"); + check(document.createElementNS(svg_ns, "svg"), SVGSVGElement.prototype, "svg:svg element"); + check(SVGSVGElement.prototype, SVGElement.prototype, "svg:svg element prototype"); + check(SVGElement.prototype, Element.prototype, "svg element prototype"); });
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/svg.c | 14 ++++++++------ dlls/mshtml/tests/documentmode.js | 3 +++ 3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 3218582347b..73e4cd4db84 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -441,6 +441,7 @@ typedef struct { X(MutationObserver) \ X(Navigator) \ X(Node) \ + X(SVGCircleElement) \ X(SVGElement) \ X(SVGSVGElement) \ X(Storage) \ diff --git a/dlls/mshtml/svg.c b/dlls/mshtml/svg.c index 524a2aed62a..a4a1b7c24dc 100644 --- a/dlls/mshtml/svg.c +++ b/dlls/mshtml/svg.c @@ -790,12 +790,14 @@ static const event_target_vtbl_t SVGCircleElement_event_target_vtbl = { .handle_event = HTMLElement_handle_event };
-static dispex_static_data_t SVGCircleElement_dispex = { - "HTMLUnknownElement", - &SVGCircleElement_event_target_vtbl.dispex_vtbl, - DispHTMLUnknownElement_tid, - HTMLElement_iface_tids, - HTMLElement_init_dispex_info +dispex_static_data_t SVGCircleElement_dispex = { + .name = "SVGCircleElement", + .id = PROT_SVGCircleElement, + .prototype_id = PROT_SVGElement, + .vtbl = &SVGCircleElement_event_target_vtbl.dispex_vtbl, + .disp_tid = DispHTMLUnknownElement_tid, + .iface_tids = HTMLElement_iface_tids, + .init_info = HTMLElement_init_dispex_info, };
static HRESULT create_circle_element(HTMLDocumentNode *doc, nsIDOMSVGElement *nselem, HTMLElement **elem) diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index f3e8b99a6bd..34569bf24fe 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -351,6 +351,7 @@ sync_test("builtin_toString", function() { test("comment", document.body.firstChild, "Comment");
test("SVGSVGElement", document.createElementNS(svg_ns, "svg"), "SVGSVGElement"); + test("SVGCircleElement", document.createElementNS(svg_ns, "circle"), "SVGCircleElement"); } });
@@ -3201,4 +3202,6 @@ sync_test("prototypes", function() { check(document.createElementNS(svg_ns, "svg"), SVGSVGElement.prototype, "svg:svg element"); check(SVGSVGElement.prototype, SVGElement.prototype, "svg:svg element prototype"); check(SVGElement.prototype, Element.prototype, "svg element prototype"); + check(document.createElementNS(svg_ns, "circle"), SVGCircleElement.prototype, "svg:circle element"); + check(SVGCircleElement.prototype, SVGElement.prototype, "svg:circle element prototype"); });
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/mshtml_private.h | 3 +++ dlls/mshtml/svg.c | 26 ++++++++++++++++++++------ dlls/mshtml/tests/documentmode.js | 5 +++++ 3 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 73e4cd4db84..fd63127b582 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -444,6 +444,9 @@ typedef struct { X(SVGCircleElement) \ X(SVGElement) \ X(SVGSVGElement) \ + X(SVGTSpanElement) \ + X(SVGTextContentElement) \ + X(SVGTextPositioningElement) \ X(Storage) \ X(Window) \ X(XMLHttpRequest) diff --git a/dlls/mshtml/svg.c b/dlls/mshtml/svg.c index a4a1b7c24dc..ee06ea17061 100644 --- a/dlls/mshtml/svg.c +++ b/dlls/mshtml/svg.c @@ -979,6 +979,18 @@ static void *SVGTSpanElement_query_interface(DispatchEx *dispex, REFIID riid) return SVGElement_query_interface(&This->svg_element.element.node.event_target.dispex, riid); }
+dispex_static_data_t SVGTextContentElement_dispex = { + .name = "SVGTextContentElement", + .id = PROT_SVGTextContentElement, + .prototype_id = PROT_SVGElement, +}; + +dispex_static_data_t SVGTextPositioningElement_dispex = { + .name = "SVGTextPositioningElement", + .id = PROT_SVGTextPositioningElement, + .prototype_id = PROT_SVGTextContentElement, +}; + static const NodeImplVtbl SVGTSpanElementImplVtbl = { .clsid = &CLSID_SVGTSpanElement, .cpc_entries = HTMLElement_cpc, @@ -998,12 +1010,14 @@ static const event_target_vtbl_t SVGTSpanElement_event_target_vtbl = { .handle_event = HTMLElement_handle_event };
-static dispex_static_data_t SVGTSpanElement_dispex = { - "HTMLUnknownElement", - &SVGTSpanElement_event_target_vtbl.dispex_vtbl, - DispHTMLUnknownElement_tid, - HTMLElement_iface_tids, - HTMLElement_init_dispex_info +dispex_static_data_t SVGTSpanElement_dispex = { + .name = "SVGTSpanElement", + .id = PROT_SVGTSpanElement, + .prototype_id = PROT_SVGTextPositioningElement, + .vtbl = &SVGTSpanElement_event_target_vtbl.dispex_vtbl, + .disp_tid = DispHTMLUnknownElement_tid, + .iface_tids = HTMLElement_iface_tids, + .init_info = HTMLElement_init_dispex_info, };
static HRESULT create_tspan_element(HTMLDocumentNode *doc, nsIDOMSVGElement *nselem, HTMLElement **elem) diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 34569bf24fe..b3f0d8964a9 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -352,6 +352,7 @@ sync_test("builtin_toString", function() {
test("SVGSVGElement", document.createElementNS(svg_ns, "svg"), "SVGSVGElement"); test("SVGCircleElement", document.createElementNS(svg_ns, "circle"), "SVGCircleElement"); + test("SVGCircleElement", document.createElementNS(svg_ns, "tspan"), "SVGTSpanElement"); } });
@@ -3204,4 +3205,8 @@ sync_test("prototypes", function() { check(SVGElement.prototype, Element.prototype, "svg element prototype"); check(document.createElementNS(svg_ns, "circle"), SVGCircleElement.prototype, "svg:circle element"); check(SVGCircleElement.prototype, SVGElement.prototype, "svg:circle element prototype"); + check(document.createElementNS(svg_ns, "tspan"), SVGTSpanElement.prototype, "svg:tspan element"); + check(SVGTSpanElement.prototype, SVGTextPositioningElement.prototype, "svg:tspan element prototype"); + check(SVGTextPositioningElement.prototype, SVGTextContentElement.prototype, "SVGTextPositioningElement prototype"); + check(SVGTextContentElement.prototype, SVGElement.prototype, "SVGTextPositioningElement prototype"); });
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmldoc.c | 12 +++++++----- dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/tests/documentmode.js | 2 ++ 3 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 13731e62474..14234cdfd69 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -322,11 +322,13 @@ static const tid_t DocumentType_iface_tids[] = { 0 };
-static dispex_static_data_t DocumentType_dispex = { - "DocumentType", - &DocumentType_event_target_vtbl.dispex_vtbl, - DispDOMDocumentType_tid, - DocumentType_iface_tids +dispex_static_data_t DocumentType_dispex = { + .name = "DocumentType", + .id = PROT_DocumentType, + .prototype_id = PROT_Node, + .vtbl = &DocumentType_event_target_vtbl.dispex_vtbl, + .disp_tid = DispDOMDocumentType_tid, + .iface_tids = DocumentType_iface_tids, };
HRESULT create_doctype_node(HTMLDocumentNode *doc, nsIDOMNode *nsnode, HTMLDOMNode **ret) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index fd63127b582..16bc67ac12b 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -409,6 +409,7 @@ typedef struct { #define ALL_PROTOTYPES \ X(DOMImplementation) \ X(Document) \ + X(DocumentType) \ X(Element) \ X(HTMLAnchorElement) \ X(HTMLAreaElement) \ diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index b3f0d8964a9..c7d3780b891 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3209,4 +3209,6 @@ sync_test("prototypes", function() { check(SVGTSpanElement.prototype, SVGTextPositioningElement.prototype, "svg:tspan element prototype"); check(SVGTextPositioningElement.prototype, SVGTextContentElement.prototype, "SVGTextPositioningElement prototype"); check(SVGTextContentElement.prototype, SVGElement.prototype, "SVGTextPositioningElement prototype"); + check(document.doctype, DocumentType.prototype, "doctype"); + check(DocumentType.prototype, Node.prototype, "doctype prototype"); });
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmltextnode.c | 26 +++++++++++++++++--------- dlls/mshtml/mshtml_private.h | 2 ++ dlls/mshtml/tests/documentmode.js | 3 +++ 3 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/dlls/mshtml/htmltextnode.c b/dlls/mshtml/htmltextnode.c index 06dac8fff24..d2bfc1fae58 100644 --- a/dlls/mshtml/htmltextnode.c +++ b/dlls/mshtml/htmltextnode.c @@ -257,26 +257,34 @@ static const NodeImplVtbl HTMLDOMTextNodeImplVtbl = { .clone = HTMLDOMTextNode_clone };
-static const dispex_static_data_vtbl_t HTMLDOMTextNode_dispex_vtbl = { +dispex_static_data_t CharacterData_dispex = { + .name = "CharactedData", + .id = PROT_CharacterData, + .prototype_id = PROT_Node, +}; + +static const dispex_static_data_vtbl_t Text_dispex_vtbl = { .query_interface = HTMLDOMTextNode_query_interface, .destructor = HTMLDOMNode_destructor, .traverse = HTMLDOMNode_traverse, .unlink = HTMLDOMNode_unlink };
-static const tid_t HTMLDOMTextNode_iface_tids[] = { +static const tid_t Text_iface_tids[] = { IHTMLDOMNode_tid, IHTMLDOMNode2_tid, IHTMLDOMTextNode_tid, IHTMLDOMTextNode2_tid, 0 }; -static dispex_static_data_t HTMLDOMTextNode_dispex = { - "Text", - &HTMLDOMTextNode_dispex_vtbl, - DispHTMLDOMTextNode_tid, - HTMLDOMTextNode_iface_tids, - HTMLDOMNode_init_dispex_info +dispex_static_data_t Text_dispex = { + .name = "Text", + .id = PROT_Text, + .prototype_id = PROT_CharacterData, + .vtbl = &Text_dispex_vtbl, + .disp_tid = DispHTMLDOMTextNode_tid, + .iface_tids = Text_iface_tids, + .init_info = HTMLDOMNode_init_dispex_info, };
HRESULT HTMLDOMTextNode_Create(HTMLDocumentNode *doc, nsIDOMNode *nsnode, HTMLDOMNode **node) @@ -292,7 +300,7 @@ HRESULT HTMLDOMTextNode_Create(HTMLDocumentNode *doc, nsIDOMNode *nsnode, HTMLDO ret->IHTMLDOMTextNode_iface.lpVtbl = &HTMLDOMTextNodeVtbl; ret->IHTMLDOMTextNode2_iface.lpVtbl = &HTMLDOMTextNode2Vtbl;
- HTMLDOMNode_Init(doc, &ret->node, nsnode, &HTMLDOMTextNode_dispex); + HTMLDOMNode_Init(doc, &ret->node, nsnode, &Text_dispex);
nsres = nsIDOMNode_QueryInterface(nsnode, &IID_nsIDOMText, (void**)&ret->nstext); assert(nsres == NS_OK && (nsIDOMNode*)ret->nstext == ret->node.nsnode); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 16bc67ac12b..a268adbbc14 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -407,6 +407,7 @@ typedef struct { } dispex_static_data_vtbl_t;
#define ALL_PROTOTYPES \ + X(CharacterData) \ X(DOMImplementation) \ X(Document) \ X(DocumentType) \ @@ -449,6 +450,7 @@ typedef struct { X(SVGTextContentElement) \ X(SVGTextPositioningElement) \ X(Storage) \ + X(Text) \ X(Window) \ X(XMLHttpRequest)
diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index c7d3780b891..e4e03cc8534 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3211,4 +3211,7 @@ sync_test("prototypes", function() { check(SVGTextContentElement.prototype, SVGElement.prototype, "SVGTextPositioningElement prototype"); check(document.doctype, DocumentType.prototype, "doctype"); check(DocumentType.prototype, Node.prototype, "doctype prototype"); + check(document.createTextNode(""), Text.prototype, "text"); + check(Text.prototype, CharacterData.prototype, "text prototype"); + check(CharacterData.prototype, Node.prototype, "character data prototype"); });