1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 23:47:45 +00:00

LibWeb: Make factory methods of CSS::CSSRuleList fallible

This commit is contained in:
Kenneth Myhra 2023-02-12 23:03:41 +01:00 committed by Linus Groh
parent 5601f439f9
commit 48872cd190
3 changed files with 16 additions and 14 deletions

View file

@ -17,9 +17,9 @@
namespace Web::CSS { namespace Web::CSS {
CSSRuleList* CSSRuleList::create(JS::Realm& realm, JS::MarkedVector<CSSRule*> const& rules) WebIDL::ExceptionOr<JS::NonnullGCPtr<CSSRuleList>> CSSRuleList::create(JS::Realm& realm, JS::MarkedVector<CSSRule*> const& rules)
{ {
auto rule_list = realm.heap().allocate<CSSRuleList>(realm, realm).release_allocated_value_but_fixme_should_propagate_errors(); auto rule_list = MUST_OR_THROW_OOM(realm.heap().allocate<CSSRuleList>(realm, realm));
for (auto* rule : rules) for (auto* rule : rules)
rule_list->m_rules.append(*rule); rule_list->m_rules.append(*rule);
return rule_list; return rule_list;
@ -30,9 +30,9 @@ CSSRuleList::CSSRuleList(JS::Realm& realm)
{ {
} }
CSSRuleList* CSSRuleList::create_empty(JS::Realm& realm) WebIDL::ExceptionOr<JS::NonnullGCPtr<CSSRuleList>> CSSRuleList::create_empty(JS::Realm& realm)
{ {
return realm.heap().allocate<CSSRuleList>(realm, realm).release_allocated_value_but_fixme_should_propagate_errors(); return MUST_OR_THROW_OOM(realm.heap().allocate<CSSRuleList>(realm, realm));
} }
JS::ThrowCompletionOr<void> CSSRuleList::initialize(JS::Realm& realm) JS::ThrowCompletionOr<void> CSSRuleList::initialize(JS::Realm& realm)

View file

@ -23,8 +23,8 @@ class CSSRuleList : public Bindings::LegacyPlatformObject {
WEB_PLATFORM_OBJECT(CSSRuleList, Bindings::LegacyPlatformObject); WEB_PLATFORM_OBJECT(CSSRuleList, Bindings::LegacyPlatformObject);
public: public:
static CSSRuleList* create(JS::Realm&, JS::MarkedVector<CSSRule*> const&); static WebIDL::ExceptionOr<JS::NonnullGCPtr<CSSRuleList>> create(JS::Realm&, JS::MarkedVector<CSSRule*> const&);
static CSSRuleList* create_empty(JS::Realm&); static WebIDL::ExceptionOr<JS::NonnullGCPtr<CSSRuleList>> create_empty(JS::Realm&);
~CSSRuleList() = default; ~CSSRuleList() = default;

View file

@ -127,8 +127,8 @@ CSSStyleSheet* Parser::parse_as_css_stylesheet(Optional<AK::URL> location)
rules.append(rule); rules.append(rule);
} }
auto* rule_list = CSSRuleList::create(m_context.realm(), rules); auto rule_list = CSSRuleList::create(m_context.realm(), rules).release_value_but_fixme_should_propagate_errors();
return CSSStyleSheet::create(m_context.realm(), *rule_list, *MediaList::create(m_context.realm(), {}), move(location)); return CSSStyleSheet::create(m_context.realm(), rule_list, *MediaList::create(m_context.realm(), {}), move(location));
} }
Optional<SelectorList> Parser::parse_as_selector(SelectorParsingMode parsing_mode) Optional<SelectorList> Parser::parse_as_selector(SelectorParsingMode parsing_mode)
@ -3057,8 +3057,8 @@ CSSRule* Parser::convert_to_rule(NonnullRefPtr<Rule> rule)
if (auto* child_rule = convert_to_rule(raw_rule)) if (auto* child_rule = convert_to_rule(raw_rule))
child_rules.append(child_rule); child_rules.append(child_rule);
} }
auto* rule_list = CSSRuleList::create(m_context.realm(), child_rules); auto rule_list = CSSRuleList::create(m_context.realm(), child_rules).release_value_but_fixme_should_propagate_errors();
return CSSMediaRule::create(m_context.realm(), *MediaList::create(m_context.realm(), move(media_query_list)), *rule_list).release_value_but_fixme_should_propagate_errors(); return CSSMediaRule::create(m_context.realm(), *MediaList::create(m_context.realm(), move(media_query_list)), rule_list).release_value_but_fixme_should_propagate_errors();
} }
if (rule->at_rule_name().equals_ignoring_case("supports"sv)) { if (rule->at_rule_name().equals_ignoring_case("supports"sv)) {
auto supports_tokens = TokenStream { rule->prelude() }; auto supports_tokens = TokenStream { rule->prelude() };
@ -3081,8 +3081,8 @@ CSSRule* Parser::convert_to_rule(NonnullRefPtr<Rule> rule)
child_rules.append(child_rule); child_rules.append(child_rule);
} }
auto* rule_list = CSSRuleList::create(m_context.realm(), child_rules); auto rule_list = CSSRuleList::create(m_context.realm(), child_rules).release_value_but_fixme_should_propagate_errors();
return CSSSupportsRule::create(m_context.realm(), supports.release_nonnull(), *rule_list); return CSSSupportsRule::create(m_context.realm(), supports.release_nonnull(), rule_list);
} }
// FIXME: More at rules! // FIXME: More at rules!
@ -7396,8 +7396,10 @@ namespace Web {
CSS::CSSStyleSheet* parse_css_stylesheet(CSS::Parser::ParsingContext const& context, StringView css, Optional<AK::URL> location) CSS::CSSStyleSheet* parse_css_stylesheet(CSS::Parser::ParsingContext const& context, StringView css, Optional<AK::URL> location)
{ {
if (css.is_empty()) if (css.is_empty()) {
return CSS::CSSStyleSheet::create(context.realm(), *CSS::CSSRuleList::create_empty(context.realm()), *CSS::MediaList::create(context.realm(), {}), location); auto rule_list = CSS::CSSRuleList::create_empty(context.realm()).release_value_but_fixme_should_propagate_errors();
return CSS::CSSStyleSheet::create(context.realm(), rule_list, *CSS::MediaList::create(context.realm(), {}), location);
}
CSS::Parser::Parser parser(context, css); CSS::Parser::Parser parser(context, css);
return parser.parse_as_css_stylesheet(location); return parser.parse_as_css_stylesheet(location);
} }