Commit graph

71256 commits

Author SHA1 Message Date
rmg-x
43d071e3b7 LibWeb/WebIDL: Remove unused AK/Diagnostics.h import in DOMException 2025-08-22 09:47:01 +01:00
rmg-x
1678231eed LibWeb: Fix else-after-return in hash_algorithm_identifier_from_value
and constify it :^)
2025-08-22 09:47:01 +01:00
rmg-x
3ef65e45d7 LibWeb/Crypto: Avoid heap allocation for AesGcm tag lengths 2025-08-22 09:47:01 +01:00
Callum Law
6373ab68ee LibWeb: Use inherited value of math-style when computing math-depth
The spec calls for us to use the inherited value but we were using our
own value.
2025-08-22 09:48:52 +02:00
Callum Law
4efbd0dc4d LibWeb: Support relative lengths in math-depth calcs
As this is computed before font-size we use the parent's length
resolution context.
2025-08-22 09:48:52 +02:00
Callum Law
944b985929 LibWeb: Remove handling of invalid values in compute_math_depth
This was unnecessary as the parser will never produce values other than
MathDepthStyleValue
2025-08-22 09:48:52 +02:00
Callum Law
a2c9ab9c9a LibWeb: Return AbstractElement from element_to_inherit_style_from
No functional changes.
2025-08-22 09:48:52 +02:00
Sam Atkins
8af99388a6 LibGC: Make GC::Root bool operator explicit
Some checks are pending
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
Not having this led to a sneaky bug where, given a Variant like so:

  Variant<double, GC::Root<T>>

An incorrectly-written visit() branch for the Root would just cause it
to be cast to a double and call that branch instead.

With the cast made explicit, we get a compiler error, which is far more
useful.

Co-authored-by: Jelle Raaijmakers <jelle@ladybird.org>
2025-08-21 12:50:43 -04:00
Erik Kurzinger
ce03b8b3b1 LibGfx+LibWeb: Only compile dma-buf-related code on Linux
Shareable Vulkan image allocation on Linux relies on the dma-buf
interface, which is a Linux-specific thing. Therefore, we should only be
compiling it (and any code that uses it) on Linux. This change adds
preprocessor guards to do that. Enabling similar functionality on other
operating systems will need to leverage analogous interfaces on those
platforms, e.g. win32 handles on Windows.

All Vulkan image code will now be guarded by the USE_VULKAN_IMAGES
preprocessor definition, currently enabled on Linux if Vulkan is
available. Additionally, we shuffle around some code in
OpenGLContext.cpp to simplify the preprocessor conditionals.
2025-08-21 14:42:41 +02:00
Jelle Raaijmakers
871838dda3 Meta: Add Gregory Bertilson to maintainer list :^) 2025-08-21 14:20:45 +02:00
Callum Law
9122d0d014 LibWeb: Remove compute_defaulted_{values|property_value}
These functions are unused.
2025-08-21 13:49:21 +02:00
Callum Law
ce0fef7c45 LibWeb: Initialize properties before calling compute_{math_depth|font}
`StyleComputer::create_document_style` was the only place this wasn't
the case so we can remove the calls to
`compute_defaulted_property_value`. The call to
`compute_defaulted_values` in `create_document_style` is now redundant
so has been removed`
2025-08-21 13:49:21 +02:00
Callum Law
b267012ba7 LibWeb: Handle color: currentcolor in compute_properties
This was the last thing that `compute_defaulted_values` was doing when
called from here.

It also comes with the added benefit of us correctly inheriting animated
colors.
2025-08-21 13:49:21 +02:00
Callum Law
48832972b1 LibWeb: Handle -libweb-inherit-or-center in compute_text_align
This seems like a more natural place to handle this
2025-08-21 13:49:21 +02:00
Callum Law
ca9cb42ed4 LibWeb: Handle unset immediately in compute_properties
Previously we would hand off to `compute_defaulted_properties` to
resolve these values but there is no need as we can just resolve them
immediately.
2025-08-21 13:49:21 +02:00
Dan Vittegleo
c9fbc2db0b LibWeb: Implement CSS border radius overlapping algorithm
Fixes rendering of elements with large border-radius values by scaling
radii proportionally when they exceed element dimensions per CSS spec.

Co-authored-by: Samyat Gautam <thesamyatgautam@gmail.com>
2025-08-21 11:52:38 +02:00
Callum Law
9330bf4b72 LibWeb: Propagate animated values in recompute_inherited_style
Some checks are pending
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
As `recompute_inherited_style` works in-place rather than building
ComputedProperties from scratch we need to keep track of which animated
properties are inherited to know whether we should remove them when we
have no more inherited value.
2025-08-21 10:46:55 +01:00
Sam Atkins
0fc512e56d LibWeb/CSS: Reify UnresolvedStyleValue as CSSUnparsedValue 2025-08-21 10:21:54 +01:00
Sam Atkins
6428c9990d LibWeb/CSS: Implement CSSUnparsedValue and CSSVariableReferenceValue
We don't serialize these the way WPT expects, because we don't implement
the comment-insertion rules from CSS-Syntax. We don't implement that
for regular serialization either, so it's something we can worry about
later.
2025-08-21 10:21:54 +01:00
Sam Atkins
213a548b1f LibWeb/CSS: Implement CSSStyleValue.parse() and .parseAll()
The "subdivide into iterations" part is left as a FIXME for now, until
we have a way of knowing if a property is a list or not.

The parse_a_css_style_value() helper has an unwieldy return type because
of the requirement that it return either one value or a list of values,
but sticking to the spec here seems worthwhile for now.
2025-08-21 10:21:54 +01:00
Sam Atkins
3613181f54 LibWeb/CSS: Reify idents as CSSKeywordValue
For us, that's KeywordStyleValue and CustomIdentStyleValue.

CustomIdentStyleValue now has a .cpp file to reduce the number of
includes in its header file.
2025-08-21 10:21:54 +01:00
Sam Atkins
a93c6a347f LibWeb/CSS: Implement CSSKeywordValue
CSSStyleValue is adjusted to allow for subclasses. Serialization for
CSSKeywordValue is implemented differently than the spec says because
of a spec bug: https://github.com/w3c/csswg-drafts/issues/12545
2025-08-21 10:21:54 +01:00
Tim Ledbetter
030e670fcb LibWeb/SVG: Resolve stroke URI reference values
Some checks are pending
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
Jelle Raaijmakers
8d46a11748 CI: Pin js-benchmarks to current master
The output format for js-benchmarks is going to change, and while the
webhook parsing the results has not yet been updated pin the
js-benchmark checkout to a specific commit.
2025-08-21 00:30:42 +02:00
Ben Eidson
96b142e10b LibWeb/WebAudio: Add renderQuantumSize
Some checks are pending
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
Adds this attribute to BaseAudioContext.idl and adds associated test for
OfflineAudioContext. This gives a set value that can be used to start
implementing OfflineAudioContext::start_rendering(). Updates idlharness
test to account for now implemented renderQuantumSize.
2025-08-20 14:51:01 +02:00
quonverbat
97d7316254 Documentation: Fix grammar error 2025-08-20 14:48:29 +02:00
quonverbat
cb742ee2ba Documentation: Fix capitalization and add Markdown
Some words were not capitalized and some tools were not in code blocks
2025-08-20 14:48:29 +02:00
Tim Ledbetter
4906afb2ae LibWeb: Set the initial value of stroke-dashoffset to 0px
Previously, an initial value of 0 was being used.
2025-08-20 14:30:51 +02:00
Jelle Raaijmakers
1a52fcd6ad LibWeb: Draw selected text with its own color
Other browsers such as Chrome and Firefox retain the text's color when
the text is part of a selection, so let's mimic them.
2025-08-20 14:30:16 +02:00
Jelle Raaijmakers
9887b52663 LibWeb: Convert fragment's enclosing device rect to IntRect just once
No functional changes.
2025-08-20 14:30:16 +02:00
Jelle Raaijmakers
51ce46859e LibWeb: Make DOM::Position's node mandatory
We can only construct positions if there's a node involved, which was
already enforced by Position::create() only accepting a GC::Ref.
2025-08-20 12:25:00 +01:00
Jelle Raaijmakers
cd08b3b6f4 LibWeb: Reset cursor blink cycle, even if there's no viewport paintable
If we programmatically set a selection in an editable element during
document load, we failed to start the cursor blink cycle timer. The
cursor blink logic already takes care of us not having the paintable
yet, so start it unconditionally.
2025-08-20 12:36:01 +02:00
Jamie Mansfield
97746fb574 LibGfx: Fix colour with Photoshop JPEG files using CMYK
This is based on the original functionality Lucus wrote prior to using
libjpeg.

Co-authored-by: Lucas CHOLLET <lucas.chollet@free.fr>
2025-08-20 12:04:39 +02:00
Jelle Raaijmakers
738eb68dda LibWeb: Always focus on editing host if currently not focused
We were constraining the focusing behavior for editing hosts a bit too
much; regardless of how the selection changed, if the start container is
inside an editing host and it's currently not focused, we should focus
it. This fixes focus stealing by other elements that set a selection
inside an editing host on a click event, for example.
2025-08-20 11:36:40 +02:00
Jelle Raaijmakers
3a741b0ce6 LibWeb: Indicate focus on contenteditable elements
This mirrors what Chrome and Firefox do.
2025-08-20 11:36:27 +02:00
Andreas Kling
05d6090fcc Revert "LibWeb: Invalidate layout on opacity change to/from zero"
Some checks are pending
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 partially reverts commit 3aff3327c4
by removing the code change but keeping the added test.

Now that paintables visibility caching has been reverted, this is no
longer doing anything except causing excessive relayouts on pages
like https://linear.app/
2025-08-20 09:14:58 +02:00
Andreas Kling
f4ee341a14 Revert "LibWeb: Store visibility for Paintables"
This reverts commit 7dc8062283.

This did not propagate correctly to paintables whose style was inherited
from an ancestor, causing rendering artifacts on https://linear.app/
2025-08-20 09:14:58 +02:00
Andreas Kling
657f1c37a8 LibWeb: Mark CSS filter property as affecting stacking context tree 2025-08-20 09:14:58 +02:00
Andreas Kling
0baf068bbf LibWeb: Remove redundant dynamic_cast in ~AnimationUpdateContext() 2025-08-20 09:14:58 +02:00
Andreas Kling
775d15c115 LibWeb: Avoid unnecessary style invalidation in Document::set_url()
If we set the same URL that we already had, there's no need to
invalidate style for the base URL changing.

This avoids some style recomputation while loading pages.
2025-08-20 09:14:58 +02:00
Andreas Kling
ec2b568919 LibWeb: Add missing StyleInvalidationReason for HTMLDialogElement
We were accidentally using NodeRemove instead of a unique reason.
2025-08-20 09:14:58 +02:00
Tim Ledbetter
83b1ead1e7 LibWeb: Ensure UIEventInit.view is set for mouse and pointer events 2025-08-20 09:13:32 +02:00
Rocco Corsi
a60debe7bb LibWeb: Don't always stop drawing scrollbar on mouseleave
Some checks failed
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
PaintableBox::handle_mouseleave is turning off scrollbar updating, but
the user might still have the primary button down to scroll. Don't turn
it off if grabbing the thumb to scroll.

Resolves crashing on MacOSX AppKit and Qt where gutter_size is 0 when
mouse is moved outside window.
2025-08-19 20:12:01 -04:00
Tete17
658477620a LibWeb/LibURL/LibIPC: Extend createObjectURL to also accept MediaSources
This required some changes in LibURL & LibIPC since it has its own
definition of an BlobURLEntry. For now, we don't have a concrete usage
of MediaSource in LibURL so it is defined as an empty struct.

This removes one FIXME in an idl file.
2025-08-19 23:50:38 +02:00
Tete17
f60529dac5 LibWeb: Modify createObjectURL to return Utf16Strings 2025-08-19 23:50:38 +02:00
Luke Wilde
a04f2d0796 Meta: Remove curl overlay port
The http3 feature is now upstream, so we no longer need an overlay port
to use it.
2025-08-19 22:08:55 +02:00
Luke Wilde
43c1b1b434 Meta: Bump vcpkg baseline 2025-08-19 22:08:55 +02:00
Jelle Raaijmakers
0cf6bd0324 LibWeb: Maintain rect positioning when rounding to device pixel rects
When rounding a CSSPixelRect to a DevicePixelRect, we simply pulled its
width and height through round() and called it a day. Unfortunately this
could negatively affect the rect's perceived positioning.

A rect at { 0.5, 0.0 } with size { 19.5 x 20.0 } should have its right
edge at position 20, but after rounding it would end up at { 1, 0 } with
size { 20 x 20 }, causing its right edge to be at position 21 instead.

Fix this by first rounding the right and bottom edges of the input rect,
and then determining the dimensions by subtracting its rounded position.

Fixes #245.
2025-08-19 21:53:46 +02:00
Jelle Raaijmakers
64acef30ec LibWeb: Simplify filling rects with rounded corners
We can use BorderRadiiData::as_corners() to avoid converting the corners
one by one. Instead of passing all four corners one by one, use a
reference to CornerRadii.

No functional changes.
2025-08-19 21:53:46 +02:00