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___ */