Browse Source

LibWeb: Port supported property names from DeprecatedString to String

Shannon Booth 1 year ago
parent
commit
629f661e3b

+ 6 - 6
Userland/Libraries/LibWeb/Bindings/LegacyPlatformObject.cpp

@@ -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)
 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.
     // 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.
     // 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.
     // 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.
         // 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.
         // 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:
         // 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.
         // 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.
     // 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()) {
     if (supports_named_properties()) {
         for (auto& named_property : supported_property_names()) {
         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));
                 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();
     return JS::js_undefined();
 }
 }
 
 
-Vector<DeprecatedString> LegacyPlatformObject::supported_property_names() const
+Vector<String> LegacyPlatformObject::supported_property_names() const
 {
 {
     return {};
     return {};
 }
 }

+ 1 - 1
Userland/Libraries/LibWeb/Bindings/LegacyPlatformObject.h

@@ -37,7 +37,7 @@ public:
 
 
     virtual WebIDL::ExceptionOr<JS::Value> item_value(size_t index) const;
     virtual WebIDL::ExceptionOr<JS::Value> item_value(size_t index) const;
     virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) 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;
     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.
     // NOTE: These will crash if you make has_named_property_setter return true but do not override these methods.

+ 11 - 12
Userland/Libraries/LibWeb/DOM/HTMLCollection.cpp

@@ -99,29 +99,28 @@ Element* HTMLCollection::named_item(FlyString const& name_) const
 }
 }
 
 
 // https://dom.spec.whatwg.org/#ref-for-dfn-supported-property-names
 // 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.
     // 1. Let result be an empty list.
-    Vector<DeprecatedString> result;
+    Vector<String> result;
 
 
     // 2. For each element represented by the collection, in tree order:
     // 2. For each element represented by the collection, in tree order:
     auto elements = collect_matching_elements();
     auto elements = collect_matching_elements();
 
 
     for (auto& element : elements) {
     for (auto& element : elements) {
         // 1. If element has an ID which is not in result, append element’s ID to result.
         // 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.
         // 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 (!name.is_empty() && !result.contains_slow(name))
-                result.append(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(move(name));
+            }
         }
         }
     }
     }
 
 

+ 1 - 1
Userland/Libraries/LibWeb/DOM/HTMLCollection.h

@@ -46,7 +46,7 @@ public:
 
 
     virtual WebIDL::ExceptionOr<JS::Value> item_value(size_t index) 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 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;
     virtual bool is_supported_property_index(u32) const override;
 
 
 protected:
 protected:

+ 6 - 5
Userland/Libraries/LibWeb/DOM/NamedNodeMap.cpp

@@ -9,6 +9,7 @@
 #include <LibWeb/DOM/Attr.h>
 #include <LibWeb/DOM/Attr.h>
 #include <LibWeb/DOM/Document.h>
 #include <LibWeb/DOM/Document.h>
 #include <LibWeb/DOM/NamedNodeMap.h>
 #include <LibWeb/DOM/NamedNodeMap.h>
+#include <LibWeb/Infra/Strings.h>
 #include <LibWeb/Namespace.h>
 #include <LibWeb/Namespace.h>
 
 
 namespace Web::DOM {
 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
 // 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.
     // 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());
     names.ensure_capacity(m_attributes.size());
 
 
     for (auto const& attribute : m_attributes) {
     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))
         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:
     // 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) {
     if (associated_element().namespace_uri() == Namespace::HTML) {
         // 1. Let lowercaseName be name, in ASCII lowercase.
         // 1. Let lowercaseName be name, in ASCII lowercase.
         // 2. If lowercaseName is not equal to name, remove name from names.
         // 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.
     // 3. Return names.

+ 1 - 1
Userland/Libraries/LibWeb/DOM/NamedNodeMap.h

@@ -27,7 +27,7 @@ public:
     ~NamedNodeMap() = default;
     ~NamedNodeMap() = default;
 
 
     virtual bool is_supported_property_index(u32 index) const override;
     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> item_value(size_t index) const override;
     virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
     virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
 
 

+ 3 - 3
Userland/Libraries/LibWeb/HTML/DOMStringMap.cpp

@@ -91,13 +91,13 @@ Vector<DOMStringMap::NameValuePair> DOMStringMap::get_name_value_pairs() const
 
 
 // https://html.spec.whatwg.org/multipage/dom.html#concept-domstringmap-pairs
 // 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.
 // 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.
     // 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();
     auto name_value_pairs = get_name_value_pairs();
     for (auto& name_value_pair : 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;
     return names;
 }
 }

+ 1 - 1
Userland/Libraries/LibWeb/HTML/DOMStringMap.h

@@ -37,7 +37,7 @@ private:
 
 
     // ^LegacyPlatformObject
     // ^LegacyPlatformObject
     virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const&) const override;
     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_indexed_properties() const override { return false; }
     virtual bool supports_named_properties() const override { return true; }
     virtual bool supports_named_properties() const override { return true; }

+ 4 - 4
Userland/Libraries/LibWeb/HTML/MimeTypeArray.cpp

@@ -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
 // 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.
     // 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));
     auto const& window = verify_cast<HTML::Window>(HTML::relevant_global_object(*this));
@@ -37,9 +37,9 @@ Vector<DeprecatedString> MimeTypeArray::supported_property_names() const
         return {};
         return {};
 
 
     // https://html.spec.whatwg.org/multipage/system-state.html#pdf-viewer-mime-types
     // 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;
     return mime_types;

+ 1 - 1
Userland/Libraries/LibWeb/HTML/MimeTypeArray.h

@@ -28,7 +28,7 @@ private:
     virtual void initialize(JS::Realm&) override;
     virtual void initialize(JS::Realm&) override;
 
 
     // ^Bindings::LegacyPlatformObject
     // ^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> item_value(size_t index) const override;
     virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
     virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
     virtual bool is_supported_property_index(u32) const override;
     virtual bool is_supported_property_index(u32) const override;

+ 4 - 4
Userland/Libraries/LibWeb/HTML/Plugin.cpp

@@ -52,7 +52,7 @@ String Plugin::filename() const
 }
 }
 
 
 // https://html.spec.whatwg.org/multipage/system-state.html#pdf-viewing-support:support-named-properties-3
 // 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.
     // 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));
     auto const& window = verify_cast<HTML::Window>(HTML::relevant_global_object(*this));
@@ -61,9 +61,9 @@ Vector<DeprecatedString> Plugin::supported_property_names() const
         return {};
         return {};
 
 
     // https://html.spec.whatwg.org/multipage/system-state.html#pdf-viewer-mime-types
     // 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;
     return mime_types;

+ 1 - 1
Userland/Libraries/LibWeb/HTML/Plugin.h

@@ -34,7 +34,7 @@ private:
     virtual void initialize(JS::Realm&) override;
     virtual void initialize(JS::Realm&) override;
 
 
     // ^Bindings::LegacyPlatformObject
     // ^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> item_value(size_t index) const override;
     virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
     virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
     virtual bool is_supported_property_index(u32) const override;
     virtual bool is_supported_property_index(u32) const override;

+ 7 - 7
Userland/Libraries/LibWeb/HTML/PluginArray.cpp

@@ -34,7 +34,7 @@ void PluginArray::refresh() const
 }
 }
 
 
 // https://html.spec.whatwg.org/multipage/system-state.html#pdf-viewing-support:support-named-properties
 // 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.
     // 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));
     auto const& window = verify_cast<HTML::Window>(HTML::relevant_global_object(*this));
@@ -43,12 +43,12 @@ Vector<DeprecatedString> PluginArray::supported_property_names() const
         return {};
         return {};
 
 
     // https://html.spec.whatwg.org/multipage/system-state.html#pdf-viewer-plugin-names
     // 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;
     return plugin_names;

+ 1 - 1
Userland/Libraries/LibWeb/HTML/PluginArray.h

@@ -29,7 +29,7 @@ private:
     virtual void initialize(JS::Realm&) override;
     virtual void initialize(JS::Realm&) override;
 
 
     // ^Bindings::LegacyPlatformObject
     // ^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> item_value(size_t index) const override;
     virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
     virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const& name) const override;
     virtual bool is_supported_property_index(u32) const override;
     virtual bool is_supported_property_index(u32) const override;

+ 3 - 3
Userland/Libraries/LibWeb/HTML/Storage.cpp

@@ -149,13 +149,13 @@ void Storage::broadcast(StringView key, StringView old_value, StringView new_val
     // FIXME: Implement.
     // 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.
     // 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());
     names.ensure_capacity(m_map.size());
     for (auto const& key : m_map.keys())
     for (auto const& key : m_map.keys())
-        names.unchecked_append(key.to_deprecated_string());
+        names.unchecked_append(key);
     return names;
     return names;
 }
 }
 
 

+ 1 - 1
Userland/Libraries/LibWeb/HTML/Storage.h

@@ -40,7 +40,7 @@ private:
     // ^LegacyPlatformObject
     // ^LegacyPlatformObject
     virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const&) const override;
     virtual WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const&) const override;
     virtual WebIDL::ExceptionOr<DidDeletionFail> delete_value(DeprecatedString 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 WebIDL::ExceptionOr<void> set_value_of_named_property(DeprecatedString const& key, JS::Value value) override;
 
 
     virtual bool supports_indexed_properties() const override { return false; }
     virtual bool supports_indexed_properties() const override { return false; }

+ 4 - 4
Userland/Libraries/LibWeb/HTML/Window.cpp

@@ -1563,7 +1563,7 @@ OrderedHashMap<String, JS::NonnullGCPtr<Navigable>> Window::document_tree_child_
 }
 }
 
 
 // https://html.spec.whatwg.org/#named-access-on-the-window-object
 // 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 Window object supports named properties.
     // The supported property names of a Window object window at any moment consist of the following,
     // 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;
         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());
     names.ensure_capacity(property_names.size());
     for (auto const& name : property_names) {
     for (auto const& name : property_names) {
-        names.append(name.to_deprecated_string());
+        names.append(name);
     }
     }
+
     return names;
     return names;
 }
 }
 
 

+ 1 - 1
Userland/Libraries/LibWeb/HTML/Window.h

@@ -201,7 +201,7 @@ public:
 
 
     [[nodiscard]] OrderedHashMap<String, JS::NonnullGCPtr<Navigable>> document_tree_child_navigable_target_name_property_set();
     [[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&);
     [[nodiscard]] WebIDL::ExceptionOr<JS::Value> named_item_value(FlyString const&);
 
 
 private:
 private:

+ 2 - 2
Userland/Libraries/LibWeb/WebIDL/AbstractOperations.cpp

@@ -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.
     // 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.
     // 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))
     if (!supported_property_names.contains_slow(property_key_string))
         return false;
         return false;