зеркало из https://github.com/mozilla/pjs.git
Add a version of CheckLoadURI that takes a source principal instead of a source
URI. Update a bunch of callers to use it. Bug 233108, r=caillon, sr=dveditz
This commit is contained in:
Родитель
4632f362d7
Коммит
cf91656265
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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<nsIURI> referrerURI;
|
||||
|
||||
if (aCallerPrincipal) {
|
||||
nsCOMPtr<nsIScriptSecurityManager> 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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче