From 8ccc38cb5580a7cc58c9bf6420262d391beb2459 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 19 Jul 2016 18:41:06 +0200 Subject: [PATCH] mshtml: Set interactive script ready state change in the right places. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- 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 0d6dddfd6e8..d2662767ece 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 efa392dbc8f..f5053ee8905 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 e2fa084c1e2..8c4fc675350 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 4be6e3d7e2e..bd0f8d4c63e 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;