From 400aefb784791af93be393bf81751cc36205d462 Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Sun, 19 Jan 2025 08:29:19 +0000 Subject: [PATCH] LibWeb: Resolve `SVGImageElement` source URL correctly This fixes an issue where an SVGImageElement, whose source was a relative URL would not load inside an iframe. --- Libraries/LibWeb/SVG/SVGImageElement.cpp | 10 ++++++++-- Tests/LibWeb/Ref/expected/svg-image-in-iframe-ref.html | 2 ++ Tests/LibWeb/Ref/input/svg-image-in-iframe.html | 3 +++ 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 Tests/LibWeb/Ref/expected/svg-image-in-iframe-ref.html create mode 100644 Tests/LibWeb/Ref/input/svg-image-in-iframe.html diff --git a/Libraries/LibWeb/SVG/SVGImageElement.cpp b/Libraries/LibWeb/SVG/SVGImageElement.cpp index 81e15f7630..c13967b89c 100644 --- a/Libraries/LibWeb/SVG/SVGImageElement.cpp +++ b/Libraries/LibWeb/SVG/SVGImageElement.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024, Tim Ledbetter + * Copyright (c) 2024-2025, Tim Ledbetter * * SPDX-License-Identifier: BSD-2-Clause */ @@ -140,7 +140,13 @@ Gfx::Rect SVGImageElement::bounding_box() const // https://www.w3.org/TR/SVG2/linking.html#processingURL void SVGImageElement::process_the_url(Optional const& href) { - m_href = document().url().complete_url(href.value_or(String {})); + if (!href.has_value()) { + m_href = {}; + return; + } + + m_href = document().parse_url(*href); + if (!m_href.is_valid()) return; diff --git a/Tests/LibWeb/Ref/expected/svg-image-in-iframe-ref.html b/Tests/LibWeb/Ref/expected/svg-image-in-iframe-ref.html new file mode 100644 index 0000000000..0f86d83372 --- /dev/null +++ b/Tests/LibWeb/Ref/expected/svg-image-in-iframe-ref.html @@ -0,0 +1,2 @@ + + diff --git a/Tests/LibWeb/Ref/input/svg-image-in-iframe.html b/Tests/LibWeb/Ref/input/svg-image-in-iframe.html new file mode 100644 index 0000000000..e8dc13a72c --- /dev/null +++ b/Tests/LibWeb/Ref/input/svg-image-in-iframe.html @@ -0,0 +1,3 @@ + + +