Module: wine Branch: master Commit: 8ccc38cb5580a7cc58c9bf6420262d391beb2459 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8ccc38cb5580a7cc58c9bf6420...
Author: Jacek Caban jacek@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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;