ladybird/Libraries/LibWeb/CSS/StylePropertyMapReadOnly.h
Sam Atkins 089f70a918 LibWeb/CSS: Reify StyleValues in StylePropertyMap get()/getAll()
The limitations right now are:
- We don't know if a property is a list or not.
- We always reify as a CSSStyleValue directly.

So, we pass some tests but only ones that expect a CSSStyleValue.
2025-08-18 10:12:53 +01:00

47 lines
1.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (c) 2025, Sam Atkins <sam@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibWeb/Bindings/PlatformObject.h>
#include <LibWeb/CSS/StyleValues/StyleValue.h>
#include <LibWeb/DOM/AbstractElement.h>
#include <LibWeb/WebIDL/Types.h>
namespace Web::CSS {
// https://drafts.css-houdini.org/css-typed-om-1/#stylepropertymapreadonly
class StylePropertyMapReadOnly : public Bindings::PlatformObject {
WEB_PLATFORM_OBJECT(StylePropertyMapReadOnly, Bindings::PlatformObject);
GC_DECLARE_ALLOCATOR(StylePropertyMapReadOnly);
public:
[[nodiscard]] static GC::Ref<StylePropertyMapReadOnly> create_computed_style(JS::Realm&, DOM::AbstractElement);
virtual ~StylePropertyMapReadOnly() override;
WebIDL::ExceptionOr<Variant<GC::Ref<CSSStyleValue>, Empty>> get(String property);
WebIDL::ExceptionOr<Vector<GC::Ref<CSSStyleValue>>> get_all(String property);
WebIDL::ExceptionOr<bool> has(String property);
WebIDL::UnsignedLong size() const;
protected:
using Source = Variant<DOM::AbstractElement, GC::Ref<CSSStyleDeclaration>>;
explicit StylePropertyMapReadOnly(JS::Realm&, Source);
virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override;
static RefPtr<StyleValue const> get_style_value(Source&, String property);
// https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymapreadonly-declarations-slot
// A StylePropertyMapReadOnly object has a [[declarations]] internal slot, which is a map reflecting the CSS
// declaration blocks declarations.
// NB: We just directly refer to our source, at least for now.
Source m_declarations;
};
}