ContentPrincipal.h (3054B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef mozilla_ContentPrincipal_h 7 #define mozilla_ContentPrincipal_h 8 9 #include "nsCOMPtr.h" 10 #include "nsJSPrincipals.h" 11 #include "nsTArray.h" 12 #include "nsNetUtil.h" 13 #include "nsScriptSecurityManager.h" 14 #include "mozilla/BasePrincipal.h" 15 #include "mozilla/Mutex.h" 16 #include "mozilla/extensions/WebExtensionPolicy.h" 17 18 namespace mozilla { 19 20 class JSONWriter; 21 22 class ContentPrincipal final : public BasePrincipal { 23 public: 24 NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr) override; 25 NS_IMETHOD GetURI(nsIURI** aURI) override; 26 NS_IMETHOD GetDomain(nsIURI** aDomain) override; 27 NS_IMETHOD SetDomain(nsIURI* aDomain) override; 28 NS_IMETHOD GetBaseDomain(nsACString& aBaseDomain) override; 29 NS_IMETHOD GetAddonId(nsAString& aAddonId) override; 30 NS_IMETHOD GetSiteOriginNoSuffix(nsACString& aSiteOrigin) override; 31 bool IsContentPrincipal() const override { return true; } 32 33 ContentPrincipal(nsIURI* aURI, const OriginAttributes& aOriginAttributes, 34 const nsACString& aOriginNoSuffix, nsIURI* aInitialDomain); 35 ContentPrincipal(ContentPrincipal* aOther, 36 const OriginAttributes& aOriginAttributes); 37 38 static PrincipalKind Kind() { return eContentPrincipal; } 39 40 virtual nsresult GetScriptLocation(nsACString& aStr) override; 41 42 nsresult GetSiteIdentifier(SiteIdentifier& aSite) override; 43 44 static nsresult GenerateOriginNoSuffixFromURI(nsIURI* aURI, 45 nsACString& aOrigin); 46 47 RefPtr<extensions::WebExtensionPolicyCore> AddonPolicyCore(); 48 49 virtual nsresult WriteJSONInnerProperties(JSONWriter& aWriter) override; 50 51 // Serializable keys are the valid enum fields the serialization supports 52 enum SerializableKeys : uint8_t { 53 eURI = 0, 54 eDomain, 55 eSuffix, 56 eMax = eSuffix 57 }; 58 59 static constexpr char URIKey = '0'; 60 static_assert(eURI == 0); 61 static constexpr char DomainKey = '1'; 62 static_assert(eDomain == 1); 63 static constexpr char SuffixKey = '2'; 64 static_assert(eSuffix == 2); 65 66 class Deserializer : public BasePrincipal::Deserializer { 67 public: 68 NS_IMETHOD Read(nsIObjectInputStream* aStream) override; 69 }; 70 71 protected: 72 virtual ~ContentPrincipal(); 73 74 bool SubsumesInternal(nsIPrincipal* aOther, 75 DocumentDomainConsideration aConsideration) override; 76 bool MayLoadInternal(nsIURI* aURI) override; 77 78 private: 79 const nsCOMPtr<nsIURI> mURI; 80 mozilla::Mutex mMutex{"ContentPrincipal::mMutex"}; 81 nsCOMPtr<nsIURI> mDomain MOZ_GUARDED_BY(mMutex); 82 Maybe<RefPtr<extensions::WebExtensionPolicyCore>> mAddon 83 MOZ_GUARDED_BY(mMutex); 84 }; 85 86 } // namespace mozilla 87 88 #define NS_PRINCIPAL_CID \ 89 {0x653e0e4d, 0x3ee4, 0x45fa, {0xb2, 0x72, 0x97, 0xc2, 0x0b, 0xc0, 0x1e, 0xb8}} 90 91 #endif // mozilla_ContentPrincipal_h