mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-30 12:27:29 +09:00
Merge remote-tracking branch 'origin/tracking' into custom
This commit is contained in:
commit
296db1641b
7 changed files with 42 additions and 27 deletions
|
|
@ -343,7 +343,8 @@ OriginAttributes::IsFirstPartyEnabled()
|
||||||
return sFirstPartyIsolation;
|
return sFirstPartyIsolation;
|
||||||
}
|
}
|
||||||
|
|
||||||
BasePrincipal::BasePrincipal()
|
BasePrincipal::BasePrincipal(PrincipalKind aKind)
|
||||||
|
: mKind(aKind)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
BasePrincipal::~BasePrincipal()
|
BasePrincipal::~BasePrincipal()
|
||||||
|
|
|
||||||
|
|
@ -251,7 +251,14 @@ public:
|
||||||
class BasePrincipal : public nsJSPrincipals
|
class BasePrincipal : public nsJSPrincipals
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BasePrincipal();
|
enum PrincipalKind {
|
||||||
|
eNullPrincipal,
|
||||||
|
eCodebasePrincipal,
|
||||||
|
eExpandedPrincipal,
|
||||||
|
eSystemPrincipal
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit BasePrincipal(PrincipalKind aKind);
|
||||||
|
|
||||||
enum DocumentDomainConsideration { DontConsiderDocumentDomain, ConsiderDocumentDomain};
|
enum DocumentDomainConsideration { DontConsiderDocumentDomain, ConsiderDocumentDomain};
|
||||||
bool Subsumes(nsIPrincipal* aOther, DocumentDomainConsideration aConsideration);
|
bool Subsumes(nsIPrincipal* aOther, DocumentDomainConsideration aConsideration);
|
||||||
|
|
@ -301,17 +308,19 @@ public:
|
||||||
uint32_t PrivateBrowsingId() const { return mOriginAttributes.mPrivateBrowsingId; }
|
uint32_t PrivateBrowsingId() const { return mOriginAttributes.mPrivateBrowsingId; }
|
||||||
bool IsInIsolatedMozBrowserElement() const { return mOriginAttributes.mInIsolatedMozBrowser; }
|
bool IsInIsolatedMozBrowserElement() const { return mOriginAttributes.mInIsolatedMozBrowser; }
|
||||||
|
|
||||||
enum PrincipalKind {
|
PrincipalKind Kind() const { return mKind; }
|
||||||
eNullPrincipal,
|
|
||||||
eCodebasePrincipal,
|
|
||||||
eExpandedPrincipal,
|
|
||||||
eSystemPrincipal
|
|
||||||
};
|
|
||||||
|
|
||||||
virtual PrincipalKind Kind() = 0;
|
|
||||||
|
|
||||||
already_AddRefed<BasePrincipal> CloneStrippingUserContextIdAndFirstPartyDomain();
|
already_AddRefed<BasePrincipal> CloneStrippingUserContextIdAndFirstPartyDomain();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if this principal's CSP should override a document's CSP for
|
||||||
|
* loads that it triggers. Currently true only for expanded principals which
|
||||||
|
* subsume the document principal.
|
||||||
|
*/
|
||||||
|
bool OverridesCSP(nsIPrincipal* aDocumentPrincipal) {
|
||||||
|
return mKind == eExpandedPrincipal && Subsumes(aDocumentPrincipal, DontConsiderDocumentDomain);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ~BasePrincipal();
|
virtual ~BasePrincipal();
|
||||||
|
|
||||||
|
|
@ -333,6 +342,7 @@ protected:
|
||||||
nsCOMPtr<nsIContentSecurityPolicy> mCSP;
|
nsCOMPtr<nsIContentSecurityPolicy> mCSP;
|
||||||
nsCOMPtr<nsIContentSecurityPolicy> mPreloadCSP;
|
nsCOMPtr<nsIContentSecurityPolicy> mPreloadCSP;
|
||||||
PrincipalOriginAttributes mOriginAttributes;
|
PrincipalOriginAttributes mOriginAttributes;
|
||||||
|
PrincipalKind mKind;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,9 @@ public:
|
||||||
// This should only be used by deserialization, and the factory constructor.
|
// This should only be used by deserialization, and the factory constructor.
|
||||||
// Other consumers should use the Create and CreateWithInheritedAttributes
|
// Other consumers should use the Create and CreateWithInheritedAttributes
|
||||||
// methods.
|
// methods.
|
||||||
nsNullPrincipal() {}
|
nsNullPrincipal()
|
||||||
|
: BasePrincipal(eNullPrincipal)
|
||||||
|
{}
|
||||||
|
|
||||||
NS_DECL_NSISERIALIZABLE
|
NS_DECL_NSISERIALIZABLE
|
||||||
|
|
||||||
|
|
@ -60,8 +62,6 @@ public:
|
||||||
|
|
||||||
virtual nsresult GetScriptLocation(nsACString &aStr) override;
|
virtual nsresult GetScriptLocation(nsACString &aStr) override;
|
||||||
|
|
||||||
PrincipalKind Kind() override { return eNullPrincipal; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ~nsNullPrincipal() {}
|
virtual ~nsNullPrincipal() {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -64,10 +64,11 @@ nsPrincipal::InitializeStatics()
|
||||||
}
|
}
|
||||||
|
|
||||||
nsPrincipal::nsPrincipal()
|
nsPrincipal::nsPrincipal()
|
||||||
: mCodebaseImmutable(false)
|
: BasePrincipal(eCodebasePrincipal)
|
||||||
|
, mCodebaseImmutable(false)
|
||||||
, mDomainImmutable(false)
|
, mDomainImmutable(false)
|
||||||
, mInitialized(false)
|
, mInitialized(false)
|
||||||
{ }
|
{}
|
||||||
|
|
||||||
nsPrincipal::~nsPrincipal()
|
nsPrincipal::~nsPrincipal()
|
||||||
{
|
{
|
||||||
|
|
@ -514,6 +515,7 @@ struct OriginComparator
|
||||||
|
|
||||||
nsExpandedPrincipal::nsExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList,
|
nsExpandedPrincipal::nsExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList,
|
||||||
const PrincipalOriginAttributes& aAttrs)
|
const PrincipalOriginAttributes& aAttrs)
|
||||||
|
: BasePrincipal(eExpandedPrincipal)
|
||||||
{
|
{
|
||||||
// We force the principals to be sorted by origin so that nsExpandedPrincipal
|
// We force the principals to be sorted by origin so that nsExpandedPrincipal
|
||||||
// origins can have a canonical form.
|
// origins can have a canonical form.
|
||||||
|
|
|
||||||
|
|
@ -46,8 +46,6 @@ public:
|
||||||
*/
|
*/
|
||||||
static void InitializeStatics();
|
static void InitializeStatics();
|
||||||
|
|
||||||
PrincipalKind Kind() override { return eCodebasePrincipal; }
|
|
||||||
|
|
||||||
nsCOMPtr<nsIURI> mDomain;
|
nsCOMPtr<nsIURI> mDomain;
|
||||||
nsCOMPtr<nsIURI> mCodebase;
|
nsCOMPtr<nsIURI> mCodebase;
|
||||||
// If mCodebaseImmutable is true, mCodebase is non-null and immutable
|
// If mCodebaseImmutable is true, mCodebase is non-null and immutable
|
||||||
|
|
@ -82,8 +80,6 @@ public:
|
||||||
virtual nsresult GetScriptLocation(nsACString &aStr) override;
|
virtual nsresult GetScriptLocation(nsACString &aStr) override;
|
||||||
nsresult GetOriginInternal(nsACString& aOrigin) override;
|
nsresult GetOriginInternal(nsACString& aOrigin) override;
|
||||||
|
|
||||||
PrincipalKind Kind() override { return eExpandedPrincipal; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ~nsExpandedPrincipal();
|
virtual ~nsExpandedPrincipal();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,9 @@ public:
|
||||||
NS_IMETHOD GetBaseDomain(nsACString& aBaseDomain) override;
|
NS_IMETHOD GetBaseDomain(nsACString& aBaseDomain) override;
|
||||||
nsresult GetOriginInternal(nsACString& aOrigin) override;
|
nsresult GetOriginInternal(nsACString& aOrigin) override;
|
||||||
|
|
||||||
nsSystemPrincipal() {}
|
nsSystemPrincipal()
|
||||||
|
: BasePrincipal(eSystemPrincipal)
|
||||||
|
{}
|
||||||
|
|
||||||
virtual nsresult GetScriptLocation(nsACString &aStr) override;
|
virtual nsresult GetScriptLocation(nsACString &aStr) override;
|
||||||
|
|
||||||
|
|
@ -52,8 +54,6 @@ protected:
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
PrincipalKind Kind() override { return eSystemPrincipal; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // nsSystemPrincipal_h__
|
#endif // nsSystemPrincipal_h__
|
||||||
|
|
|
||||||
|
|
@ -140,12 +140,18 @@ CSPService::ShouldLoad(uint32_t aContentType,
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
// query the principal of the document; if no document is passed, then
|
// Find a principal to retrieve the CSP from. If we don't have a context node
|
||||||
// fall back to using the requestPrincipal (e.g. service workers do not
|
// (because, for instance, the load originates in a service worker), or the
|
||||||
// pass a document).
|
// requesting principal's CSP overrides our document CSP, use the request
|
||||||
|
// principal. Otherwise, use the document principal.
|
||||||
nsCOMPtr<nsINode> node(do_QueryInterface(aRequestContext));
|
nsCOMPtr<nsINode> node(do_QueryInterface(aRequestContext));
|
||||||
nsCOMPtr<nsIPrincipal> principal = node ? node->NodePrincipal()
|
nsCOMPtr<nsIPrincipal> principal;
|
||||||
: aRequestPrincipal;
|
if (!node || (aRequestPrincipal &&
|
||||||
|
BasePrincipal::Cast(aRequestPrincipal)->OverridesCSP(node->NodePrincipal()))) {
|
||||||
|
principal = aRequestPrincipal;
|
||||||
|
} else {
|
||||||
|
principal = node->NodePrincipal();
|
||||||
|
}
|
||||||
if (!principal) {
|
if (!principal) {
|
||||||
// if we can't query a principal, then there is nothing to do.
|
// if we can't query a principal, then there is nothing to do.
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue