Backed out changeset 2450366cf7ca (bug 1891629) for causing win msix mochitest failures
[gecko.git] / caps / ContentPrincipal.h
blobc87aedce8579128b4ccee534450ae57c6ca86863
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/. */
6 #ifndef mozilla_ContentPrincipal_h
7 #define mozilla_ContentPrincipal_h
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"
18 namespace mozilla {
20 class JSONWriter;
22 class ContentPrincipal final : public BasePrincipal {
23 public:
24 NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr) override;
25 uint32_t GetHashValue() override;
26 NS_IMETHOD GetURI(nsIURI** aURI) override;
27 NS_IMETHOD GetDomain(nsIURI** aDomain) override;
28 NS_IMETHOD SetDomain(nsIURI* aDomain) override;
29 NS_IMETHOD GetBaseDomain(nsACString& aBaseDomain) override;
30 NS_IMETHOD GetAddonId(nsAString& aAddonId) override;
31 NS_IMETHOD GetSiteOriginNoSuffix(nsACString& aSiteOrigin) override;
32 bool IsContentPrincipal() const override { return true; }
34 ContentPrincipal(nsIURI* aURI, const OriginAttributes& aOriginAttributes,
35 const nsACString& aOriginNoSuffix, nsIURI* aInitialDomain);
36 ContentPrincipal(ContentPrincipal* aOther,
37 const OriginAttributes& aOriginAttributes);
39 static PrincipalKind Kind() { return eContentPrincipal; }
41 virtual nsresult GetScriptLocation(nsACString& aStr) override;
43 nsresult GetSiteIdentifier(SiteIdentifier& aSite) override;
45 static nsresult GenerateOriginNoSuffixFromURI(nsIURI* aURI,
46 nsACString& aOrigin);
48 RefPtr<extensions::WebExtensionPolicyCore> AddonPolicyCore();
50 virtual nsresult WriteJSONInnerProperties(JSONWriter& aWriter) override;
52 // Serializable keys are the valid enum fields the serialization supports
53 enum SerializableKeys : uint8_t {
54 eURI = 0,
55 eDomain,
56 eSuffix,
57 eMax = eSuffix
60 static constexpr char URIKey = '0';
61 static_assert(eURI == 0);
62 static constexpr char DomainKey = '1';
63 static_assert(eDomain == 1);
64 static constexpr char SuffixKey = '2';
65 static_assert(eSuffix == 2);
67 class Deserializer : public BasePrincipal::Deserializer {
68 public:
69 NS_IMETHOD Read(nsIObjectInputStream* aStream) override;
72 protected:
73 virtual ~ContentPrincipal();
75 bool SubsumesInternal(nsIPrincipal* aOther,
76 DocumentDomainConsideration aConsideration) override;
77 bool MayLoadInternal(nsIURI* aURI) override;
79 private:
80 const nsCOMPtr<nsIURI> mURI;
81 mozilla::Mutex mMutex{"ContentPrincipal::mMutex"};
82 nsCOMPtr<nsIURI> mDomain MOZ_GUARDED_BY(mMutex);
83 Maybe<RefPtr<extensions::WebExtensionPolicyCore>> mAddon
84 MOZ_GUARDED_BY(mMutex);
87 } // namespace mozilla
89 #define NS_PRINCIPAL_CID \
90 { \
91 0x653e0e4d, 0x3ee4, 0x45fa, { \
92 0xb2, 0x72, 0x97, 0xc2, 0x0b, 0xc0, 0x1e, 0xb8 \
93 } \
96 #endif // mozilla_ContentPrincipal_h