ladybird/Userland/Libraries/LibWeb/CSS/CSSNamespaceRule.h
Andreas Kling 189d1e8291 LibWeb: Port CSSNamespaceRule to FlyString
This removes a performance problem where we'd convert the style sheet's
default namespace from DeprecatedFlyString to FlyString once per rule
during selector matching.

The conversion now happens once, during CSS parse. It should eventually
be removed from there as well, but one step at a time. :^)
2023-12-01 16:03:58 +01:00

39 lines
1.1 KiB
C++

/*
* Copyright (c) 2023, Jonah Shafran <jonahshafran@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibWeb/CSS/CSSRule.h>
namespace Web::CSS {
class CSSNamespaceRule final : public CSSRule {
WEB_PLATFORM_OBJECT(CSSNamespaceRule, CSSRule);
JS_DECLARE_ALLOCATOR(CSSNamespaceRule);
public:
[[nodiscard]] static JS::NonnullGCPtr<CSSNamespaceRule> create(JS::Realm&, Optional<FlyString> prefix, FlyString namespace_uri);
virtual ~CSSNamespaceRule() = default;
void set_namespace_uri(FlyString value) { m_namespace_uri = move(value); }
FlyString const& namespace_uri() const { return m_namespace_uri; }
void set_prefix(FlyString value) { m_prefix = move(value); }
FlyString const& prefix() const { return m_prefix; }
virtual Type type() const override { return Type::Namespace; }
private:
CSSNamespaceRule(JS::Realm&, Optional<FlyString> prefix, FlyString namespace_uri);
virtual void initialize(JS::Realm&) override;
virtual String serialized() const override;
FlyString m_namespace_uri;
FlyString m_prefix;
};
}