summaryrefslogtreecommitdiffstats
path: root/dom/security/trusted-types/TrustedTypePolicy.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/security/trusted-types/TrustedTypePolicy.h')
-rw-r--r--dom/security/trusted-types/TrustedTypePolicy.h49
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