Loading caps/BasePrincipal.h +2 −2 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ class nsIObjectOutputStream; class nsIObjectInputStream; class nsIURI; class nsExpandedPrincipal; class ExpandedPrincipal; namespace mozilla { Loading Loading @@ -283,7 +283,7 @@ protected: // principal would allow the load ignoring any common behavior implemented in // BasePrincipal::CheckMayLoad. virtual bool MayLoadInternal(nsIURI* aURI) = 0; friend class ::nsExpandedPrincipal; friend class ::ExpandedPrincipal; // 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() Loading caps/nsExpandedPrincipal.cpp→caps/ExpandedPrincipal.cpp +29 −29 Original line number Diff line number Diff line Loading @@ -4,17 +4,17 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsExpandedPrincipal.h" #include "ExpandedPrincipal.h" #include "nsIClassInfoImpl.h" using namespace mozilla; NS_IMPL_CLASSINFO(nsExpandedPrincipal, nullptr, nsIClassInfo::MAIN_THREAD_ONLY, NS_IMPL_CLASSINFO(ExpandedPrincipal, nullptr, nsIClassInfo::MAIN_THREAD_ONLY, NS_EXPANDEDPRINCIPAL_CID) NS_IMPL_QUERY_INTERFACE_CI(nsExpandedPrincipal, NS_IMPL_QUERY_INTERFACE_CI(ExpandedPrincipal, nsIPrincipal, nsIExpandedPrincipal) NS_IMPL_CI_INTERFACE_GETTER(nsExpandedPrincipal, NS_IMPL_CI_INTERFACE_GETTER(ExpandedPrincipal, nsIPrincipal, nsIExpandedPrincipal) Loading Loading @@ -43,11 +43,11 @@ struct OriginComparator } }; nsExpandedPrincipal::nsExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList, ExpandedPrincipal::ExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList, const OriginAttributes& 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 ExpandedPrincipal // origins can have a canonical form. OriginComparator c; for (size_t i = 0; i < aWhiteList.Length(); ++i) { Loading @@ -56,33 +56,33 @@ nsExpandedPrincipal::nsExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhit mOriginAttributes = aAttrs; } nsExpandedPrincipal::~nsExpandedPrincipal() ExpandedPrincipal::~ExpandedPrincipal() { } already_AddRefed<nsExpandedPrincipal> nsExpandedPrincipal::Create(nsTArray<nsCOMPtr<nsIPrincipal>>& aWhiteList, already_AddRefed<ExpandedPrincipal> ExpandedPrincipal::Create(nsTArray<nsCOMPtr<nsIPrincipal>>& aWhiteList, const OriginAttributes& aAttrs) { RefPtr<nsExpandedPrincipal> ep = new nsExpandedPrincipal(aWhiteList, aAttrs); RefPtr<ExpandedPrincipal> ep = new ExpandedPrincipal(aWhiteList, aAttrs); ep->FinishInit(); return ep.forget(); } NS_IMETHODIMP nsExpandedPrincipal::GetDomain(nsIURI** aDomain) ExpandedPrincipal::GetDomain(nsIURI** aDomain) { *aDomain = nullptr; return NS_OK; } NS_IMETHODIMP nsExpandedPrincipal::SetDomain(nsIURI* aDomain) ExpandedPrincipal::SetDomain(nsIURI* aDomain) { return NS_OK; } nsresult nsExpandedPrincipal::GetOriginInternal(nsACString& aOrigin) ExpandedPrincipal::GetOriginInternal(nsACString& aOrigin) { aOrigin.AssignLiteral("[Expanded Principal ["); for (size_t i = 0; i < mPrincipals.Length(); ++i) { Loading @@ -101,7 +101,7 @@ nsExpandedPrincipal::GetOriginInternal(nsACString& aOrigin) } bool nsExpandedPrincipal::SubsumesInternal(nsIPrincipal* aOther, ExpandedPrincipal::SubsumesInternal(nsIPrincipal* aOther, BasePrincipal::DocumentDomainConsideration aConsideration) { // If aOther is an ExpandedPrincipal too, we break it down into its component Loading Loading @@ -133,7 +133,7 @@ nsExpandedPrincipal::SubsumesInternal(nsIPrincipal* aOther, } bool nsExpandedPrincipal::MayLoadInternal(nsIURI* uri) ExpandedPrincipal::MayLoadInternal(nsIURI* uri) { for (uint32_t i = 0; i < mPrincipals.Length(); ++i){ if (BasePrincipal::Cast(mPrincipals[i])->MayLoadInternal(uri)) { Loading @@ -145,40 +145,40 @@ nsExpandedPrincipal::MayLoadInternal(nsIURI* uri) } NS_IMETHODIMP nsExpandedPrincipal::GetHashValue(uint32_t* result) ExpandedPrincipal::GetHashValue(uint32_t* result) { MOZ_CRASH("extended principal should never be used as key in a hash map"); } NS_IMETHODIMP nsExpandedPrincipal::GetURI(nsIURI** aURI) ExpandedPrincipal::GetURI(nsIURI** aURI) { *aURI = nullptr; return NS_OK; } NS_IMETHODIMP nsExpandedPrincipal::GetWhiteList(nsTArray<nsCOMPtr<nsIPrincipal> >** aWhiteList) ExpandedPrincipal::GetWhiteList(nsTArray<nsCOMPtr<nsIPrincipal> >** aWhiteList) { *aWhiteList = &mPrincipals; return NS_OK; } NS_IMETHODIMP nsExpandedPrincipal::GetBaseDomain(nsACString& aBaseDomain) ExpandedPrincipal::GetBaseDomain(nsACString& aBaseDomain) { return NS_ERROR_NOT_AVAILABLE; } NS_IMETHODIMP nsExpandedPrincipal::GetAddonId(nsAString& aAddonId) ExpandedPrincipal::GetAddonId(nsAString& aAddonId) { aAddonId.Truncate(); return NS_OK; }; bool nsExpandedPrincipal::AddonHasPermission(const nsAString& aPerm) ExpandedPrincipal::AddonHasPermission(const nsAString& aPerm) { for (size_t i = 0; i < mPrincipals.Length(); ++i) { if (BasePrincipal::Cast(mPrincipals[i])->AddonHasPermission(aPerm)) { Loading @@ -189,7 +189,7 @@ nsExpandedPrincipal::AddonHasPermission(const nsAString& aPerm) } nsresult nsExpandedPrincipal::GetScriptLocation(nsACString& aStr) ExpandedPrincipal::GetScriptLocation(nsACString& aStr) { aStr.Assign("[Expanded Principal ["); for (size_t i = 0; i < mPrincipals.Length(); ++i) { Loading @@ -213,13 +213,13 @@ nsExpandedPrincipal::GetScriptLocation(nsACString& aStr) ////////////////////////////////////////// NS_IMETHODIMP nsExpandedPrincipal::Read(nsIObjectInputStream* aStream) ExpandedPrincipal::Read(nsIObjectInputStream* aStream) { return NS_ERROR_NOT_IMPLEMENTED; } NS_IMETHODIMP nsExpandedPrincipal::Write(nsIObjectOutputStream* aStream) ExpandedPrincipal::Write(nsIObjectOutputStream* aStream) { return NS_ERROR_NOT_IMPLEMENTED; } caps/nsExpandedPrincipal.h→caps/ExpandedPrincipal.h +13 −10 Original line number Diff line number Diff line Loading @@ -3,8 +3,8 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef nsExpandedPrincipal_h #define nsExpandedPrincipal_h #ifndef ExpandedPrincipal_h #define ExpandedPrincipal_h #include "nsCOMPtr.h" #include "nsJSPrincipals.h" Loading @@ -12,19 +12,20 @@ #include "nsNetUtil.h" #include "mozilla/BasePrincipal.h" class nsExpandedPrincipal : public nsIExpandedPrincipal class ExpandedPrincipal : public nsIExpandedPrincipal , public mozilla::BasePrincipal { nsExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList, ExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList, const mozilla::OriginAttributes& aAttrs); public: static already_AddRefed<nsExpandedPrincipal> static already_AddRefed<ExpandedPrincipal> Create(nsTArray<nsCOMPtr<nsIPrincipal>>& aWhiteList, const mozilla::OriginAttributes& aAttrs); NS_DECL_NSIEXPANDEDPRINCIPAL NS_DECL_NSISERIALIZABLE NS_IMETHOD_(MozExternalRefCountType) AddRef() override { return nsJSPrincipals::AddRef(); }; NS_IMETHOD_(MozExternalRefCountType) Release() override { return nsJSPrincipals::Release(); }; NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr) override; Loading @@ -39,9 +40,11 @@ public: nsresult GetOriginInternal(nsACString& aOrigin) override; protected: virtual ~nsExpandedPrincipal(); virtual ~ExpandedPrincipal(); bool SubsumesInternal(nsIPrincipal* aOther, DocumentDomainConsideration aConsideration) override; bool SubsumesInternal(nsIPrincipal* aOther, DocumentDomainConsideration aConsideration) override; bool MayLoadInternal(nsIURI* aURI) override; private: Loading @@ -53,4 +56,4 @@ private: { 0xe8ee88b0, 0x5571, 0x4086, \ { 0xa4, 0x5b, 0x39, 0xa7, 0x16, 0x90, 0x6b, 0xdb } } #endif // nsExpandedPrincipal_h #endif // ExpandedPrincipal_h caps/moz.build +1 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ SOURCES += [ UNIFIED_SOURCES += [ 'DomainPolicy.cpp', 'nsExpandedPrincipal.cpp', 'ExpandedPrincipal.cpp', 'nsJSPrincipals.cpp', 'nsNullPrincipal.cpp', 'nsNullPrincipalURI.cpp', Loading caps/nsIPrincipal.idl +4 −4 Original line number Diff line number Diff line Loading @@ -358,11 +358,11 @@ interface nsIPrincipal : nsISerializable /** * If nsSystemPrincipal is too risky to use, but we want a principal to access * more than one origin, nsExpandedPrincipals letting us define an array of * principals it subsumes. So script with an nsExpandedPrincipals will gain * more than one origin, ExpandedPrincipals letting us define an array of * principals it subsumes. So script with an ExpandedPrincipals will gain * same origin access when at least one of its principals it contains gained * sameorigin acccess. An nsExpandedPrincipal will be subsumed by the system * principal, and by another nsExpandedPrincipal that has all its principals. * sameorigin acccess. An ExpandedPrincipal will be subsumed by the system * principal, and by another ExpandedPrincipal that has all its principals. * It is added for jetpack content-scripts to let them interact with the * content and a well defined set of other domains, without the risk of * leaking out a system principal to the content. See: Bug 734891 Loading Loading
caps/BasePrincipal.h +2 −2 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ class nsIObjectOutputStream; class nsIObjectInputStream; class nsIURI; class nsExpandedPrincipal; class ExpandedPrincipal; namespace mozilla { Loading Loading @@ -283,7 +283,7 @@ protected: // principal would allow the load ignoring any common behavior implemented in // BasePrincipal::CheckMayLoad. virtual bool MayLoadInternal(nsIURI* aURI) = 0; friend class ::nsExpandedPrincipal; friend class ::ExpandedPrincipal; // 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() Loading
caps/nsExpandedPrincipal.cpp→caps/ExpandedPrincipal.cpp +29 −29 Original line number Diff line number Diff line Loading @@ -4,17 +4,17 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsExpandedPrincipal.h" #include "ExpandedPrincipal.h" #include "nsIClassInfoImpl.h" using namespace mozilla; NS_IMPL_CLASSINFO(nsExpandedPrincipal, nullptr, nsIClassInfo::MAIN_THREAD_ONLY, NS_IMPL_CLASSINFO(ExpandedPrincipal, nullptr, nsIClassInfo::MAIN_THREAD_ONLY, NS_EXPANDEDPRINCIPAL_CID) NS_IMPL_QUERY_INTERFACE_CI(nsExpandedPrincipal, NS_IMPL_QUERY_INTERFACE_CI(ExpandedPrincipal, nsIPrincipal, nsIExpandedPrincipal) NS_IMPL_CI_INTERFACE_GETTER(nsExpandedPrincipal, NS_IMPL_CI_INTERFACE_GETTER(ExpandedPrincipal, nsIPrincipal, nsIExpandedPrincipal) Loading Loading @@ -43,11 +43,11 @@ struct OriginComparator } }; nsExpandedPrincipal::nsExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList, ExpandedPrincipal::ExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList, const OriginAttributes& 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 ExpandedPrincipal // origins can have a canonical form. OriginComparator c; for (size_t i = 0; i < aWhiteList.Length(); ++i) { Loading @@ -56,33 +56,33 @@ nsExpandedPrincipal::nsExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhit mOriginAttributes = aAttrs; } nsExpandedPrincipal::~nsExpandedPrincipal() ExpandedPrincipal::~ExpandedPrincipal() { } already_AddRefed<nsExpandedPrincipal> nsExpandedPrincipal::Create(nsTArray<nsCOMPtr<nsIPrincipal>>& aWhiteList, already_AddRefed<ExpandedPrincipal> ExpandedPrincipal::Create(nsTArray<nsCOMPtr<nsIPrincipal>>& aWhiteList, const OriginAttributes& aAttrs) { RefPtr<nsExpandedPrincipal> ep = new nsExpandedPrincipal(aWhiteList, aAttrs); RefPtr<ExpandedPrincipal> ep = new ExpandedPrincipal(aWhiteList, aAttrs); ep->FinishInit(); return ep.forget(); } NS_IMETHODIMP nsExpandedPrincipal::GetDomain(nsIURI** aDomain) ExpandedPrincipal::GetDomain(nsIURI** aDomain) { *aDomain = nullptr; return NS_OK; } NS_IMETHODIMP nsExpandedPrincipal::SetDomain(nsIURI* aDomain) ExpandedPrincipal::SetDomain(nsIURI* aDomain) { return NS_OK; } nsresult nsExpandedPrincipal::GetOriginInternal(nsACString& aOrigin) ExpandedPrincipal::GetOriginInternal(nsACString& aOrigin) { aOrigin.AssignLiteral("[Expanded Principal ["); for (size_t i = 0; i < mPrincipals.Length(); ++i) { Loading @@ -101,7 +101,7 @@ nsExpandedPrincipal::GetOriginInternal(nsACString& aOrigin) } bool nsExpandedPrincipal::SubsumesInternal(nsIPrincipal* aOther, ExpandedPrincipal::SubsumesInternal(nsIPrincipal* aOther, BasePrincipal::DocumentDomainConsideration aConsideration) { // If aOther is an ExpandedPrincipal too, we break it down into its component Loading Loading @@ -133,7 +133,7 @@ nsExpandedPrincipal::SubsumesInternal(nsIPrincipal* aOther, } bool nsExpandedPrincipal::MayLoadInternal(nsIURI* uri) ExpandedPrincipal::MayLoadInternal(nsIURI* uri) { for (uint32_t i = 0; i < mPrincipals.Length(); ++i){ if (BasePrincipal::Cast(mPrincipals[i])->MayLoadInternal(uri)) { Loading @@ -145,40 +145,40 @@ nsExpandedPrincipal::MayLoadInternal(nsIURI* uri) } NS_IMETHODIMP nsExpandedPrincipal::GetHashValue(uint32_t* result) ExpandedPrincipal::GetHashValue(uint32_t* result) { MOZ_CRASH("extended principal should never be used as key in a hash map"); } NS_IMETHODIMP nsExpandedPrincipal::GetURI(nsIURI** aURI) ExpandedPrincipal::GetURI(nsIURI** aURI) { *aURI = nullptr; return NS_OK; } NS_IMETHODIMP nsExpandedPrincipal::GetWhiteList(nsTArray<nsCOMPtr<nsIPrincipal> >** aWhiteList) ExpandedPrincipal::GetWhiteList(nsTArray<nsCOMPtr<nsIPrincipal> >** aWhiteList) { *aWhiteList = &mPrincipals; return NS_OK; } NS_IMETHODIMP nsExpandedPrincipal::GetBaseDomain(nsACString& aBaseDomain) ExpandedPrincipal::GetBaseDomain(nsACString& aBaseDomain) { return NS_ERROR_NOT_AVAILABLE; } NS_IMETHODIMP nsExpandedPrincipal::GetAddonId(nsAString& aAddonId) ExpandedPrincipal::GetAddonId(nsAString& aAddonId) { aAddonId.Truncate(); return NS_OK; }; bool nsExpandedPrincipal::AddonHasPermission(const nsAString& aPerm) ExpandedPrincipal::AddonHasPermission(const nsAString& aPerm) { for (size_t i = 0; i < mPrincipals.Length(); ++i) { if (BasePrincipal::Cast(mPrincipals[i])->AddonHasPermission(aPerm)) { Loading @@ -189,7 +189,7 @@ nsExpandedPrincipal::AddonHasPermission(const nsAString& aPerm) } nsresult nsExpandedPrincipal::GetScriptLocation(nsACString& aStr) ExpandedPrincipal::GetScriptLocation(nsACString& aStr) { aStr.Assign("[Expanded Principal ["); for (size_t i = 0; i < mPrincipals.Length(); ++i) { Loading @@ -213,13 +213,13 @@ nsExpandedPrincipal::GetScriptLocation(nsACString& aStr) ////////////////////////////////////////// NS_IMETHODIMP nsExpandedPrincipal::Read(nsIObjectInputStream* aStream) ExpandedPrincipal::Read(nsIObjectInputStream* aStream) { return NS_ERROR_NOT_IMPLEMENTED; } NS_IMETHODIMP nsExpandedPrincipal::Write(nsIObjectOutputStream* aStream) ExpandedPrincipal::Write(nsIObjectOutputStream* aStream) { return NS_ERROR_NOT_IMPLEMENTED; }
caps/nsExpandedPrincipal.h→caps/ExpandedPrincipal.h +13 −10 Original line number Diff line number Diff line Loading @@ -3,8 +3,8 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef nsExpandedPrincipal_h #define nsExpandedPrincipal_h #ifndef ExpandedPrincipal_h #define ExpandedPrincipal_h #include "nsCOMPtr.h" #include "nsJSPrincipals.h" Loading @@ -12,19 +12,20 @@ #include "nsNetUtil.h" #include "mozilla/BasePrincipal.h" class nsExpandedPrincipal : public nsIExpandedPrincipal class ExpandedPrincipal : public nsIExpandedPrincipal , public mozilla::BasePrincipal { nsExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList, ExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList, const mozilla::OriginAttributes& aAttrs); public: static already_AddRefed<nsExpandedPrincipal> static already_AddRefed<ExpandedPrincipal> Create(nsTArray<nsCOMPtr<nsIPrincipal>>& aWhiteList, const mozilla::OriginAttributes& aAttrs); NS_DECL_NSIEXPANDEDPRINCIPAL NS_DECL_NSISERIALIZABLE NS_IMETHOD_(MozExternalRefCountType) AddRef() override { return nsJSPrincipals::AddRef(); }; NS_IMETHOD_(MozExternalRefCountType) Release() override { return nsJSPrincipals::Release(); }; NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr) override; Loading @@ -39,9 +40,11 @@ public: nsresult GetOriginInternal(nsACString& aOrigin) override; protected: virtual ~nsExpandedPrincipal(); virtual ~ExpandedPrincipal(); bool SubsumesInternal(nsIPrincipal* aOther, DocumentDomainConsideration aConsideration) override; bool SubsumesInternal(nsIPrincipal* aOther, DocumentDomainConsideration aConsideration) override; bool MayLoadInternal(nsIURI* aURI) override; private: Loading @@ -53,4 +56,4 @@ private: { 0xe8ee88b0, 0x5571, 0x4086, \ { 0xa4, 0x5b, 0x39, 0xa7, 0x16, 0x90, 0x6b, 0xdb } } #endif // nsExpandedPrincipal_h #endif // ExpandedPrincipal_h
caps/moz.build +1 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ SOURCES += [ UNIFIED_SOURCES += [ 'DomainPolicy.cpp', 'nsExpandedPrincipal.cpp', 'ExpandedPrincipal.cpp', 'nsJSPrincipals.cpp', 'nsNullPrincipal.cpp', 'nsNullPrincipalURI.cpp', Loading
caps/nsIPrincipal.idl +4 −4 Original line number Diff line number Diff line Loading @@ -358,11 +358,11 @@ interface nsIPrincipal : nsISerializable /** * If nsSystemPrincipal is too risky to use, but we want a principal to access * more than one origin, nsExpandedPrincipals letting us define an array of * principals it subsumes. So script with an nsExpandedPrincipals will gain * more than one origin, ExpandedPrincipals letting us define an array of * principals it subsumes. So script with an ExpandedPrincipals will gain * same origin access when at least one of its principals it contains gained * sameorigin acccess. An nsExpandedPrincipal will be subsumed by the system * principal, and by another nsExpandedPrincipal that has all its principals. * sameorigin acccess. An ExpandedPrincipal will be subsumed by the system * principal, and by another ExpandedPrincipal that has all its principals. * It is added for jetpack content-scripts to let them interact with the * content and a well defined set of other domains, without the risk of * leaking out a system principal to the content. See: Bug 734891 Loading