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

LibWeb: Make CSS::Selector reference counted

The end goal is to make the PseudoClass::not_selector be a Selector
instead of a String that is repeatedly re-parsed. But since Selector
contains a Vector of ComplexSelectors, which each have a Vector of
SimpleSelectors, it's probably a good idea to not be passing them
around by value anyway. :^)
This commit is contained in:
Sam Atkins 2021-07-12 17:30:40 +01:00 committed by Andreas Kling
parent 8cae79cc8d
commit 776b1f4548
9 changed files with 48 additions and 38 deletions

View file

@ -14,14 +14,14 @@ namespace Web::DOM {
RefPtr<Element> ParentNode::query_selector(const StringView& selector_text)
{
auto selector = parse_selector(CSS::DeprecatedParsingContext(*this), selector_text);
if (!selector.has_value())
if (!selector)
return {};
dump_selector(selector.value());
dump_selector(selector.release_nonnull());
RefPtr<Element> result;
for_each_in_inclusive_subtree_of_type<Element>([&](auto& element) {
if (SelectorEngine::matches(selector.value(), element)) {
if (SelectorEngine::matches(selector.release_nonnull(), element)) {
result = element;
return IterationDecision::Break;
}
@ -34,14 +34,14 @@ RefPtr<Element> ParentNode::query_selector(const StringView& selector_text)
NonnullRefPtrVector<Element> ParentNode::query_selector_all(const StringView& selector_text)
{
auto selector = parse_selector(CSS::DeprecatedParsingContext(*this), selector_text);
if (!selector.has_value())
if (!selector)
return {};
dump_selector(selector.value());
dump_selector(selector.release_nonnull());
NonnullRefPtrVector<Element> elements;
for_each_in_inclusive_subtree_of_type<Element>([&](auto& element) {
if (SelectorEngine::matches(selector.value(), element)) {
if (SelectorEngine::matches(selector.release_nonnull(), element)) {
elements.append(element);
}
return IterationDecision::Continue;