Jacek Caban : mshtml: Don' t use fire_event to dispatch script readystatechange event.

Alexandre Julliard julliard at winehq.org
Fri Oct 20 15:09:37 CDT 2017


Module: wine
Branch: master
Commit: fdf21a53a279979a2e41750c0f48b253ff465236
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=fdf21a53a279979a2e41750c0f48b253ff465236

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Oct 20 15:10:30 2017 +0200

mshtml: Don't use fire_event to dispatch script readystatechange event.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/script.c          | 18 +++++++++++++++---
 dlls/mshtml/tests/events.html |  1 +
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/dlls/mshtml/script.c b/dlls/mshtml/script.c
index da0aa54..3b4fcc5 100644
--- a/dlls/mshtml/script.c
+++ b/dlls/mshtml/script.c
@@ -724,6 +724,19 @@ static ScriptHost *create_script_host(HTMLInnerWindow *window, const GUID *guid)
     return ret;
 }
 
+static void dispatch_script_readystatechange_event(HTMLScriptElement *script)
+{
+    DOMEvent *event;
+    HRESULT hres;
+
+    hres = create_document_event(script->element.node.doc, EVENTID_READYSTATECHANGE, &event);
+    if(FAILED(hres))
+        return;
+
+    fire_event_obj(&script->element.node.event_target, event);
+    IDOMEvent_Release(&event->IDOMEvent_iface);
+}
+
 typedef struct {
     task_t header;
     HTMLScriptElement *elem;
@@ -737,7 +750,7 @@ static void fire_readystatechange_proc(task_t *_task)
         return;
 
     task->elem->pending_readystatechange_event = FALSE;
-    fire_event(task->elem->element.node.doc, EVENTID_READYSTATECHANGE, FALSE, &task->elem->element.node.event_target, NULL);
+    dispatch_script_readystatechange_event(task->elem);
 }
 
 static void fire_readystatechange_task_destr(task_t *_task)
@@ -772,8 +785,7 @@ static void set_script_elem_readystate(HTMLScriptElement *script_elem, READYSTAT
                 script_elem->pending_readystatechange_event = TRUE;
         }else {
             script_elem->pending_readystatechange_event = FALSE;
-            fire_event(script_elem->element.node.doc, EVENTID_READYSTATECHANGE, FALSE,
-                    &script_elem->element.node.event_target, NULL);
+            dispatch_script_readystatechange_event(script_elem);
         }
     }
 }
diff --git a/dlls/mshtml/tests/events.html b/dlls/mshtml/tests/events.html
index 9e27491..4172e30 100644
--- a/dlls/mshtml/tests/events.html
+++ b/dlls/mshtml/tests/events.html
@@ -123,6 +123,7 @@ function test_insert_script() {
 
     var readystatechange_log = "";
     e.onreadystatechange = function() {
+        ok(window.event.srcElement === e, "srcElement != e");
         readystatechange_log += "," + e.readyState;
         ok(extern_cnt === 1, "extern_cnt = " + extern_cnt);
         if(e.readyState === "complete") {




More information about the wine-cvs mailing list