mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-10-30 21:01:00 +00:00 
			
		
		
		
	 d3d695e9d2
			
		
	
	
		d3d695e9d2
		
	
	
	
	
		
			
			DOMMatrix.to_string() throws exceptions if any of its values are non-finite. This ends up affecting CSSStyleValue because its subclass CSSTransformValue (which is about to be added) serializes CSSTransformComponents, and one of those is CSSMatrixComponent, which calls DOMMatrix.to_string(). This is all quite unfortunate, and because at the time the spec for DOMMatrix was written, CSS couldn't represent NaN or infinity. That's no longer true, so I'm hoping the spec can be updated and this can be reverted. https://github.com/w3c/fxtf-drafts/issues/611
		
			
				
	
	
		
			78 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2025, Sam Atkins <sam@ladybird.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/FlyString.h>
 | |
| #include <LibWeb/Bindings/CSSNumericValuePrototype.h>
 | |
| #include <LibWeb/CSS/CSSStyleValue.h>
 | |
| #include <LibWeb/CSS/NumericType.h>
 | |
| #include <LibWeb/WebIDL/ExceptionOr.h>
 | |
| #include <LibWeb/WebIDL/Types.h>
 | |
| 
 | |
| namespace Web::CSS {
 | |
| 
 | |
| struct CSSNumericType {
 | |
|     Optional<WebIDL::Long> length;
 | |
|     Optional<WebIDL::Long> angle;
 | |
|     Optional<WebIDL::Long> time;
 | |
|     Optional<WebIDL::Long> frequency;
 | |
|     Optional<WebIDL::Long> resolution;
 | |
|     Optional<WebIDL::Long> flex;
 | |
|     Optional<WebIDL::Long> percent;
 | |
|     Optional<Bindings::CSSNumericBaseType> percent_hint;
 | |
| };
 | |
| 
 | |
| // https://drafts.css-houdini.org/css-typed-om-1/#typedefdef-cssnumberish
 | |
| using CSSNumberish = Variant<double, GC::Root<CSSNumericValue>>;
 | |
| 
 | |
| // https://drafts.css-houdini.org/css-typed-om-1/#cssnumericvalue-sum-value
 | |
| struct SumValueItem {
 | |
|     double value;
 | |
|     UnitMap unit_map;
 | |
| };
 | |
| using SumValue = Vector<SumValueItem>;
 | |
| 
 | |
| // https://drafts.css-houdini.org/css-typed-om-1/#cssnumericvalue
 | |
| class CSSNumericValue : public CSSStyleValue {
 | |
|     WEB_PLATFORM_OBJECT(CSSNumericValue, CSSStyleValue);
 | |
|     GC_DECLARE_ALLOCATOR(CSSNumericValue);
 | |
| 
 | |
| public:
 | |
|     struct SerializationParams {
 | |
|         Optional<double> minimum {};
 | |
|         Optional<double> maximum {};
 | |
|         bool nested { false };
 | |
|         bool parenless { false };
 | |
|     };
 | |
|     virtual ~CSSNumericValue() override = default;
 | |
| 
 | |
|     bool equals_for_bindings(Vector<CSSNumberish>) const;
 | |
|     virtual bool is_equal_numeric_value(GC::Ref<CSSNumericValue> other) const = 0;
 | |
| 
 | |
|     WebIDL::ExceptionOr<GC::Ref<CSSUnitValue>> to(FlyString const& unit) const;
 | |
| 
 | |
|     virtual Optional<SumValue> create_a_sum_value() const = 0;
 | |
| 
 | |
|     CSSNumericType type_for_bindings() const;
 | |
|     NumericType const& type() const { return m_type; }
 | |
| 
 | |
|     virtual WebIDL::ExceptionOr<String> to_string() const final override { return to_string({}); }
 | |
|     String to_string(SerializationParams const&) const;
 | |
| 
 | |
|     static WebIDL::ExceptionOr<GC::Ref<CSSNumericValue>> parse(JS::VM&, String const& css_text);
 | |
| 
 | |
| protected:
 | |
|     explicit CSSNumericValue(JS::Realm&, NumericType);
 | |
| 
 | |
|     virtual void initialize(JS::Realm&) override;
 | |
| 
 | |
|     NumericType m_type;
 | |
| };
 | |
| 
 | |
| GC::Ref<CSSNumericValue> rectify_a_numberish_value(JS::Realm&, CSSNumberish const&, Optional<FlyString> unit = {});
 | |
| 
 | |
| }
 |