Module: wine Branch: master Commit: 2e6598dc39d7f94e394598f6ceebe07f02e65e6d URL: https://source.winehq.org/git/wine.git/?a=commit;h=2e6598dc39d7f94e394598f6c...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Sep 12 21:15:53 2018 +0200
mshtml: Expose IHTMLCSSStyleDeclaration interface to scripts.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mshtml/htmlstyle.c | 9 ++++++++- dlls/mshtml/tests/documentmode.js | 27 +++++++++++++++++++++++++++ dlls/mshtml/tests/elements.js | 37 ++++++++++++++++++++++++++++++++++++- 3 files changed, 71 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c index 0c95951..bb62aec 100644 --- a/dlls/mshtml/htmlstyle.c +++ b/dlls/mshtml/htmlstyle.c @@ -9668,6 +9668,12 @@ static HRESULT HTMLStyle_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, return DISP_E_UNKNOWNNAME; }
+void HTMLStyle_init_dispex_info(dispex_data_t *info, compat_mode_t mode) +{ + if(mode >= COMPAT_MODE_IE9) + dispex_info_add_interface(info, IHTMLCSSStyleDeclaration_tid, NULL); +} + static const dispex_static_data_vtbl_t HTMLStyle_dispex_vtbl = { NULL, HTMLStyle_get_dispid, @@ -9687,7 +9693,8 @@ static const tid_t HTMLStyle_iface_tids[] = { static dispex_static_data_t HTMLStyle_dispex = { &HTMLStyle_dispex_vtbl, DispHTMLStyle_tid, - HTMLStyle_iface_tids + HTMLStyle_iface_tids, + HTMLStyle_init_dispex_info };
static HRESULT get_style_from_elem(HTMLElement *elem, nsIDOMCSSStyleDeclaration **ret) diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 6ab301f..e8db6c2 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -128,6 +128,32 @@ function test_xhr_props() { next_test(); }
+function test_style_props() { + var style = document.body.style; + + function test_exposed(prop, expect) { + if(expect) + ok(prop in style, prop + " not found in style object."); + else + ok(!(prop in style), prop + " found in style object."); + } + + var v = document.documentMode; + + test_exposed("removeAttribute", true); + test_exposed("zIndex", true); + test_exposed("z-index", true); + test_exposed("filter", true); + test_exposed("pixelTop", true); + test_exposed("float", true); + test_exposed("css-float", false); + test_exposed("style-float", false); + test_exposed("setProperty", v >= 9); + test_exposed("removeProperty", v >= 9); + + next_test(); +} + function test_javascript() { var g = window;
@@ -270,6 +296,7 @@ var tests = [ test_window_props, test_javascript, test_xhr_props, + test_style_props, test_elem_by_id, test_conditional_comments ]; diff --git a/dlls/mshtml/tests/elements.js b/dlls/mshtml/tests/elements.js index 53fdeab..50f19e5 100644 --- a/dlls/mshtml/tests/elements.js +++ b/dlls/mshtml/tests/elements.js @@ -208,6 +208,40 @@ function test_document_owner() { next_test(); }
+function test_style_properties() { + var style = document.body.style; + var val; + + style.cssFloat = "left"; + ok(style.cssFloat === "left", "cssFloat = " + style.cssFloat); + + val = style.removeProperty("float"); + ok(val === "left", "removeProperty() returned " + val); + ok(style.cssFloat === "", "cssFloat = " + style.cssFloat); + + style.cssFloat = "left"; + val = style.removeProperty("FloaT"); + ok(val === "left", "removeProperty() returned " + val); + ok(style.cssFloat === "", "cssFloat = " + style.cssFloat); + + style.cssFloat = "left"; + val = style.removeProperty("cssFloat"); + ok(val === "", "removeProperty() returned " + val); + ok(style.cssFloat === "left", "cssFloat = " + style.cssFloat); + ok(style["float"] === "left", "float = " + style["float"]); + + style.testVal = "test"; + val = style.removeProperty("testVal"); + ok(val === "", "removeProperty() returned " + val); + ok(style.testVal === "test", "testVal = " + style.testVal); + + style["z-index"] = 1; + ok(style.zIndex === 1, "zIndex = " + style.zIndex); + ok(style["z-index"] === 1, "z-index = " + style["z-index"]); + + next_test(); +} + var tests = [ test_input_selection, test_textContent, @@ -217,5 +251,6 @@ var tests = [ test_iframe, test_query_selector, test_compare_position, - test_document_owner + test_document_owner, + test_style_properties ];