Jacek Caban : mshtml: Added support for IHTMLScriptElement:: put_src on detached elements.

Alexandre Julliard julliard at winehq.org
Tue Oct 16 15:27:47 CDT 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Oct 16 17:09:52 2012 +0200

mshtml: Added support for IHTMLScriptElement::put_src on detached elements.

---

 dlls/mshtml/htmlscript.c |    5 +++--
 dlls/mshtml/htmlscript.h |    1 +
 dlls/mshtml/mutation.c   |   19 +++++++++++++++++++
 3 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmlscript.c b/dlls/mshtml/htmlscript.c
index 75e65f1..befc577 100644
--- a/dlls/mshtml/htmlscript.c
+++ b/dlls/mshtml/htmlscript.c
@@ -138,8 +138,9 @@ static HRESULT WINAPI HTMLScriptElement_put_src(IHTMLScriptElement *iface, BSTR
 
     nsres = nsIDOMHTMLScriptElement_GetParentNode(This->nsscript, &parent);
     if(NS_FAILED(nsres) || !parent) {
-        FIXME("No parent, not supported detached elements\n");
-        return E_NOTIMPL;
+        TRACE("No parent, not executing\n");
+        This->parse_on_bind = TRUE;
+        return S_OK;
     }
 
     nsIDOMNode_Release(parent);
diff --git a/dlls/mshtml/htmlscript.h b/dlls/mshtml/htmlscript.h
index 4540d4c..8a0c1e5 100644
--- a/dlls/mshtml/htmlscript.h
+++ b/dlls/mshtml/htmlscript.h
@@ -23,6 +23,7 @@ typedef struct {
 
     nsIDOMHTMLScriptElement *nsscript;
     BOOL parsed;
+    BOOL parse_on_bind;
 } HTMLScriptElement;
 
 typedef struct {
diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c
index 5e54158..fcae9ff 100644
--- a/dlls/mshtml/mutation.c
+++ b/dlls/mshtml/mutation.c
@@ -629,6 +629,7 @@ static void NSAPI nsDocumentObserver_BindToDocument(nsIDocumentObserver *iface,
     HTMLDocumentNode *This = impl_from_nsIDocumentObserver(iface);
     nsIDOMHTMLIFrameElement *nsiframe;
     nsIDOMHTMLFrameElement *nsframe;
+    nsIDOMHTMLScriptElement *nsscript;
     nsIDOMComment *nscomment;
     nsIDOMElement *nselem;
     nsresult nsres;
@@ -667,6 +668,24 @@ static void NSAPI nsDocumentObserver_BindToDocument(nsIDocumentObserver *iface,
         nsIDOMHTMLFrameElement_Release(nsframe);
         return;
     }
+
+    nsres = nsIContent_QueryInterface(aContent, &IID_nsIDOMHTMLScriptElement, (void**)&nsscript);
+    if(NS_SUCCEEDED(nsres)) {
+        HTMLScriptElement *script_elem;
+        HRESULT hres;
+
+        TRACE("script element\n");
+
+        hres = script_elem_from_nsscript(This, nsscript, &script_elem);
+        nsIDOMHTMLScriptElement_Release(nsscript);
+        if(FAILED(hres))
+            return;
+
+        if(script_elem->parse_on_bind)
+            add_script_runner(This, run_insert_script, (nsISupports*)nsscript, NULL);
+
+        IHTMLScriptElement_Release(&script_elem->IHTMLScriptElement_iface);
+    }
 }
 
 static void NSAPI nsDocumentObserver_AttemptToExecuteScript(nsIDocumentObserver *iface, nsIContent *aContent,




More information about the wine-cvs mailing list