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);