mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 10:18:11 +00:00
LibWeb: Port supported property names from DeprecatedString to String
This commit is contained in:
parent
66ac0d88a3
commit
629f661e3b
19 changed files with 59 additions and 59 deletions
|
@ -126,8 +126,8 @@ WebIDL::ExceptionOr<void> LegacyPlatformObject::invoke_indexed_property_setter(J
|
|||
WebIDL::ExceptionOr<void> LegacyPlatformObject::invoke_named_property_setter(DeprecatedString const& property_name, JS::Value value)
|
||||
{
|
||||
// 1. Let creating be true if P is not a supported property name, and false otherwise.
|
||||
Vector<DeprecatedString> supported_property_names = this->supported_property_names();
|
||||
bool creating = !supported_property_names.contains_slow(property_name);
|
||||
Vector<String> supported_property_names = this->supported_property_names();
|
||||
bool creating = !supported_property_names.contains_slow(MUST(String::from_deprecated_string(property_name)));
|
||||
|
||||
// FIXME: We do not have this information at this point, so converting the value is left as an exercise to the inheritor of LegacyPlatformObject.
|
||||
// 2. Let operation be the operation used to declare the indexed property setter.
|
||||
|
@ -219,8 +219,8 @@ JS::ThrowCompletionOr<bool> LegacyPlatformObject::internal_define_own_property(J
|
|||
|
||||
// 1. Let creating be true if P is not a supported property name, and false otherwise.
|
||||
// NOTE: This is in it's own variable to enforce the type.
|
||||
Vector<DeprecatedString> supported_property_names = this->supported_property_names();
|
||||
bool creating = !supported_property_names.contains_slow(property_name_as_string);
|
||||
Vector<String> supported_property_names = this->supported_property_names();
|
||||
bool creating = !supported_property_names.contains_slow(MUST(String::from_deprecated_string(property_name_as_string)));
|
||||
|
||||
// 2. If O implements an interface with the [LegacyOverrideBuiltIns] extended attribute or O does not have an own property named P, then:
|
||||
// NOTE: Own property lookup has to be done manually instead of using Object::has_own_property, as that would use the overridden internal_get_own_property.
|
||||
|
@ -348,7 +348,7 @@ JS::ThrowCompletionOr<JS::MarkedVector<JS::Value>> LegacyPlatformObject::interna
|
|||
// 3. If O supports named properties, then for each P of O’s supported property names that is visible according to the named property visibility algorithm, append P to keys.
|
||||
if (supports_named_properties()) {
|
||||
for (auto& named_property : supported_property_names()) {
|
||||
if (TRY(WebIDL::is_named_property_exposed_on_object({ this }, named_property)))
|
||||
if (TRY(WebIDL::is_named_property_exposed_on_object({ this }, named_property.to_deprecated_string())))
|
||||
keys.append(JS::PrimitiveString::create(vm, named_property));
|
||||
}
|
||||
}
|
||||
|
@ -381,7 +381,7 @@ WebIDL::ExceptionOr<JS::Value> LegacyPlatformObject::named_item_value(FlyString
|
|||
return JS::js_undefined();
|
||||
}
|
||||
|
||||
Vector<DeprecatedString> LegacyPlatformObject::supported_property_names() const
|
||||
Vector<String> LegacyPlatformObject::supported_property_names() const
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ public:
|
|||
|
||||
virtual WebIDL::ExceptionOr<JS::Value> item_value(size_t index) const;
|
||||
virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const;
|
||||
virtual Vector<DeprecatedString> supported_property_names() const;
|
||||
virtual Vector<String> supported_property_names() const;
|
||||
virtual bool is_supported_property_index(u32) const;
|
||||
|
||||
// NOTE: These will crash if you make has_named_property_setter return true but do not override these methods.
|
||||
|
|
|
@ -99,29 +99,28 @@ Element* HTMLCollection::named_item(FlyString const& name_) const
|
|||
}
|
||||
|
||||
// https://dom.spec.whatwg.org/#ref-for-dfn-supported-property-names
|
||||
Vector<DeprecatedString> HTMLCollection::supported_property_names() const
|
||||
Vector<String> HTMLCollection::supported_property_names() const
|
||||
{
|
||||
// 1. Let result be an empty list.
|
||||
Vector<DeprecatedString> result;
|
||||
Vector<String> result;
|
||||
|
||||
// 2. For each element represented by the collection, in tree order:
|
||||
auto elements = collect_matching_elements();
|
||||
|
||||
for (auto& element : elements) {
|
||||
// 1. If element has an ID which is not in result, append element’s ID to result.
|
||||
if (element->has_attribute(HTML::AttributeNames::id)) {
|
||||
auto id = element->deprecated_attribute(HTML::AttributeNames::id);
|
||||
|
||||
if (!result.contains_slow(id))
|
||||
result.append(id);
|
||||
if (auto maybe_id = element->attribute(HTML::AttributeNames::id); maybe_id.has_value()) {
|
||||
if (!result.contains_slow(maybe_id.value()))
|
||||
result.append(maybe_id.release_value());
|
||||
}
|
||||
|
||||
// 2. If element is in the HTML namespace and has a name attribute whose value is neither the empty string nor is in result, append element’s name attribute value to result.
|
||||
if (element->namespace_uri() == Namespace::HTML && element->has_attribute(HTML::AttributeNames::name)) {
|
||||
auto name = element->deprecated_attribute(HTML::AttributeNames::name);
|
||||
|
||||
if (element->namespace_uri() == Namespace::HTML) {
|
||||
if (auto maybe_name = element->attribute(HTML::AttributeNames::name); maybe_name.has_value()) {
|
||||
auto name = maybe_name.release_value();
|
||||
if (!name.is_empty() && !result.contains_slow(name))
|
||||
result.append(name);
|
||||
result.append(move(name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ public:
|
|||
|
||||
virtual WebIDL::ExceptionOr<JS::Value> item_value(size_t index) const override;
|
||||
virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
|
||||
virtual Vector<DeprecatedString> supported_property_names() const override;
|
||||
virtual Vector<String> supported_property_names() const override;
|
||||
virtual bool is_supported_property_index(u32) const override;
|
||||
|
||||
protected:
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include <LibWeb/DOM/Attr.h>
|
||||
#include <LibWeb/DOM/Document.h>
|
||||
#include <LibWeb/DOM/NamedNodeMap.h>
|
||||
#include <LibWeb/Infra/Strings.h>
|
||||
#include <LibWeb/Namespace.h>
|
||||
|
||||
namespace Web::DOM {
|
||||
|
@ -48,16 +49,16 @@ bool NamedNodeMap::is_supported_property_index(u32 index) const
|
|||
}
|
||||
|
||||
// https://dom.spec.whatwg.org/#ref-for-dfn-supported-property-names%E2%91%A0
|
||||
Vector<DeprecatedString> NamedNodeMap::supported_property_names() const
|
||||
Vector<String> NamedNodeMap::supported_property_names() const
|
||||
{
|
||||
// 1. Let names be the qualified names of the attributes in this NamedNodeMap object’s attribute list, with duplicates omitted, in order.
|
||||
Vector<DeprecatedString> names;
|
||||
Vector<String> names;
|
||||
names.ensure_capacity(m_attributes.size());
|
||||
|
||||
for (auto const& attribute : m_attributes) {
|
||||
auto const attribute_name = attribute->name().to_deprecated_fly_string();
|
||||
auto const attribute_name = attribute->name();
|
||||
if (!names.contains_slow(attribute_name))
|
||||
names.append(attribute_name);
|
||||
names.append(attribute_name.to_string());
|
||||
}
|
||||
|
||||
// 2. If this NamedNodeMap object’s element is in the HTML namespace and its node document is an HTML document, then for each name in names:
|
||||
|
@ -65,7 +66,7 @@ Vector<DeprecatedString> NamedNodeMap::supported_property_names() const
|
|||
if (associated_element().namespace_uri() == Namespace::HTML) {
|
||||
// 1. Let lowercaseName be name, in ASCII lowercase.
|
||||
// 2. If lowercaseName is not equal to name, remove name from names.
|
||||
names.remove_all_matching([](auto const& name) { return name != name.to_lowercase(); });
|
||||
names.remove_all_matching([](auto const& name) { return name != MUST(Infra::to_ascii_lowercase(name)); });
|
||||
}
|
||||
|
||||
// 3. Return names.
|
||||
|
|
|
@ -27,7 +27,7 @@ public:
|
|||
~NamedNodeMap() = default;
|
||||
|
||||
virtual bool is_supported_property_index(u32 index) const override;
|
||||
virtual Vector<DeprecatedString> supported_property_names() const override;
|
||||
virtual Vector<String> supported_property_names() const override;
|
||||
virtual WebIDL::ExceptionOr<JS::Value> item_value(size_t index) const override;
|
||||
virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
|
||||
|
||||
|
|
|
@ -91,13 +91,13 @@ Vector<DOMStringMap::NameValuePair> DOMStringMap::get_name_value_pairs() const
|
|||
|
||||
// https://html.spec.whatwg.org/multipage/dom.html#concept-domstringmap-pairs
|
||||
// NOTE: There isn't a direct link to this, so the link is to one of the algorithms above it.
|
||||
Vector<DeprecatedString> DOMStringMap::supported_property_names() const
|
||||
Vector<String> DOMStringMap::supported_property_names() const
|
||||
{
|
||||
// The supported property names on a DOMStringMap object at any instant are the names of each pair returned from getting the DOMStringMap's name-value pairs at that instant, in the order returned.
|
||||
Vector<DeprecatedString> names;
|
||||
Vector<String> names;
|
||||
auto name_value_pairs = get_name_value_pairs();
|
||||
for (auto& name_value_pair : name_value_pairs) {
|
||||
names.append(name_value_pair.name);
|
||||
names.append(MUST(String::from_deprecated_string(name_value_pair.name)));
|
||||
}
|
||||
return names;
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ private:
|
|||
|
||||
// ^LegacyPlatformObject
|
||||
virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const&) const override;
|
||||
virtual Vector<DeprecatedString> supported_property_names() const override;
|
||||
virtual Vector<String> supported_property_names() const override;
|
||||
|
||||
virtual bool supports_indexed_properties() const override { return false; }
|
||||
virtual bool supports_named_properties() const override { return true; }
|
||||
|
|
|
@ -28,7 +28,7 @@ void MimeTypeArray::initialize(JS::Realm& realm)
|
|||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/system-state.html#pdf-viewing-support:support-named-properties-2
|
||||
Vector<DeprecatedString> MimeTypeArray::supported_property_names() const
|
||||
Vector<String> MimeTypeArray::supported_property_names() const
|
||||
{
|
||||
// The MimeTypeArray interface supports named properties. If the user agent's PDF viewer supported is true, then they are the PDF viewer mime types. Otherwise, they are the empty list.
|
||||
auto const& window = verify_cast<HTML::Window>(HTML::relevant_global_object(*this));
|
||||
|
@ -37,9 +37,9 @@ Vector<DeprecatedString> MimeTypeArray::supported_property_names() const
|
|||
return {};
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/system-state.html#pdf-viewer-mime-types
|
||||
static Vector<DeprecatedString> mime_types = {
|
||||
"application/pdf"sv,
|
||||
"text/pdf"sv,
|
||||
static Vector<String> const mime_types = {
|
||||
"application/pdf"_string,
|
||||
"text/pdf"_string,
|
||||
};
|
||||
|
||||
return mime_types;
|
||||
|
|
|
@ -28,7 +28,7 @@ private:
|
|||
virtual void initialize(JS::Realm&) override;
|
||||
|
||||
// ^Bindings::LegacyPlatformObject
|
||||
virtual Vector<DeprecatedString> supported_property_names() const override;
|
||||
virtual Vector<String> supported_property_names() const override;
|
||||
virtual WebIDL::ExceptionOr<JS::Value> item_value(size_t index) const override;
|
||||
virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
|
||||
virtual bool is_supported_property_index(u32) const override;
|
||||
|
|
|
@ -52,7 +52,7 @@ String Plugin::filename() const
|
|||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/system-state.html#pdf-viewing-support:support-named-properties-3
|
||||
Vector<DeprecatedString> Plugin::supported_property_names() const
|
||||
Vector<String> Plugin::supported_property_names() const
|
||||
{
|
||||
// The Plugin interface supports named properties. If the user agent's PDF viewer supported is true, then they are the PDF viewer mime types. Otherwise, they are the empty list.
|
||||
auto const& window = verify_cast<HTML::Window>(HTML::relevant_global_object(*this));
|
||||
|
@ -61,9 +61,9 @@ Vector<DeprecatedString> Plugin::supported_property_names() const
|
|||
return {};
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/system-state.html#pdf-viewer-mime-types
|
||||
static Vector<DeprecatedString> mime_types = {
|
||||
"application/pdf"sv,
|
||||
"text/pdf"sv,
|
||||
static Vector<String> const mime_types = {
|
||||
"application/pdf"_string,
|
||||
"text/pdf"_string,
|
||||
};
|
||||
|
||||
return mime_types;
|
||||
|
|
|
@ -34,7 +34,7 @@ private:
|
|||
virtual void initialize(JS::Realm&) override;
|
||||
|
||||
// ^Bindings::LegacyPlatformObject
|
||||
virtual Vector<DeprecatedString> supported_property_names() const override;
|
||||
virtual Vector<String> supported_property_names() const override;
|
||||
virtual WebIDL::ExceptionOr<JS::Value> item_value(size_t index) const override;
|
||||
virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
|
||||
virtual bool is_supported_property_index(u32) const override;
|
||||
|
|
|
@ -34,7 +34,7 @@ void PluginArray::refresh() const
|
|||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/system-state.html#pdf-viewing-support:support-named-properties
|
||||
Vector<DeprecatedString> PluginArray::supported_property_names() const
|
||||
Vector<String> PluginArray::supported_property_names() const
|
||||
{
|
||||
// The PluginArray interface supports named properties. If the user agent's PDF viewer supported is true, then they are the PDF viewer plugin names. Otherwise, they are the empty list.
|
||||
auto const& window = verify_cast<HTML::Window>(HTML::relevant_global_object(*this));
|
||||
|
@ -43,12 +43,12 @@ Vector<DeprecatedString> PluginArray::supported_property_names() const
|
|||
return {};
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/system-state.html#pdf-viewer-plugin-names
|
||||
static Vector<DeprecatedString> plugin_names = {
|
||||
"PDF Viewer"sv,
|
||||
"Chrome PDF Viewer"sv,
|
||||
"Chromium PDF Viewer"sv,
|
||||
"Microsoft Edge PDF Viewer"sv,
|
||||
"WebKit built-in PDF"sv,
|
||||
static Vector<String> const plugin_names = {
|
||||
"PDF Viewer"_string,
|
||||
"Chrome PDF Viewer"_string,
|
||||
"Chromium PDF Viewer"_string,
|
||||
"Microsoft Edge PDF Viewer"_string,
|
||||
"WebKit built-in PDF"_string,
|
||||
};
|
||||
|
||||
return plugin_names;
|
||||
|
|
|
@ -29,7 +29,7 @@ private:
|
|||
virtual void initialize(JS::Realm&) override;
|
||||
|
||||
// ^Bindings::LegacyPlatformObject
|
||||
virtual Vector<DeprecatedString> supported_property_names() const override;
|
||||
virtual Vector<String> supported_property_names() const override;
|
||||
virtual WebIDL::ExceptionOr<JS::Value> item_value(size_t index) const override;
|
||||
virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
|
||||
virtual bool is_supported_property_index(u32) const override;
|
||||
|
|
|
@ -149,13 +149,13 @@ void Storage::broadcast(StringView key, StringView old_value, StringView new_val
|
|||
// FIXME: Implement.
|
||||
}
|
||||
|
||||
Vector<DeprecatedString> Storage::supported_property_names() const
|
||||
Vector<String> Storage::supported_property_names() const
|
||||
{
|
||||
// The supported property names on a Storage object storage are the result of running get the keys on storage's map.
|
||||
Vector<DeprecatedString> names;
|
||||
Vector<String> names;
|
||||
names.ensure_capacity(m_map.size());
|
||||
for (auto const& key : m_map.keys())
|
||||
names.unchecked_append(key.to_deprecated_string());
|
||||
names.unchecked_append(key);
|
||||
return names;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ private:
|
|||
// ^LegacyPlatformObject
|
||||
virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const&) const override;
|
||||
virtual WebIDL::ExceptionOr<DidDeletionFail> delete_value(DeprecatedString const&) override;
|
||||
virtual Vector<DeprecatedString> supported_property_names() const override;
|
||||
virtual Vector<String> supported_property_names() const override;
|
||||
virtual WebIDL::ExceptionOr<void> set_value_of_named_property(DeprecatedString const& key, JS::Value value) override;
|
||||
|
||||
virtual bool supports_indexed_properties() const override { return false; }
|
||||
|
|
|
@ -1563,7 +1563,7 @@ OrderedHashMap<String, JS::NonnullGCPtr<Navigable>> Window::document_tree_child_
|
|||
}
|
||||
|
||||
// https://html.spec.whatwg.org/#named-access-on-the-window-object
|
||||
Vector<DeprecatedString> Window::supported_property_names()
|
||||
Vector<String> Window::supported_property_names()
|
||||
{
|
||||
// The Window object supports named properties.
|
||||
// The supported property names of a Window object window at any moment consist of the following,
|
||||
|
@ -1590,12 +1590,12 @@ Vector<DeprecatedString> Window::supported_property_names()
|
|||
return IterationDecision::Continue;
|
||||
});
|
||||
|
||||
// FIXME: Many copies here. Would be nice to be able to return Vector<String>
|
||||
Vector<DeprecatedString> names;
|
||||
Vector<String> names;
|
||||
names.ensure_capacity(property_names.size());
|
||||
for (auto const& name : property_names) {
|
||||
names.append(name.to_deprecated_string());
|
||||
names.append(name);
|
||||
}
|
||||
|
||||
return names;
|
||||
}
|
||||
|
||||
|
|
|
@ -201,7 +201,7 @@ public:
|
|||
|
||||
[[nodiscard]] OrderedHashMap<String, JS::NonnullGCPtr<Navigable>> document_tree_child_navigable_target_name_property_set();
|
||||
|
||||
[[nodiscard]] Vector<DeprecatedString> supported_property_names();
|
||||
[[nodiscard]] Vector<String> supported_property_names();
|
||||
[[nodiscard]] WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const&);
|
||||
|
||||
private:
|
||||
|
|
|
@ -317,8 +317,8 @@ JS::ThrowCompletionOr<bool> is_named_property_exposed_on_object(Variant<Bindings
|
|||
|
||||
// 1. If P is not a supported property name of O, then return false.
|
||||
// NOTE: This is in it's own variable to enforce the type.
|
||||
Vector<DeprecatedString> supported_property_names = variant.visit([](auto* o) { return o->supported_property_names(); });
|
||||
auto property_key_string = property_key.to_string();
|
||||
Vector<String> supported_property_names = variant.visit([](auto* o) { return o->supported_property_names(); });
|
||||
auto property_key_string = MUST(String::from_deprecated_string(property_key.to_string()));
|
||||
if (!supported_property_names.contains_slow(property_key_string))
|
||||
return false;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue