diff --git a/mozilla/content/xslt/public/nsIDocumentTransformer.h b/mozilla/content/xslt/public/nsIDocumentTransformer.h index 20d6b743497..fd6646741dc 100644 --- a/mozilla/content/xslt/public/nsIDocumentTransformer.h +++ b/mozilla/content/xslt/public/nsIDocumentTransformer.h @@ -44,6 +44,7 @@ class nsIDOMDocument; class nsIDOMNode; class nsILoadGroup; class nsIURI; +class nsIPrincipal; #define NS_ITRANSFORMOBSERVER_IID \ {0xcce88481, 0x6eb3, 0x11d6, \ @@ -74,7 +75,7 @@ public: NS_IMETHOD SetTransformObserver(nsITransformObserver* aObserver) = 0; NS_IMETHOD LoadStyleSheet(nsIURI* aUri, nsILoadGroup* aLoadGroup, - nsIURI* aReferrerUri) = 0; + nsIPrincipal* aCallerPrincipal) = 0; NS_IMETHOD SetSourceContentModel(nsIDOMNode* aSource) = 0; NS_IMETHOD CancelLoads() = 0; }; diff --git a/mozilla/content/xslt/src/xslt/txMozillaStylesheetCompiler.cpp b/mozilla/content/xslt/src/xslt/txMozillaStylesheetCompiler.cpp index cb7820fb92e..b714eee289a 100644 --- a/mozilla/content/xslt/src/xslt/txMozillaStylesheetCompiler.cpp +++ b/mozilla/content/xslt/src/xslt/txMozillaStylesheetCompiler.cpp @@ -55,6 +55,7 @@ #include "nsIStreamConverterService.h" #include "nsISyncLoadDOMService.h" #include "nsIURI.h" +#include "nsIPrincipal.h" #include "nsIWindowWatcher.h" #include "nsIXMLContentSink.h" #include "nsMimeTypes.h" @@ -423,7 +424,7 @@ public: TX_DECL_ACOMPILEOBSERVER; nsresult startLoad(nsIURI* aUri, txStylesheetCompiler* aCompiler, - nsIURI* aReferrerUri); + nsIPrincipal* aCallerPrincipal); protected: nsAutoRefCnt mRefCnt; @@ -492,19 +493,25 @@ txCompileObserver::onDoneCompiling(txStylesheetCompiler* aCompiler, nsresult txCompileObserver::startLoad(nsIURI* aUri, txStylesheetCompiler* aCompiler, - nsIURI* aReferrerUri) + nsIPrincipal* aCallerPrincipal) { nsresult rv; - if (aReferrerUri) { + nsCOMPtr referrerURI; + + if (aCallerPrincipal) { nsCOMPtr securityManager = do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); - rv = securityManager->CheckLoadURI(aReferrerUri, aUri, - nsIScriptSecurityManager::STANDARD); + rv = securityManager-> + CheckLoadURIWithPrincipal(aCallerPrincipal, aUri, + nsIScriptSecurityManager::STANDARD); NS_ENSURE_SUCCESS(rv, rv); - rv = securityManager->CheckSameOriginURI(aReferrerUri, aUri); + aCallerPrincipal->GetURI(getter_AddRefs(referrerURI)); + NS_ASSERTION(referrerURI, "Caller principal must have a URI!"); + + rv = securityManager->CheckSameOriginURI(referrerURI, aUri); NS_ENSURE_SUCCESS(rv, rv); } @@ -520,8 +527,8 @@ txCompileObserver::startLoad(nsIURI* aUri, txStylesheetCompiler* aCompiler, NS_LITERAL_CSTRING("text/xml,application/xml,application/xhtml+xml,*/*;q=0.1"), PR_FALSE); - if (aReferrerUri) { - httpChannel->SetReferrer(aReferrerUri); + if (referrerURI) { + httpChannel->SetReferrer(referrerURI); } } @@ -542,7 +549,7 @@ txCompileObserver::startLoad(nsIURI* aUri, txStylesheetCompiler* aCompiler, nsresult TX_LoadSheet(nsIURI* aUri, txMozillaXSLTProcessor* aProcessor, - nsILoadGroup* aLoadGroup, nsIURI* aReferrerUri) + nsILoadGroup* aLoadGroup, nsIPrincipal* aCallerPrincipal) { nsCAutoString uri; aUri->GetSpec(uri); @@ -556,7 +563,7 @@ TX_LoadSheet(nsIURI* aUri, txMozillaXSLTProcessor* aProcessor, new txStylesheetCompiler(NS_ConvertUTF8toUCS2(uri), observer); NS_ENSURE_TRUE(compiler, NS_ERROR_OUT_OF_MEMORY); - return observer->startLoad(aUri, compiler, aReferrerUri); + return observer->startLoad(aUri, compiler, aCallerPrincipal); } /** diff --git a/mozilla/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp b/mozilla/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp index 2c416dda29d..f85e231af00 100644 --- a/mozilla/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp +++ b/mozilla/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp @@ -60,6 +60,7 @@ #include "XMLUtils.h" #include "txUnknownHandler.h" #include "txXSLTProcessor.h" +#include "nsIPrincipal.h" static NS_DEFINE_CID(kXMLDocumentCID, NS_XMLDOCUMENT_CID); @@ -642,9 +643,9 @@ txMozillaXSLTProcessor::Reset() NS_IMETHODIMP txMozillaXSLTProcessor::LoadStyleSheet(nsIURI* aUri, nsILoadGroup* aLoadGroup, - nsIURI* aReferrerUri) + nsIPrincipal* aCallerPrincipal) { - nsresult rv = TX_LoadSheet(aUri, this, aLoadGroup, aReferrerUri); + nsresult rv = TX_LoadSheet(aUri, this, aLoadGroup, aCallerPrincipal); if (NS_FAILED(rv) && mObserver) { // This is most likely a network or security error, just // use the uri as context. diff --git a/mozilla/content/xslt/src/xslt/txMozillaXSLTProcessor.h b/mozilla/content/xslt/src/xslt/txMozillaXSLTProcessor.h index afd884b77d3..75727efb376 100644 --- a/mozilla/content/xslt/src/xslt/txMozillaXSLTProcessor.h +++ b/mozilla/content/xslt/src/xslt/txMozillaXSLTProcessor.h @@ -56,6 +56,7 @@ class nsIURI; class nsIXMLContentSink; class nsIDOMNode; +class nsIPrincipal; /* bacd8ad0-552f-11d3-a9f7-000064657374 */ #define TRANSFORMIIX_XSLT_PROCESSOR_CID \ @@ -138,7 +139,7 @@ public: // nsIDocumentTransformer interface NS_IMETHOD SetTransformObserver(nsITransformObserver* aObserver); NS_IMETHOD LoadStyleSheet(nsIURI* aUri, nsILoadGroup* aLoadGroup, - nsIURI* aReferrerUri); + nsIPrincipal* aCallerPrincipal); NS_IMETHOD SetSourceContentModel(nsIDOMNode* aSource); NS_IMETHOD CancelLoads() {return NS_OK;}; @@ -167,7 +168,8 @@ private: }; extern nsresult TX_LoadSheet(nsIURI* aUri, txMozillaXSLTProcessor* aProcessor, - nsILoadGroup* aLoadGroup, nsIURI* aReferrerUri); + nsILoadGroup* aLoadGroup, + nsIPrincipal* aCallerPrincipal); extern nsresult TX_CompileStylesheet(nsIDOMNode* aNode, txStylesheet** aStylesheet);