summaryrefslogtreecommitdiffstats
path: root/dom/security/trusted-types/TrustedTypePolicyFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/security/trusted-types/TrustedTypePolicyFactory.cpp')
-rw-r--r--dom/security/trusted-types/TrustedTypePolicyFactory.cpp48
1 files changed, 44 insertions, 4 deletions
diff --git a/dom/security/trusted-types/TrustedTypePolicyFactory.cpp b/dom/security/trusted-types/TrustedTypePolicyFactory.cpp
index 448c51eb3b..c2544124e3 100644
--- a/dom/security/trusted-types/TrustedTypePolicyFactory.cpp
+++ b/dom/security/trusted-types/TrustedTypePolicyFactory.cpp
@@ -22,10 +22,50 @@ JSObject* TrustedTypePolicyFactory::WrapObject(
already_AddRefed<TrustedTypePolicy> TrustedTypePolicyFactory::CreatePolicy(
const nsAString& aPolicyName,
const TrustedTypePolicyOptions& aPolicyOptions) {
- // TODO: implement the spec.
- return MakeRefPtr<TrustedTypePolicy>(this).forget();
+ // TODO: add CSP support.
+
+ // TODO: add default policy support; this requires accessing the default
+ // policy on the C++ side, hence already now ref-counting policy
+ // objects.
+
+ TrustedTypePolicy::Options options;
+
+ if (aPolicyOptions.mCreateHTML.WasPassed()) {
+ options.mCreateHTMLCallback = &aPolicyOptions.mCreateHTML.Value();
+ }
+
+ if (aPolicyOptions.mCreateScript.WasPassed()) {
+ options.mCreateScriptCallback = &aPolicyOptions.mCreateScript.Value();
+ }
+
+ if (aPolicyOptions.mCreateScriptURL.WasPassed()) {
+ options.mCreateScriptURLCallback = &aPolicyOptions.mCreateScriptURL.Value();
+ }
+
+ RefPtr<TrustedTypePolicy> policy =
+ MakeRefPtr<TrustedTypePolicy>(this, aPolicyName, std::move(options));
+
+ mCreatedPolicyNames.AppendElement(aPolicyName);
+
+ return policy.forget();
}
+#define IS_TRUSTED_TYPE_IMPL(_trustedTypeSuffix) \
+ bool TrustedTypePolicyFactory::Is##_trustedTypeSuffix( \
+ JSContext*, const JS::Handle<JS::Value>& aValue) const { \
+ /** \
+ * No need to check the internal slot. \
+ * Ensured by the corresponding test: \
+ * <https://searchfox.org/mozilla-central/rev/b60cb73160843adb5a5a3ec8058e75a69b46acf7/testing/web-platform/tests/trusted-types/TrustedTypePolicyFactory-isXXX.html> \
+ */ \
+ return aValue.isObject() && \
+ IS_INSTANCE_OF(Trusted##_trustedTypeSuffix, &aValue.toObject()); \
+ }
+
+IS_TRUSTED_TYPE_IMPL(HTML);
+IS_TRUSTED_TYPE_IMPL(Script);
+IS_TRUSTED_TYPE_IMPL(ScriptURL);
+
UniquePtr<TrustedHTML> TrustedTypePolicyFactory::EmptyHTML() {
// Preserving the wrapper ensures:
// ```
@@ -37,14 +77,14 @@ UniquePtr<TrustedHTML> TrustedTypePolicyFactory::EmptyHTML() {
// multiple emptyHML objects. Both, the JS- and the C++-objects.
dom::PreserveWrapper(this);
- return MakeUnique<TrustedHTML>();
+ return MakeUnique<TrustedHTML>(EmptyString());
}
UniquePtr<TrustedScript> TrustedTypePolicyFactory::EmptyScript() {
// See the explanation in `EmptyHTML()`.
dom::PreserveWrapper(this);
- return MakeUnique<TrustedScript>();
+ return MakeUnique<TrustedScript>(EmptyString());
}
} // namespace mozilla::dom