Tim Ledbetter
62e52163d6
LibWeb: Interpolate text-shadow
values as a shadow list
...
This is the same behavior as is currently used for `box-shadow`.
2025-07-30 10:51:50 +02:00
Tim Ledbetter
3ae48776fd
LibWeb: Round integral values to the nearest integer when interpolating
...
Previously, color components were being incorrectly rounded when
interpolating.
2025-07-30 10:51:50 +02:00
Andreas Kling
81d4079c12
LibWeb: Support CSS content property images (and lists, too!)
...
This patch expands our generated content support beyond single strings
to lists of strings and/or images.
Pseudo-elements like ::before and ::after can now use content:url(...)
to insert anonymous image boxes into the layout tree.
This is heavily used in Google Docs for UI elements.
2025-07-28 22:46:27 +02:00
Timothy Flynn
c8888609f4
LibWeb: Port the FormAssociatedElement value to UTF-16
...
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 porting effort makes it pretty clear we will want a UTF-16-aware
GenericLexer. But for now, we can actually make ASCII assumptions about
what we are parsing, and act accordingly.
2025-07-28 12:25:11 +02:00
Aliaksandr Kalenik
a6857a6ce1
LibWeb: Log more useful information in display list dump
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-27 10:20:18 +02:00
Abhinav
93a0ef949a
LibWeb: Update x25519 raw key import tests
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 / Linux, x86_64 (push) Waiting to run
Lint Code / lint (push) Waiting to run
Push notes / build (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
2025-07-26 10:43:16 -06:00
Timothy Flynn
97548f48de
LibWeb: Port rendered text to UTF-16
...
This migrates TextNode::text_for_rendering() to Utf16String and deals
with the fallout. As a consequence, this effectively reverts commit
3df83dade8
.
The layout test expecation file updates are because we now express text
lengths and offsets in UTF-16 code units.
The selection-over-multiple-code-units expectation file update actually
represents a correctness fix. Our result now matches Firefox.
2025-07-25 18:16:22 +02:00
mikiubo
acf1fe7b05
LibWeb: Return base Document for non-HTML parses
...
The HTML specification does not explicitly require
a specific return type for parseFromString(),
but according to Web Platform TestsDOMParser-parseFromString.html,
the expected return value for
XML MIME types is a Document—not an XMLDocument.
2025-07-25 10:08:29 -06:00
Jelle Raaijmakers
acc7c2f7f3
LibWeb: Do not use namespace in interface names
...
Gives us 20 additional WPT subtest passes in `wasm/jsapi`.
2025-07-25 16:50:45 +02:00
Jelle Raaijmakers
76ee1ce04c
LibWeb: Support wasm module instantiation using a global address
...
Fixes 1 WPT subtest in `wasm/core/simd`.
2025-07-25 15:35:27 +02:00
Jelle Raaijmakers
58c3a391a3
LibWeb+LibWasm: Reject module instantiation with correct error type
...
The spec tells us to reject the promise with a RuntimeError instead of a
LinkError whenever the module's start function fails during module
instantiation. Fixes 1 WPT subtest in `wasm/core`.
2025-07-25 15:13:28 +02:00
Jelle Raaijmakers
35ca7f82b0
LibWeb: Add BaseAudioContext::createScriptProcessor()
...
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
Push notes / build (push) Waiting to run
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
This is a deprecated node, but it's still widely used on the web.
2025-07-25 11:48:04 +02:00
Luke Wilde
da5fca15ee
LibWeb: Only expose performance.{timing,navigation} on Window
...
They are only valid in a Window context, and the spec only exposes them
in Window contexts.
Fixes workers crashing on:
- https://web.whatsapp.com/
- https://pro.kraken.com/app/trade/btc-usd
2025-07-25 11:46:58 +02:00
Tim Ledbetter
89fb783b42
LibWeb: Throw pre insertion validity errors from the correct global
2025-07-25 09:08:14 +02:00
Jelle Raaijmakers
e029e785d2
LibWeb: Convert Editing API internals to UTF-16
...
Both sides of the Editing internals now have to deal with some awkward
converting between UTF-8 and UTF-16, but the upside is that it
immediately exposed an issue with the `insertText` command: instead of
dealing with code units, it was iterating over code points causing the
selection to be updated only once instead of twice. This resulted in the
final selection potentially ending up in between a surrogate pair.
Fixes #5547 (pasting/typing surrogate pairs).
2025-07-24 07:18:25 -04:00
Luke Wilde
a2f3a5a6ce
LibWeb: Send a beforeinput event for pasting
...
This allows us to paste text into Discord.
2025-07-23 22:04:45 +02:00
Tim Ledbetter
062862f315
LibWeb/CSS: Add -webkit-filter
as a legacy alias
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-23 09:32:39 +02:00
Glenn Skrzypczak
6e6507c8c5
LibWeb/HTML: Sanitize email input with multiple attribute
...
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (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 implements the missing part of the value sanitization algorithm
for email inputs with the multiple attribute.
2025-07-22 23:02:33 +01:00
Jelle Raaijmakers
526615bc10
LibWeb: Stub Navigator.getGamepads()
2025-07-22 11:55:29 -04:00
Tim Ledbetter
484a09d6a2
LibWeb: Support interpolating rotate
values
2025-07-22 11:09:45 +01:00
norbiros
ab574deb93
Tests: Import some css/css-properties-values-api
WPT tests
...
Casual import of 4 WPT tests related to `CSS.registerProperty`
2025-07-22 10:57:54 +01:00
norbiros
90c0decd95
LibWeb/CSS: Add CSS.registerProperty
JS method
...
This adds an *almost* complete implementation of `CSS.registerProperty`
method enabling further progress on the `@property` feature.
2025-07-22 10:57:54 +01:00
Tim Ledbetter
92f85d180e
LibWeb: Serialize empty ImageBitmap data as null
2025-07-21 19:19:50 -04:00
Tim Ledbetter
854d48f973
LibWeb: Use correct angle type when serializing hue-rotate filter values
...
At some point `hue-rotate` was changed to use `AngleOrCalculated`
rather than `Angle`, but `Angle` was still being used in a `visit`,
which otherwise defaulted to zero. This caused all `hue-rotate` angles
to serialize to zero.
2025-07-22 00:53:10 +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
Timothy Flynn
2dfcc4c307
LibRegex: Compare code units (not code points) in non-Unicode char range
2025-07-21 23:44:18 +02:00
Luke Wilde
8210a7b3e3
LibWeb: Resolve FontFaceSet::load promise with all loaded FontFaces
...
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
Build Dev Container Image / build (push) Has been cancelled
The resulting array is required on https://www.canva.com/
2025-07-21 16:29:55 +01:00
dmaivel
52a23dc02e
AK+LibWeb/CSS: Add lower-greek
counter style
2025-07-21 15:18:17 +01:00
Sam Atkins
11e2dbb555
LibWeb/CSS: Support text-justify: distribute
legacy value alias
...
...for `text-justify: inter-character`.
We previously had this mapped in Enums.json, but the behaviour is
different: `a=b` in Enums.json keeps `a` around but makes it behave the
same as `b`. A legacy name alias is instead expected to replace `a`
with `b`, so we have to do that separately.
2025-07-21 10:04:42 +01:00
Gingeh
f38e07e0c5
LibWeb: Don't crash when an unknown property begins with a single dash
2025-07-20 08:54:53 +02:00
Tim Ledbetter
48417152df
LibWeb: Don't crash when creating empty bitmap from a HTMLCanvasElement
2025-07-20 16:26:57 +12:00
Tim Ledbetter
7874f325a8
LibWeb: Implement InputEvent.getTargetRanges()
...
This returns a list of ranges that would be affected by a change to the
DOM if the input event is not cancelled.
2025-07-20 12:34:14 +12:00
Kenneth Myhra
c0976b18e0
LibWeb: Implement {,de}serialization steps for ImageBitmap
...
To make {,de}serialization of ImageBitmap work we also had to add
support for creating an ImageBitmap from a HTMLCanvasElement in
WindowOrWorkerGlobalScopeMixin::create_image_bitmap_impl().
2025-07-20 12:30:43 +12:00
Timothy Flynn
27d139e817
LibWeb: Define Wasm native errors correctly
...
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
1. Fix typos in some macro invocations of these error types. We now use
a single xmacro to instantiate error definitions to prevent such
errors in the future.
2. Use the "WebAssembly." prefix as needed.
3. Allocate the error constructors and prototypes with `realm.create`
rather than `heap.allocate`. The latter does not invoke `initialize`
methods. This exposed the next issue:
4. Use the correct intrinsic prototype in the error constructor. We were
using the base native error prototype. We unfortunately cannot invoke
OrdinaryCreateFromConstructor from LibJS directly with the correct
prototype, so an implementation was added here.
5. Use intrinsic accessors to create the constructors. I don't think
this one was actually a fix, but it makes the setup look more like
other built-ins.
2025-07-19 16:48:01 -04:00
Timothy Flynn
6b3f796e5b
LibWeb: Propagate errors from module instantiation
2025-07-19 16:48:01 -04:00
Timothy Flynn
a458a7d35b
LibWeb: Do not coerce object
IDL types to JS objects
...
We should bail with a TypeError if the provided value is not a JS object
already.
2025-07-19 16:48:01 -04:00
Timothy Flynn
7b14da14d8
Tests/LibWeb: Import tests for incorrect Wasm instantiations
2025-07-19 16:48:01 -04:00
Andreas Kling
92221f0c57
LibWeb: Apply all animations and transitions before invalidating style
...
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, x86_64 (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (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
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
This fixes an issue where only the last KeyframeEffect applied to an
element would actually have an effect on the computed properties.
It was particularly noticeable when animating a shorthand property like
border-width, since only one of the border edges would have its width
actually animate.
By deferring the invalidation until all animations have been processed,
we also reduce the amount of work that gets done on pages with many
animations/transitions per element. Discord is very fond of this for
example.
2025-07-19 11:08:46 -04:00
Andrew Kaster
50422eb563
Tests: Add XHTML tests for CDATA, PIs and Comment nodes in the DOM
2025-07-19 14:56:20 +02:00
Aliaksandr Kalenik
714ff4e3f9
LibWeb: Fix previous style calculation for CSS transitions on pseudo
...
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
...elements. Adds missing pseudo-element type passed into computed
properties getter.
Previously, due to this bug, we were using the element's computed
properties as the previous computed properties for its pseudo-elements.
This caused an excessive number of unintended CSS transitions to run.
The issue was particularly noticeable in Discord's emoji picker, where
each emoji has `::after` pseudo-element. We were incorrectly triggering
transitions on all their properties, resulting in significant
unnecessary work in style computation and animation event dispatching.
2025-07-18 21:19:37 +02:00
Callum Law
4ee8110449
LibWeb: Handle flood-opacity
in line with other opacity properties
...
We now do the proper thing in terms of:
- Allowing percentages
- Returning the computed value in getComputedStyle
- Handling values out of the [0,1] range
Gains us 13 WPT passes in the imported tests.
2025-07-18 11:04:55 -04:00
Jelle Raaijmakers
8dd259b8d8
LibWeb: Stub CSSCounterStyleRule
...
Just the interface. Adds 6 new WPT subtest passes.
2025-07-18 11:51:41 +01:00
norbiros
7ad01d28a8
LibWeb/CSS: Add basic registered properties with initial values
...
Add global registry for registered properties and partial support
for `@property` rule. Enables registering properties with initial
values. Also adds basic retrieval via `var()`.
Note: This is not a complete `@property` implementation.
2025-07-18 11:12:39 +01:00
Sam Atkins
0ff61e5e7b
LibWeb/CSS: Implement path()
basic shape
2025-07-17 13:59:23 -04:00
Sam Atkins
07b5b7ffb6
Tests: Import CSS clip-path: path(...)
tests
2025-07-17 13:59:23 -04:00
Callum Law
3d7c5115d8
LibWeb: Move Transformation::to_matrix
to new CSV resolve methods
...
This gains us 2 WPT passes as we now correctly disallow relative lengths
in more places in the `DOMMatrix` constructor.
2025-07-17 08:31:52 +02:00
Sam Atkins
27a666f3b2
LibWeb/CSS: Implement type(<syntax>)
in attr()
...
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
Build Dev Container Image / build (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 lets the `attr()` interpret the attribute's contents as an
arbitrary type instead of just as a string or number.
2025-07-16 14:47:45 +01:00
Sam Atkins
5d1ba658c9
Tests: Import attr()-related WPT tests
2025-07-16 14:47:45 +01:00
Callum Law
33cf3d7782
LibWeb: Serialize RGB, HWB and HSL colors with unresolved components
...
Gains us 44 WPT passes.
2025-07-16 13:05:33 +01:00
Callum Law
a13f6cdf86
LibWeb: Use correct command in reorder_modifiable_descendants
...
Gains us 7 WPT passes in the imported test
2025-07-16 12:40:38 +02:00