From c950d1904a4bd8db44ac1e7d5da202c7b0e3e702 Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Sun, 12 Feb 2023 23:22:53 +0100 Subject: [PATCH] LibWeb: Make factory methods of CSS::CSSStyleDeclaration fallible --- Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp | 8 ++++---- Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h | 4 ++-- Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp | 6 +++--- Userland/Libraries/LibWeb/DOM/Element.cpp | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp index cb1d13d229..cfd74f397b 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp +++ b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp @@ -19,9 +19,9 @@ CSSStyleDeclaration::CSSStyleDeclaration(JS::Realm& realm) { } -PropertyOwningCSSStyleDeclaration* PropertyOwningCSSStyleDeclaration::create(JS::Realm& realm, Vector properties, HashMap custom_properties) +WebIDL::ExceptionOr> PropertyOwningCSSStyleDeclaration::create(JS::Realm& realm, Vector properties, HashMap custom_properties) { - return realm.heap().allocate(realm, realm, move(properties), move(custom_properties)).release_allocated_value_but_fixme_should_propagate_errors(); + return MUST_OR_THROW_OOM(realm.heap().allocate(realm, realm, move(properties), move(custom_properties))); } PropertyOwningCSSStyleDeclaration::PropertyOwningCSSStyleDeclaration(JS::Realm& realm, Vector properties, HashMap custom_properties) @@ -38,10 +38,10 @@ DeprecatedString PropertyOwningCSSStyleDeclaration::item(size_t index) const return CSS::string_from_property_id(m_properties[index].property_id); } -ElementInlineCSSStyleDeclaration* ElementInlineCSSStyleDeclaration::create(DOM::Element& element, Vector properties, HashMap custom_properties) +WebIDL::ExceptionOr> ElementInlineCSSStyleDeclaration::create(DOM::Element& element, Vector properties, HashMap custom_properties) { auto& realm = element.realm(); - return realm.heap().allocate(realm, element, move(properties), move(custom_properties)).release_allocated_value_but_fixme_should_propagate_errors(); + return MUST_OR_THROW_OOM(realm.heap().allocate(realm, element, move(properties), move(custom_properties))); } ElementInlineCSSStyleDeclaration::ElementInlineCSSStyleDeclaration(DOM::Element& element, Vector properties, HashMap custom_properties) diff --git a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h index c716341ca8..edafb34220 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h +++ b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h @@ -63,7 +63,7 @@ class PropertyOwningCSSStyleDeclaration : public CSSStyleDeclaration { friend class ElementInlineCSSStyleDeclaration; public: - static PropertyOwningCSSStyleDeclaration* create(JS::Realm&, Vector, HashMap custom_properties); + static WebIDL::ExceptionOr> create(JS::Realm&, Vector, HashMap custom_properties); virtual ~PropertyOwningCSSStyleDeclaration() override = default; @@ -102,7 +102,7 @@ class ElementInlineCSSStyleDeclaration final : public PropertyOwningCSSStyleDecl WEB_PLATFORM_OBJECT(ElementInlineCSSStyleDeclaration, PropertyOwningCSSStyleDeclaration); public: - static ElementInlineCSSStyleDeclaration* create(DOM::Element&, Vector properties, HashMap custom_properties); + static WebIDL::ExceptionOr> create(DOM::Element&, Vector properties, HashMap custom_properties); virtual ~ElementInlineCSSStyleDeclaration() override = default; diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 402dd17b45..bbeb22c47c 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -2242,7 +2242,7 @@ ElementInlineCSSStyleDeclaration* Parser::parse_as_style_attribute(DOM::Element& { auto declarations_and_at_rules = parse_a_list_of_declarations(m_token_stream); auto [properties, custom_properties] = extract_properties(declarations_and_at_rules); - return ElementInlineCSSStyleDeclaration::create(element, move(properties), move(custom_properties)); + return ElementInlineCSSStyleDeclaration::create(element, move(properties), move(custom_properties)).release_value_but_fixme_should_propagate_errors(); } Optional Parser::parse_url_function(ComponentValue const& component_value, AllowedDataUrlType allowed_data_url_type) @@ -3149,7 +3149,7 @@ auto Parser::extract_properties(Vector const& declarations_ PropertyOwningCSSStyleDeclaration* Parser::convert_to_style_declaration(Vector const& declarations_and_at_rules) { auto [properties, custom_properties] = extract_properties(declarations_and_at_rules); - return PropertyOwningCSSStyleDeclaration::create(m_context.realm(), move(properties), move(custom_properties)); + return PropertyOwningCSSStyleDeclaration::create(m_context.realm(), move(properties), move(custom_properties)).release_value_but_fixme_should_propagate_errors(); } Optional Parser::convert_to_style_property(Declaration const& declaration) @@ -7407,7 +7407,7 @@ CSS::CSSStyleSheet* parse_css_stylesheet(CSS::Parser::ParsingContext const& cont CSS::ElementInlineCSSStyleDeclaration* parse_css_style_attribute(CSS::Parser::ParsingContext const& context, StringView css, DOM::Element& element) { if (css.is_empty()) - return CSS::ElementInlineCSSStyleDeclaration::create(element, {}, {}); + return CSS::ElementInlineCSSStyleDeclaration::create(element, {}, {}).release_value_but_fixme_should_propagate_errors(); CSS::Parser::Parser parser(context, css); return parser.parse_as_style_attribute(element); } diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp index 84227f7a35..c07b8de419 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.cpp +++ b/Userland/Libraries/LibWeb/DOM/Element.cpp @@ -611,7 +611,7 @@ void Element::set_shadow_root(JS::GCPtr shadow_root) CSS::CSSStyleDeclaration* Element::style_for_bindings() { if (!m_inline_style) - m_inline_style = CSS::ElementInlineCSSStyleDeclaration::create(*this, {}, {}); + m_inline_style = CSS::ElementInlineCSSStyleDeclaration::create(*this, {}, {}).release_value_but_fixme_should_propagate_errors(); return m_inline_style; }