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
10 #include "nsJSPrincipals.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"
22 class ContentPrincipal final
: public BasePrincipal
{
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
,
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 {
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
{
69 NS_IMETHOD
Read(nsIObjectInputStream
* aStream
) override
;
73 virtual ~ContentPrincipal();
75 bool SubsumesInternal(nsIPrincipal
* aOther
,
76 DocumentDomainConsideration aConsideration
) override
;
77 bool MayLoadInternal(nsIURI
* aURI
) override
;
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 \
91 0x653e0e4d, 0x3ee4, 0x45fa, { \
92 0xb2, 0x72, 0x97, 0xc2, 0x0b, 0xc0, 0x1e, 0xb8 \
96 #endif // mozilla_ContentPrincipal_h