diff --git a/Libraries/LibWeb/TrustedTypes/TrustedTypePolicyFactory.cpp b/Libraries/LibWeb/TrustedTypes/TrustedTypePolicyFactory.cpp index 4b03c9b22ca..28d8259369f 100644 --- a/Libraries/LibWeb/TrustedTypes/TrustedTypePolicyFactory.cpp +++ b/Libraries/LibWeb/TrustedTypes/TrustedTypePolicyFactory.cpp @@ -31,11 +31,6 @@ namespace Web::TrustedTypes { GC_DEFINE_ALLOCATOR(TrustedTypePolicyFactory); -GC::Ref TrustedTypePolicyFactory::create(JS::Realm& realm) -{ - return realm.create(realm); -} - // https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicyfactory-getattributetype Optional TrustedTypePolicyFactory::get_attribute_type(Utf16String const& tag_name, Utf16String& attribute, Optional element_ns, Optional attr_ns) { @@ -153,6 +148,8 @@ void TrustedTypePolicyFactory::visit_edges(Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_default_policy); + visitor.visit(m_empty_html); + visitor.visit(m_empty_script); } // https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicyfactory-createpolicy @@ -187,6 +184,26 @@ bool TrustedTypePolicyFactory::is_script_url(JS::Value value) return value.is_object() && is(value.as_object()); } +GC::Ref TrustedTypePolicyFactory::empty_html() +{ + auto& realm = this->realm(); + + if (!m_empty_html) + m_empty_html = realm.create(realm, ""_utf16); + + return GC::Ref { *m_empty_html }; +} + +GC::Ref TrustedTypePolicyFactory::empty_script() +{ + auto& realm = this->realm(); + + if (!m_empty_script) + m_empty_script = realm.create(realm, ""_utf16); + + return GC::Ref { *m_empty_script }; +} + // https://w3c.github.io/trusted-types/dist/spec/#create-trusted-type-policy-algorithm WebIDL::ExceptionOr> TrustedTypePolicyFactory::create_a_trusted_type_policy(Utf16String const& policy_name, TrustedTypePolicyOptions const& options, JS::Object& global) { diff --git a/Libraries/LibWeb/TrustedTypes/TrustedTypePolicyFactory.h b/Libraries/LibWeb/TrustedTypes/TrustedTypePolicyFactory.h index e8bcb0edd59..571e8119d0c 100644 --- a/Libraries/LibWeb/TrustedTypes/TrustedTypePolicyFactory.h +++ b/Libraries/LibWeb/TrustedTypes/TrustedTypePolicyFactory.h @@ -19,8 +19,6 @@ class TrustedTypePolicyFactory final : public Bindings::PlatformObject { GC_DECLARE_ALLOCATOR(TrustedTypePolicyFactory); public: - [[nodiscard]] static GC::Ref create(JS::Realm&); - virtual ~TrustedTypePolicyFactory() override { } WebIDL::ExceptionOr> create_policy(Utf16String const&, TrustedTypePolicyOptions const&); @@ -29,6 +27,9 @@ public: bool is_script(JS::Value); bool is_script_url(JS::Value); + GC::Ref empty_html(); + GC::Ref empty_script(); + Optional get_attribute_type(Utf16String const& tag_name, Utf16String& attribute, Optional element_ns, Optional attr_ns); Optional get_property_type(Utf16String const& tag_name, Utf16String const& property, Optional element_ns); @@ -51,6 +52,12 @@ private: // https://w3c.github.io/trusted-types/dist/spec/#trustedtypepolicyfactory-default-policy GC::Ptr m_default_policy; + + // https://www.w3.org/TR/trusted-types/#dom-trustedtypepolicyfactory-emptyhtml + GC::Ptr m_empty_html; + + // https://www.w3.org/TR/trusted-types/#dom-trustedtypepolicyfactory-emptyscript + GC::Ptr m_empty_script; }; struct TrustedTypeData { diff --git a/Libraries/LibWeb/TrustedTypes/TrustedTypePolicyFactory.idl b/Libraries/LibWeb/TrustedTypes/TrustedTypePolicyFactory.idl index 1152afa3f59..23e771d8bb6 100644 --- a/Libraries/LibWeb/TrustedTypes/TrustedTypePolicyFactory.idl +++ b/Libraries/LibWeb/TrustedTypes/TrustedTypePolicyFactory.idl @@ -8,8 +8,8 @@ interface TrustedTypePolicyFactory { boolean isHTML(any value); boolean isScript(any value); boolean isScriptURL(any value); - [FIXME] readonly attribute TrustedHTML emptyHTML; - [FIXME] readonly attribute TrustedScript emptyScript; + readonly attribute TrustedHTML emptyHTML; + readonly attribute TrustedScript emptyScript; Utf16DOMString? getAttributeType( Utf16DOMString tagName, Utf16DOMString attribute,