Jacek Caban : mshtml: Store external script text in HTMLScriptElement object.

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


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

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

mshtml: Store external script text in HTMLScriptElement object.

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

---

 dlls/mshtml/htmlscript.c |  9 ++++++++-
 dlls/mshtml/htmlscript.h |  1 +
 dlls/mshtml/script.c     | 12 +++++-------
 3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/dlls/mshtml/htmlscript.c b/dlls/mshtml/htmlscript.c
index 9feb551..0a2d67a 100644
--- a/dlls/mshtml/htmlscript.c
+++ b/dlls/mshtml/htmlscript.c
@@ -391,6 +391,13 @@ static HRESULT HTMLScriptElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
     return HTMLElement_QI(&This->element.node, riid, ppv);
 }
 
+static void HTMLScriptElement_destructor(HTMLDOMNode *iface)
+{
+    HTMLScriptElement *This = impl_from_HTMLDOMNode(iface);
+    heap_free(This->src_text);
+    HTMLElement_destructor(&This->element.node);
+}
+
 static HRESULT HTMLScriptElement_get_readystate(HTMLDOMNode *iface, BSTR *p)
 {
     HTMLScriptElement *This = impl_from_HTMLDOMNode(iface);
@@ -439,7 +446,7 @@ static void HTMLScriptElement_unlink(HTMLDOMNode *iface)
 
 static const NodeImplVtbl HTMLScriptElementImplVtbl = {
     HTMLScriptElement_QI,
-    HTMLElement_destructor,
+    HTMLScriptElement_destructor,
     HTMLElement_cpc,
     HTMLElement_clone,
     HTMLElement_handle_event,
diff --git a/dlls/mshtml/htmlscript.h b/dlls/mshtml/htmlscript.h
index ad493c9..4e40f63 100644
--- a/dlls/mshtml/htmlscript.h
+++ b/dlls/mshtml/htmlscript.h
@@ -26,6 +26,7 @@ typedef struct {
     BOOL parse_on_bind;
     BOOL pending_readystatechange_event;
     READYSTATE readystate;
+    WCHAR *src_text; /* sctipt text downloaded from src */
 } HTMLScriptElement;
 
 typedef struct {
diff --git a/dlls/mshtml/script.c b/dlls/mshtml/script.c
index 582c9af..3503e69 100644
--- a/dlls/mshtml/script.c
+++ b/dlls/mshtml/script.c
@@ -866,22 +866,20 @@ static void script_file_available(ScriptBSC *bsc)
     HTMLScriptElement *script_elem = bsc->script_elem;
     HTMLInnerWindow *window = bsc->bsc.window;
     ScriptHost *script_host;
-    WCHAR *text;
     HRESULT hres;
 
-    hres = get_binding_text(bsc, &text);
+    assert(window != NULL);
+
+    hres = get_binding_text(bsc, &script_elem->src_text);
     if(FAILED(hres))
         return;
 
     script_host = get_elem_script_host(window, script_elem);
-    if(!script_host) {
-        heap_free(text);
+    if(!script_host)
         return;
-    }
 
     script_elem->parsed = TRUE;
-    parse_elem_text(script_host, script_elem, text);
-    heap_free(text);
+    parse_elem_text(script_host, script_elem, script_elem->src_text);
 }
 
 static inline ScriptBSC *impl_from_BSCallback(BSCallback *iface)




More information about the wine-cvs mailing list