diff --git a/content/html/document/src/nsHTMLContentSink.cpp b/content/html/document/src/nsHTMLContentSink.cpp index 8855ee4793a7..6edf37bc5ae3 100644 --- a/content/html/document/src/nsHTMLContentSink.cpp +++ b/content/html/document/src/nsHTMLContentSink.cpp @@ -371,7 +371,8 @@ public: nsresult EvaluateScript(nsString& aScript, nsIURI *aScriptURI, PRInt32 aLineNo, - const char* aVersion); + const char* aVersion, + nsIPrincipal* aPrincipal); const char* mScriptLanguageVersion; void UpdateAllContexts(); @@ -4120,9 +4121,11 @@ nsresult HTMLContentSink::EvaluateScript(nsString& aScript, nsIURI *aScriptURI, PRInt32 aLineNo, - const char* aVersion) + const char* aVersion, + nsIPrincipal* aPrincipal) { nsresult rv = NS_OK; + NS_ASSERTION(aPrincipal, "principal required for document"); if (aScript.Length() > 0) { nsCOMPtr globalObject; @@ -4133,11 +4136,6 @@ HTMLContentSink::EvaluateScript(nsString& aScript, NS_ENSURE_SUCCESS(globalObject->GetContext(getter_AddRefs(context)), NS_ERROR_FAILURE); - nsCOMPtr principal; - rv = mDocument->GetPrincipal(getter_AddRefs(principal)); - NS_ASSERTION(NS_SUCCEEDED(rv), "principal expected for document"); - if (NS_FAILED(rv)) return rv; - nsAutoString ret; char* url = nsnull; @@ -4146,7 +4144,7 @@ HTMLContentSink::EvaluateScript(nsString& aScript, } PRBool isUndefined; - context->EvaluateString(aScript, nsnull, principal, url, + context->EvaluateString(aScript, nsnull, aPrincipal, url, aLineNo, aVersion, ret, &isUndefined); if (url) { @@ -4169,8 +4167,25 @@ HTMLContentSink::OnStreamComplete(nsIStreamLoader* aLoader, if (NS_OK == aStatus) { PRBool bodyPresent = PreEvaluateScript(); + + nsISupports* owner; + aLoader->GetOwner(&owner); + nsIPrincipal* prin = nsnull; + if (owner) + { + rv = owner->QueryInterface(NS_GET_IID(nsIPrincipal), + (void**)&prin); + NS_RELEASE(owner); + if (NS_FAILED(rv)) return rv; + } + rv = mDocument->UpdatePrincipal(&prin); + if (NS_FAILED(rv)) { + NS_IF_RELEASE(prin); + return rv; + } - rv = EvaluateScript(aData, mScriptURI, 1, mScriptLanguageVersion); + rv = EvaluateScript(aData, mScriptURI, 1, mScriptLanguageVersion, prin); + NS_IF_RELEASE(prin); if (NS_FAILED(rv)) return rv; PostEvaluateScript(bodyPresent); @@ -4335,14 +4350,16 @@ HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode& aNode) } } else { + nsCOMPtr prin; + mDocument->GetPrincipal(getter_AddRefs(prin)); + PRBool bodyPresent = PreEvaluateScript(); PRUint32 lineNo = (PRUint32)aNode.GetSourceLineNumber(); nsIURI *docURI = mDocument->GetDocumentURL(); - EvaluateScript(script, docURI, lineNo, jsVersionString); - if (docURI) - NS_RELEASE(docURI); + EvaluateScript(script, docURI, lineNo, jsVersionString, prin); + NS_IF_RELEASE(docURI); PostEvaluateScript(bodyPresent); diff --git a/layout/generic/nsFrameFrame.cpp b/layout/generic/nsFrameFrame.cpp index b3e645fcfa29..9f2287d4628a 100644 --- a/layout/generic/nsFrameFrame.cpp +++ b/layout/generic/nsFrameFrame.cpp @@ -966,7 +966,6 @@ nsHTMLFrameInnerFrame::ReloadURL() TempMakeAbsURL(content, url, absURL); // Get the referrer from the currently executing script, if any. - nsresult rv; NS_WITH_SERVICE(nsIScriptSecurityManager, secMan, NS_SCRIPTSECURITYMANAGER_PROGID, &rv); if (NS_FAILED(rv)) diff --git a/layout/html/document/src/nsFrameFrame.cpp b/layout/html/document/src/nsFrameFrame.cpp index b3e645fcfa29..9f2287d4628a 100644 --- a/layout/html/document/src/nsFrameFrame.cpp +++ b/layout/html/document/src/nsFrameFrame.cpp @@ -966,7 +966,6 @@ nsHTMLFrameInnerFrame::ReloadURL() TempMakeAbsURL(content, url, absURL); // Get the referrer from the currently executing script, if any. - nsresult rv; NS_WITH_SERVICE(nsIScriptSecurityManager, secMan, NS_SCRIPTSECURITYMANAGER_PROGID, &rv); if (NS_FAILED(rv)) diff --git a/layout/html/document/src/nsHTMLContentSink.cpp b/layout/html/document/src/nsHTMLContentSink.cpp index 8855ee4793a7..6edf37bc5ae3 100644 --- a/layout/html/document/src/nsHTMLContentSink.cpp +++ b/layout/html/document/src/nsHTMLContentSink.cpp @@ -371,7 +371,8 @@ public: nsresult EvaluateScript(nsString& aScript, nsIURI *aScriptURI, PRInt32 aLineNo, - const char* aVersion); + const char* aVersion, + nsIPrincipal* aPrincipal); const char* mScriptLanguageVersion; void UpdateAllContexts(); @@ -4120,9 +4121,11 @@ nsresult HTMLContentSink::EvaluateScript(nsString& aScript, nsIURI *aScriptURI, PRInt32 aLineNo, - const char* aVersion) + const char* aVersion, + nsIPrincipal* aPrincipal) { nsresult rv = NS_OK; + NS_ASSERTION(aPrincipal, "principal required for document"); if (aScript.Length() > 0) { nsCOMPtr globalObject; @@ -4133,11 +4136,6 @@ HTMLContentSink::EvaluateScript(nsString& aScript, NS_ENSURE_SUCCESS(globalObject->GetContext(getter_AddRefs(context)), NS_ERROR_FAILURE); - nsCOMPtr principal; - rv = mDocument->GetPrincipal(getter_AddRefs(principal)); - NS_ASSERTION(NS_SUCCEEDED(rv), "principal expected for document"); - if (NS_FAILED(rv)) return rv; - nsAutoString ret; char* url = nsnull; @@ -4146,7 +4144,7 @@ HTMLContentSink::EvaluateScript(nsString& aScript, } PRBool isUndefined; - context->EvaluateString(aScript, nsnull, principal, url, + context->EvaluateString(aScript, nsnull, aPrincipal, url, aLineNo, aVersion, ret, &isUndefined); if (url) { @@ -4169,8 +4167,25 @@ HTMLContentSink::OnStreamComplete(nsIStreamLoader* aLoader, if (NS_OK == aStatus) { PRBool bodyPresent = PreEvaluateScript(); + + nsISupports* owner; + aLoader->GetOwner(&owner); + nsIPrincipal* prin = nsnull; + if (owner) + { + rv = owner->QueryInterface(NS_GET_IID(nsIPrincipal), + (void**)&prin); + NS_RELEASE(owner); + if (NS_FAILED(rv)) return rv; + } + rv = mDocument->UpdatePrincipal(&prin); + if (NS_FAILED(rv)) { + NS_IF_RELEASE(prin); + return rv; + } - rv = EvaluateScript(aData, mScriptURI, 1, mScriptLanguageVersion); + rv = EvaluateScript(aData, mScriptURI, 1, mScriptLanguageVersion, prin); + NS_IF_RELEASE(prin); if (NS_FAILED(rv)) return rv; PostEvaluateScript(bodyPresent); @@ -4335,14 +4350,16 @@ HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode& aNode) } } else { + nsCOMPtr prin; + mDocument->GetPrincipal(getter_AddRefs(prin)); + PRBool bodyPresent = PreEvaluateScript(); PRUint32 lineNo = (PRUint32)aNode.GetSourceLineNumber(); nsIURI *docURI = mDocument->GetDocumentURL(); - EvaluateScript(script, docURI, lineNo, jsVersionString); - if (docURI) - NS_RELEASE(docURI); + EvaluateScript(script, docURI, lineNo, jsVersionString, prin); + NS_IF_RELEASE(docURI); PostEvaluateScript(bodyPresent);