From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmlattr.c | 6 ++++-- dlls/mshtml/htmldoc.c | 2 +- dlls/mshtml/htmlelem.c | 2 +- dlls/mshtml/mshtml_private.h | 2 +- dlls/mshtml/tests/documentmode.js | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlattr.c b/dlls/mshtml/htmlattr.c index b9d3f82e84c..4f58926d237 100644 --- a/dlls/mshtml/htmlattr.c +++ b/dlls/mshtml/htmlattr.c @@ -422,7 +422,8 @@ HTMLDOMAttribute *unsafe_impl_from_IHTMLDOMAttribute(IHTMLDOMAttribute *iface) return iface->lpVtbl == &HTMLDOMAttributeVtbl ? impl_from_IHTMLDOMAttribute(iface) : NULL; }
-HRESULT HTMLDOMAttribute_Create(const WCHAR *name, HTMLElement *elem, DISPID dispid, compat_mode_t compat_mode, HTMLDOMAttribute **attr) +HRESULT HTMLDOMAttribute_Create(const WCHAR *name, HTMLElement *elem, DISPID dispid, + HTMLDocumentNode *doc, HTMLDOMAttribute **attr) { HTMLAttributeCollection *col; HTMLDOMAttribute *ret; @@ -437,7 +438,8 @@ HRESULT HTMLDOMAttribute_Create(const WCHAR *name, HTMLElement *elem, DISPID dis ret->dispid = dispid; ret->elem = elem;
- init_dispatch(&ret->dispex, &HTMLDOMAttribute_dispex, NULL, compat_mode); + init_dispatch(&ret->dispex, &HTMLDOMAttribute_dispex, doc->script_global, + dispex_compat_mode(&doc->script_global->event_target.dispex));
/* For attributes attached to an element, (elem,dispid) pair should be valid used for its operation. */ if(elem) { diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 0ed6b1d6710..ca76318c1b3 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -3015,7 +3015,7 @@ static HRESULT WINAPI HTMLDocument5_createAttribute(IHTMLDocument5 *iface, BSTR
TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrattrName), ppattribute);
- hres = HTMLDOMAttribute_Create(bstrattrName, NULL, 0, dispex_compat_mode(&This->node.event_target.dispex), &attr); + hres = HTMLDOMAttribute_Create(bstrattrName, NULL, 0, This, &attr); if(FAILED(hres)) return hres;
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 581b50ee822..470b718523b 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -7615,7 +7615,7 @@ static inline HRESULT get_domattr(HTMLAttributeCollection *This, DISPID id, LONG }
if(!*attr) { - hres = HTMLDOMAttribute_Create(NULL, This->elem, id, dispex_compat_mode(&This->elem->node.event_target.dispex), attr); + hres = HTMLDOMAttribute_Create(NULL, This->elem, id, This->elem->node.doc, attr); if(FAILED(hres)) return hres; } diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index e41b4fd592c..2bd0887d735 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1208,7 +1208,7 @@ typedef struct {
HTMLDOMAttribute *unsafe_impl_from_IHTMLDOMAttribute(IHTMLDOMAttribute*);
-HRESULT HTMLDOMAttribute_Create(const WCHAR*,HTMLElement*,DISPID,compat_mode_t,HTMLDOMAttribute**); +HRESULT HTMLDOMAttribute_Create(const WCHAR*,HTMLElement*,DISPID,HTMLDocumentNode*,HTMLDOMAttribute**);
HRESULT HTMLElement_Create(HTMLDocumentNode*,nsIDOMNode*,BOOL,HTMLElement**); HRESULT HTMLCommentElement_Create(HTMLDocumentNode*,nsIDOMNode*,HTMLElement**); diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 3d592e9c47d..2fd940737c9 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -292,7 +292,7 @@ sync_test("builtin_toString", function() { } if(!localStorage) win_skip("localStorage is buggy and not available, skipping");
- test("attribute", document.createAttribute("class"), "Attr", null, true); + test("attribute", document.createAttribute("class"), "Attr"); if(false /* todo_wine */) test("attributes", e.attributes, "NamedNodeMap"); test("childNodes", document.body.childNodes, "NodeList", null, true); if(clientRects) test("clientRect", clientRects[0], "ClientRect", null, true);
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmlevent.c | 69 ++++++++++++++++++------------- dlls/mshtml/htmlevent.h | 2 +- dlls/mshtml/nsembed.c | 3 +- dlls/mshtml/nsevents.c | 8 ++-- dlls/mshtml/tests/documentmode.js | 14 +++---- dlls/mshtml/tests/xhr.js | 1 - dlls/mshtml/xmlhttprequest.c | 2 +- 7 files changed, 55 insertions(+), 44 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index 29bf94b9eea..b56cf8030e5 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -3740,7 +3740,7 @@ static dispex_static_data_t DOMStorageEvent_dispex = { };
static void *event_ctor(unsigned size, dispex_static_data_t *dispex_data, nsIDOMEvent *nsevent, eventid_t event_id, - compat_mode_t compat_mode) + HTMLInnerWindow *script_global, compat_mode_t compat_mode) { DOMEvent *event = calloc(1, size);
@@ -3761,7 +3761,7 @@ static void *event_ctor(unsigned size, dispex_static_data_t *dispex_data, nsIDOM
event->time_stamp = get_time_stamp();
- init_dispatch(&event->dispex, dispex_data, NULL, compat_mode); + init_dispatch(&event->dispex, dispex_data, script_global, compat_mode); return event; }
@@ -3771,23 +3771,26 @@ static void fill_parent_ui_event(nsIDOMEvent *nsevent, DOMUIEvent *ui_event) nsIDOMEvent_QueryInterface(nsevent, &IID_nsIDOMUIEvent, (void**)&ui_event->nsevent); }
-static DOMEvent *generic_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, compat_mode_t compat_mode) +static DOMEvent *generic_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, HTMLInnerWindow *script_global, + compat_mode_t compat_mode) { - return event_ctor(sizeof(DOMEvent), &DOMEvent_dispex, nsevent, event_id, compat_mode); + return event_ctor(sizeof(DOMEvent), &DOMEvent_dispex, nsevent, event_id, script_global, compat_mode); }
-static DOMEvent *ui_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, compat_mode_t compat_mode) +static DOMEvent *ui_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, HTMLInnerWindow *script_global, + compat_mode_t compat_mode) { - DOMUIEvent *ui_event = event_ctor(sizeof(DOMUIEvent), &DOMUIEvent_dispex, nsevent, event_id, compat_mode); + DOMUIEvent *ui_event = event_ctor(sizeof(DOMUIEvent), &DOMUIEvent_dispex, nsevent, event_id, script_global, compat_mode); if(!ui_event) return NULL; ui_event->IDOMUIEvent_iface.lpVtbl = &DOMUIEventVtbl; ui_event->nsevent = iface; return &ui_event->event; }
-static DOMEvent *mouse_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, compat_mode_t compat_mode) +static DOMEvent *mouse_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, HTMLInnerWindow *script_global, + compat_mode_t compat_mode) { - DOMMouseEvent *mouse_event = event_ctor(sizeof(DOMMouseEvent), &DOMMouseEvent_dispex, nsevent, event_id, compat_mode); + DOMMouseEvent *mouse_event = event_ctor(sizeof(DOMMouseEvent), &DOMMouseEvent_dispex, nsevent, event_id, script_global, compat_mode); if(!mouse_event) return NULL; mouse_event->IDOMMouseEvent_iface.lpVtbl = &DOMMouseEventVtbl; mouse_event->nsevent = iface; @@ -3795,9 +3798,11 @@ static DOMEvent *mouse_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t e return &mouse_event->ui_event.event; }
-static DOMEvent *keyboard_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, compat_mode_t compat_mode) +static DOMEvent *keyboard_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, HTMLInnerWindow *script_global, + compat_mode_t compat_mode) { - DOMKeyboardEvent *keyboard_event = event_ctor(sizeof(DOMKeyboardEvent), &DOMKeyboardEvent_dispex, nsevent, event_id, compat_mode); + DOMKeyboardEvent *keyboard_event = event_ctor(sizeof(DOMKeyboardEvent), &DOMKeyboardEvent_dispex, nsevent, event_id, script_global, + compat_mode); if(!keyboard_event) return NULL; keyboard_event->IDOMKeyboardEvent_iface.lpVtbl = &DOMKeyboardEventVtbl; keyboard_event->nsevent = iface; @@ -3805,45 +3810,54 @@ static DOMEvent *keyboard_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_ return &keyboard_event->ui_event.event; }
-static DOMEvent *page_transition_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, compat_mode_t compat_mode) +static DOMEvent *page_transition_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, HTMLInnerWindow *script_global, + compat_mode_t compat_mode) { - DOMPageTransitionEvent *page_transition_event = event_ctor(sizeof(DOMCustomEvent), &DOMPageTransitionEvent_dispex, nsevent, event_id, compat_mode); + DOMPageTransitionEvent *page_transition_event = event_ctor(sizeof(DOMCustomEvent), &DOMPageTransitionEvent_dispex, nsevent, event_id, + script_global, compat_mode); if(!page_transition_event) return NULL; page_transition_event->IWinePageTransitionEvent_iface.lpVtbl = &DOMPageTransitionEventVtbl; return &page_transition_event->event; }
-static DOMEvent *custom_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, compat_mode_t compat_mode) +static DOMEvent *custom_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, HTMLInnerWindow *script_global, + compat_mode_t compat_mode) { - DOMCustomEvent *custom_event = event_ctor(sizeof(DOMCustomEvent), &DOMCustomEvent_dispex, nsevent, event_id, compat_mode); + DOMCustomEvent *custom_event = event_ctor(sizeof(DOMCustomEvent), &DOMCustomEvent_dispex, nsevent, event_id, script_global, + compat_mode); if(!custom_event) return NULL; custom_event->IDOMCustomEvent_iface.lpVtbl = &DOMCustomEventVtbl; nsIDOMCustomEvent_Release(iface); return &custom_event->event; }
-static DOMEvent *progress_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, compat_mode_t compat_mode) +static DOMEvent *progress_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, HTMLInnerWindow *script_global, + compat_mode_t compat_mode) { DOMProgressEvent *progress_event;
- if(!(progress_event = event_ctor(sizeof(DOMProgressEvent), &DOMProgressEvent_dispex, nsevent, event_id, compat_mode))) + if(!(progress_event = event_ctor(sizeof(DOMProgressEvent), &DOMProgressEvent_dispex, nsevent, event_id, script_global, compat_mode))) return NULL; progress_event->IDOMProgressEvent_iface.lpVtbl = &DOMProgressEventVtbl; progress_event->nsevent = iface; return &progress_event->event; }
-static DOMEvent *message_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, compat_mode_t compat_mode) +static DOMEvent *message_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, HTMLInnerWindow *script_global, + compat_mode_t compat_mode) { - DOMMessageEvent *message_event = event_ctor(sizeof(DOMMessageEvent), &DOMMessageEvent_dispex, nsevent, event_id, compat_mode); + DOMMessageEvent *message_event = event_ctor(sizeof(DOMMessageEvent), &DOMMessageEvent_dispex, nsevent, event_id, script_global, + compat_mode); if(!message_event) return NULL; message_event->IDOMMessageEvent_iface.lpVtbl = &DOMMessageEventVtbl; return &message_event->event; }
-static DOMEvent *storage_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, compat_mode_t compat_mode) +static DOMEvent *storage_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t event_id, HTMLInnerWindow *script_global, + compat_mode_t compat_mode) { - DOMStorageEvent *storage_event = event_ctor(sizeof(DOMStorageEvent), &DOMStorageEvent_dispex, nsevent, event_id, compat_mode); + DOMStorageEvent *storage_event = event_ctor(sizeof(DOMStorageEvent), &DOMStorageEvent_dispex, nsevent, event_id, script_global, + compat_mode); if(!storage_event) return NULL; storage_event->IDOMStorageEvent_iface.lpVtbl = &DOMStorageEventVtbl; return &storage_event->event; @@ -3851,7 +3865,7 @@ static DOMEvent *storage_event_ctor(void *iface, nsIDOMEvent *nsevent, eventid_t
static const struct { REFIID iid; - DOMEvent *(*ctor)(void *iface, nsIDOMEvent *nsevent, eventid_t, compat_mode_t); + DOMEvent *(*ctor)(void *iface, nsIDOMEvent *nsevent, eventid_t, HTMLInnerWindow *sceript_global, compat_mode_t compat_mode); compat_mode_t min_compat_mode; } event_types_ctor_table[] = { [EVENT_TYPE_EVENT] = { NULL, generic_event_ctor }, @@ -3868,7 +3882,7 @@ static const struct { [EVENT_TYPE_STORAGE] = { NULL, storage_event_ctor }, };
-static DOMEvent *alloc_event(nsIDOMEvent *nsevent, compat_mode_t compat_mode, event_type_t event_type, +static DOMEvent *alloc_event(nsIDOMEvent *nsevent, HTMLInnerWindow *script_global, compat_mode_t compat_mode, event_type_t event_type, eventid_t event_id) { void *iface = NULL; @@ -3881,12 +3895,12 @@ static DOMEvent *alloc_event(nsIDOMEvent *nsevent, compat_mode_t compat_mode, ev nsIDOMEvent_QueryInterface(nsevent, event_types_ctor_table[event_type].iid, &iface);
/* Transfer the iface ownership to the ctor on success */ - if(!(event = event_types_ctor_table[event_type].ctor(iface, nsevent, event_id, compat_mode)) && iface) + if(!(event = event_types_ctor_table[event_type].ctor(iface, nsevent, event_id, script_global, compat_mode)) && iface) nsISupports_Release(iface); return event; }
-HRESULT create_event_from_nsevent(nsIDOMEvent *nsevent, compat_mode_t compat_mode, DOMEvent **ret_event) +HRESULT create_event_from_nsevent(nsIDOMEvent *nsevent, HTMLInnerWindow *script_global, compat_mode_t compat_mode, DOMEvent **ret_event) { event_type_t event_type = EVENT_TYPE_EVENT; eventid_t event_id = EVENTID_LAST; @@ -3918,7 +3932,7 @@ HRESULT create_event_from_nsevent(nsIDOMEvent *nsevent, compat_mode_t compat_mod } }
- event = alloc_event(nsevent, compat_mode, event_type, event_id); + event = alloc_event(nsevent, script_global, compat_mode, event_type, event_id); if(!event) return E_OUTOFMEMORY;
@@ -3951,8 +3965,7 @@ HRESULT create_document_event_str(HTMLDocumentNode *doc, const WCHAR *type, IDOM } }
- event = alloc_event(nsevent, dispex_compat_mode(&doc->node.event_target.dispex), - event_type, EVENTID_LAST); + event = alloc_event(nsevent, doc->script_global, dispex_compat_mode(&doc->node.event_target.dispex), event_type, EVENTID_LAST); nsIDOMEvent_Release(nsevent); if(!event) return E_OUTOFMEMORY; @@ -3976,7 +3989,7 @@ HRESULT create_document_event(HTMLDocumentNode *doc, eventid_t event_id, DOMEven return E_FAIL; }
- event = alloc_event(nsevent, doc->document_mode, event_info[event_id].type, event_id); + event = alloc_event(nsevent, doc->script_global, doc->document_mode, event_info[event_id].type, event_id); nsIDOMEvent_Release(nsevent); if(!event) return E_OUTOFMEMORY; diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h index 333f8add57e..2fc72fb4a34 100644 --- a/dlls/mshtml/htmlevent.h +++ b/dlls/mshtml/htmlevent.h @@ -115,7 +115,7 @@ void dispatch_event(EventTarget*,DOMEvent*);
HRESULT create_document_event(HTMLDocumentNode*,eventid_t,DOMEvent**); HRESULT create_document_event_str(HTMLDocumentNode*,const WCHAR*,IDOMEvent**); -HRESULT create_event_from_nsevent(nsIDOMEvent*,compat_mode_t,DOMEvent**); +HRESULT create_event_from_nsevent(nsIDOMEvent*,HTMLInnerWindow*,compat_mode_t,DOMEvent**); HRESULT create_message_event(HTMLDocumentNode*,IHTMLWindow2*,VARIANT*,DOMEvent**); HRESULT create_storage_event(HTMLDocumentNode*,BSTR,BSTR,BSTR,const WCHAR*,BOOL,DOMEvent**);
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c index 1b31e4f7159..b06c08ff496 100644 --- a/dlls/mshtml/nsembed.c +++ b/dlls/mshtml/nsembed.c @@ -1663,7 +1663,8 @@ static nsresult NSAPI nsContextMenuListener_OnShowContextMenu(nsIContextMenuList if(FAILED(hres)) return NS_ERROR_FAILURE;
- hres = create_event_from_nsevent(aEvent, dispex_compat_mode(&node->event_target.dispex), &event); + hres = create_event_from_nsevent(aEvent, This->doc->doc_node->script_global, + dispex_compat_mode(&node->event_target.dispex), &event); if(SUCCEEDED(hres)) { dispatch_event(&node->event_target, event); IDOMEvent_Release(&event->IDOMEvent_iface); diff --git a/dlls/mshtml/nsevents.c b/dlls/mshtml/nsevents.c index c4843fa45b6..0604fb997c7 100644 --- a/dlls/mshtml/nsevents.c +++ b/dlls/mshtml/nsevents.c @@ -356,7 +356,7 @@ static nsresult handle_load(HTMLDocumentNode *doc, nsIDOMEvent *event) WARN("no dom_document\n"); }
- hres = create_event_from_nsevent(event, dispex_compat_mode(&doc->node.event_target.dispex), &load_event); + hres = create_event_from_nsevent(event, doc->script_global, dispex_compat_mode(&doc->node.event_target.dispex), &load_event); if(SUCCEEDED(hres)) { dispatch_event(&doc->window->event_target, load_event); IDOMEvent_Release(&load_event->IDOMEvent_iface); @@ -376,7 +376,7 @@ static nsresult handle_beforeunload(HTMLDocumentNode *doc, nsIDOMEvent *nsevent) return NS_OK;
/* Gecko dispatches this to the document, but IE dispatches it to the window */ - hres = create_event_from_nsevent(nsevent, dispex_compat_mode(&doc->node.event_target.dispex), &event); + hres = create_event_from_nsevent(nsevent, doc->script_global, dispex_compat_mode(&doc->node.event_target.dispex), &event); if(SUCCEEDED(hres)) { dispatch_event(&window->event_target, event); IDOMEvent_Release(&event->IDOMEvent_iface); @@ -399,7 +399,7 @@ static nsresult handle_unload(HTMLDocumentNode *doc, nsIDOMEvent *nsevent) if(pending_window) pending_window->unload_event_start_time = get_time_stamp();
- hres = create_event_from_nsevent(nsevent, dispex_compat_mode(&doc->node.event_target.dispex), &event); + hres = create_event_from_nsevent(nsevent, doc->script_global, dispex_compat_mode(&doc->node.event_target.dispex), &event); if(SUCCEEDED(hres)) { dispatch_event(&window->event_target, event); IDOMEvent_Release(&event->IDOMEvent_iface); @@ -444,7 +444,7 @@ static nsresult handle_htmlevent(HTMLDocumentNode *doc, nsIDOMEvent *nsevent) target = &node->event_target; }
- hres = create_event_from_nsevent(nsevent, dispex_compat_mode(&target->dispex), &event); + hres = create_event_from_nsevent(nsevent, doc->script_global, dispex_compat_mode(&target->dispex), &event); if(FAILED(hres)) { IEventTarget_Release(&target->IEventTarget_iface); return NS_OK; diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 2fd940737c9..a00647c5ddd 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -58,7 +58,6 @@ if(window.addEventListener) { pageshow_fired = true;
var r = Object.prototype.toString.call(e); - todo_wine. ok(r === "[object PageTransitionEvent]", "pageshow toString = " + r); ok("persisted" in e, "'persisted' not in pageshow event"); ok(document.readyState === "complete", "pageshow readyState = " + document.readyState); @@ -70,7 +69,6 @@ if(window.addEventListener) { ok(document.documentMode >= 11, "pagehide fired");
var r = Object.prototype.toString.call(e); - todo_wine. ok(r === "[object PageTransitionEvent]", "pagehide toString = " + r); ok("persisted" in e, "'persisted' not in pagehide event"); }, true); @@ -332,11 +330,11 @@ sync_test("builtin_toString", function() { test("computedStyle", window.getComputedStyle(e), "CSSStyleDeclaration", null, true); test("doctype", document.doctype, "DocumentType", null, true);
- test("Event", document.createEvent("Event"), "Event", null, true); - test("CustomEvent", document.createEvent("CustomEvent"), "CustomEvent", null, true); - test("KeyboardEvent", document.createEvent("KeyboardEvent"), "KeyboardEvent", null, true); - test("MouseEvent", document.createEvent("MouseEvent"), "MouseEvent", null, true); - test("UIEvent", document.createEvent("UIEvent"), "UIEvent", null, true); + test("Event", document.createEvent("Event"), "Event"); + test("CustomEvent", document.createEvent("CustomEvent"), "CustomEvent"); + test("KeyboardEvent", document.createEvent("KeyboardEvent"), "KeyboardEvent"); + test("MouseEvent", document.createEvent("MouseEvent"), "MouseEvent"); + test("UIEvent", document.createEvent("UIEvent"), "UIEvent"); } if(v >= 10) { test("classList", e.classList, "DOMTokenList", "testclass another ", true); @@ -1958,7 +1956,7 @@ async_test("storage events", function() { return; } var s = Object.prototype.toString.call(e); - todo_wine. + todo_wine_if(e.target != window && e.target != document). ok(s === "[object StorageEvent]", "Object.toString = " + s); ok(e.key === key, "key = " + e.key + ", expected " + key); ok(e.oldValue === oldValue, "oldValue = " + e.oldValue + ", expected " + oldValue); diff --git a/dlls/mshtml/tests/xhr.js b/dlls/mshtml/tests/xhr.js index 336f03c1b2f..661eafc54d9 100644 --- a/dlls/mshtml/tests/xhr.js +++ b/dlls/mshtml/tests/xhr.js @@ -306,7 +306,6 @@ function test_timeout() { xhr.onload = function() { ok(false, "onload called"); } xhr.ontimeout = function(e) { var r = Object.prototype.toString.call(e); - todo_wine. ok(r === ("[object " + (v < 10 ? "Event" : "ProgressEvent") + "]"), "Object.toString = " + r); var props = [ "initProgressEvent", "lengthComputable", "loaded", "total" ]; for(r = 0; r < props.length; r++) { diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c index efb343e6f16..d5faf971a33 100644 --- a/dlls/mshtml/xmlhttprequest.c +++ b/dlls/mshtml/xmlhttprequest.c @@ -398,7 +398,7 @@ static nsresult NSAPI XMLHttpReqEventListener_HandleEvent(nsIDOMEventListener *i blocking_xhr = thread_data->blocking_xhr;
compat_mode = dispex_compat_mode(&This->xhr->event_target.dispex); - hres = create_event_from_nsevent(nsevent, compat_mode, &event); + hres = create_event_from_nsevent(nsevent, This->xhr->window, compat_mode, &event); if(FAILED(hres)) { if(!blocking_xhr || This->xhr == blocking_xhr) This->xhr->ready_state = ready_state;
From: Jacek Caban jacek@codeweavers.com
--- dlls/jscript/dispex.c | 15 +++++++++++++++ dlls/jscript/jsdisp.idl | 3 +++ dlls/mshtml/dispex.c | 8 ++++++++ dlls/mshtml/htmlwindow.c | 20 ++++++++++++++++++++ dlls/mshtml/mshtml_private.h | 2 ++ dlls/mshtml/omnavigator.c | 3 +-- dlls/mshtml/tests/documentmode.js | 2 +- 7 files changed, 50 insertions(+), 3 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index dbdc64659a8..517859433f2 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -2308,6 +2308,20 @@ static void WINAPI WineJSDispatch_Free(IWineJSDispatch *iface) jsdisp_free(This); }
+static HRESULT WINAPI WineJSDispatch_GetScriptGlobal(IWineJSDispatch *iface, IWineJSDispatchHost **ret) +{ + jsdisp_t *This = impl_from_IWineJSDispatch(iface); + IDispatch *disp; + + if(!This->ctx->site) + return E_UNEXPECTED; + + if(!(disp = lookup_global_host(This->ctx))) + return E_NOINTERFACE; + + return IDispatch_QueryInterface(disp, &IID_IWineJSDispatchHost, (void **)ret); +} + static IWineJSDispatchVtbl DispatchExVtbl = { DispatchEx_QueryInterface, DispatchEx_AddRef, @@ -2325,6 +2339,7 @@ static IWineJSDispatchVtbl DispatchExVtbl = { DispatchEx_GetNextDispID, DispatchEx_GetNameSpaceParent, WineJSDispatch_Free, + WineJSDispatch_GetScriptGlobal, };
jsdisp_t *as_jsdisp(IDispatch *disp) diff --git a/dlls/jscript/jsdisp.idl b/dlls/jscript/jsdisp.idl index 8ea53396f09..f01ea95ce48 100644 --- a/dlls/jscript/jsdisp.idl +++ b/dlls/jscript/jsdisp.idl @@ -34,6 +34,8 @@ const unsigned int PROPF_ENUMERABLE = 0x0400; const unsigned int PROPF_WRITABLE = 0x0800; const unsigned int PROPF_CONFIGURABLE = 0x1000;
+interface IWineJSDispatchHost; + [ object, uuid(d359f2fe-5531-741b-a41a-5cf92edc971c), @@ -42,6 +44,7 @@ const unsigned int PROPF_CONFIGURABLE = 0x1000; interface IWineJSDispatch : IDispatchEx { void Free(); + HRESULT GetScriptGlobal(IWineJSDispatchHost **ret); }
[ diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 7b334ac3001..72eb8db40a7 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -2573,3 +2573,11 @@ void init_dispatch(DispatchEx *dispex, dispex_static_data_t *data, HTMLInnerWind dispex->info = ensure_dispex_info(dispex, data, compat_mode, script_global); } } + +void init_dispatch_with_owner(DispatchEx *dispex, dispex_static_data_t *desc, DispatchEx *owner) +{ + HTMLInnerWindow *script_global = get_script_global(owner); + init_dispatch(dispex, desc, script_global, dispex_compat_mode(owner)); + if(script_global) + IHTMLWindow2_Release(&script_global->base.IHTMLWindow2_iface); +} diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 88c9879ac69..af2a0e83d66 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -4208,6 +4208,26 @@ void init_window_cc(void) ccp_init(&outer_window_ccp, &ccp_callback); }
+HTMLInnerWindow *get_script_global(DispatchEx *dispex) +{ + IWineJSDispatchHost *disp; + HTMLInnerWindow *ret; + HRESULT hres; + + if(!dispex->jsdisp) + return NULL; + hres = IWineJSDispatch_GetScriptGlobal(dispex->jsdisp, &disp); + if(FAILED(hres)) + return NULL; + + assert(disp->lpVtbl == &WindowDispExVtbl); + ret = impl_from_IWineJSDispatchHost(disp)->base.inner_window; + if(ret) + IHTMLWindow2_AddRef(&ret->base.IHTMLWindow2_iface); + IWineJSDispatchHost_Release(disp); + return ret; +} + static void *alloc_window(size_t size) { HTMLWindow *window; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 2bd0887d735..080ad008cbe 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -492,6 +492,8 @@ extern void (__cdecl *describe_cc_node)(nsCycleCollectingAutoRefCnt*,const char* extern void (__cdecl *note_cc_edge)(nsISupports*,const char*,nsCycleCollectionTraversalCallback*);
void init_dispatch(DispatchEx*,dispex_static_data_t*,HTMLInnerWindow*,compat_mode_t); +void init_dispatch_with_owner(DispatchEx*,dispex_static_data_t*,DispatchEx*); +HTMLInnerWindow *get_script_global(DispatchEx*); void dispex_props_unlink(DispatchEx*); HRESULT change_type(VARIANT*,VARIANT*,VARTYPE,IServiceProvider*); HRESULT dispex_get_dprop_ref(DispatchEx*,const WCHAR*,BOOL,VARIANT**); diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c index 6284858b763..2b2b54cc2df 100644 --- a/dlls/mshtml/omnavigator.c +++ b/dlls/mshtml/omnavigator.c @@ -685,8 +685,7 @@ static HRESULT create_plugins_collection(OmNavigator *navigator, HTMLPluginsColl col->IHTMLPluginsCollection_iface.lpVtbl = &HTMLPluginsCollectionVtbl; col->navigator = navigator;
- init_dispatch(&col->dispex, &HTMLPluginsCollection_dispex, NULL, - dispex_compat_mode(&navigator->dispex)); + init_dispatch_with_owner(&col->dispex, &HTMLPluginsCollection_dispex, &navigator->dispex);
*ret = col; return S_OK; diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index a00647c5ddd..95652bd5b72 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -307,7 +307,7 @@ sync_test("builtin_toString", function() { test("performance", window.performance, "Performance"); test("performanceNavigation", window.performance.navigation, "PerformanceNavigation"); test("performanceTiming", window.performance.timing, "PerformanceTiming"); - if(v >= 11 /* todo_wine */) test("plugins", window.navigator.plugins, v < 11 ? "MSPluginsCollection" : "PluginArray", null, true); + if(v >= 11 /* todo_wine */) test("plugins", window.navigator.plugins, v < 11 ? "MSPluginsCollection" : "PluginArray"); test("screen", window.screen, "Screen"); test("sessionStorage", window.sessionStorage, "Storage", null, true); test("style", document.body.style, "MSStyleCSSProperties", null, true);
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/omnavigator.c | 3 +-- dlls/mshtml/tests/documentmode.js | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c index 2b2b54cc2df..4fd8e9ee03f 100644 --- a/dlls/mshtml/omnavigator.c +++ b/dlls/mshtml/omnavigator.c @@ -786,8 +786,7 @@ static HRESULT create_mime_types_collection(OmNavigator *navigator, HTMLMimeType col->IHTMLMimeTypesCollection_iface.lpVtbl = &HTMLMimeTypesCollectionVtbl; col->navigator = navigator;
- init_dispatch(&col->dispex, &HTMLMimeTypesCollection_dispex, NULL, - dispex_compat_mode(&navigator->dispex)); + init_dispatch_with_owner(&col->dispex, &HTMLMimeTypesCollection_dispex, &navigator->dispex);
*ret = col; return S_OK; diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 95652bd5b72..b6f055e3c85 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -302,7 +302,7 @@ sync_test("builtin_toString", function() { test("implementation", document.implementation, "DOMImplementation"); if(localStorage) test("localStorage", localStorage, "Storage", null, true); test("location", window.location, "Object", window.location.href, null, true); - if(v >= 11 /* todo_wine */) test("mimeTypes", window.navigator.mimeTypes, v < 11 ? "MSMimeTypesCollection" : "MimeTypeArray", null, true); + if(v >= 11 /* todo_wine */) test("mimeTypes", window.navigator.mimeTypes, v < 11 ? "MSMimeTypesCollection" : "MimeTypeArray"); test("navigator", window.navigator, "Navigator"); test("performance", window.performance, "Performance"); test("performanceNavigation", window.performance.navigation, "PerformanceNavigation");
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmldoc.c | 3 +-- dlls/mshtml/mshtml_private.h | 2 +- dlls/mshtml/omnavigator.c | 5 +++-- dlls/mshtml/tests/documentmode.js | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index ca76318c1b3..172ad524538 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -2819,8 +2819,7 @@ static HRESULT WINAPI HTMLDocument4_get_namespaces(IHTMLDocument4 *iface, IDispa if(!This->namespaces) { HRESULT hres;
- hres = create_namespace_collection(dispex_compat_mode(&This->node.event_target.dispex), - &This->namespaces); + hres = create_namespace_collection(This, &This->namespaces); if(FAILED(hres)) return hres; } diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 080ad008cbe..c7b4c972a31 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1049,7 +1049,7 @@ HRESULT create_navigator(HTMLInnerWindow*,IOmNavigator**); HRESULT create_html_screen(HTMLInnerWindow*,IHTMLScreen**); HRESULT create_performance(HTMLInnerWindow*,IHTMLPerformance**); HRESULT create_history(HTMLInnerWindow*,OmHistory**); -HRESULT create_namespace_collection(compat_mode_t,IHTMLNamespaceCollection**); +HRESULT create_namespace_collection(HTMLDocumentNode*,IHTMLNamespaceCollection**); HRESULT create_dom_implementation(HTMLDocumentNode*,IHTMLDOMImplementation**); void detach_dom_implementation(IHTMLDOMImplementation*); HRESULT create_html_storage(HTMLInnerWindow*,BOOL,IHTMLStorage**); diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c index 4fd8e9ee03f..900c4ee0ca7 100644 --- a/dlls/mshtml/omnavigator.c +++ b/dlls/mshtml/omnavigator.c @@ -1920,7 +1920,7 @@ static dispex_static_data_t HTMLNamespaceCollection_dispex = { HTMLNamespaceCollection_iface_tids };
-HRESULT create_namespace_collection(compat_mode_t compat_mode, IHTMLNamespaceCollection **ret) +HRESULT create_namespace_collection(HTMLDocumentNode *doc, IHTMLNamespaceCollection **ret) { HTMLNamespaceCollection *namespaces;
@@ -1928,7 +1928,8 @@ HRESULT create_namespace_collection(compat_mode_t compat_mode, IHTMLNamespaceCol return E_OUTOFMEMORY;
namespaces->IHTMLNamespaceCollection_iface.lpVtbl = &HTMLNamespaceCollectionVtbl; - init_dispatch(&namespaces->dispex, &HTMLNamespaceCollection_dispex, NULL, compat_mode); + init_dispatch(&namespaces->dispex, &HTMLNamespaceCollection_dispex, doc->script_global, + dispex_compat_mode(&doc->node.event_target.dispex)); *ret = &namespaces->IHTMLNamespaceCollection_iface; return S_OK; } diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index b6f055e3c85..e6a39922157 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -320,7 +320,7 @@ sync_test("builtin_toString", function() { test("window", window, "Window", "[object Window]", true); test("xmlHttpRequest", new XMLHttpRequest(), "XMLHttpRequest", null, true); if(v < 10) { - test("namespaces", document.namespaces, "MSNamespaceInfoCollection", null, true); + test("namespaces", document.namespaces, "MSNamespaceInfoCollection"); } if(v < 11) { test("eventObject", document.createEventObject(), "MSEventObj", null, true);
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmldoc.c | 2 +- dlls/mshtml/htmlevent.c | 19 +++++++++++-------- dlls/mshtml/htmlevent.h | 2 +- dlls/mshtml/htmlstorage.c | 2 +- dlls/mshtml/tests/documentmode.js | 2 +- 5 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 172ad524538..a5f4f558bdd 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -2863,7 +2863,7 @@ static HRESULT WINAPI HTMLDocument4_createEventObject(IHTMLDocument4 *iface, return E_NOTIMPL; }
- return create_event_obj(NULL, dispex_compat_mode(&This->node.event_target.dispex), ppEventObj); + return create_event_obj(NULL, This, ppEventObj); }
static HRESULT WINAPI HTMLDocument4_fireEvent(IHTMLDocument4 *iface, BSTR bstrEventName, diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index b56cf8030e5..12e947fecd3 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -1815,7 +1815,7 @@ static dispex_static_data_t HTMLEventObj_dispex = { HTMLEventObj_iface_tids };
-static HTMLEventObj *alloc_event_obj(DOMEvent *event, compat_mode_t compat_mode) +static HTMLEventObj *alloc_event_obj(DOMEvent *event, HTMLInnerWindow *script_global) { HTMLEventObj *event_obj;
@@ -1830,18 +1830,21 @@ static HTMLEventObj *alloc_event_obj(DOMEvent *event, compat_mode_t compat_mode) event_obj->IHTMLEventObj5_iface.lpVtbl = &HTMLEventObj5Vtbl; event_obj->IHTMLEventObj6_iface.lpVtbl = &HTMLEventObj6Vtbl; event_obj->event = event; - if(event) + if(event) { IDOMEvent_AddRef(&event->IDOMEvent_iface); - - init_dispatch(&event_obj->dispex, &HTMLEventObj_dispex, NULL, compat_mode); + init_dispatch_with_owner(&event_obj->dispex, &HTMLEventObj_dispex, &event->dispex); + }else { + init_dispatch(&event_obj->dispex, &HTMLEventObj_dispex, script_global, + dispex_compat_mode(&script_global->event_target.dispex)); + } return event_obj; }
-HRESULT create_event_obj(DOMEvent *event, compat_mode_t compat_mode, IHTMLEventObj **ret) +HRESULT create_event_obj(DOMEvent *event, HTMLDocumentNode *doc, IHTMLEventObj **ret) { HTMLEventObj *event_obj;
- event_obj = alloc_event_obj(event, compat_mode); + event_obj = alloc_event_obj(event, doc->script_global); if(!event_obj) return E_OUTOFMEMORY;
@@ -4424,7 +4427,7 @@ static HRESULT dispatch_event_object(EventTarget *event_target, DOMEvent *event, } while(iter);
if(!event->event_obj && !event->no_event_obj) { - event_obj_ref = alloc_event_obj(event, dispex_compat_mode(&event->dispex)); + event_obj_ref = alloc_event_obj(event, NULL); if(event_obj_ref) event->event_obj = &event_obj_ref->IHTMLEventObj_iface; } @@ -4556,7 +4559,7 @@ HRESULT fire_event(HTMLDOMNode *node, const WCHAR *event_name, VARIANT *event_va }
if(!event_obj) { - event_obj = alloc_event_obj(NULL, dispex_compat_mode(&node->event_target.dispex)); + event_obj = alloc_event_obj(NULL, node->doc->script_global); if(!event_obj) return E_OUTOFMEMORY; } diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h index 2fc72fb4a34..cd099850771 100644 --- a/dlls/mshtml/htmlevent.h +++ b/dlls/mshtml/htmlevent.h @@ -107,7 +107,7 @@ HRESULT fire_event(HTMLDOMNode*,const WCHAR*,VARIANT*,VARIANT_BOOL*); void update_doc_cp_events(HTMLDocumentNode*,cp_static_data_t*); HRESULT doc_init_events(HTMLDocumentNode*); void detach_events(HTMLDocumentNode *doc); -HRESULT create_event_obj(DOMEvent*,compat_mode_t,IHTMLEventObj**); +HRESULT create_event_obj(DOMEvent*,HTMLDocumentNode*,IHTMLEventObj**); void bind_target_event(HTMLDocumentNode*,EventTarget*,const WCHAR*,IDispatch*); HRESULT ensure_doc_nsevent_handler(HTMLDocumentNode*,nsIDOMNode*,eventid_t);
diff --git a/dlls/mshtml/htmlstorage.c b/dlls/mshtml/htmlstorage.c index 174813a3fef..d4a84a05a3c 100644 --- a/dlls/mshtml/htmlstorage.c +++ b/dlls/mshtml/htmlstorage.c @@ -216,7 +216,7 @@ static void storage_event_proc(event_task_t *_task) if(event->event_id == EVENTID_STORAGE && (compat_mode = dispex_compat_mode(&window->event_target.dispex)) >= COMPAT_MODE_IE9) { dispatch_event(&window->event_target, event); if(window->doc) { - hres = create_event_obj(event, compat_mode, (IHTMLEventObj**)&V_DISPATCH(&var)); + hres = create_event_obj(event, window->doc, (IHTMLEventObj**)&V_DISPATCH(&var)); if(SUCCEEDED(hres)) { V_VT(&var) = VT_DISPATCH; fire_event(&window->doc->node, L"onstorage", &var, &cancelled); diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index e6a39922157..24cd27ce64b 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -323,7 +323,7 @@ sync_test("builtin_toString", function() { test("namespaces", document.namespaces, "MSNamespaceInfoCollection"); } if(v < 11) { - test("eventObject", document.createEventObject(), "MSEventObj", null, true); + test("eventObject", document.createEventObject(), "MSEventObj"); test("selection", document.selection, "MSSelection"); } if(v >= 9) {
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmlevent.c | 7 +++++++ dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/tests/documentmode.js | 2 +- dlls/mshtml/xmlhttprequest.c | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index 12e947fecd3..68f20607c7b 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -5139,6 +5139,13 @@ void EventTarget_Init(EventTarget *event_target, dispex_static_data_t *dispex_da wine_rb_init(&event_target->handler_map, event_id_cmp); }
+void init_event_target(EventTarget *event_target, dispex_static_data_t *dispex_data, HTMLInnerWindow *script_global) +{ + init_dispatch(&event_target->dispex, dispex_data, script_global, dispex_compat_mode(&script_global->event_target.dispex)); + event_target->IEventTarget_iface.lpVtbl = &EventTargetVtbl; + wine_rb_init(&event_target->handler_map, event_id_cmp); +} + void traverse_event_target(EventTarget *event_target, nsCycleCollectionTraversalCallback *cb) { listener_container_t *iter; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index c7b4c972a31..0bce00762b7 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1247,6 +1247,7 @@ void HTMLDOMNode_Init(HTMLDocumentNode*,HTMLDOMNode*,nsIDOMNode*,dispex_static_d void HTMLElement_Init(HTMLElement*,HTMLDocumentNode*,nsIDOMElement*,dispex_static_data_t*);
void EventTarget_Init(EventTarget*,dispex_static_data_t*,compat_mode_t); +void init_event_target(EventTarget*,dispex_static_data_t*,HTMLInnerWindow*); void *EventTarget_query_interface(EventTarget*,REFIID); void EventTarget_init_dispex_info(dispex_data_t*,compat_mode_t);
diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 24cd27ce64b..867130aec3d 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -318,7 +318,7 @@ sync_test("builtin_toString", function() { test("textNode", document.createTextNode("testNode"), "Text", v < 9 ? "testNode" : null, true); test("textRange", txtRange, "TextRange"); test("window", window, "Window", "[object Window]", true); - test("xmlHttpRequest", new XMLHttpRequest(), "XMLHttpRequest", null, true); + test("xmlHttpRequest", new XMLHttpRequest(), "XMLHttpRequest"); if(v < 10) { test("namespaces", document.namespaces, "MSNamespaceInfoCollection"); } diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c index d5faf971a33..0ab7fba2862 100644 --- a/dlls/mshtml/xmlhttprequest.c +++ b/dlls/mshtml/xmlhttprequest.c @@ -1530,7 +1530,7 @@ static HRESULT WINAPI HTMLXMLHttpRequestFactory_create(IHTMLXMLHttpRequestFactor ret->IHTMLXMLHttpRequest2_iface.lpVtbl = &HTMLXMLHttpRequest2Vtbl; ret->IWineXMLHttpRequestPrivate_iface.lpVtbl = &WineXMLHttpRequestPrivateVtbl; ret->IProvideClassInfo2_iface.lpVtbl = &ProvideClassInfo2Vtbl; - EventTarget_Init(&ret->event_target, &HTMLXMLHttpRequest_dispex, This->window->doc->document_mode); + init_event_target(&ret->event_target, &HTMLXMLHttpRequest_dispex, This->window);
/* Always register the handlers because we need them to track state */ event_listener->nsIDOMEventListener_iface.lpVtbl = &XMLHttpReqEventListenerVtbl;