tor-browser

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

PolicyContainer.h (2520B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef PolicyContainer_h___
      8 #define PolicyContainer_h___
      9 
     10 #include "nsCOMPtr.h"
     11 #include "nsIContentSecurityPolicy.h"
     12 #include "nsIIntegrityPolicy.h"
     13 #include "nsIPolicyContainer.h"
     14 
     15 namespace mozilla::ipc {
     16 class PolicyContainerArgs;
     17 }
     18 
     19 namespace mozilla::dom {
     20 class Document;
     21 }
     22 
     23 #define NS_POLICYCONTAINER_CONTRACTID "@mozilla.org/policycontainer;1"
     24 
     25 class nsIContentSecurityPolicy;
     26 class nsIIntegrityPolicy;
     27 
     28 /**
     29  Implementation of
     30  https://html.spec.whatwg.org/multipage/browsers.html#policy-containers. Copied
     31  around the browser in the same way as CSP is copied, in fact, it replaces all
     32  the CSP inheritance code.
     33 */
     34 class PolicyContainer : public nsIPolicyContainer {
     35 public:
     36  NS_DECL_ISUPPORTS
     37  NS_DECL_NSISERIALIZABLE
     38  NS_DECL_NSIPOLICYCONTAINER
     39 
     40  PolicyContainer() = default;
     41 
     42  static void ToArgs(const PolicyContainer* aPolicy,
     43                     mozilla::ipc::PolicyContainerArgs& aArgs);
     44  static void FromArgs(const mozilla::ipc::PolicyContainerArgs& aArgs,
     45                       mozilla::dom::Document* aRequestingDocument,
     46                       PolicyContainer** aPolicy);
     47 
     48  void InitFromOther(PolicyContainer* aOther);
     49 
     50  static const PolicyContainer* Cast(
     51      const nsIPolicyContainer* aPolicyContainer) {
     52    return static_cast<const PolicyContainer*>(aPolicyContainer);
     53  }
     54 
     55  static PolicyContainer* Cast(nsIPolicyContainer* aPolicyContainer) {
     56    return static_cast<PolicyContainer*>(aPolicyContainer);
     57  }
     58 
     59  static bool Equals(const PolicyContainer* aContainer,
     60                     const PolicyContainer* aOtherContainer);
     61 
     62  // == CSP ==
     63  nsIContentSecurityPolicy* GetCSP() const;
     64  void SetCSP(nsIContentSecurityPolicy* aPolicy);
     65  static nsIContentSecurityPolicy* GetCSP(
     66      const nsIPolicyContainer* aPolicyContainer);
     67 
     68  // == Integrity Policy ==
     69  nsIIntegrityPolicy* GetIntegrityPolicy() const;
     70  void SetIntegrityPolicy(nsIIntegrityPolicy* aPolicy);
     71  static nsIIntegrityPolicy* GetIntegrityPolicy(
     72      const nsIPolicyContainer* aPolicyContainer);
     73 
     74 private:
     75  nsCOMPtr<nsIContentSecurityPolicy> mCSP;
     76  nsCOMPtr<nsIIntegrityPolicy> mIntegrityPolicy;
     77 
     78 protected:
     79  virtual ~PolicyContainer();
     80 };
     81 
     82 #endif /* PolicyContainer_h___ */