From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmlstylesheet.c | 21 +++++++++++++-------- dlls/mshtml/mshtml_private.h | 2 ++ dlls/mshtml/tests/documentmode.js | 4 ++++ 3 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/htmlstylesheet.c b/dlls/mshtml/htmlstylesheet.c index 19f15c9a414..277b2ea04d1 100644 --- a/dlls/mshtml/htmlstylesheet.c +++ b/dlls/mshtml/htmlstylesheet.c @@ -153,22 +153,27 @@ static void HTMLStyleSheetRule_destructor(DispatchEx *dispex) free(This); }
-static const dispex_static_data_vtbl_t HTMLStyleSheetRule_dispex_vtbl = { +dispex_static_data_t CSSRule_dispex = { + .id = PROT_CSSRule, +}; + +static const dispex_static_data_vtbl_t CSSStyleRule_dispex_vtbl = { .query_interface = HTMLStyleSheetRule_query_interface, .destructor = HTMLStyleSheetRule_destructor, .traverse = HTMLStyleSheetRule_traverse, .unlink = HTMLStyleSheetRule_unlink };
-static const tid_t HTMLStyleSheetRule_iface_tids[] = { +static const tid_t CSSStyleRule_iface_tids[] = { IHTMLStyleSheetRule_tid, 0 }; -static dispex_static_data_t HTMLStyleSheetRule_dispex = { - "CSSStyleRule", - &HTMLStyleSheetRule_dispex_vtbl, - DispHTMLStyleSheetRule_tid, - HTMLStyleSheetRule_iface_tids +dispex_static_data_t CSSStyleRule_dispex = { + .id = PROT_CSSStyleRule, + .prototype_id = PROT_CSSRule, + .vtbl = &CSSStyleRule_dispex_vtbl, + .disp_tid = DispHTMLStyleSheetRule_tid, + .iface_tids = CSSStyleRule_iface_tids, };
static HRESULT create_style_sheet_rule(nsIDOMCSSRule *nsstylesheetrule, DispatchEx *owner, @@ -183,7 +188,7 @@ static HRESULT create_style_sheet_rule(nsIDOMCSSRule *nsstylesheetrule, Dispatch rule->IHTMLStyleSheetRule_iface.lpVtbl = &HTMLStyleSheetRuleVtbl; rule->nsstylesheetrule = NULL;
- init_dispatch_with_owner(&rule->dispex, &HTMLStyleSheetRule_dispex, owner); + init_dispatch_with_owner(&rule->dispex, &CSSStyleRule_dispex, owner);
if (nsstylesheetrule) { diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index dc6db701e0c..91255b5035a 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -407,7 +407,9 @@ typedef struct { } dispex_static_data_vtbl_t;
#define ALL_PROTOTYPES \ + X(CSSRule) \ X(CSSStyleDeclaration) \ + X(CSSStyleRule) \ X(CSSStyleSheet) \ X(CharacterData) \ X(DOMImplementation) \ diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 97c879ed679..87bf7879562 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3231,4 +3231,8 @@ sync_test("prototypes", function() { check(StyleSheetList.prototype, Object.prototype, "stylesheets list prototype"); check(e.sheet.rules, MSCSSRuleList.prototype, "css rule list"); check(MSCSSRuleList.prototype, Object.prototype, "css rule list prototype"); + e.sheet.insertRule("div { border: none }", 0); + check(e.sheet.rules[0], CSSStyleRule.prototype, "css rule"); + check(CSSStyleRule.prototype, CSSRule.prototype, "css rule prototype"); + check(CSSRule.prototype, Object.prototype, "css rule prototype"); });