зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1297338
- Extend LoadInfo with a PrincipalToInherit member. r=bz
This commit is contained in:
Родитель
e822f3e9cc
Коммит
8500d497a7
|
@ -224,6 +224,10 @@ LoadInfoToLoadInfoArgs(nsILoadInfo *aLoadInfo,
|
||||||
rv = PrincipalToPrincipalInfo(aLoadInfo->TriggeringPrincipal(),
|
rv = PrincipalToPrincipalInfo(aLoadInfo->TriggeringPrincipal(),
|
||||||
&triggeringPrincipalInfo);
|
&triggeringPrincipalInfo);
|
||||||
|
|
||||||
|
PrincipalInfo principalToInheritInfo;
|
||||||
|
rv = PrincipalToPrincipalInfo(aLoadInfo->PrincipalToInherit(),
|
||||||
|
&principalToInheritInfo);
|
||||||
|
|
||||||
nsTArray<PrincipalInfo> redirectChainIncludingInternalRedirects;
|
nsTArray<PrincipalInfo> redirectChainIncludingInternalRedirects;
|
||||||
for (const nsCOMPtr<nsIPrincipal>& principal : aLoadInfo->RedirectChainIncludingInternalRedirects()) {
|
for (const nsCOMPtr<nsIPrincipal>& principal : aLoadInfo->RedirectChainIncludingInternalRedirects()) {
|
||||||
rv = PrincipalToPrincipalInfo(principal, redirectChainIncludingInternalRedirects.AppendElement());
|
rv = PrincipalToPrincipalInfo(principal, redirectChainIncludingInternalRedirects.AppendElement());
|
||||||
|
@ -240,6 +244,7 @@ LoadInfoToLoadInfoArgs(nsILoadInfo *aLoadInfo,
|
||||||
LoadInfoArgs(
|
LoadInfoArgs(
|
||||||
loadingPrincipalInfo,
|
loadingPrincipalInfo,
|
||||||
triggeringPrincipalInfo,
|
triggeringPrincipalInfo,
|
||||||
|
principalToInheritInfo,
|
||||||
aLoadInfo->GetSecurityFlags(),
|
aLoadInfo->GetSecurityFlags(),
|
||||||
aLoadInfo->InternalContentPolicyType(),
|
aLoadInfo->InternalContentPolicyType(),
|
||||||
static_cast<uint32_t>(aLoadInfo->GetTainting()),
|
static_cast<uint32_t>(aLoadInfo->GetTainting()),
|
||||||
|
@ -288,6 +293,10 @@ LoadInfoArgsToLoadInfo(const OptionalLoadInfoArgs& aOptionalLoadInfoArgs,
|
||||||
PrincipalInfoToPrincipal(loadInfoArgs.triggeringPrincipalInfo(), &rv);
|
PrincipalInfoToPrincipal(loadInfoArgs.triggeringPrincipalInfo(), &rv);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
nsCOMPtr<nsIPrincipal> principalToInherit =
|
||||||
|
PrincipalInfoToPrincipal(loadInfoArgs.principalToInheritInfo(), &rv);
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
nsTArray<nsCOMPtr<nsIPrincipal>> redirectChainIncludingInternalRedirects;
|
nsTArray<nsCOMPtr<nsIPrincipal>> redirectChainIncludingInternalRedirects;
|
||||||
for (const PrincipalInfo& principalInfo : loadInfoArgs.redirectChainIncludingInternalRedirects()) {
|
for (const PrincipalInfo& principalInfo : loadInfoArgs.redirectChainIncludingInternalRedirects()) {
|
||||||
nsCOMPtr<nsIPrincipal> redirectedPrincipal =
|
nsCOMPtr<nsIPrincipal> redirectedPrincipal =
|
||||||
|
@ -307,6 +316,7 @@ LoadInfoArgsToLoadInfo(const OptionalLoadInfoArgs& aOptionalLoadInfoArgs,
|
||||||
nsCOMPtr<nsILoadInfo> loadInfo =
|
nsCOMPtr<nsILoadInfo> loadInfo =
|
||||||
new mozilla::LoadInfo(loadingPrincipal,
|
new mozilla::LoadInfo(loadingPrincipal,
|
||||||
triggeringPrincipal,
|
triggeringPrincipal,
|
||||||
|
principalToInherit,
|
||||||
loadInfoArgs.securityFlags(),
|
loadInfoArgs.securityFlags(),
|
||||||
loadInfoArgs.contentPolicyType(),
|
loadInfoArgs.contentPolicyType(),
|
||||||
static_cast<LoadTainting>(loadInfoArgs.tainting()),
|
static_cast<LoadTainting>(loadInfoArgs.tainting()),
|
||||||
|
|
|
@ -44,6 +44,7 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
|
||||||
aLoadingContext->NodePrincipal() : aLoadingPrincipal)
|
aLoadingContext->NodePrincipal() : aLoadingPrincipal)
|
||||||
, mTriggeringPrincipal(aTriggeringPrincipal ?
|
, mTriggeringPrincipal(aTriggeringPrincipal ?
|
||||||
aTriggeringPrincipal : mLoadingPrincipal.get())
|
aTriggeringPrincipal : mLoadingPrincipal.get())
|
||||||
|
, mPrincipalToInherit(mTriggeringPrincipal)
|
||||||
, mLoadingContext(do_GetWeakReference(aLoadingContext))
|
, mLoadingContext(do_GetWeakReference(aLoadingContext))
|
||||||
, mSecurityFlags(aSecurityFlags)
|
, mSecurityFlags(aSecurityFlags)
|
||||||
, mInternalContentPolicyType(aContentPolicyType)
|
, mInternalContentPolicyType(aContentPolicyType)
|
||||||
|
@ -64,6 +65,7 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(mLoadingPrincipal);
|
MOZ_ASSERT(mLoadingPrincipal);
|
||||||
MOZ_ASSERT(mTriggeringPrincipal);
|
MOZ_ASSERT(mTriggeringPrincipal);
|
||||||
|
MOZ_ASSERT(mPrincipalToInherit);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
// TYPE_DOCUMENT loads initiated by javascript tests will go through
|
// TYPE_DOCUMENT loads initiated by javascript tests will go through
|
||||||
|
@ -214,6 +216,7 @@ LoadInfo::LoadInfo(nsPIDOMWindowOuter* aOuterWindow,
|
||||||
nsSecurityFlags aSecurityFlags)
|
nsSecurityFlags aSecurityFlags)
|
||||||
: mLoadingPrincipal(nullptr)
|
: mLoadingPrincipal(nullptr)
|
||||||
, mTriggeringPrincipal(aTriggeringPrincipal)
|
, mTriggeringPrincipal(aTriggeringPrincipal)
|
||||||
|
, mPrincipalToInherit(mTriggeringPrincipal)
|
||||||
, mSecurityFlags(aSecurityFlags)
|
, mSecurityFlags(aSecurityFlags)
|
||||||
, mInternalContentPolicyType(nsIContentPolicy::TYPE_DOCUMENT)
|
, mInternalContentPolicyType(nsIContentPolicy::TYPE_DOCUMENT)
|
||||||
, mTainting(LoadTainting::Basic)
|
, mTainting(LoadTainting::Basic)
|
||||||
|
@ -235,6 +238,7 @@ LoadInfo::LoadInfo(nsPIDOMWindowOuter* aOuterWindow,
|
||||||
// Grab the information we can out of the window.
|
// Grab the information we can out of the window.
|
||||||
MOZ_ASSERT(aOuterWindow);
|
MOZ_ASSERT(aOuterWindow);
|
||||||
MOZ_ASSERT(mTriggeringPrincipal);
|
MOZ_ASSERT(mTriggeringPrincipal);
|
||||||
|
MOZ_ASSERT(mPrincipalToInherit);
|
||||||
|
|
||||||
// if the load is sandboxed, we can not also inherit the principal
|
// if the load is sandboxed, we can not also inherit the principal
|
||||||
if (mSecurityFlags & nsILoadInfo::SEC_SANDBOXED) {
|
if (mSecurityFlags & nsILoadInfo::SEC_SANDBOXED) {
|
||||||
|
@ -270,6 +274,7 @@ LoadInfo::LoadInfo(nsPIDOMWindowOuter* aOuterWindow,
|
||||||
LoadInfo::LoadInfo(const LoadInfo& rhs)
|
LoadInfo::LoadInfo(const LoadInfo& rhs)
|
||||||
: mLoadingPrincipal(rhs.mLoadingPrincipal)
|
: mLoadingPrincipal(rhs.mLoadingPrincipal)
|
||||||
, mTriggeringPrincipal(rhs.mTriggeringPrincipal)
|
, mTriggeringPrincipal(rhs.mTriggeringPrincipal)
|
||||||
|
, mPrincipalToInherit(rhs.mPrincipalToInherit)
|
||||||
, mLoadingContext(rhs.mLoadingContext)
|
, mLoadingContext(rhs.mLoadingContext)
|
||||||
, mSecurityFlags(rhs.mSecurityFlags)
|
, mSecurityFlags(rhs.mSecurityFlags)
|
||||||
, mInternalContentPolicyType(rhs.mInternalContentPolicyType)
|
, mInternalContentPolicyType(rhs.mInternalContentPolicyType)
|
||||||
|
@ -297,6 +302,7 @@ LoadInfo::LoadInfo(const LoadInfo& rhs)
|
||||||
|
|
||||||
LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
|
LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
|
||||||
nsIPrincipal* aTriggeringPrincipal,
|
nsIPrincipal* aTriggeringPrincipal,
|
||||||
|
nsIPrincipal* aPrincipalToInherit,
|
||||||
nsSecurityFlags aSecurityFlags,
|
nsSecurityFlags aSecurityFlags,
|
||||||
nsContentPolicyType aContentPolicyType,
|
nsContentPolicyType aContentPolicyType,
|
||||||
LoadTainting aTainting,
|
LoadTainting aTainting,
|
||||||
|
@ -319,6 +325,7 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
|
||||||
bool aIsPreflight)
|
bool aIsPreflight)
|
||||||
: mLoadingPrincipal(aLoadingPrincipal)
|
: mLoadingPrincipal(aLoadingPrincipal)
|
||||||
, mTriggeringPrincipal(aTriggeringPrincipal)
|
, mTriggeringPrincipal(aTriggeringPrincipal)
|
||||||
|
, mPrincipalToInherit(aPrincipalToInherit)
|
||||||
, mSecurityFlags(aSecurityFlags)
|
, mSecurityFlags(aSecurityFlags)
|
||||||
, mInternalContentPolicyType(aContentPolicyType)
|
, mInternalContentPolicyType(aContentPolicyType)
|
||||||
, mTainting(aTainting)
|
, mTainting(aTainting)
|
||||||
|
@ -341,6 +348,7 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
|
||||||
// Only top level TYPE_DOCUMENT loads can have a null loadingPrincipal
|
// Only top level TYPE_DOCUMENT loads can have a null loadingPrincipal
|
||||||
MOZ_ASSERT(mLoadingPrincipal || aContentPolicyType == nsIContentPolicy::TYPE_DOCUMENT);
|
MOZ_ASSERT(mLoadingPrincipal || aContentPolicyType == nsIContentPolicy::TYPE_DOCUMENT);
|
||||||
MOZ_ASSERT(mTriggeringPrincipal);
|
MOZ_ASSERT(mTriggeringPrincipal);
|
||||||
|
MOZ_ASSERT(mPrincipalToInherit);
|
||||||
|
|
||||||
mRedirectChainIncludingInternalRedirects.SwapElements(
|
mRedirectChainIncludingInternalRedirects.SwapElements(
|
||||||
aRedirectChainIncludingInternalRedirects);
|
aRedirectChainIncludingInternalRedirects);
|
||||||
|
@ -425,6 +433,27 @@ LoadInfo::TriggeringPrincipal()
|
||||||
return mTriggeringPrincipal;
|
return mTriggeringPrincipal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
LoadInfo::GetPrincipalToInherit(nsIPrincipal** aPrincipalToInherit)
|
||||||
|
{
|
||||||
|
NS_ADDREF(*aPrincipalToInherit = mPrincipalToInherit);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
LoadInfo::SetPrincipalToInherit(nsIPrincipal* aPrincipalToInherit)
|
||||||
|
{
|
||||||
|
MOZ_ASSERT(aPrincipalToInherit, "must be a valid principal to inherit");
|
||||||
|
mPrincipalToInherit = aPrincipalToInherit;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsIPrincipal*
|
||||||
|
LoadInfo::PrincipalToInherit()
|
||||||
|
{
|
||||||
|
return mPrincipalToInherit;
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
LoadInfo::GetLoadingDocument(nsIDOMDocument** aResult)
|
LoadInfo::GetLoadingDocument(nsIDOMDocument** aResult)
|
||||||
{
|
{
|
||||||
|
|
|
@ -86,6 +86,7 @@ private:
|
||||||
// Please note that aRedirectChain uses swapElements.
|
// Please note that aRedirectChain uses swapElements.
|
||||||
LoadInfo(nsIPrincipal* aLoadingPrincipal,
|
LoadInfo(nsIPrincipal* aLoadingPrincipal,
|
||||||
nsIPrincipal* aTriggeringPrincipal,
|
nsIPrincipal* aTriggeringPrincipal,
|
||||||
|
nsIPrincipal* aPrincipalToInherit,
|
||||||
nsSecurityFlags aSecurityFlags,
|
nsSecurityFlags aSecurityFlags,
|
||||||
nsContentPolicyType aContentPolicyType,
|
nsContentPolicyType aContentPolicyType,
|
||||||
LoadTainting aTainting,
|
LoadTainting aTainting,
|
||||||
|
@ -126,6 +127,7 @@ private:
|
||||||
// if you add a member, please also update the copy constructor
|
// if you add a member, please also update the copy constructor
|
||||||
nsCOMPtr<nsIPrincipal> mLoadingPrincipal;
|
nsCOMPtr<nsIPrincipal> mLoadingPrincipal;
|
||||||
nsCOMPtr<nsIPrincipal> mTriggeringPrincipal;
|
nsCOMPtr<nsIPrincipal> mTriggeringPrincipal;
|
||||||
|
nsCOMPtr<nsIPrincipal> mPrincipalToInherit;
|
||||||
nsWeakPtr mLoadingContext;
|
nsWeakPtr mLoadingContext;
|
||||||
nsSecurityFlags mSecurityFlags;
|
nsSecurityFlags mSecurityFlags;
|
||||||
nsContentPolicyType mInternalContentPolicyType;
|
nsContentPolicyType mInternalContentPolicyType;
|
||||||
|
|
|
@ -246,6 +246,19 @@ interface nsILoadInfo : nsISupports
|
||||||
[noscript, notxpcom, nostdcall, binaryname(TriggeringPrincipal)]
|
[noscript, notxpcom, nostdcall, binaryname(TriggeringPrincipal)]
|
||||||
nsIPrincipal binaryTriggeringPrincipal();
|
nsIPrincipal binaryTriggeringPrincipal();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The principalToInherit is the principal that is used when the inherit flag
|
||||||
|
* is set. For loads that are not TYPE_DOCUMENT or TYPE_SUBDOCUMENT that
|
||||||
|
* principal is always identical to the triggeringPrincipal.
|
||||||
|
*/
|
||||||
|
attribute nsIPrincipal principalToInherit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A C++-friendly version of principalToInherit.
|
||||||
|
*/
|
||||||
|
[noscript, notxpcom, nostdcall, binaryname(PrincipalToInherit)]
|
||||||
|
nsIPrincipal binaryPrincipalToInherit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the ownerDocument of the LoadingNode. Unless the LoadingNode
|
* This is the ownerDocument of the LoadingNode. Unless the LoadingNode
|
||||||
* is a Document, in which case the LoadingDocument is the same as the
|
* is a Document, in which case the LoadingDocument is the same as the
|
||||||
|
|
|
@ -30,6 +30,7 @@ struct LoadInfoArgs
|
||||||
{
|
{
|
||||||
OptionalPrincipalInfo requestingPrincipalInfo;
|
OptionalPrincipalInfo requestingPrincipalInfo;
|
||||||
PrincipalInfo triggeringPrincipalInfo;
|
PrincipalInfo triggeringPrincipalInfo;
|
||||||
|
PrincipalInfo principalToInheritInfo;
|
||||||
uint32_t securityFlags;
|
uint32_t securityFlags;
|
||||||
uint32_t contentPolicyType;
|
uint32_t contentPolicyType;
|
||||||
uint32_t tainting;
|
uint32_t tainting;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче