Andreas Kling
3873b1d8cf
LibWeb: Create XML document object for SVG-as-image
...
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
It's not enough to just use the XML parser, we also have to make sure
the DOM document we produce is an actual XML document.
Fixes #5966
2025-08-23 14:01:37 +01:00
Tim Ledbetter
aadd563592
LibWeb: Replace usages of dynamic_cast
with as
and as_if
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-08-22 20:26:09 +02:00
Andreas Kling
3c808de270
LibWeb: Use XML parser for SVG-as-image documents
...
We were already using the XML parser for SVG files when opening at the
top level. This patch makes things consistent by using the same code
path when parsing SVG-as-image.
We also make some tweaks in SVG presentation attribute handling since
we can no longer rely on the HTML length attribute parsing quirk when
parsing width/height attributes.
2025-08-22 11:35:59 +02:00
Tim Ledbetter
030e670fcb
LibWeb/SVG: Resolve stroke
URI reference values
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-08-21 00:33:53 +02:00
Tim Ledbetter
05432d7157
LibWeb/SVG: Resolve fill
URI reference values
2025-08-21 00:33:53 +02:00
Tim Ledbetter
1d745884be
LibWeb: Parse the shape-rendering
property
2025-08-19 09:47:28 +01:00
Tim Ledbetter
ad06ac0d58
LibWeb: Implement the color-interpolation
property for SVG gradients
...
This changes the operating color space for gradient `<linearGradient>`
and `<radialGradient>` elements.
2025-08-17 10:51:05 +02:00
Timothy Flynn
70db474cf0
LibJS+LibWeb: Port interned bytecode strings to UTF-16
...
This was almost a no-op, except we intern JS exception messages. So the
bulk of this patch is porting exception messages to UTF-16.
2025-08-14 10:27:08 +02:00
Andreas Kling
bd7599ccfc
LibCore: Remove macro-generated EventReceiver::try_create(...) factories
...
We can just use the infallible factory everywhere instead.
2025-08-11 16:55:25 +02:00
Tim Ledbetter
b15c4cccbf
LibWeb: Ignore non-element nodes when evaluating filters
...
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
This prevents an unknown filter debug message would be printed for
comments.
2025-08-08 23:54:17 +01:00
Sam Atkins
4e92ab52e3
LibWeb/CSS: Rename CSSKeywordValue -> KeywordStyleValue
...
The typed-om CSSKeywordValue will need to be a separate class.
2025-08-08 15:19:03 +01:00
Sam Atkins
c57975c9fd
LibWeb: Move and rename CSSStyleValue to StyleValues/StyleValue.{h,cpp}
...
This reverts 0e3487b9ab
.
Back when I made that change, I thought we could make our StyleValue
classes match the typed-om definitions directly. However, they have
different requirements. Typed-om types need to be mutable and GCed,
whereas StyleValues are immutable and ideally wouldn't require a JS VM.
While I was already making such a cataclysmic change, I've moved it into
the StyleValues directory, because it *not* being there has bothered me
for a long time. 😅
2025-08-08 15:19:03 +01:00
Andreas Kling
34ec33d71c
LibWeb: Don't treat SVG "use clone" removals as "use source" removals
...
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
We were failing to discriminate between DOM removals happening to SVG
elements cloned as part of an SVG use element instantiation.
When a "use source" element is removed, all clones of that source must
be updated to reflect the change. But when a "use clone" element is
removed, that's fine.
This was causing the surprising disappearance of use element subtrees,
seen for example on https://cal.com/
2025-08-07 22:15:36 +02:00
Andreas Kling
42802b0785
LibWeb: SVG use element shadow roots should be closed, not open
...
This goes against the spec but matches all other browser engines.
2025-08-07 22:15:36 +02:00
Jelle Raaijmakers
85ad99b98a
LibWeb: Implement <feMerge>
SVG filter
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-08-07 16:41:12 +02:00
Jelle Raaijmakers
1377dba7af
LibWeb: Implement <feOffset>
SVG filter
2025-08-07 16:41:12 +02:00
Jelle Raaijmakers
7162c73b6c
LibWeb: Add SVGUnitTypes
...
The empty `.h` is required since our generated bindings currently always
try to include one.
2025-08-06 23:05:56 -04:00
Jelle Raaijmakers
cd1cf75f7b
LibWeb: Unbreak SVGFilterElement compilation
...
This was caused by an undetected merge conflict.
2025-08-06 15:47:44 +02:00
Tim Ledbetter
1dd3608960
LibWeb/SVG: Apply SVGFeBlendElement
blend mode
...
Previously, the blend mode was always assumed to be `normal`.
2025-08-06 15:21:03 +02:00
Jelle Raaijmakers
3d613a2ac4
LibWeb: Simplify SVGFilterElement::gfx_filter()
...
No functional changes.
2025-08-06 14:00:31 +01:00
Jelle Raaijmakers
400a36aac1
LibWeb: Warn about unknown SVG filters
...
This might give some debug noise, but it's better than remaining silent.
2025-08-06 14:00:31 +01:00
Timothy Flynn
04d32deb52
LibWeb: Port SVGFormattingContext to UTF-16
2025-08-05 15:13:36 +02:00
Tim Ledbetter
9a5b740da1
LibWeb: Remove unnecessary debug logging from SVGSVGElement
2025-08-05 01:46:36 +02:00
Callum Law
344d6199da
LibWeb: Use correct colors for SVGFEFloodElement::flood_color
...
Previously we would always render floods as black, we now use the
computed color.
We also now support relative lengths within any `calc`s present.
2025-08-04 11:29:05 +01:00
Callum Law
3b52b1139a
LibWeb: Support relative lengths in stop-color
calcs
2025-08-04 11:29:05 +01:00
Idan Horowitz
bb6855c849
LibWeb: Add a getter for the default image bitmap of SVGImageElement
...
The default image bitmap is the first frame for animated bitmaps, and
the only frame for non-animated bitmaps.
2025-08-03 21:47:48 +02:00
Timothy Flynn
50fed1d65c
LibWeb+LibWebView+WebContent+UI: Port the document title to UTF-16
2025-08-02 10:10:14 -07:00
Aliaksandr Kalenik
61114f6d16
LibWeb: Rename PaintContext to DisplayListRecordingContext
...
PaintContext dates back to a time when display lists didn't exist and it
truly represented "paint context". Renaming it to better align with its
current role.
2025-08-01 05:25:56 -04:00
Tete17
223b1cc704
LibWeb: Add barebones SVGAnimationElement class
...
Many wpt test on trusted-types relay on this class being defined to even
begin the test as it declares some event handlers.
This is not really an implementation but the most basic setup needed to
run the tests.
2025-07-30 15:51:35 +01:00
Andreas Kling
77abe2a84d
LibWeb: Allow ImageProvider subclasses to visit additional GC edges
...
More prep work for CSS content:image.
2025-07-28 22:46:27 +02:00
Andreas Kling
0e94c4e270
LibWeb: Allow ImageProvider to not have a corresponding DOM node
...
This is prep work for CSS content:image.
2025-07-28 22:46:27 +02:00
Timothy Flynn
5c561c1a53
LibWeb: Port node text content to UTF-16
2025-07-28 18:30:50 +02:00
Aliaksandr Kalenik
8569124b87
LibWeb: Fix scroll state refresh in cached display list for iframes
...
6507d23
introduced a bug when snapshot for iframe is saved in
`PaintNestedDisplayList` and, since display lists are immutable, it's
not possible to update before the next repaint.
This change fixes the issue by moving `ScrollStateSnapshot` for
nested display lists from `PaintNestedDisplayList` to
`HashMap<NonnullRefPtr<DisplayList>, ScrollStateSnapshot>` that is
placed into pending rendering task, making it possible to update
snapshots for all display lists before the next repaint.
This change doesn't have a test because it's really hard to make a ref
test that will specifically check scenario when scroll offset of an
iframe is advanced after display list is cached. We already have
`Tests/LibWeb/Ref/input/scroll-iframe.html` but unfortunately it did
not catch this bug.
Fixes https://github.com/LadybirdBrowser/ladybird/issues/5486
2025-07-26 11:53:21 -04:00
Tim Ledbetter
d38fac7518
LibWeb/SVG: Ignore view boxes with negative width or height
2025-07-22 00:52:24 +02:00
Tim Ledbetter
a990de65e4
LibWeb: Implement SVGViewElement
...
This identifies a particular region of an SVG image, which can then be
linked to by an SVG fragment identifier.
2025-07-22 00:52:24 +02:00
Tim Ledbetter
1263d58689
LibWeb: Ignore zero width when calculating SVG intrinsic aspect ratio
...
Previously, an SVG with width of zero would have am intrinsic aspect
ratio of zero. With this change, if an SVG has a width or height of
zero, the intrinsic aspect ratio is determined by the SVG's viewbox.
2025-07-21 11:29:25 +02:00
Timothy Flynn
9582895759
AK+LibJS+LibWeb+LibRegex: Replace AK::Utf16Data with AK::Utf16String
2025-07-18 12:45:38 -04:00
Timothy Flynn
a43cb15e81
LibJS+LibWeb: Replace JS::Utf16String with AK::Utf16String
2025-07-18 12:45:38 -04:00
Sam Atkins
8538186ca5
LibWeb/SVG: Add serialization of Paths
...
CSS users (like the `path()` function) need to be able to serialize
their path data in a canonical form.
2025-07-17 13:59:23 -04:00
Sam Atkins
6b53454b68
LibWeb/SVG: Move path data into Path.{h,cpp}
...
More things need this than just the `<path>` element, so let's avoid
having to include `SVGPathElement.h` in places that don't need it.
Minor changes at the same time:
- Wrap it in a Path class
- Specify underlying type for PathInstructionType
- Make a couple of free functions into methods
- Give PathInstruction an operator==
No functionality changes.
2025-07-17 13:59:23 -04:00
Tim Ledbetter
4dd538e708
LibWeb/SVG: Prefer href
to xlink:href
attribute on images
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-07-12 13:13:47 +02:00
Tim Ledbetter
93a35895ae
LibWeb/SVG: Don't crash when changing SVG image href
...
Previously, a segfault could occur if `m_resource_request` was replaced
before its callbacks were invoked.
2025-07-12 13:13:47 +02:00
Tim Ledbetter
31e8189f9f
LibWeb/SVG: Implement the SVGAElement.referrerPolicy
attribute
2025-07-12 11:05:48 +02:00
Tim Ledbetter
d86f0a1b29
LibWeb/SVG: Implement the SVGAElement.target
attribute
2025-07-12 11:05:48 +02:00
Tim Ledbetter
caf45f2317
LibWeb: Implement the SVGGeometryElement.pathLength
attribute
2025-07-12 11:49:10 +12:00
Jelle Raaijmakers
97fa0be16e
LibWeb: Implement SVGAnimatedNumber
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-07-11 11:25:59 +01:00
Jelle Raaijmakers
ffcf91cd30
LibWeb: Correct initialization order for SVGFE*Element
...
We should first set the prototype before initializing our base,
otherwise e.g. attributes will simply not work.
2025-07-11 11:25:59 +01:00
Tim Ledbetter
438bb56160
LibWeb/SVG: Don't crash when a filter has no valid effects
2025-07-10 00:18:25 +02:00
Lucien Fiorini
635adc8aa7
LibWeb/SVG: Implement resolution for a subset of SVG filters
2025-07-09 18:07:12 +01:00
Lucien Fiorini
5d85959f5f
LibWeb/SVG: Add FEGaussianBlurElement
2025-07-09 18:07:12 +01:00