diff --git a/Userland/Libraries/LibWeb/SVG/SVGElement.h b/Userland/Libraries/LibWeb/SVG/SVGElement.h index 8ee802fed1..fe4ffc5d4c 100644 --- a/Userland/Libraries/LibWeb/SVG/SVGElement.h +++ b/Userland/Libraries/LibWeb/SVG/SVGElement.h @@ -6,10 +6,32 @@ #pragma once +#include #include namespace Web::SVG { +namespace FIXME { +class TemporarilyEnableQuirksMode { +public: + TemporarilyEnableQuirksMode(DOM::Document const& document) + : m_document(const_cast(document)) + , m_previous_quirks_mode(document.mode()) + { + m_document.set_quirks_mode(DOM::QuirksMode::Yes); + } + + ~TemporarilyEnableQuirksMode() + { + m_document.set_quirks_mode(m_previous_quirks_mode); + } + +private: + DOM::Document& m_document; + DOM::QuirksMode m_previous_quirks_mode {}; +}; +} + class SVGElement : public DOM::Element { WEB_PLATFORM_OBJECT(SVGElement, DOM::Element); diff --git a/Userland/Libraries/LibWeb/SVG/SVGGraphicsElement.cpp b/Userland/Libraries/LibWeb/SVG/SVGGraphicsElement.cpp index 45b46a5727..caae6eaf81 100644 --- a/Userland/Libraries/LibWeb/SVG/SVGGraphicsElement.cpp +++ b/Userland/Libraries/LibWeb/SVG/SVGGraphicsElement.cpp @@ -117,6 +117,9 @@ Gfx::AffineTransform SVGGraphicsElement::get_transform() const void SVGGraphicsElement::apply_presentational_hints(CSS::StyleProperties& style) const { + // FIXME: Hack to ensure unitless SVG properties (such as font-size) are parsed. + FIXME::TemporarilyEnableQuirksMode enable_quirks(document()); + CSS::Parser::ParsingContext parsing_context { document() }; for_each_attribute([&](auto& name, auto& value) { if (name.equals_ignoring_ascii_case("fill"sv)) { diff --git a/Userland/Libraries/LibWeb/SVG/SVGSVGElement.cpp b/Userland/Libraries/LibWeb/SVG/SVGSVGElement.cpp index bd1c5a0740..27c3da6dcf 100644 --- a/Userland/Libraries/LibWeb/SVG/SVGSVGElement.cpp +++ b/Userland/Libraries/LibWeb/SVG/SVGSVGElement.cpp @@ -41,11 +41,7 @@ void SVGSVGElement::apply_presentational_hints(CSS::StyleProperties& style) cons Base::apply_presentational_hints(style); // NOTE: Hack to ensure SVG unitless widths/heights are parsed even with - auto previous_quirks_mode = document().mode(); - const_cast(document()).set_quirks_mode(DOM::QuirksMode::Yes); - ScopeGuard reset_quirks_mode = [&] { - const_cast(document()).set_quirks_mode(previous_quirks_mode); - }; + FIXME::TemporarilyEnableQuirksMode enable_quirks(document()); auto width_attribute = attribute(SVG::AttributeNames::width); auto parsing_context = CSS::Parser::ParsingContext { document() };