tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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