Module: wine Branch: master Commit: 9944c4bd688b40c3c856d37517c2587996157cd9 URL: https://source.winehq.org/git/wine.git/?a=commit;h=9944c4bd688b40c3c856d3751...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Mar 26 17:27:32 2019 +0100
mshtml: Propagate nsIDOMCSSStyleDeclaration errors.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mshtml/htmlstyle.c | 31 +++++++++++-------------------- dlls/mshtml/mshtml_private.h | 2 ++ dlls/mshtml/nsembed.c | 4 +++- dlls/mshtml/tests/dom.c | 36 +++++++++++++++++++++++++++++++++--- 4 files changed, 49 insertions(+), 24 deletions(-)
diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c index 584ac59..7f99c89 100644 --- a/dlls/mshtml/htmlstyle.c +++ b/dlls/mshtml/htmlstyle.c @@ -921,16 +921,13 @@ static HRESULT set_nsstyle_property(nsIDOMCSSStyleDeclaration *nsstyle, styleid_ nsAString_InitDepend(&str_name, style_tbl[sid].name); nsAString_InitDepend(&str_value, value); nsAString_InitDepend(&str_empty, emptyW); - nsres = nsIDOMCSSStyleDeclaration_SetProperty(nsstyle, &str_name, &str_value, &str_empty); - if(NS_FAILED(nsres)) - ERR("SetProperty failed: %08x\n", nsres); - nsAString_Finish(&str_name); nsAString_Finish(&str_value); nsAString_Finish(&str_empty); - - return S_OK; + if(NS_FAILED(nsres)) + WARN("SetProperty failed: %08x\n", nsres); + return map_nsresult(nsres); }
static HRESULT var_to_styleval(CSSStyle *style, const VARIANT *v, const style_tbl_entry_t *entry, WCHAR *buf, const WCHAR **ret) @@ -1023,12 +1020,9 @@ static HRESULT get_nsstyle_attr_nsval(nsIDOMCSSStyleDeclaration *nsstyle, stylei nsAString_InitDepend(&str_name, style_tbl[sid].name); nsres = nsIDOMCSSStyleDeclaration_GetPropertyValue(nsstyle, &str_name, value); nsAString_Finish(&str_name); - if(NS_FAILED(nsres)) { - ERR("SetProperty failed: %08x\n", nsres); - return E_FAIL; - } - - return S_OK; + if(NS_FAILED(nsres)) + WARN("GetPropertyValue failed: %08x\n", nsres); + return map_nsresult(nsres); }
static HRESULT nsstyle_to_bstr(const WCHAR *val, DWORD flags, BSTR *p) @@ -3179,11 +3173,11 @@ static HRESULT WINAPI HTMLStyle_removeAttribute(IHTMLStyle *iface, BSTR strAttri nsAString_GetData(&ret_str, &ret); *pfSuccess = variant_bool(*ret); }else { - ERR("RemoveProperty failed: %08x\n", nsres); + WARN("RemoveProperty failed: %08x\n", nsres); } nsAString_Finish(&name_str); nsAString_Finish(&ret_str); - return NS_SUCCEEDED(nsres) ? S_OK : E_FAIL; + return map_nsresult(nsres); }
static HRESULT WINAPI HTMLStyle_toString(IHTMLStyle *iface, BSTR *String) @@ -5063,12 +5057,9 @@ static HRESULT WINAPI HTMLCSSStyleDeclaration_setProperty(IHTMLCSSStyleDeclarati nsAString_Finish(&name_str); nsAString_Finish(&value_str); nsAString_Finish(&priority_str); - if(NS_FAILED(nsres)) { - FIXME("SetProperty failed: %08x\n", nsres); - return E_FAIL; - } - - return S_OK; + if(NS_FAILED(nsres)) + WARN("SetProperty failed: %08x\n", nsres); + return map_nsresult(nsres); }
static HRESULT WINAPI HTMLCSSStyleDeclaration_item(IHTMLCSSStyleDeclaration *iface, LONG index, BSTR *pbstrPropertyName) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 14cc561..a2b05e7 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -56,6 +56,7 @@ #define NS_ERROR_NOT_AVAILABLE ((nsresult)0x80040111L) #define NS_ERROR_INVALID_ARG ((nsresult)0x80070057L) #define NS_ERROR_UNEXPECTED ((nsresult)0x8000ffffL) +#define NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR ((nsresult)0x80530007)
#define NS_ERROR_MODULE_NETWORK 6
@@ -958,6 +959,7 @@ void nsAString_InitDepend(nsAString*,const PRUnichar*) DECLSPEC_HIDDEN; UINT32 nsAString_GetData(const nsAString*,const PRUnichar**) DECLSPEC_HIDDEN; void nsAString_Finish(nsAString*) DECLSPEC_HIDDEN;
+HRESULT map_nsresult(nsresult) DECLSPEC_HIDDEN; HRESULT return_nsstr(nsresult,nsAString*,BSTR*) DECLSPEC_HIDDEN; HRESULT return_nsstr_variant(nsresult nsres, nsAString *nsstr, VARIANT *p) DECLSPEC_HIDDEN; HRESULT return_nsform(nsresult,nsIDOMHTMLFormElement*,IHTMLFormElement**) DECLSPEC_HIDDEN; diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c index cebed37..6aa2812 100644 --- a/dlls/mshtml/nsembed.c +++ b/dlls/mshtml/nsembed.c @@ -848,7 +848,7 @@ void nsAString_Finish(nsAString *str) NS_StringContainerFinish(str); }
-static HRESULT map_nsresult(nsresult nsres) +HRESULT map_nsresult(nsresult nsres) { switch(nsres) { case NS_OK: @@ -865,6 +865,8 @@ static HRESULT map_nsresult(nsresult nsres) return E_INVALIDARG; case NS_ERROR_UNEXPECTED: return E_UNEXPECTED; + case NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR: + return 0x80700007; /* according to tests */ } return E_FAIL; } diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 8c7548a..bf23163 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -6750,6 +6750,27 @@ static void test_xmlhttprequest(IHTMLWindow5 *window) VariantClear(&var); }
+static void test_read_only_style(IHTMLCSSStyleDeclaration *style) +{ + BSTR none = a2bstr("none"), display = a2bstr("display"), str; + VARIANT v; + HRESULT hres; + + hres = IHTMLCSSStyleDeclaration_put_display(style, none); + ok(hres == 0x80700007, "put_display failed: %08x\n", hres); + + hres = IHTMLCSSStyleDeclaration_removeProperty(style, display, &str); + ok(hres == 0x80700007, "removeProperty failed: %08x\n", hres); + + V_VT(&v) = VT_BSTR; + V_BSTR(&v) = none; + hres = IHTMLCSSStyleDeclaration_setProperty(style, display, &v, NULL); + ok(hres == 0x80700007, "setProperty returned: %08x\n", hres); + + SysFreeString(none); + SysFreeString(display); +} + static void test_window(IHTMLDocument2 *doc) { IHTMLWindow2 *window, *window2, *self, *parent; @@ -7099,10 +7120,19 @@ static void test_defaults(IHTMLDocument2 *doc) test_ifaces((IUnknown*)cstyle, cstyle_iids);
hres = IHTMLCurrentStyle_QueryInterface(cstyle, &IID_IHTMLCurrentStyle4, (void**)&unk); - if(SUCCEEDED(hres)) + if(SUCCEEDED(hres)) { + IHTMLCSSStyleDeclaration *css_style; + + hres = IHTMLCurrentStyle_QueryInterface(cstyle, &IID_IHTMLCSSStyleDeclaration, (void**)&css_style); + if(SUCCEEDED(hres)) { + test_read_only_style(css_style); + IHTMLCSSStyleDeclaration_Release(css_style); + }else { + win_skip("IHTMLCSSStyleDeclaration not supported\n"); + } + IUnknown_Release(unk); - else - { + }else { /*IE6 doesn't have interface */ win_skip("IID_IHTMLCurrentStyle4 not supported\n"); }