-- v2: mshtml/tests: Add tests for non-stringed url() with non-URL characters in CSS. mshtml: Implement ProgressEvent's initProgressEvent method. mshtml: Get rid of dispatch_nsevent_hook. mshtml: Implement `complete` prop for input elements. mshtml: Set dom.ipc.plugins.enabled to FALSE. mshtml: Tell wine-gecko about the IE compat document mode.
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/mutation.c | 28 +++++++++++++++++++++++++++- dlls/mshtml/omnavigator.c | 26 ++------------------------ 3 files changed, 30 insertions(+), 25 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index d04d4b2b2c2..270f09b1f30 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1023,6 +1023,7 @@ void ConnectionPointContainer_Destroy(ConnectionPointContainer*) DECLSPEC_HIDDEN HRESULT create_gecko_browser(HTMLDocumentObj*,GeckoBrowser**) DECLSPEC_HIDDEN; void detach_gecko_browser(GeckoBrowser*) DECLSPEC_HIDDEN;
+DWORD get_compat_mode_version(compat_mode_t compat_mode) DECLSPEC_HIDDEN; compat_mode_t lock_document_mode(HTMLDocumentNode*) DECLSPEC_HIDDEN;
void init_mutation(nsIComponentManager*) DECLSPEC_HIDDEN; diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c index 7f2d92b4bcc..83ab623aea8 100644 --- a/dlls/mshtml/mutation.c +++ b/dlls/mshtml/mutation.c @@ -388,6 +388,26 @@ static nsresult run_insert_script(HTMLDocumentNode *doc, nsISupports *script_ifa return NS_OK; }
+DWORD get_compat_mode_version(compat_mode_t compat_mode) +{ + switch(compat_mode) { + case COMPAT_MODE_QUIRKS: + case COMPAT_MODE_IE5: + case COMPAT_MODE_IE7: + return 7; + case COMPAT_MODE_IE8: + return 8; + case COMPAT_MODE_IE9: + return 9; + case COMPAT_MODE_IE10: + return 10; + case COMPAT_MODE_IE11: + return 11; + DEFAULT_UNREACHABLE; + } + return 0; +} + /* * We may change document mode only in early stage of document lifetime. * Later attempts will not have an effect. @@ -396,7 +416,13 @@ compat_mode_t lock_document_mode(HTMLDocumentNode *doc) { TRACE("%p: %d\n", doc, doc->document_mode);
- doc->document_mode_locked = TRUE; + if(!doc->document_mode_locked) { + doc->document_mode_locked = TRUE; + + if(doc->html_document) + nsIDOMHTMLDocument_SetIECompatMode(doc->html_document, get_compat_mode_version(doc->document_mode)); + } + return doc->document_mode; }
diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c index aa9f33567c2..c2a580ceeb3 100644 --- a/dlls/mshtml/omnavigator.c +++ b/dlls/mshtml/omnavigator.c @@ -1170,30 +1170,8 @@ extern HRESULT WINAPI MapBrowserEmulationModeToUserAgent(const void*,WCHAR**); /* Retrieves allocated user agent via CoTaskMemAlloc */ static HRESULT get_user_agent(OmNavigator *navigator, WCHAR **user_agent) { - DWORD version; - - switch(dispex_compat_mode(&navigator->dispex)) { - case COMPAT_MODE_QUIRKS: - case COMPAT_MODE_IE5: - case COMPAT_MODE_IE7: - version = 7; - break; - case COMPAT_MODE_IE8: - version = 8; - break; - case COMPAT_MODE_IE9: - version = 9; - break; - case COMPAT_MODE_IE10: - version = 10; - break; - case COMPAT_MODE_IE11: - version = 11; - break; - default: - assert(0); - return E_FAIL; - } + DWORD version = get_compat_mode_version(dispex_compat_mode(&navigator->dispex)); + return MapBrowserEmulationModeToUserAgent(&version, user_agent); }
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Since we only use in-process plugins anyway.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/nsembed.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c index b6d7b53f815..3e315bc7211 100644 --- a/dlls/mshtml/nsembed.c +++ b/dlls/mshtml/nsembed.c @@ -540,6 +540,7 @@ static void set_preferences(void) set_lang(pref); set_bool_pref(pref, "security.warn_entering_secure", FALSE); set_bool_pref(pref, "security.warn_submit_insecure", FALSE); + set_bool_pref(pref, "dom.ipc.plugins.enabled", FALSE); set_bool_pref(pref, "layout.css.grid.enabled", TRUE); set_int_pref(pref, "layout.spellcheckDefault", 0);
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlinput.c | 13 +++++++++-- dlls/mshtml/tests/dom.c | 5 +++++ dlls/mshtml/tests/events.c | 45 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlinput.c b/dlls/mshtml/htmlinput.c index e02ac2249d9..41d482d2cb8 100644 --- a/dlls/mshtml/htmlinput.c +++ b/dlls/mshtml/htmlinput.c @@ -684,8 +684,17 @@ static HRESULT WINAPI HTMLInputElement_get_readyState(IHTMLInputElement *iface, static HRESULT WINAPI HTMLInputElement_get_complete(IHTMLInputElement *iface, VARIANT_BOOL *p) { HTMLInputElement *This = impl_from_IHTMLInputElement(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + cpp_bool complete; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMHTMLInputElement_GetComplete(This->nsinput, &complete); + if(NS_FAILED(nsres)) + return map_nsresult(nsres); + + *p = variant_bool(complete); + return S_OK; }
static HRESULT WINAPI HTMLInputElement_put_loop(IHTMLInputElement *iface, VARIANT v) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 39af8faa8d5..bb86a7e0a1b 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -3987,6 +3987,7 @@ static void test_contenteditable(IUnknown *unk) #define test_input_type(i,t) _test_input_type(__LINE__,i,t) static void _test_input_type(unsigned line, IHTMLInputElement *input, const WCHAR *extype) { + VARIANT_BOOL b; BSTR type; HRESULT hres;
@@ -3994,6 +3995,10 @@ static void _test_input_type(unsigned line, IHTMLInputElement *input, const WCHA ok_(__FILE__,line) (hres == S_OK, "get_type failed: %08lx\n", hres); ok_(__FILE__,line) (!lstrcmpW(type, extype), "type=%s, expected %s\n", wine_dbgstr_w(type), wine_dbgstr_w(extype)); SysFreeString(type); + + hres = IHTMLInputElement_get_complete(input, &b); + ok_(__FILE__,line) (hres == S_OK, "get_complete failed: %08lx\n", hres); + ok(b == VARIANT_FALSE, "complete = %x\n", b); }
#define test_input_name(u, c) _test_input_name(__LINE__,u, c) diff --git a/dlls/mshtml/tests/events.c b/dlls/mshtml/tests/events.c index efb7393f04a..0975985f431 100644 --- a/dlls/mshtml/tests/events.c +++ b/dlls/mshtml/tests/events.c @@ -2412,6 +2412,7 @@ static void test_inputload(IHTMLDocument2 *doc) { IHTMLInputElement *input; IHTMLElement *elem; + VARIANT_BOOL b; VARIANT v; BSTR str; HRESULT hres; @@ -2438,15 +2439,27 @@ static void test_inputload(IHTMLDocument2 *doc) ok(V_DISPATCH(&v) == (IDispatch*)&input_onload_obj, "V_DISPATCH(onload) != input_onload_obj\n"); VariantClear(&v);
+ hres = IHTMLInputElement_get_complete(input, &b); + ok(hres == S_OK, "get_complete failed: %08lx\n", hres); + ok(b == VARIANT_FALSE, "complete = %x\n", b); + str = SysAllocString(L"http://test.winehq.org/tests/winehq_snapshot/index_files/winehq_logo_text.pn..."); hres = IHTMLInputElement_put_src(input, str); ok(hres == S_OK, "put_src failed: %08lx\n", hres); SysFreeString(str);
+ hres = IHTMLInputElement_get_complete(input, &b); + ok(hres == S_OK, "get_complete failed: %08lx\n", hres); + ok(b == VARIANT_FALSE, "complete = %x\n", b); + SET_EXPECT(input_onload); pump_msgs(&called_input_onload); CHECK_CALLED(input_onload);
+ hres = IHTMLInputElement_get_complete(input, &b); + ok(hres == S_OK, "get_complete failed: %08lx\n", hres); + ok(b == VARIANT_TRUE, "complete = %x\n", b); + IHTMLInputElement_Release(input); }
@@ -2494,15 +2507,37 @@ static void test_link_load(IHTMLDocument2 *doc)
static void test_focus(IHTMLDocument2 *doc) { + IHTMLInputElement *input; IHTMLElement2 *elem2; IHTMLElement4 *div; IHTMLElement *elem; + VARIANT_BOOL b; VARIANT v; + BSTR str; HRESULT hres;
elem = get_elem_id(doc, L"inputid"); elem2 = get_elem2_iface((IUnknown*)elem); + + hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLInputElement, (void**)&input); IHTMLElement_Release(elem); + ok(hres == S_OK, "Could not get IHTMLInputElement iface: %08lx\n", hres); + + hres = IHTMLInputElement_get_complete(input, &b); + ok(hres == S_OK, "get_complete failed: %08lx\n", hres); + ok(b == VARIANT_FALSE, "complete = %x\n", b); + + str = SysAllocString(L"http://test.winehq.org/tests/winehq_snapshot/index_files/winehq_logo_text.pn..."); + hres = IHTMLInputElement_put_src(input, str); + ok(hres == S_OK, "put_src failed: %08lx\n", hres); + SysFreeString(str); + + pump_msgs(NULL); + + hres = IHTMLInputElement_get_complete(input, &b); + ok(hres == S_OK, "get_complete failed: %08lx\n", hres); + ok(b == VARIANT_FALSE, "complete = %x\n", b); + IHTMLInputElement_Release(input);
elem = get_elem_id(doc, L"divid"); div = get_elem4_iface((IUnknown*)elem); @@ -2779,7 +2814,9 @@ static void test_unload_event(IHTMLDocument2 *doc) static void test_submit(IHTMLDocument2 *doc) { IHTMLElement *elem, *submit; + IHTMLInputElement *input; IHTMLFormElement *form; + VARIANT_BOOL b; VARIANT v; DWORD cp_cookie; HRESULT hres; @@ -2810,6 +2847,14 @@ static void test_submit(IHTMLDocument2 *doc)
submit = get_elem_id(doc, L"submitid");
+ hres = IHTMLElement_QueryInterface(submit, &IID_IHTMLInputElement, (void**)&input); + ok(hres == S_OK, "Could not get IHTMLInputElement iface: %08lx\n", hres); + + hres = IHTMLInputElement_get_complete(input, &b); + ok(hres == S_OK, "get_complete failed: %08lx\n", hres); + ok(b == VARIANT_FALSE, "complete = %x\n", b); + IHTMLInputElement_Release(input); + SET_EXPECT(form_onclick); SET_EXPECT(form_onsubmit); hres = IHTMLElement_click(submit);
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Since wine-gecko now implements synchronous events for image loads in legacy modes, this is no longer needed.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlanchor.c | 1 - dlls/mshtml/htmlarea.c | 1 - dlls/mshtml/htmlbody.c | 1 - dlls/mshtml/htmlcomment.c | 1 - dlls/mshtml/htmldoc.c | 4 ---- dlls/mshtml/htmlelem.c | 13 ----------- dlls/mshtml/htmlevent.h | 1 - dlls/mshtml/htmlform.c | 1 - dlls/mshtml/htmlframe.c | 2 -- dlls/mshtml/htmlgeneric.c | 1 - dlls/mshtml/htmlhead.c | 4 ---- dlls/mshtml/htmlimg.c | 43 +--------------------------------- dlls/mshtml/htmlinput.c | 3 --- dlls/mshtml/htmllink.c | 1 - dlls/mshtml/htmlobject.c | 2 -- dlls/mshtml/htmlscript.c | 1 - dlls/mshtml/htmlselect.c | 2 -- dlls/mshtml/htmlstyleelem.c | 1 - dlls/mshtml/htmltable.c | 3 --- dlls/mshtml/htmltextarea.c | 1 - dlls/mshtml/htmlwindow.c | 1 - dlls/mshtml/mshtml_private.h | 2 -- dlls/mshtml/nsevents.c | 11 +-------- dlls/mshtml/svg.c | 4 ---- dlls/mshtml/tests/events.c | 45 ++++++++++++++++++++++++++++++++---- 25 files changed, 43 insertions(+), 107 deletions(-)
diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c index f4c0ff88c6d..1e783ce007e 100644 --- a/dlls/mshtml/htmlanchor.c +++ b/dlls/mshtml/htmlanchor.c @@ -879,7 +879,6 @@ static const NodeImplVtbl HTMLAnchorElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLAnchorElement_handle_event, HTMLElement_get_attr_col, NULL, diff --git a/dlls/mshtml/htmlarea.c b/dlls/mshtml/htmlarea.c index 18736b1fd21..eb7ea383db9 100644 --- a/dlls/mshtml/htmlarea.c +++ b/dlls/mshtml/htmlarea.c @@ -467,7 +467,6 @@ static const NodeImplVtbl HTMLAreaElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLAreaElement_handle_event, HTMLElement_get_attr_col }; diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c index 311bbca2257..6338e7e907b 100644 --- a/dlls/mshtml/htmlbody.c +++ b/dlls/mshtml/htmlbody.c @@ -983,7 +983,6 @@ static const NodeImplVtbl HTMLBodyElementImplVtbl = { HTMLElement_destructor, HTMLBodyElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, HTMLBodyElement_get_event_prop_target, diff --git a/dlls/mshtml/htmlcomment.c b/dlls/mshtml/htmlcomment.c index dd4c83cc77c..cc3bec32959 100644 --- a/dlls/mshtml/htmlcomment.c +++ b/dlls/mshtml/htmlcomment.c @@ -189,7 +189,6 @@ static const NodeImplVtbl HTMLCommentElementImplVtbl = { HTMLCommentElement_destructor, HTMLElement_cpc, HTMLCommentElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col }; diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 1669b4c518b..049b5c3559e 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -371,7 +371,6 @@ static event_target_vtbl_t DocumentType_event_target_vtbl = { }, DocumentType_get_gecko_target, NULL, - NULL, DocumentType_get_parent_event_target, NULL, NULL, @@ -5891,7 +5890,6 @@ static const NodeImplVtbl HTMLDocumentNodeImplVtbl = { NULL, NULL, NULL, - NULL, HTMLDocumentNode_unlink };
@@ -6109,7 +6107,6 @@ static const event_target_vtbl_t HTMLDocumentNode_event_target_vtbl = { }, HTMLDocumentNode_get_gecko_target, HTMLDocumentNode_bind_event, - NULL, HTMLDocumentNode_get_parent_event_target, NULL, HTMLDocumentNode_get_cp_container, @@ -6134,7 +6131,6 @@ static const NodeImplVtbl HTMLDocumentFragmentImplVtbl = { NULL, NULL, NULL, - NULL, HTMLDocumentFragment_unlink };
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index f8b2eb46e6c..5cdb74c2051 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6873,11 +6873,6 @@ HRESULT HTMLElement_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, HTMLDOMNode ** return S_OK; }
-HRESULT HTMLElement_dispatch_nsevent_hook(HTMLDOMNode *iface, DOMEvent *event) -{ - return S_FALSE; -} - HRESULT HTMLElement_handle_event(HTMLDOMNode *iface, DWORD eid, nsIDOMEvent *event, BOOL *prevent_default) { HTMLElement *This = impl_from_HTMLDOMNode(iface); @@ -6928,7 +6923,6 @@ static const NodeImplVtbl HTMLElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col }; @@ -7071,12 +7065,6 @@ static void HTMLElement_bind_event(DispatchEx *dispex, eventid_t eid) ensure_doc_nsevent_handler(This->node.doc, This->node.nsnode, eid); }
-static HRESULT HTMLElement_event_target_dispatch_nsevent_hook(DispatchEx *dispex, DOMEvent *event) -{ - HTMLElement *This = impl_from_DispatchEx(dispex); - return This->node.vtbl->dispatch_nsevent_hook(&This->node, event); -} - static HRESULT HTMLElement_handle_event_default(DispatchEx *dispex, eventid_t eid, nsIDOMEvent *nsevent, BOOL *prevent_default) { HTMLElement *This = impl_from_DispatchEx(dispex); @@ -7350,7 +7338,6 @@ static event_target_vtbl_t HTMLElement_event_target_vtbl = { }, HTMLElement_get_gecko_target, HTMLElement_bind_event, - HTMLElement_event_target_dispatch_nsevent_hook, HTMLElement_get_parent_event_target, HTMLElement_handle_event_default, HTMLElement_get_cp_container, diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h index 54cc5b5932a..988b379654e 100644 --- a/dlls/mshtml/htmlevent.h +++ b/dlls/mshtml/htmlevent.h @@ -132,7 +132,6 @@ typedef struct { dispex_static_data_vtbl_t dispex_vtbl; nsISupports *(*get_gecko_target)(DispatchEx*); void (*bind_event)(DispatchEx*,eventid_t); - HRESULT (*dispatch_nsevent_hook)(DispatchEx*,DOMEvent*); EventTarget *(*get_parent_event_target)(DispatchEx*); HRESULT (*handle_event_default)(DispatchEx*,eventid_t,nsIDOMEvent*,BOOL*); ConnectionPointContainer *(*get_cp_container)(DispatchEx*); diff --git a/dlls/mshtml/htmlform.c b/dlls/mshtml/htmlform.c index 8a15bbf307d..3e7ca112311 100644 --- a/dlls/mshtml/htmlform.c +++ b/dlls/mshtml/htmlform.c @@ -984,7 +984,6 @@ static const NodeImplVtbl HTMLFormElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLFormElement_handle_event, HTMLElement_get_attr_col, NULL, diff --git a/dlls/mshtml/htmlframe.c b/dlls/mshtml/htmlframe.c index 38bb53dc551..9be69c29f9a 100644 --- a/dlls/mshtml/htmlframe.c +++ b/dlls/mshtml/htmlframe.c @@ -1018,7 +1018,6 @@ static const NodeImplVtbl HTMLFrameElementImplVtbl = { HTMLFrameElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, @@ -1612,7 +1611,6 @@ static const NodeImplVtbl HTMLIFrameImplVtbl = { HTMLIFrame_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, diff --git a/dlls/mshtml/htmlgeneric.c b/dlls/mshtml/htmlgeneric.c index 27632f74624..9244ba017fb 100644 --- a/dlls/mshtml/htmlgeneric.c +++ b/dlls/mshtml/htmlgeneric.c @@ -157,7 +157,6 @@ static const NodeImplVtbl HTMLGenericElementImplVtbl = { HTMLGenericElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col }; diff --git a/dlls/mshtml/htmlhead.c b/dlls/mshtml/htmlhead.c index 423bc355f1b..072efd967b9 100644 --- a/dlls/mshtml/htmlhead.c +++ b/dlls/mshtml/htmlhead.c @@ -173,7 +173,6 @@ static const NodeImplVtbl HTMLTitleElementImplVtbl = { HTMLTitleElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col }; @@ -346,7 +345,6 @@ static const NodeImplVtbl HTMLHtmlElementImplVtbl = { HTMLHtmlElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, @@ -596,7 +594,6 @@ static const NodeImplVtbl HTMLMetaElementImplVtbl = { HTMLMetaElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col }; @@ -762,7 +759,6 @@ static const NodeImplVtbl HTMLHeadElementImplVtbl = { HTMLHeadElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col }; diff --git a/dlls/mshtml/htmlimg.c b/dlls/mshtml/htmlimg.c index 01cc8405f87..50fa3531464 100644 --- a/dlls/mshtml/htmlimg.c +++ b/dlls/mshtml/htmlimg.c @@ -39,7 +39,6 @@ struct HTMLImg { IHTMLImgElement IHTMLImgElement_iface;
nsIDOMHTMLImageElement *nsimg; - eventid_t skip_event; };
static inline HTMLImg *impl_from_IHTMLImgElement(IHTMLImgElement *iface) @@ -282,7 +281,6 @@ static HRESULT WINAPI HTMLImgElement_get_alt(IHTMLImgElement *iface, BSTR *p) static HRESULT WINAPI HTMLImgElement_put_src(IHTMLImgElement *iface, BSTR v) { HTMLImg *This = impl_from_IHTMLImgElement(iface); - HRESULT hres = S_OK; nsAString src_str; nsresult nsres;
@@ -291,32 +289,7 @@ static HRESULT WINAPI HTMLImgElement_put_src(IHTMLImgElement *iface, BSTR v) nsAString_InitDepend(&src_str, v); nsres = nsIDOMHTMLImageElement_SetSrc(This->nsimg, &src_str); nsAString_Finish(&src_str); - if(NS_FAILED(nsres)) - ERR("SetSrc failed: %08lx\n", nsres); - - if(dispex_compat_mode(&This->element.node.event_target.dispex) < COMPAT_MODE_IE9) { - eventid_t eventid; - cpp_bool complete; - UINT32 height = 0; - DOMEvent *event; - - /* Synchronously send load event if the image was completed immediately (such as from cache) */ - This->skip_event = EVENTID_INVALID_ID; - - nsres = nsIDOMHTMLImageElement_GetComplete(This->nsimg, &complete); - if(NS_SUCCEEDED(nsres) && complete) { - nsIDOMHTMLImageElement_GetNaturalHeight(This->nsimg, &height); - eventid = height ? EVENTID_LOAD : EVENTID_ERROR; - - hres = create_document_event(This->element.node.doc, eventid, &event); - if(SUCCEEDED(hres)) { - This->skip_event = eventid; - dispatch_event(&This->element.node.event_target, event); - IDOMEvent_Release(&event->IDOMEvent_iface); - } - } - } - return hres; + return map_nsresult(nsres); }
static HRESULT WINAPI HTMLImgElement_get_src(IHTMLImgElement *iface, BSTR *p) @@ -702,18 +675,6 @@ static HRESULT HTMLImgElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) return S_OK; }
-static HRESULT HTMLImgElement_dispatch_nsevent_hook(HTMLDOMNode *iface, DOMEvent *event) -{ - HTMLImg *This = impl_from_HTMLDOMNode(iface); - - if(event->event_id == This->skip_event) { - This->skip_event = EVENTID_INVALID_ID; - return S_OK; - } - - return S_FALSE; -} - static HRESULT HTMLImgElement_get_readystate(HTMLDOMNode *iface, BSTR *p) { HTMLImg *This = impl_from_HTMLDOMNode(iface); @@ -747,7 +708,6 @@ static const NodeImplVtbl HTMLImgElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLImgElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, @@ -799,7 +759,6 @@ HRESULT HTMLImgElement_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HTML
ret->IHTMLImgElement_iface.lpVtbl = &HTMLImgElementVtbl; ret->element.node.vtbl = &HTMLImgElementImplVtbl; - ret->skip_event = EVENTID_INVALID_ID;
HTMLElement_Init(&ret->element, doc, nselem, &HTMLImgElement_dispex);
diff --git a/dlls/mshtml/htmlinput.c b/dlls/mshtml/htmlinput.c index 41d482d2cb8..c220a2495c7 100644 --- a/dlls/mshtml/htmlinput.c +++ b/dlls/mshtml/htmlinput.c @@ -1432,7 +1432,6 @@ static const NodeImplVtbl HTMLInputElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, @@ -1642,7 +1641,6 @@ static const NodeImplVtbl HTMLLabelElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, }; @@ -1979,7 +1977,6 @@ static const NodeImplVtbl HTMLButtonElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, diff --git a/dlls/mshtml/htmllink.c b/dlls/mshtml/htmllink.c index a491cabae02..124507a2fc9 100644 --- a/dlls/mshtml/htmllink.c +++ b/dlls/mshtml/htmllink.c @@ -426,7 +426,6 @@ static const NodeImplVtbl HTMLLinkElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, diff --git a/dlls/mshtml/htmlobject.c b/dlls/mshtml/htmlobject.c index 60746562692..9e30b5426fb 100644 --- a/dlls/mshtml/htmlobject.c +++ b/dlls/mshtml/htmlobject.c @@ -754,7 +754,6 @@ static const NodeImplVtbl HTMLObjectElementImplVtbl = { HTMLObjectElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, @@ -1030,7 +1029,6 @@ static const NodeImplVtbl HTMLEmbedElementImplVtbl = { HTMLEmbedElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col }; diff --git a/dlls/mshtml/htmlscript.c b/dlls/mshtml/htmlscript.c index e2ca3fb9b2a..2ef21fbfb0a 100644 --- a/dlls/mshtml/htmlscript.c +++ b/dlls/mshtml/htmlscript.c @@ -438,7 +438,6 @@ static const NodeImplVtbl HTMLScriptElementImplVtbl = { HTMLScriptElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index c5610b41a1d..5b904c86d4b 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -396,7 +396,6 @@ static const NodeImplVtbl HTMLOptionElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, @@ -1473,7 +1472,6 @@ static const NodeImplVtbl HTMLSelectElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, diff --git a/dlls/mshtml/htmlstyleelem.c b/dlls/mshtml/htmlstyleelem.c index d0465d1495a..abd720cc18f 100644 --- a/dlls/mshtml/htmlstyleelem.c +++ b/dlls/mshtml/htmlstyleelem.c @@ -443,7 +443,6 @@ static const NodeImplVtbl HTMLStyleElementImplVtbl = { HTMLStyleElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, diff --git a/dlls/mshtml/htmltable.c b/dlls/mshtml/htmltable.c index df2cb92b8c9..1afb32ea6ec 100644 --- a/dlls/mshtml/htmltable.c +++ b/dlls/mshtml/htmltable.c @@ -499,7 +499,6 @@ static const NodeImplVtbl HTMLTableCellImplVtbl = { HTMLTableCell_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, @@ -946,7 +945,6 @@ static const NodeImplVtbl HTMLTableRowImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, @@ -1979,7 +1977,6 @@ static const NodeImplVtbl HTMLTableImplVtbl = { HTMLElement_destructor, HTMLTable_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c index 8e6f931c635..5820c0c7291 100644 --- a/dlls/mshtml/htmltextarea.c +++ b/dlls/mshtml/htmltextarea.c @@ -457,7 +457,6 @@ static const NodeImplVtbl HTMLTextAreaElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, HTMLElement_handle_event, HTMLElement_get_attr_col, NULL, diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index c19896e419e..6c550172d68 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -4001,7 +4001,6 @@ static const event_target_vtbl_t HTMLWindow_event_target_vtbl = { NULL, NULL, NULL, - NULL, HTMLWindow_set_current_event };
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 270f09b1f30..e2e10f91de1 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -804,7 +804,6 @@ typedef struct { void (*destructor)(HTMLDOMNode*); const cpc_entry_t *cpc_entries; HRESULT (*clone)(HTMLDOMNode*,nsIDOMNode*,HTMLDOMNode**); - HRESULT (*dispatch_nsevent_hook)(HTMLDOMNode*,DOMEvent*); HRESULT (*handle_event)(HTMLDOMNode*,DWORD,nsIDOMEvent*,BOOL*); HRESULT (*get_attr_col)(HTMLDOMNode*,HTMLAttributeCollection**); EventTarget *(*get_event_prop_target)(HTMLDOMNode*,int); @@ -1209,7 +1208,6 @@ HRESULT HTMLElement_QI(HTMLDOMNode*,REFIID,void**) DECLSPEC_HIDDEN; void HTMLElement_destructor(HTMLDOMNode*) DECLSPEC_HIDDEN; HRESULT HTMLElement_clone(HTMLDOMNode*,nsIDOMNode*,HTMLDOMNode**) DECLSPEC_HIDDEN; HRESULT HTMLElement_get_attr_col(HTMLDOMNode*,HTMLAttributeCollection**) DECLSPEC_HIDDEN; -HRESULT HTMLElement_dispatch_nsevent_hook(HTMLDOMNode*,DOMEvent*) DECLSPEC_HIDDEN; HRESULT HTMLElement_handle_event(HTMLDOMNode*,DWORD,nsIDOMEvent*,BOOL*) DECLSPEC_HIDDEN; void HTMLElement_init_dispex_info(dispex_data_t*,compat_mode_t) DECLSPEC_HIDDEN;
diff --git a/dlls/mshtml/nsevents.c b/dlls/mshtml/nsevents.c index 177981acc25..90d4bc9e9bd 100644 --- a/dlls/mshtml/nsevents.c +++ b/dlls/mshtml/nsevents.c @@ -438,7 +438,6 @@ static nsresult handle_unload(HTMLDocumentNode *doc, nsIDOMEvent *nsevent)
static nsresult handle_htmlevent(HTMLDocumentNode *doc, nsIDOMEvent *nsevent) { - const event_target_vtbl_t *target_vtbl; nsIDOMEventTarget *event_target; EventTarget *target; nsIDOMNode *nsnode; @@ -487,15 +486,7 @@ static nsresult handle_htmlevent(HTMLDocumentNode *doc, nsIDOMEvent *nsevent) } }
- target_vtbl = dispex_get_vtbl(&target->dispex); - - if(target_vtbl && target_vtbl->dispatch_nsevent_hook && - target_vtbl->dispatch_nsevent_hook(&target->dispex, event) == S_OK) { - /* overridden by hook, so cancel it */ - nsIDOMEvent_StopPropagation(nsevent); - }else { - dispatch_event(target, event); - } + dispatch_event(target, event);
IDOMEvent_Release(&event->IDOMEvent_iface); IEventTarget_Release(&target->IEventTarget_iface); diff --git a/dlls/mshtml/svg.c b/dlls/mshtml/svg.c index 718a39a328c..b03ad073244 100644 --- a/dlls/mshtml/svg.c +++ b/dlls/mshtml/svg.c @@ -198,7 +198,6 @@ static const NodeImplVtbl SVGElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, NULL, HTMLElement_get_attr_col, }; @@ -740,7 +739,6 @@ static const NodeImplVtbl SVGSVGElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, NULL, HTMLElement_get_attr_col, }; @@ -910,7 +908,6 @@ static const NodeImplVtbl SVGCircleElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, NULL, HTMLElement_get_attr_col, }; @@ -1155,7 +1152,6 @@ static const NodeImplVtbl SVGTSpanElementImplVtbl = { HTMLElement_destructor, HTMLElement_cpc, HTMLElement_clone, - HTMLElement_dispatch_nsevent_hook, NULL, HTMLElement_get_attr_col, }; diff --git a/dlls/mshtml/tests/events.c b/dlls/mshtml/tests/events.c index 0975985f431..ee15ada69ef 100644 --- a/dlls/mshtml/tests/events.c +++ b/dlls/mshtml/tests/events.c @@ -155,7 +155,12 @@ static const char img_doc_ie9_str[] = "<body><img id="imgid"></img></body></html>";
static const char input_image_doc_str[] = - "<html><body><input type="image" id="inputid"></input></body></html>"; + "<html><head><meta http-equiv="x-ua-compatible" content="IE=8" /></head>" + "<body><input type="image" id="inputid"></input></body></html>"; + +static const char input_image_doc_ie9_str[] = + "<html><head><meta http-equiv="x-ua-compatible" content="IE=9" /></head>" + "<body><input type="image" id="inputid"></input></body></html>";
static const char link_doc_str[] = "<html><body><link id="linkid" rel="stylesheet" type="text/css"></link></body></html>"; @@ -1101,7 +1106,7 @@ static HRESULT WINAPI input_onload(IDispatchEx *iface, DISPID id, LCID lcid, WOR VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller) { CHECK_EXPECT(input_onload); - test_event_args(&DIID_DispHTMLInputElement, id, wFlags, pdp, pvarRes, pei, pspCaller); + test_event_args(document_mode < 9 ? &DIID_DispHTMLInputElement : NULL, id, wFlags, pdp, pvarRes, pei, pspCaller); test_event_src(L"INPUT"); return S_OK; } @@ -2419,7 +2424,6 @@ static void test_inputload(IHTMLDocument2 *doc)
elem = get_elem_id(doc, L"inputid"); hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLInputElement, (void**)&input); - IHTMLElement_Release(elem); ok(hres == S_OK, "Could not get IHTMLInputElement iface: %08lx\n", hres);
V_VT(&v) = VT_EMPTY; @@ -2446,7 +2450,6 @@ static void test_inputload(IHTMLDocument2 *doc) str = SysAllocString(L"http://test.winehq.org/tests/winehq_snapshot/index_files/winehq_logo_text.pn..."); hres = IHTMLInputElement_put_src(input, str); ok(hres == S_OK, "put_src failed: %08lx\n", hres); - SysFreeString(str);
hres = IHTMLInputElement_get_complete(input, &b); ok(hres == S_OK, "get_complete failed: %08lx\n", hres); @@ -2460,7 +2463,40 @@ static void test_inputload(IHTMLDocument2 *doc) ok(hres == S_OK, "get_complete failed: %08lx\n", hres); ok(b == VARIANT_TRUE, "complete = %x\n", b);
+ /* cached images send synchronous load event in legacy modes */ + if(document_mode < 9) + SET_EXPECT(input_onload); + hres = IHTMLInputElement_put_src(input, str); + ok(hres == S_OK, "put_src failed: %08lx\n", hres); + if(document_mode < 9) { + CHECK_CALLED(input_onload); + pump_msgs(NULL); + }else { + SET_EXPECT(input_onload); + pump_msgs(&called_input_onload); + CHECK_CALLED(input_onload); + } + + if(document_mode < 9) + SET_EXPECT(input_onload); + V_VT(&v) = VT_BSTR; + V_BSTR(&v) = str; + str = SysAllocString(L"src"); + hres = IHTMLElement_setAttribute(elem, str, v, 0); + ok(hres == S_OK, "setAttribute failed: %08lx\n", hres); + SysFreeString(str); + VariantClear(&v); + if(document_mode < 9) { + CHECK_CALLED(input_onload); + pump_msgs(NULL); + }else { + SET_EXPECT(input_onload); + pump_msgs(&called_input_onload); + CHECK_CALLED(input_onload); + } + IHTMLInputElement_Release(input); + IHTMLElement_Release(elem); }
static void test_link_load(IHTMLDocument2 *doc) @@ -6306,6 +6342,7 @@ START_TEST(events) run_test_from_res(L"iframe.html", test_unload_event); run_test(empty_doc_ie9_str, test_create_event); run_test(img_doc_ie9_str, test_imgload); + run_test(input_image_doc_ie9_str, test_inputload); }
test_empty_document();
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlevent.c | 28 +++++++++++++++++++++++++--- dlls/mshtml/tests/es5.js | 13 +++++++++++++ dlls/mshtml/tests/xhr.js | 5 +++++ 3 files changed, 43 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index bccdfb81121..d978b626be6 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -2583,6 +2583,7 @@ typedef struct { DOMEvent event; IDOMProgressEvent IDOMProgressEvent_iface; nsIDOMProgressEvent *nsevent; + BOOL manual_init; } DOMProgressEvent;
static inline DOMProgressEvent *impl_from_IDOMProgressEvent(IDOMProgressEvent *iface) @@ -2670,7 +2671,7 @@ static HRESULT WINAPI DOMProgressEvent_get_total(IDOMProgressEvent *iface, ULONG
TRACE("(%p)->(%p)\n", This, p);
- if(NS_FAILED(nsIDOMProgressEvent_GetLengthComputable(This->nsevent, &b)) || !b) { + if(!This->manual_init && (NS_FAILED(nsIDOMProgressEvent_GetLengthComputable(This->nsevent, &b)) || !b)) { *p = ~0; return S_OK; } @@ -2683,9 +2684,30 @@ static HRESULT WINAPI DOMProgressEvent_initProgressEvent(IDOMProgressEvent *ifac ULONGLONG loaded, ULONGLONG total) { DOMProgressEvent *This = impl_from_IDOMProgressEvent(iface); - FIXME("(%p)->(%s %x %x %x %s %s)\n", This, debugstr_w(type), can_bubble, cancelable, lengthComputable, + nsAString type_str; + nsresult nsres; + HRESULT hres; + + TRACE("(%p)->(%s %x %x %x %s %s)\n", This, debugstr_w(type), can_bubble, cancelable, lengthComputable, wine_dbgstr_longlong(loaded), wine_dbgstr_longlong(total)); - return E_NOTIMPL; + + if(This->event.target) { + TRACE("called on already dispatched event\n"); + return S_OK; + } + + hres = IDOMEvent_initEvent(&This->event.IDOMEvent_iface, type, can_bubble, cancelable); + if(SUCCEEDED(hres)) { + nsAString_InitDepend(&type_str, type); + nsres = nsIDOMProgressEvent_InitProgressEvent(This->nsevent, &type_str, !!can_bubble, !!cancelable, + !!lengthComputable, loaded, total); + nsAString_Finish(&type_str); + if(NS_FAILED(nsres)) + return map_nsresult(nsres); + This->manual_init = TRUE; + } + + return hres; }
static const IDOMProgressEventVtbl DOMProgressEventVtbl = { diff --git a/dlls/mshtml/tests/es5.js b/dlls/mshtml/tests/es5.js index e13ad055f4f..b2f63c77c83 100644 --- a/dlls/mshtml/tests/es5.js +++ b/dlls/mshtml/tests/es5.js @@ -2095,3 +2095,16 @@ sync_test("matchMedia", function() { mql = window.matchMedia("(max-width: 1000px)"); ok(mql.matches === true, "(max-width: 1000px) does not match"); }); + +sync_test("initProgressEvent", function() { + var e = document.createEvent("ProgressEvent"); + e.initProgressEvent("loadend", false, false, true, 13, 42); + ok(e.lengthComputable === true, "lengthComputable = " + e.lengthComputable); + ok(e.loaded === 13, "loaded = " + e.loaded); + ok(e.total === 42, "total = " + e.total); + + e.initProgressEvent("loadstart", false, false, false, 99, 50); + ok(e.lengthComputable === false, "lengthComputable after re-init = " + e.lengthComputable); + ok(e.loaded === 99, "loaded after re-init = " + e.loaded); + ok(e.total === 50, "total after re-init = " + e.total); +}); diff --git a/dlls/mshtml/tests/xhr.js b/dlls/mshtml/tests/xhr.js index 2deb526cfe1..336f03c1b2f 100644 --- a/dlls/mshtml/tests/xhr.js +++ b/dlls/mshtml/tests/xhr.js @@ -319,6 +319,11 @@ function test_timeout() { ok(e.lengthComputable === false, "lengthComputable = " + e.lengthComputable); ok(e.loaded === 0, "loaded = " + e.loaded); ok(e.total === 18446744073709552000, "total = " + e.total); + + e.initProgressEvent("timeout", false, false, true, 13, 42); + ok(e.lengthComputable === false, "lengthComputable after initProgressEvent = " + e.lengthComputable); + ok(e.loaded === 0, "loaded after initProgressEvent = " + e.loaded); + ok(e.total === 18446744073709552000, "total after initProgressEvent = " + e.total); } next_test(); }
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/tests/style.c | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+)
diff --git a/dlls/mshtml/tests/style.c b/dlls/mshtml/tests/style.c index 4b72d144354..b0f6da47fea 100644 --- a/dlls/mshtml/tests/style.c +++ b/dlls/mshtml/tests/style.c @@ -323,6 +323,17 @@ static void test_set_csstext(IHTMLStyle *style) ok(!lstrcmpW(V_BSTR(&v), L"black"), "str=%s\n", wine_dbgstr_w(V_BSTR(&v))); VariantClear(&v);
+ test_style_set_csstext(style, L"background: url(http://test.winehq.org/i m\ta\g\\e\n((\(.png);"); + + hres = IHTMLStyle_get_background(style, &str); + ok(hres == S_OK, "get_background failed: %08lx\n", hres); + if(compat_mode < COMPAT_IE9) + todo_wine + ok(wcsstr(str, L"url(http://test.winehq.org/i m\ta\g\\e\n%28%28\%28.png)") != NULL, "background = %s\n", wine_dbgstr_w(str)); + else + ok(!str, "background = %s\n", wine_dbgstr_w(str)); + SysFreeString(str); + hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLCSSStyleDeclaration, (void**)&css_style); ok(hres == S_OK || broken(!is_ie9plus && hres == E_NOINTERFACE), "Could not get IHTMLCSSStyleDeclaration interface: %08lx\n", hres); @@ -2862,6 +2873,42 @@ static void test_body_style(IHTMLStyle *style) SysFreeString(str); }
+ /* background */ + hres = IHTMLStyle_get_background(style, &sDefault); + ok(hres == S_OK, "get_background failed: %08lx\n", hres); + + str = SysAllocString(L"url("http://test.winehq.org/tests/winehq_snapshot/%5C")"); + hres = IHTMLStyle_put_background(style, str); + ok(hres == S_OK, "put_background failed: %08lx\n", hres); + SysFreeString(str); + + hres = IHTMLStyle_get_background(style, &str); + ok(hres == S_OK, "get_background failed: %08lx\n", hres); + if(compat_mode < COMPAT_IE9) + todo_wine + ok(wcsstr(str, L"url(http://test.winehq.org/tests/winehq_snapshot/)") != NULL, "background = %s\n", wine_dbgstr_w(str)); + else + ok(wcsstr(str, L"url("http://test.winehq.org/tests/winehq_snapshot/%5C")") != NULL, "background = %s\n", wine_dbgstr_w(str)); + SysFreeString(str); + + str = SysAllocString(L"url(http://test.winehq.org/i m\ta\g\\e\n((\(.png)"); + hres = IHTMLStyle_put_background(style, str); + ok(hres == S_OK, "put_background failed: %08lx\n", hres); + SysFreeString(str); + + hres = IHTMLStyle_get_background(style, &str); + ok(hres == S_OK, "get_background failed: %08lx\n", hres); + if(compat_mode < COMPAT_IE9) + todo_wine + ok(wcsstr(str, L"url(http://test.winehq.org/i m\ta\g\\e\n%28%28\%28.png)") != NULL, "background = %s\n", wine_dbgstr_w(str)); + else + ok(wcsstr(str, L"url("http://test.winehq.org/tests/winehq_snapshot/%5C")") != NULL, "background = %s\n", wine_dbgstr_w(str)); + SysFreeString(str); + + hres = IHTMLStyle_put_background(style, sDefault); + ok(hres == S_OK, "put_background failed: %08lx\n", hres); + SysFreeString(sDefault); + /* borderTopWidth */ hres = IHTMLStyle_get_borderTopWidth(style, &vDefault); ok(hres == S_OK, "get_borderTopWidth: %08lx\n", hres);
Removed the MediaQueryList patches (will be placed in separate MR) and now the CSS test uses wcsstr.
This merge request was approved by Jacek Caban.