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:
bzbarsky%mit.edu 2005-11-02 07:42:11 +00:00
Родитель 4632f362d7
Коммит cf91656265
4 изменённых файлов: 26 добавлений и 15 удалений

Просмотреть файл

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