mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-09 11:06:10 +00:00
LibWeb: Migrate TrustedTypes to Utf16String
This commit is contained in:
parent
7559084b22
commit
cf211cf99a
Notes:
github-actions[bot]
2025-08-11 11:22:35 +00:00
Author: https://github.com/tete17
Commit: cf211cf99a
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5668
Reviewed-by: https://github.com/ADKaster
Reviewed-by: https://github.com/Lubrsi ✅
Reviewed-by: https://github.com/tcl3
6 changed files with 81 additions and 82 deletions
|
@ -20,7 +20,7 @@ namespace Web::TrustedTypes {
|
||||||
|
|
||||||
GC_DEFINE_ALLOCATOR(TrustedTypePolicy);
|
GC_DEFINE_ALLOCATOR(TrustedTypePolicy);
|
||||||
|
|
||||||
TrustedTypePolicy::TrustedTypePolicy(JS::Realm& realm, String const& name, TrustedTypePolicyOptions const& options)
|
TrustedTypePolicy::TrustedTypePolicy(JS::Realm& realm, Utf16String const& name, TrustedTypePolicyOptions const& options)
|
||||||
: PlatformObject(realm)
|
: PlatformObject(realm)
|
||||||
, m_name(name)
|
, m_name(name)
|
||||||
, m_options(options)
|
, m_options(options)
|
||||||
|
@ -34,7 +34,7 @@ void TrustedTypePolicy::initialize(JS::Realm& realm)
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicy-createhtml
|
// https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicy-createhtml
|
||||||
WebIDL::ExceptionOr<GC::Root<TrustedHTML>> TrustedTypePolicy::create_html(String const& input, GC::RootVector<JS::Value> const& arguments)
|
WebIDL::ExceptionOr<GC::Root<TrustedHTML>> TrustedTypePolicy::create_html(Utf16String const& input, GC::RootVector<JS::Value> const& arguments)
|
||||||
{
|
{
|
||||||
// 1. Returns the result of executing the Create a Trusted Type algorithm, with the following arguments:
|
// 1. Returns the result of executing the Create a Trusted Type algorithm, with the following arguments:
|
||||||
// policy
|
// policy
|
||||||
|
@ -50,7 +50,7 @@ WebIDL::ExceptionOr<GC::Root<TrustedHTML>> TrustedTypePolicy::create_html(String
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicy-createscript
|
// https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicy-createscript
|
||||||
WebIDL::ExceptionOr<GC::Root<TrustedScript>> TrustedTypePolicy::create_script(String const& input, GC::RootVector<JS::Value> const& arguments)
|
WebIDL::ExceptionOr<GC::Root<TrustedScript>> TrustedTypePolicy::create_script(Utf16String const& input, GC::RootVector<JS::Value> const& arguments)
|
||||||
{
|
{
|
||||||
// 1. Returns the result of executing the Create a Trusted Type algorithm, with the following arguments:
|
// 1. Returns the result of executing the Create a Trusted Type algorithm, with the following arguments:
|
||||||
// policy
|
// policy
|
||||||
|
@ -66,7 +66,7 @@ WebIDL::ExceptionOr<GC::Root<TrustedScript>> TrustedTypePolicy::create_script(St
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicy-createscripturl
|
// https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicy-createscripturl
|
||||||
WebIDL::ExceptionOr<GC::Root<TrustedScriptURL>> TrustedTypePolicy::create_script_url(String const& input, GC::RootVector<JS::Value> const& arguments)
|
WebIDL::ExceptionOr<GC::Root<TrustedScriptURL>> TrustedTypePolicy::create_script_url(Utf16String const& input, GC::RootVector<JS::Value> const& arguments)
|
||||||
{
|
{
|
||||||
// 1. Returns the result of executing the Create a Trusted Type algorithm, with the following arguments:
|
// 1. Returns the result of executing the Create a Trusted Type algorithm, with the following arguments:
|
||||||
// policy
|
// policy
|
||||||
|
@ -82,7 +82,7 @@ WebIDL::ExceptionOr<GC::Root<TrustedScriptURL>> TrustedTypePolicy::create_script
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#create-a-trusted-type-algorithm
|
// https://w3c.github.io/trusted-types/dist/spec/#create-a-trusted-type-algorithm
|
||||||
TrustedTypesVariants TrustedTypePolicy::create_a_trusted_type(TrustedTypeName trusted_type_name, String const& value, GC::RootVector<JS::Value> const& arguments)
|
TrustedTypesVariants TrustedTypePolicy::create_a_trusted_type(TrustedTypeName trusted_type_name, Utf16String const& value, GC::RootVector<JS::Value> const& arguments)
|
||||||
{
|
{
|
||||||
auto& vm = this->vm();
|
auto& vm = this->vm();
|
||||||
auto& realm = this->realm();
|
auto& realm = this->realm();
|
||||||
|
@ -124,7 +124,7 @@ TrustedTypesVariants TrustedTypePolicy::create_a_trusted_type(TrustedTypeName tr
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#abstract-opdef-get-trusted-type-policy-value
|
// https://w3c.github.io/trusted-types/dist/spec/#abstract-opdef-get-trusted-type-policy-value
|
||||||
WebIDL::ExceptionOr<JS::Value> TrustedTypePolicy::get_trusted_type_policy_value(TrustedTypeName trusted_type_name, String const& value, GC::RootVector<JS::Value> const& values, ThrowIfCallbackMissing throw_if_missing)
|
WebIDL::ExceptionOr<JS::Value> TrustedTypePolicy::get_trusted_type_policy_value(TrustedTypeName trusted_type_name, Utf16String const& value, GC::RootVector<JS::Value> const& values, ThrowIfCallbackMissing throw_if_missing)
|
||||||
{
|
{
|
||||||
auto& vm = this->vm();
|
auto& vm = this->vm();
|
||||||
|
|
||||||
|
|
|
@ -41,21 +41,21 @@ class TrustedTypePolicy final : public Bindings::PlatformObject {
|
||||||
public:
|
public:
|
||||||
virtual ~TrustedTypePolicy() override = default;
|
virtual ~TrustedTypePolicy() override = default;
|
||||||
|
|
||||||
String const& name() const { return m_name; }
|
Utf16String const& name() const { return m_name; }
|
||||||
|
|
||||||
WebIDL::ExceptionOr<GC::Root<TrustedHTML>> create_html(String const&, GC::RootVector<JS::Value> const&);
|
WebIDL::ExceptionOr<GC::Root<TrustedHTML>> create_html(Utf16String const&, GC::RootVector<JS::Value> const&);
|
||||||
WebIDL::ExceptionOr<GC::Root<TrustedScript>> create_script(String const&, GC::RootVector<JS::Value> const&);
|
WebIDL::ExceptionOr<GC::Root<TrustedScript>> create_script(Utf16String const&, GC::RootVector<JS::Value> const&);
|
||||||
WebIDL::ExceptionOr<GC::Root<TrustedScriptURL>> create_script_url(String const&, GC::RootVector<JS::Value> const&);
|
WebIDL::ExceptionOr<GC::Root<TrustedScriptURL>> create_script_url(Utf16String const&, GC::RootVector<JS::Value> const&);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit TrustedTypePolicy(JS::Realm&, String const&, TrustedTypePolicyOptions const&);
|
explicit TrustedTypePolicy(JS::Realm&, Utf16String const&, TrustedTypePolicyOptions const&);
|
||||||
virtual void initialize(JS::Realm&) override;
|
virtual void initialize(JS::Realm&) override;
|
||||||
|
|
||||||
TrustedTypesVariants create_a_trusted_type(TrustedTypeName, String const&, GC::RootVector<JS::Value> const& values);
|
TrustedTypesVariants create_a_trusted_type(TrustedTypeName, Utf16String const&, GC::RootVector<JS::Value> const& values);
|
||||||
|
|
||||||
WebIDL::ExceptionOr<JS::Value> get_trusted_type_policy_value(TrustedTypeName, String const& value, GC::RootVector<JS::Value> const& values, ThrowIfCallbackMissing throw_if_missing);
|
WebIDL::ExceptionOr<JS::Value> get_trusted_type_policy_value(TrustedTypeName, Utf16String const& value, GC::RootVector<JS::Value> const& values, ThrowIfCallbackMissing throw_if_missing);
|
||||||
|
|
||||||
String const m_name;
|
Utf16String const m_name;
|
||||||
TrustedTypePolicyOptions const m_options;
|
TrustedTypePolicyOptions const m_options;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,10 @@
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#trusted-type-policy
|
// https://w3c.github.io/trusted-types/dist/spec/#trusted-type-policy
|
||||||
[Exposed=(Window,Worker)]
|
[Exposed=(Window,Worker)]
|
||||||
interface TrustedTypePolicy {
|
interface TrustedTypePolicy {
|
||||||
readonly attribute DOMString name;
|
readonly attribute Utf16DOMString name;
|
||||||
TrustedHTML createHTML(DOMString input, any... arguments);
|
TrustedHTML createHTML(Utf16DOMString input, any... arguments);
|
||||||
TrustedScript createScript(DOMString input, any... arguments);
|
TrustedScript createScript(Utf16DOMString input, any... arguments);
|
||||||
TrustedScriptURL createScriptURL(DOMString input, any... arguments);
|
TrustedScriptURL createScriptURL(Utf16DOMString input, any... arguments);
|
||||||
};
|
};
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#trusted-type-policy-options
|
// https://w3c.github.io/trusted-types/dist/spec/#trusted-type-policy-options
|
||||||
|
@ -17,6 +17,6 @@ dictionary TrustedTypePolicyOptions {
|
||||||
CreateScriptCallback createScript;
|
CreateScriptCallback createScript;
|
||||||
CreateScriptURLCallback createScriptURL;
|
CreateScriptURLCallback createScriptURL;
|
||||||
};
|
};
|
||||||
callback CreateHTMLCallback = DOMString? (DOMString input, any... arguments);
|
callback CreateHTMLCallback = Utf16DOMString? (Utf16DOMString input, any... arguments);
|
||||||
callback CreateScriptCallback = DOMString? (DOMString input, any... arguments);
|
callback CreateScriptCallback = Utf16DOMString? (Utf16DOMString input, any... arguments);
|
||||||
callback CreateScriptURLCallback = USVString? (DOMString input, any... arguments);
|
callback CreateScriptURLCallback = Utf16USVString? (Utf16DOMString input, any... arguments);
|
||||||
|
|
|
@ -37,7 +37,7 @@ GC::Ref<TrustedTypePolicyFactory> TrustedTypePolicyFactory::create(JS::Realm& re
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicyfactory-getattributetype
|
// https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicyfactory-getattributetype
|
||||||
Optional<String> TrustedTypePolicyFactory::get_attribute_type(String const& tag_name, String& attribute, Optional<String> element_ns, Optional<String> attr_ns)
|
Optional<Utf16String> TrustedTypePolicyFactory::get_attribute_type(Utf16String const& tag_name, Utf16String& attribute, Optional<Utf16String> element_ns, Optional<Utf16String> attr_ns)
|
||||||
{
|
{
|
||||||
// 1. Set localName to tagName in ASCII lowercase.
|
// 1. Set localName to tagName in ASCII lowercase.
|
||||||
auto const local_name = tag_name.to_ascii_lowercase();
|
auto const local_name = tag_name.to_ascii_lowercase();
|
||||||
|
@ -47,7 +47,7 @@ Optional<String> TrustedTypePolicyFactory::get_attribute_type(String const& tag_
|
||||||
|
|
||||||
// 3. If elementNs is null or an empty string, set elementNs to HTML namespace.
|
// 3. If elementNs is null or an empty string, set elementNs to HTML namespace.
|
||||||
if (!element_ns.has_value() || element_ns.value().is_empty())
|
if (!element_ns.has_value() || element_ns.value().is_empty())
|
||||||
element_ns = String { Namespace::HTML };
|
element_ns = Utf16String::from_utf8(Namespace::HTML);
|
||||||
|
|
||||||
// 4. If attrNs is an empty string, set attrNs to null.
|
// 4. If attrNs is an empty string, set attrNs to null.
|
||||||
if (attr_ns.has_value() && attr_ns.value().is_empty())
|
if (attr_ns.has_value() && attr_ns.value().is_empty())
|
||||||
|
@ -56,19 +56,19 @@ Optional<String> TrustedTypePolicyFactory::get_attribute_type(String const& tag_
|
||||||
// FIXME: We don't have a method in ElementFactory that can give us the interface name but these are all the cases
|
// FIXME: We don't have a method in ElementFactory that can give us the interface name but these are all the cases
|
||||||
// we care about in the table in get_trusted_type_data_for_attribute function
|
// we care about in the table in get_trusted_type_data_for_attribute function
|
||||||
// 5. Let interface be the element interface for localName and elementNs.
|
// 5. Let interface be the element interface for localName and elementNs.
|
||||||
String interface;
|
Utf16String interface;
|
||||||
if (local_name == HTML::TagNames::iframe && element_ns == Namespace::HTML) {
|
if (local_name == HTML::TagNames::iframe && element_ns == Namespace::HTML) {
|
||||||
interface = "HTMLIFrameElement"_string;
|
interface = "HTMLIFrameElement"_utf16;
|
||||||
} else if (local_name == HTML::TagNames::script && element_ns == Namespace::HTML) {
|
} else if (local_name == HTML::TagNames::script && element_ns == Namespace::HTML) {
|
||||||
interface = "HTMLScriptElement"_string;
|
interface = "HTMLScriptElement"_utf16;
|
||||||
} else if (local_name == SVG::TagNames::script && element_ns == Namespace::SVG) {
|
} else if (local_name == SVG::TagNames::script && element_ns == Namespace::SVG) {
|
||||||
interface = "SVGScriptElement"_string;
|
interface = "SVGScriptElement"_utf16;
|
||||||
} else {
|
} else {
|
||||||
interface = "Element"_string;
|
interface = "Element"_utf16;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. Let expectedType be null.
|
// 6. Let expectedType be null.
|
||||||
Optional<String> expected_type {};
|
Optional<Utf16String> expected_type {};
|
||||||
|
|
||||||
// 7. Set attributeData to the result of Get Trusted Type data for attribute algorithm,
|
// 7. Set attributeData to the result of Get Trusted Type data for attribute algorithm,
|
||||||
// with the following arguments, interface as element, attribute, attrNs
|
// with the following arguments, interface as element, attribute, attrNs
|
||||||
|
@ -84,38 +84,38 @@ Optional<String> TrustedTypePolicyFactory::get_attribute_type(String const& tag_
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicyfactory-getpropertytype
|
// https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicyfactory-getpropertytype
|
||||||
Optional<String> TrustedTypePolicyFactory::get_property_type(String const& tag_name, String const& property, Optional<String> element_ns)
|
Optional<Utf16String> TrustedTypePolicyFactory::get_property_type(Utf16String const& tag_name, Utf16String const& property, Optional<Utf16String> element_ns)
|
||||||
{
|
{
|
||||||
// 1. Set localName to tagName in ASCII lowercase.
|
// 1. Set localName to tagName in ASCII lowercase.
|
||||||
auto const local_name = tag_name.to_ascii_lowercase();
|
auto const local_name = tag_name.to_ascii_lowercase();
|
||||||
|
|
||||||
// 2. If elementNs is null or an empty string, set elementNs to HTML namespace.
|
// 2. If elementNs is null or an empty string, set elementNs to HTML namespace.
|
||||||
if (!element_ns.has_value() || element_ns.value().is_empty())
|
if (!element_ns.has_value() || element_ns.value().is_empty())
|
||||||
element_ns = String { Namespace::HTML };
|
element_ns = Utf16String::from_utf8(Namespace::HTML);
|
||||||
|
|
||||||
// FIXME: We don't have a method in ElementFactory that can give us the interface name but these are all the cases
|
// FIXME: We don't have a method in ElementFactory that can give us the interface name but these are all the cases
|
||||||
// we care about in the table in get_trusted_type_data_for_attribute function
|
// we care about in the table in get_trusted_type_data_for_attribute function
|
||||||
// 3. Let interface be the element interface for localName and elementNs.
|
// 3. Let interface be the element interface for localName and elementNs.
|
||||||
String interface;
|
Utf16String interface;
|
||||||
if (local_name == HTML::TagNames::iframe && element_ns == Namespace::HTML) {
|
if (local_name == HTML::TagNames::iframe && element_ns == Namespace::HTML) {
|
||||||
interface = "HTMLIFrameElement"_string;
|
interface = "HTMLIFrameElement"_utf16;
|
||||||
} else if (local_name == HTML::TagNames::script && element_ns == Namespace::HTML) {
|
} else if (local_name == HTML::TagNames::script && element_ns == Namespace::HTML) {
|
||||||
interface = "HTMLScriptElement"_string;
|
interface = "HTMLScriptElement"_utf16;
|
||||||
} else {
|
} else {
|
||||||
interface = "Element"_string;
|
interface = "Element"_utf16;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Let expectedType be null.
|
// 4. Let expectedType be null.
|
||||||
Optional<String> expected_type;
|
Optional<Utf16String> expected_type;
|
||||||
|
|
||||||
static Vector<Array<String, 3>> const table {
|
static Vector<Array<Utf16String, 3>> const table {
|
||||||
{ "HTMLIFrameElement"_string, "srcdoc"_string, "TrustedHTML"_string },
|
{ "HTMLIFrameElement"_utf16, "srcdoc"_utf16, "TrustedHTML"_utf16 },
|
||||||
{ "HTMLScriptElement"_string, "innerText"_string, "TrustedScript"_string },
|
{ "HTMLScriptElement"_utf16, "innerText"_utf16, "TrustedScript"_utf16 },
|
||||||
{ "HTMLScriptElement"_string, "src"_string, "TrustedScriptURL"_string },
|
{ "HTMLScriptElement"_utf16, "src"_utf16, "TrustedScriptURL"_utf16 },
|
||||||
{ "HTMLScriptElement"_string, "text"_string, "TrustedScript"_string },
|
{ "HTMLScriptElement"_utf16, "text"_utf16, "TrustedScript"_utf16 },
|
||||||
{ "HTMLScriptElement"_string, "textContent"_string, "TrustedScript"_string },
|
{ "HTMLScriptElement"_utf16, "textContent"_utf16, "TrustedScript"_utf16 },
|
||||||
{ "*"_string, "innerHTML"_string, "TrustedHTML"_string },
|
{ "*"_utf16, "innerHTML"_utf16, "TrustedHTML"_utf16 },
|
||||||
{ "*"_string, "outerHTML"_string, "TrustedHTML"_string },
|
{ "*"_utf16, "outerHTML"_utf16, "TrustedHTML"_utf16 },
|
||||||
};
|
};
|
||||||
|
|
||||||
// 5. Find the row in the following table, where the first column is "*" or interface’s name, and property is in the second column.
|
// 5. Find the row in the following table, where the first column is "*" or interface’s name, and property is in the second column.
|
||||||
|
@ -150,7 +150,7 @@ void TrustedTypePolicyFactory::visit_edges(Visitor& visitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicyfactory-createpolicy
|
// https://w3c.github.io/trusted-types/dist/spec/#dom-trustedtypepolicyfactory-createpolicy
|
||||||
WebIDL::ExceptionOr<GC::Ref<TrustedTypePolicy>> TrustedTypePolicyFactory::create_policy(String const& policy_name, TrustedTypePolicyOptions const& policy_options)
|
WebIDL::ExceptionOr<GC::Ref<TrustedTypePolicy>> TrustedTypePolicyFactory::create_policy(Utf16String const& policy_name, TrustedTypePolicyOptions const& policy_options)
|
||||||
{
|
{
|
||||||
// 1. Returns the result of executing a Create a Trusted Type Policy algorithm, with the following arguments:
|
// 1. Returns the result of executing a Create a Trusted Type Policy algorithm, with the following arguments:
|
||||||
// factory: this value
|
// factory: this value
|
||||||
|
@ -182,7 +182,7 @@ bool TrustedTypePolicyFactory::is_script_url(JS::Value value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#create-trusted-type-policy-algorithm
|
// https://w3c.github.io/trusted-types/dist/spec/#create-trusted-type-policy-algorithm
|
||||||
WebIDL::ExceptionOr<GC::Ref<TrustedTypePolicy>> TrustedTypePolicyFactory::create_a_trusted_type_policy(String const& policy_name, TrustedTypePolicyOptions const& options, JS::Object& global)
|
WebIDL::ExceptionOr<GC::Ref<TrustedTypePolicy>> TrustedTypePolicyFactory::create_a_trusted_type_policy(Utf16String const& policy_name, TrustedTypePolicyOptions const& options, JS::Object& global)
|
||||||
{
|
{
|
||||||
auto& realm = this->realm();
|
auto& realm = this->realm();
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ WebIDL::ExceptionOr<GC::Ref<TrustedTypePolicy>> TrustedTypePolicyFactory::create
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://www.w3.org/TR/trusted-types/#should-block-create-policy
|
// https://www.w3.org/TR/trusted-types/#should-block-create-policy
|
||||||
ContentSecurityPolicy::Directives::Directive::Result TrustedTypePolicyFactory::should_trusted_type_policy_be_blocked_by_content_security_policy(JS::Object& global, String const& policy_name, Vector<String> const& created_policy_names)
|
ContentSecurityPolicy::Directives::Directive::Result TrustedTypePolicyFactory::should_trusted_type_policy_be_blocked_by_content_security_policy(JS::Object& global, Utf16String const& policy_name, Vector<Utf16String> const& created_policy_names)
|
||||||
{
|
{
|
||||||
auto& realm = this->realm();
|
auto& realm = this->realm();
|
||||||
|
|
||||||
|
@ -248,7 +248,7 @@ ContentSecurityPolicy::Directives::Directive::Result TrustedTypePolicyFactory::s
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. If directive’s value does not contain a tt-policy-name, which value is policyName, and directive’s value does not contain a tt-wildcard, set createViolation to true.
|
// 6. If directive’s value does not contain a tt-policy-name, which value is policyName, and directive’s value does not contain a tt-wildcard, set createViolation to true.
|
||||||
auto directive_value_iterator = directive->value().find(policy_name);
|
auto directive_value_iterator = directive->value().find(policy_name.to_utf8());
|
||||||
if (directive_value_iterator.is_end()) {
|
if (directive_value_iterator.is_end()) {
|
||||||
auto maybe_wild_card = directive->value().find_if([](auto const& directive_value) {
|
auto maybe_wild_card = directive->value().find_if([](auto const& directive_value) {
|
||||||
return directive_value.equals_ignoring_ascii_case(ContentSecurityPolicy::Directives::KeywordTrustedTypes::WildCard);
|
return directive_value.equals_ignoring_ascii_case(ContentSecurityPolicy::Directives::KeywordTrustedTypes::WildCard);
|
||||||
|
@ -269,9 +269,8 @@ ContentSecurityPolicy::Directives::Directive::Result TrustedTypePolicyFactory::s
|
||||||
violation->set_resource(ContentSecurityPolicy::Violation::Resource::TrustedTypesPolicy);
|
violation->set_resource(ContentSecurityPolicy::Violation::Resource::TrustedTypesPolicy);
|
||||||
|
|
||||||
// 10. Set violation’s sample to the substring of policyName, containing its first 40 characters.
|
// 10. Set violation’s sample to the substring of policyName, containing its first 40 characters.
|
||||||
Utf8View source_view { policy_name };
|
auto sample = policy_name.substring_view(0, min(policy_name.length_in_code_points(), 40));
|
||||||
auto sample = source_view.unicode_substring_view(0, min(source_view.length(), 40));
|
violation->set_sample(Utf16String::from_utf16(sample).to_utf8());
|
||||||
violation->set_sample(String::from_utf8_without_validation(sample.as_string().bytes()));
|
|
||||||
|
|
||||||
// 11. Execute Report a violation on violation.
|
// 11. Execute Report a violation on violation.
|
||||||
violation->report_a_violation(realm);
|
violation->report_a_violation(realm);
|
||||||
|
@ -286,7 +285,7 @@ ContentSecurityPolicy::Directives::Directive::Result TrustedTypePolicyFactory::s
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#abstract-opdef-get-trusted-type-data-for-attribute
|
// https://w3c.github.io/trusted-types/dist/spec/#abstract-opdef-get-trusted-type-data-for-attribute
|
||||||
Optional<TrustedTypeData> get_trusted_type_data_for_attribute(String const& element, String const& attribute, Optional<String> const& attribute_ns)
|
Optional<TrustedTypeData> get_trusted_type_data_for_attribute(Utf16String const& element, Utf16String const& attribute, Optional<Utf16String> const& attribute_ns)
|
||||||
{
|
{
|
||||||
// 1. Let data be null.
|
// 1. Let data be null.
|
||||||
Optional<TrustedTypeData const&> data {};
|
Optional<TrustedTypeData const&> data {};
|
||||||
|
@ -294,10 +293,10 @@ Optional<TrustedTypeData> get_trusted_type_data_for_attribute(String const& elem
|
||||||
// 2. If attributeNs is null, and attribute is the name of an event handler content attribute, then:
|
// 2. If attributeNs is null, and attribute is the name of an event handler content attribute, then:
|
||||||
if (!attribute_ns.has_value()) {
|
if (!attribute_ns.has_value()) {
|
||||||
#undef __ENUMERATE
|
#undef __ENUMERATE
|
||||||
#define __ENUMERATE(attribute_name, event_name) \
|
#define __ENUMERATE(attribute_name, event_name) \
|
||||||
if (attribute == HTML::AttributeNames::attribute_name) { \
|
if (attribute == HTML::AttributeNames::attribute_name) { \
|
||||||
/* 1. Return (Element, null, attribute, TrustedScript, "Element " + attribute). */ \
|
/* 1. Return (Element, null, attribute, TrustedScript, "Element " + attribute). */ \
|
||||||
return TrustedTypeData { "Element"_string, {}, attribute, "TrustedScript"_string, "Element " #attribute_name ""_string }; \
|
return TrustedTypeData { "Element"_utf16, {}, attribute, "TrustedScript"_utf16, "Element " #attribute_name ""_utf16 }; \
|
||||||
}
|
}
|
||||||
ENUMERATE_GLOBAL_EVENT_HANDLERS(__ENUMERATE)
|
ENUMERATE_GLOBAL_EVENT_HANDLERS(__ENUMERATE)
|
||||||
ENUMERATE_WINDOW_EVENT_HANDLERS(__ENUMERATE)
|
ENUMERATE_WINDOW_EVENT_HANDLERS(__ENUMERATE)
|
||||||
|
@ -305,10 +304,10 @@ Optional<TrustedTypeData> get_trusted_type_data_for_attribute(String const& elem
|
||||||
}
|
}
|
||||||
|
|
||||||
static Vector<TrustedTypeData> const table {
|
static Vector<TrustedTypeData> const table {
|
||||||
{ "HTMLIFrameElement"_string, {}, "srcdoc"_string, "TrustedHTML"_string, "HTMLIFrameElement srcdoc"_string },
|
{ "HTMLIFrameElement"_utf16, {}, "srcdoc"_utf16, "TrustedHTML"_utf16, "HTMLIFrameElement srcdoc"_utf16 },
|
||||||
{ "HTMLScriptElement"_string, {}, "src"_string, "TrustedScriptURL"_string, "HTMLScriptElement src"_string },
|
{ "HTMLScriptElement"_utf16, {}, "src"_utf16, "TrustedScriptURL"_utf16, "HTMLScriptElement src"_utf16 },
|
||||||
{ "SVGScriptElement"_string, {}, "href"_string, "TrustedScriptURL"_string, "SVGScriptElement href"_string },
|
{ "SVGScriptElement"_utf16, {}, "href"_utf16, "TrustedScriptURL"_utf16, "SVGScriptElement href"_utf16 },
|
||||||
{ "SVGScriptElement"_string, Namespace::XLink.to_string(), "href"_string, "TrustedScriptURL"_string, "SVGScriptElement href"_string },
|
{ "SVGScriptElement"_utf16, Utf16String::from_utf8(Namespace::XLink), "href"_utf16, "TrustedScriptURL"_utf16, "SVGScriptElement href"_utf16 },
|
||||||
};
|
};
|
||||||
|
|
||||||
// 3. Find the row in the following table, where element is in the first column, attributeNs is in the second column,
|
// 3. Find the row in the following table, where element is in the first column, attributeNs is in the second column,
|
||||||
|
|
|
@ -23,14 +23,14 @@ public:
|
||||||
|
|
||||||
virtual ~TrustedTypePolicyFactory() override { }
|
virtual ~TrustedTypePolicyFactory() override { }
|
||||||
|
|
||||||
WebIDL::ExceptionOr<GC::Ref<TrustedTypePolicy>> create_policy(String const&, TrustedTypePolicyOptions const&);
|
WebIDL::ExceptionOr<GC::Ref<TrustedTypePolicy>> create_policy(Utf16String const&, TrustedTypePolicyOptions const&);
|
||||||
|
|
||||||
bool is_html(JS::Value);
|
bool is_html(JS::Value);
|
||||||
bool is_script(JS::Value);
|
bool is_script(JS::Value);
|
||||||
bool is_script_url(JS::Value);
|
bool is_script_url(JS::Value);
|
||||||
|
|
||||||
Optional<String> get_attribute_type(String const& tag_name, String& attribute, Optional<String> element_ns, Optional<String> attr_ns);
|
Optional<Utf16String> get_attribute_type(Utf16String const& tag_name, Utf16String& attribute, Optional<Utf16String> element_ns, Optional<Utf16String> attr_ns);
|
||||||
Optional<String> get_property_type(String const& tag_name, String const& property, Optional<String> element_ns);
|
Optional<Utf16String> get_property_type(Utf16String const& tag_name, Utf16String const& property, Optional<Utf16String> element_ns);
|
||||||
|
|
||||||
GC::Ptr<TrustedTypePolicy> default_policy() const
|
GC::Ptr<TrustedTypePolicy> default_policy() const
|
||||||
{
|
{
|
||||||
|
@ -43,24 +43,24 @@ private:
|
||||||
virtual void initialize(JS::Realm&) override;
|
virtual void initialize(JS::Realm&) override;
|
||||||
virtual void visit_edges(Visitor&) override;
|
virtual void visit_edges(Visitor&) override;
|
||||||
|
|
||||||
WebIDL::ExceptionOr<GC::Ref<TrustedTypePolicy>> create_a_trusted_type_policy(String const&, TrustedTypePolicyOptions const&, JS::Object&);
|
WebIDL::ExceptionOr<GC::Ref<TrustedTypePolicy>> create_a_trusted_type_policy(Utf16String const&, TrustedTypePolicyOptions const&, JS::Object&);
|
||||||
ContentSecurityPolicy::Directives::Directive::Result should_trusted_type_policy_be_blocked_by_content_security_policy(JS::Object&, String const&, Vector<String> const&);
|
ContentSecurityPolicy::Directives::Directive::Result should_trusted_type_policy_be_blocked_by_content_security_policy(JS::Object&, Utf16String const&, Vector<Utf16String> const&);
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#trustedtypepolicyfactory-created-policy-names
|
// https://w3c.github.io/trusted-types/dist/spec/#trustedtypepolicyfactory-created-policy-names
|
||||||
Vector<String> m_created_policy_names;
|
Vector<Utf16String> m_created_policy_names;
|
||||||
|
|
||||||
// https://w3c.github.io/trusted-types/dist/spec/#trustedtypepolicyfactory-default-policy
|
// https://w3c.github.io/trusted-types/dist/spec/#trustedtypepolicyfactory-default-policy
|
||||||
GC::Ptr<TrustedTypePolicy> m_default_policy;
|
GC::Ptr<TrustedTypePolicy> m_default_policy;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TrustedTypeData {
|
struct TrustedTypeData {
|
||||||
String element;
|
Utf16String element;
|
||||||
Optional<String> attribute_ns;
|
Optional<Utf16String> attribute_ns;
|
||||||
String attribute_local_name;
|
Utf16String attribute_local_name;
|
||||||
String trusted_type;
|
Utf16String trusted_type;
|
||||||
String sink;
|
Utf16String sink;
|
||||||
};
|
};
|
||||||
|
|
||||||
Optional<TrustedTypeData> get_trusted_type_data_for_attribute(String const&, String const&, Optional<String> const&);
|
Optional<TrustedTypeData> get_trusted_type_data_for_attribute(Utf16String const&, Utf16String const&, Optional<Utf16String> const&);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,20 +4,20 @@
|
||||||
[Exposed=(Window,Worker)]
|
[Exposed=(Window,Worker)]
|
||||||
interface TrustedTypePolicyFactory {
|
interface TrustedTypePolicyFactory {
|
||||||
TrustedTypePolicy createPolicy(
|
TrustedTypePolicy createPolicy(
|
||||||
DOMString policyName, optional TrustedTypePolicyOptions policyOptions = {});
|
Utf16DOMString policyName, optional TrustedTypePolicyOptions policyOptions = {});
|
||||||
boolean isHTML(any value);
|
boolean isHTML(any value);
|
||||||
boolean isScript(any value);
|
boolean isScript(any value);
|
||||||
boolean isScriptURL(any value);
|
boolean isScriptURL(any value);
|
||||||
[FIXME] readonly attribute TrustedHTML emptyHTML;
|
[FIXME] readonly attribute TrustedHTML emptyHTML;
|
||||||
[FIXME] readonly attribute TrustedScript emptyScript;
|
[FIXME] readonly attribute TrustedScript emptyScript;
|
||||||
DOMString? getAttributeType(
|
Utf16DOMString? getAttributeType(
|
||||||
DOMString tagName,
|
Utf16DOMString tagName,
|
||||||
DOMString attribute,
|
Utf16DOMString attribute,
|
||||||
optional DOMString? elementNs = "",
|
optional Utf16DOMString? elementNs = "",
|
||||||
optional DOMString? attrNs = "");
|
optional Utf16DOMString? attrNs = "");
|
||||||
DOMString? getPropertyType(
|
Utf16DOMString? getPropertyType(
|
||||||
DOMString tagName,
|
Utf16DOMString tagName,
|
||||||
DOMString property,
|
Utf16DOMString property,
|
||||||
optional DOMString? elementNs = "");
|
optional Utf16DOMString? elementNs = "");
|
||||||
readonly attribute TrustedTypePolicy? defaultPolicy;
|
readonly attribute TrustedTypePolicy? defaultPolicy;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue