Module: wine Branch: master Commit: b882b18402aeafd22501602969bc096145517b57 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b882b18402aeafd22501602969...
Author: Jacek Caban jacek@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,