зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1347817 - Principal must always have a valid origin - part 2 - move OriginAttributes to the BasePrincipal, r=bholley
This commit is contained in:
Родитель
d0aca06da7
Коммит
8d4516d1d9
|
@ -30,7 +30,8 @@ namespace mozilla {
|
|||
|
||||
BasePrincipal::BasePrincipal(PrincipalKind aKind)
|
||||
: mKind(aKind)
|
||||
, mDomainSet(false)
|
||||
, mHasExplicitDomain(false)
|
||||
, mInitialized(false)
|
||||
{}
|
||||
|
||||
BasePrincipal::~BasePrincipal()
|
||||
|
@ -39,6 +40,8 @@ BasePrincipal::~BasePrincipal()
|
|||
NS_IMETHODIMP
|
||||
BasePrincipal::GetOrigin(nsACString& aOrigin)
|
||||
{
|
||||
MOZ_ASSERT(mInitialized);
|
||||
|
||||
nsresult rv = GetOriginNoSuffix(aOrigin);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
|
@ -52,6 +55,8 @@ BasePrincipal::GetOrigin(nsACString& aOrigin)
|
|||
NS_IMETHODIMP
|
||||
BasePrincipal::GetOriginNoSuffix(nsACString& aOrigin)
|
||||
{
|
||||
MOZ_ASSERT(mInitialized);
|
||||
|
||||
if (mOriginNoSuffix) {
|
||||
return mOriginNoSuffix->ToUTF8String(aOrigin);
|
||||
}
|
||||
|
@ -456,8 +461,11 @@ BasePrincipal::AddonAllowsLoad(nsIURI* aURI, bool aExplicit /* = false */)
|
|||
}
|
||||
|
||||
void
|
||||
BasePrincipal::FinishInit()
|
||||
BasePrincipal::FinishInit(const OriginAttributes& aOriginAttributes)
|
||||
{
|
||||
mInitialized = true;
|
||||
mOriginAttributes = aOriginAttributes;
|
||||
|
||||
// First compute the origin suffix since it's infallible.
|
||||
nsAutoCString originSuffix;
|
||||
mOriginAttributes.CreateSuffix(originSuffix);
|
||||
|
|
|
@ -115,18 +115,27 @@ protected:
|
|||
virtual bool MayLoadInternal(nsIURI* aURI) = 0;
|
||||
friend class ::ExpandedPrincipal;
|
||||
|
||||
void
|
||||
SetHasExplicitDomain()
|
||||
{
|
||||
mHasExplicitDomain = true;
|
||||
}
|
||||
|
||||
// This function should be called as the last step of the initialization of the
|
||||
// principal objects. It's typically called as the last step from the Init()
|
||||
// method of the child classes.
|
||||
void FinishInit();
|
||||
void FinishInit(const OriginAttributes& aOriginAttributes);
|
||||
|
||||
nsCOMPtr<nsIContentSecurityPolicy> mCSP;
|
||||
nsCOMPtr<nsIContentSecurityPolicy> mPreloadCSP;
|
||||
nsCOMPtr<nsIAtom> mOriginNoSuffix;
|
||||
nsCOMPtr<nsIAtom> mOriginSuffix;
|
||||
|
||||
private:
|
||||
OriginAttributes mOriginAttributes;
|
||||
PrincipalKind mKind;
|
||||
bool mDomainSet;
|
||||
bool mHasExplicitDomain;
|
||||
bool mInitialized;
|
||||
};
|
||||
|
||||
inline bool
|
||||
|
@ -169,7 +178,7 @@ BasePrincipal::FastEqualsConsideringDomain(nsIPrincipal* aOther)
|
|||
// If neither of the principals have document.domain set, we use the fast path
|
||||
// in Equals(). Otherwise, we fall back to the slow path below.
|
||||
auto other = Cast(aOther);
|
||||
if (!mDomainSet && !other->mDomainSet) {
|
||||
if (!mHasExplicitDomain && !other->mHasExplicitDomain) {
|
||||
return FastEquals(aOther);
|
||||
}
|
||||
|
||||
|
@ -205,7 +214,7 @@ BasePrincipal::FastSubsumesConsideringDomain(nsIPrincipal* aOther)
|
|||
// If neither of the principals have document.domain set, we hand off to
|
||||
// FastSubsumes() which has fast paths for some special cases. Otherwise, we fall
|
||||
// back to the slow path below.
|
||||
if (!mDomainSet && !Cast(aOther)->mDomainSet) {
|
||||
if (!mHasExplicitDomain && !Cast(aOther)->mHasExplicitDomain) {
|
||||
return FastSubsumes(aOther);
|
||||
}
|
||||
|
||||
|
|
|
@ -82,7 +82,6 @@ ContentPrincipal::ContentPrincipal()
|
|||
: BasePrincipal(eCodebasePrincipal)
|
||||
, mCodebaseImmutable(false)
|
||||
, mDomainImmutable(false)
|
||||
, mInitialized(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -98,11 +97,8 @@ nsresult
|
|||
ContentPrincipal::Init(nsIURI *aCodebase,
|
||||
const OriginAttributes& aOriginAttributes)
|
||||
{
|
||||
NS_ENSURE_STATE(!mInitialized);
|
||||
NS_ENSURE_ARG(aCodebase);
|
||||
|
||||
mInitialized = true;
|
||||
|
||||
// Assert that the URI we get here isn't any of the schemes that we know we
|
||||
// should not get here. These schemes always either inherit their principal
|
||||
// or fall back to a null principal. These are schemes which return
|
||||
|
@ -118,9 +114,8 @@ ContentPrincipal::Init(nsIURI *aCodebase,
|
|||
|
||||
mCodebase = NS_TryToMakeImmutable(aCodebase);
|
||||
mCodebaseImmutable = URIIsImmutable(mCodebase);
|
||||
mOriginAttributes = aOriginAttributes;
|
||||
|
||||
FinishInit();
|
||||
FinishInit(aOriginAttributes);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -372,7 +367,7 @@ ContentPrincipal::SetDomain(nsIURI* aDomain)
|
|||
{
|
||||
mDomain = NS_TryToMakeImmutable(aDomain);
|
||||
mDomainImmutable = URIIsImmutable(mDomain);
|
||||
mDomainSet = true;
|
||||
SetHasExplicitDomain();
|
||||
|
||||
// Recompute all wrappers between compartments using this principal and other
|
||||
// non-chrome compartments.
|
||||
|
|
|
@ -47,7 +47,6 @@ public:
|
|||
// If mCodebaseImmutable is true, mCodebase is non-null and immutable
|
||||
bool mCodebaseImmutable;
|
||||
bool mDomainImmutable;
|
||||
bool mInitialized;
|
||||
|
||||
protected:
|
||||
virtual ~ContentPrincipal();
|
||||
|
|
|
@ -43,8 +43,7 @@ struct OriginComparator
|
|||
}
|
||||
};
|
||||
|
||||
ExpandedPrincipal::ExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList,
|
||||
const OriginAttributes& aAttrs)
|
||||
ExpandedPrincipal::ExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList)
|
||||
: BasePrincipal(eExpandedPrincipal)
|
||||
{
|
||||
// We force the principals to be sorted by origin so that ExpandedPrincipal
|
||||
|
@ -53,7 +52,6 @@ ExpandedPrincipal::ExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteLis
|
|||
for (size_t i = 0; i < aWhiteList.Length(); ++i) {
|
||||
mPrincipals.InsertElementSorted(aWhiteList[i], c);
|
||||
}
|
||||
mOriginAttributes = aAttrs;
|
||||
}
|
||||
|
||||
ExpandedPrincipal::~ExpandedPrincipal()
|
||||
|
@ -63,8 +61,8 @@ already_AddRefed<ExpandedPrincipal>
|
|||
ExpandedPrincipal::Create(nsTArray<nsCOMPtr<nsIPrincipal>>& aWhiteList,
|
||||
const OriginAttributes& aAttrs)
|
||||
{
|
||||
RefPtr<ExpandedPrincipal> ep = new ExpandedPrincipal(aWhiteList, aAttrs);
|
||||
ep->FinishInit();
|
||||
RefPtr<ExpandedPrincipal> ep = new ExpandedPrincipal(aWhiteList);
|
||||
ep->FinishInit(aAttrs);
|
||||
return ep.forget();
|
||||
}
|
||||
|
||||
|
|
|
@ -15,9 +15,6 @@
|
|||
class ExpandedPrincipal : public nsIExpandedPrincipal
|
||||
, public mozilla::BasePrincipal
|
||||
{
|
||||
ExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList,
|
||||
const mozilla::OriginAttributes& aAttrs);
|
||||
|
||||
public:
|
||||
static already_AddRefed<ExpandedPrincipal>
|
||||
Create(nsTArray<nsCOMPtr<nsIPrincipal>>& aWhiteList,
|
||||
|
@ -40,6 +37,8 @@ public:
|
|||
nsresult GetOriginNoSuffixInternal(nsACString& aOrigin) override;
|
||||
|
||||
protected:
|
||||
explicit ExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList);
|
||||
|
||||
virtual ~ExpandedPrincipal();
|
||||
|
||||
bool SubsumesInternal(nsIPrincipal* aOther,
|
||||
|
|
|
@ -70,8 +70,6 @@ NullPrincipal::Create(const OriginAttributes& aOriginAttributes, nsIURI* aURI)
|
|||
nsresult
|
||||
NullPrincipal::Init(const OriginAttributes& aOriginAttributes, nsIURI* aURI)
|
||||
{
|
||||
mOriginAttributes = aOriginAttributes;
|
||||
|
||||
if (aURI) {
|
||||
nsAutoCString scheme;
|
||||
nsresult rv = aURI->GetScheme(scheme);
|
||||
|
@ -86,7 +84,7 @@ NullPrincipal::Init(const OriginAttributes& aOriginAttributes, nsIURI* aURI)
|
|||
NS_ENSURE_TRUE(mURI, NS_ERROR_NOT_AVAILABLE);
|
||||
}
|
||||
|
||||
FinishInit();
|
||||
FinishInit(aOriginAttributes);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ already_AddRefed<SystemPrincipal>
|
|||
SystemPrincipal::Create()
|
||||
{
|
||||
RefPtr<SystemPrincipal> sp = new SystemPrincipal();
|
||||
sp->FinishInit();
|
||||
sp->FinishInit(OriginAttributes());
|
||||
return sp.forget();
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче