From 17c637de9c8e7747c79360bee9bb4d113d9b33db Mon Sep 17 00:00:00 2001 From: "norris%netscape.com" Date: Tue, 21 Mar 2000 04:12:56 +0000 Subject: [PATCH] Added intersection of principals when multiple scripts are encountered. r=norris (this is mstoltz's checkin) git-svn-id: svn://10.0.0.236/trunk@63539 18797224-902f-48f8-a5cc-f745e15eee43 --- .../html/document/src/nsHTMLContentSink.cpp | 41 +++++++++++++------ mozilla/layout/generic/nsFrameFrame.cpp | 1 - .../layout/html/document/src/nsFrameFrame.cpp | 1 - .../html/document/src/nsHTMLContentSink.cpp | 41 +++++++++++++------ 4 files changed, 58 insertions(+), 26 deletions(-) diff --git a/mozilla/content/html/document/src/nsHTMLContentSink.cpp b/mozilla/content/html/document/src/nsHTMLContentSink.cpp index 8855ee4793a..6edf37bc5ae 100644 --- a/mozilla/content/html/document/src/nsHTMLContentSink.cpp +++ b/mozilla/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/mozilla/layout/generic/nsFrameFrame.cpp b/mozilla/layout/generic/nsFrameFrame.cpp index b3e645fcfa2..9f2287d4628 100644 --- a/mozilla/layout/generic/nsFrameFrame.cpp +++ b/mozilla/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/mozilla/layout/html/document/src/nsFrameFrame.cpp b/mozilla/layout/html/document/src/nsFrameFrame.cpp index b3e645fcfa2..9f2287d4628 100644 --- a/mozilla/layout/html/document/src/nsFrameFrame.cpp +++ b/mozilla/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/mozilla/layout/html/document/src/nsHTMLContentSink.cpp b/mozilla/layout/html/document/src/nsHTMLContentSink.cpp index 8855ee4793a..6edf37bc5ae 100644 --- a/mozilla/layout/html/document/src/nsHTMLContentSink.cpp +++ b/mozilla/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);