diff options
Diffstat (limited to 'dom/security/trusted-types/TrustedTypePolicy.h')
-rw-r--r-- | dom/security/trusted-types/TrustedTypePolicy.h | 49 |
1 files changed, 36 insertions, 13 deletions
diff --git a/dom/security/trusted-types/TrustedTypePolicy.h b/dom/security/trusted-types/TrustedTypePolicy.h index 22d99947b3..d677088285 100644 --- a/dom/security/trusted-types/TrustedTypePolicy.h +++ b/dom/security/trusted-types/TrustedTypePolicy.h @@ -9,19 +9,20 @@ #include "js/TypeDecls.h" #include "js/Value.h" +#include "mozilla/Attributes.h" #include "mozilla/RefPtr.h" #include "mozilla/UniquePtr.h" #include "mozilla/dom/BindingDeclarations.h" -#include "mozilla/dom/DOMString.h" #include "mozilla/dom/TrustedHTML.h" #include "mozilla/dom/TrustedScript.h" #include "mozilla/dom/TrustedScriptURL.h" #include "nsISupportsImpl.h" -#include "nsStringFwd.h" +#include "nsString.h" #include "nsWrapperCache.h" namespace mozilla::dom { +class DOMString; class TrustedTypePolicyFactory; // https://w3c.github.io/trusted-types/dist/spec/#trusted-type-policy @@ -30,8 +31,14 @@ class TrustedTypePolicy : public nsWrapperCache { NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(TrustedTypePolicy) NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(TrustedTypePolicy) - explicit TrustedTypePolicy(TrustedTypePolicyFactory* aParentObject) - : mParentObject{aParentObject} {} + struct Options { + RefPtr<CreateHTMLCallback> mCreateHTMLCallback; + RefPtr<CreateScriptCallback> mCreateScriptCallback; + RefPtr<CreateScriptURLCallback> mCreateScriptURLCallback; + }; + + TrustedTypePolicy(TrustedTypePolicyFactory* aParentObject, + const nsAString& aName, Options&& aOptions); // Required for Web IDL binding. TrustedTypePolicyFactory* GetParentObject() const { return mParentObject; } @@ -41,30 +48,46 @@ class TrustedTypePolicy : public nsWrapperCache { JS::Handle<JSObject*> aGivenProto) override; // https://w3c.github.io/trusted-types/dist/spec/#trustedtypepolicy-name - void GetName(DOMString& aResult) const { - // TODO: impl. - } + void GetName(DOMString& aResult) const; // https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicy-createhtml - UniquePtr<TrustedHTML> CreateHTML( + MOZ_CAN_RUN_SCRIPT UniquePtr<TrustedHTML> CreateHTML( JSContext* aJSContext, const nsAString& aInput, - const Sequence<JS::Value>& aArguments) const; + const Sequence<JS::Value>& aArguments, ErrorResult& aErrorResult) const; // https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicy-createscript - UniquePtr<TrustedScript> CreateScript( + MOZ_CAN_RUN_SCRIPT UniquePtr<TrustedScript> CreateScript( JSContext* aJSContext, const nsAString& aInput, - const Sequence<JS::Value>& aArguments) const; + const Sequence<JS::Value>& aArguments, ErrorResult& aErrorResult) const; // https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicy-createscripturl - UniquePtr<TrustedScriptURL> CreateScriptURL( + MOZ_CAN_RUN_SCRIPT UniquePtr<TrustedScriptURL> CreateScriptURL( JSContext* aJSContext, const nsAString& aInput, - const Sequence<JS::Value>& aArguments) const; + const Sequence<JS::Value>& aArguments, ErrorResult& aErrorResult) const; private: // Required because this class is ref-counted. virtual ~TrustedTypePolicy() = default; + // https://w3c.github.io/trusted-types/dist/spec/#abstract-opdef-create-a-trusted-type + template <typename T, typename CallbackObject> + MOZ_CAN_RUN_SCRIPT UniquePtr<T> CreateTrustedType( + const RefPtr<CallbackObject>& aCallbackObject, const nsAString& aValue, + const Sequence<JS::Value>& aArguments, ErrorResult& aErrorResult) const; + + // https://w3c.github.io/trusted-types/dist/spec/#abstract-opdef-get-trusted-type-policy-value + // + // @param aResult may become void. + template <typename CallbackObject> + MOZ_CAN_RUN_SCRIPT void DetermineTrustedPolicyValue( + const RefPtr<CallbackObject>& aCallbackObject, const nsAString& aValue, + const Sequence<JS::Value>& aArguments, bool aThrowIfMissing, + ErrorResult& aErrorResult, nsAString& aResult) const; RefPtr<TrustedTypePolicyFactory> mParentObject; + + const nsString mName; + + Options mOptions; }; } // namespace mozilla::dom |