Jacek Caban : mshtml: Set interactive script ready state change in the right places.

Alexandre Julliard julliard at winehq.org
Wed Jul 20 10:28:51 CDT 2016


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Jul 19 18:41:06 2016 +0200

mshtml: Set interactive script ready state change in the right places.

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

---

 dlls/mshtml/htmlscript.c | 4 ++--
 dlls/mshtml/htmlscript.h | 2 +-
 dlls/mshtml/mutation.c   | 4 ++--
 dlls/mshtml/script.c     | 8 +++++---
 4 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/dlls/mshtml/htmlscript.c b/dlls/mshtml/htmlscript.c
index 0d6dddf..d266276 100644
--- a/dlls/mshtml/htmlscript.c
+++ b/dlls/mshtml/htmlscript.c
@@ -203,7 +203,7 @@ static HRESULT WINAPI HTMLScriptElement_put_text(IHTMLScriptElement *iface, BSTR
     }
 
     nsIDOMNode_Release(parent);
-    doc_insert_script(window, This);
+    doc_insert_script(window, This, FALSE);
     return S_OK;
 }
 
@@ -400,7 +400,7 @@ static HRESULT HTMLScriptElement_bind_to_tree(HTMLDOMNode *iface)
     }
 
     This->parse_on_bind = FALSE;
-    doc_insert_script(This->element.node.doc->window, This);
+    doc_insert_script(This->element.node.doc->window, This, FALSE);
     return S_OK;
 }
 
diff --git a/dlls/mshtml/htmlscript.h b/dlls/mshtml/htmlscript.h
index efa392d..f5053ee 100644
--- a/dlls/mshtml/htmlscript.h
+++ b/dlls/mshtml/htmlscript.h
@@ -40,7 +40,7 @@ HRESULT load_script(HTMLScriptElement*,const WCHAR*) DECLSPEC_HIDDEN;
 
 void release_script_hosts(HTMLInnerWindow*) DECLSPEC_HIDDEN;
 void connect_scripts(HTMLInnerWindow*) DECLSPEC_HIDDEN;
-void doc_insert_script(HTMLInnerWindow*,HTMLScriptElement*) DECLSPEC_HIDDEN;
+void doc_insert_script(HTMLInnerWindow*,HTMLScriptElement*,BOOL) DECLSPEC_HIDDEN;
 IDispatch *script_parse_event(HTMLInnerWindow*,LPCWSTR) DECLSPEC_HIDDEN;
 HRESULT exec_script(HTMLInnerWindow*,const WCHAR*,const WCHAR*,VARIANT*) DECLSPEC_HIDDEN;
 void set_script_mode(HTMLOuterWindow*,SCRIPTMODE) DECLSPEC_HIDDEN;
diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c
index e2fa084..8c4fc67 100644
--- a/dlls/mshtml/mutation.c
+++ b/dlls/mshtml/mutation.c
@@ -337,13 +337,13 @@ static nsresult run_insert_script(HTMLDocumentNode *doc, nsISupports *script_ifa
 
     IHTMLWindow2_AddRef(&window->base.IHTMLWindow2_iface);
 
-    doc_insert_script(window, script_elem);
+    doc_insert_script(window, script_elem, TRUE);
 
     while(!list_empty(&window->script_queue)) {
         iter = LIST_ENTRY(list_head(&window->script_queue), script_queue_entry_t, entry);
         list_remove(&iter->entry);
         if(!iter->script->parsed)
-            doc_insert_script(window, iter->script);
+            doc_insert_script(window, iter->script, TRUE);
         IHTMLScriptElement_Release(&iter->script->IHTMLScriptElement_iface);
         heap_free(iter);
     }
diff --git a/dlls/mshtml/script.c b/dlls/mshtml/script.c
index 4be6e3d..bd0f8d4 100644
--- a/dlls/mshtml/script.c
+++ b/dlls/mshtml/script.c
@@ -786,8 +786,6 @@ static void parse_elem_text(ScriptHost *script_host, HTMLScriptElement *script_e
 
     TRACE("%s\n", debugstr_w(text));
 
-    set_script_elem_readystate(script_elem, READYSTATE_INTERACTIVE);
-
     VariantInit(&var);
     memset(&excepinfo, 0, sizeof(excepinfo));
     TRACE(">>>\n");
@@ -1089,6 +1087,8 @@ static void parse_inline_script(ScriptHost *script_host, HTMLScriptElement *scri
     nsres = nsIDOMHTMLScriptElement_GetText(script_elem->nsscript, &text_str);
     nsAString_GetData(&text_str, &text);
 
+    set_script_elem_readystate(script_elem, READYSTATE_INTERACTIVE);
+
     if(NS_FAILED(nsres)) {
         ERR("GetText failed: %08x\n", nsres);
     }else if(*text) {
@@ -1257,7 +1257,7 @@ static ScriptHost *get_elem_script_host(HTMLInnerWindow *window, HTMLScriptEleme
     return get_script_host(window, &guid);
 }
 
-void doc_insert_script(HTMLInnerWindow *window, HTMLScriptElement *script_elem)
+void doc_insert_script(HTMLInnerWindow *window, HTMLScriptElement *script_elem, BOOL from_parser)
 {
     ScriptHost *script_host;
     BOOL is_complete = FALSE;
@@ -1268,6 +1268,8 @@ void doc_insert_script(HTMLInnerWindow *window, HTMLScriptElement *script_elem)
 
     if(script_host->parse) {
         if(script_elem->src_text) {
+            if(from_parser)
+                set_script_elem_readystate(script_elem, READYSTATE_INTERACTIVE);
             script_elem->parsed = TRUE;
             parse_elem_text(script_host, script_elem, script_elem->src_text);
             is_complete = TRUE;




More information about the wine-cvs mailing list