Commit graph

4725 commits

Author SHA1 Message Date
Jelle Raaijmakers
af552856c8 LibWeb: Remove unused TemporaryExecutionContext from Animation
We don't need a temporary execution context to create a promise.
2025-08-26 18:47:57 +02:00
Jelle Raaijmakers
55255586e8 LibWeb: Remove unused include from Animation.cpp 2025-08-26 18:47:57 +02:00
Luke Wilde
e2c935475f LibWeb/Fetch: Enable callbacks in the abort signal algorithm callback
If the request has a body, the abort will interact with promises, which
requires callbacks to be enabled.

Fixes crashing on Atlassian products.
2025-08-26 16:29:35 +02:00
Tim Ledbetter
4acd517d8f LibWeb: Propagate use element width and height to the referenced element 2025-08-26 16:02:57 +02:00
Luke Wilde
847589404b LibWeb: Set filename of module scripts to full URL instead of basename
Atlassian login gets the base URL for its module scripts by throwing an
error and pulling out the current script's URL from error.stack with
regex.

Since we only returned a basename for module scripts, it would fail to
match and try and use `/` as a base URL (because it does
[matched_string] + "/"), which is not a valid base URL.
2025-08-26 15:46:45 +02:00
Kenneth Myhra
4963dea504 LibWeb/XHR: Remove outdated FIXME about Streams not integrated in XHR
Streams were integrated into XHR::send() in: https://github.com/SerenityOS/serenity/pull/24132
2025-08-26 07:18:49 -04:00
Kenneth Myhra
5d94119f4c LibWeb/XHR: Add missing spec comment for step 12 in XHR::send() 2025-08-26 07:18:49 -04:00
Kenneth Myhra
e6a3307955 LibWeb/XHR: Remove outdated FIXMEs about propagating errors
The methods these FIXMEs refer to is no longer fallible.
2025-08-26 07:18:49 -04:00
Kenneth Myhra
2b832fdc31 LibWeb/XHR: MUST handle_{errors,response_end_of_body} in async context
These cannot throw in an async context and we no longer care about minor
OOM errors so let's MUST these.
2025-08-26 07:18:49 -04:00
Idan Horowitz
73266c8498 LibWeb: Add missing cookie-age-limit steps to CookieStore::set() 2025-08-26 06:28:10 -04:00
Idan Horowitz
e3a5d117a6 LibWeb: Mark CookieChangeEvent's changed and deleted as CachedAttribute
This makes them actually conform to the [SameObject] extended attribute.
2025-08-26 06:28:10 -04:00
Idan Horowitz
4c49ce5fe5 LibWeb: Add support for caching IDL attribute values
This lets us properly implement for [SameObject] for generated
constructs like FrozenArray<T>.
2025-08-26 06:28:10 -04:00
Callum Law
912ffc3f84 LibWeb: Remove unnecessary ComputedProperties::maybe_null_property
We know that all (longhand) properties have a value so this is
unnecessary.
2025-08-26 12:17:55 +02:00
Callum Law
6bccc7c242 LibWeb: Don't allocate space for shorthands in ComputedProperties
Only longhands have computed values so allocating space for shorthands
is just wasted memory
2025-08-26 12:17:55 +02:00
Callum Law
9f5696e9c5 LibWeb: Avoid getting shorthand property from ComputedProperties
ComputedProperties only includes longhands so we shouldn't try to get
shorthands - this will be asserted in a later commit.
2025-08-26 12:17:55 +02:00
Callum Law
1ba64a1d7e LibWeb: Remove StyleComputer as friend of ComputedProperties
Everything we need to do with ComputedProperties in StyleComputer can be
done via the public APIs
2025-08-26 12:17:55 +02:00
Callum Law
ed947940d7 LibWeb: Simplify conversion of percentage line-height to absolute length
We can take advantage of the fact that we already do this in
`compute_line_height`.
2025-08-26 12:17:55 +02:00
Callum Law
1a3da3d825 LibWeb: Don't store separate computed value for font_size
The StyleValue stored in m_property_values is already in it's computed
form and it's trivial to pull the underlying value out so there is no
need to store this separately.

Also removes unnecessary handling of percentage values in
`absolutize_values` - this is already handled within `compute_font`.
2025-08-26 12:17:55 +02:00
Callum Law
487d0abd7c LibWeb: Only consider longhands when recomputing inherited style
Only longhands have computed values so checking shorthand values is
unnecessary
2025-08-26 12:17:55 +02:00
Callum Law
c635a43c18 LibWeb: Only consider longhand properties when computing invalidation
We only store computed values for longhand properties so checking
shorthand properties is unnecessary
2025-08-26 12:17:55 +02:00
Callum Law
fba4187c8f LibWeb: Add a constant for the number of longhand properties
We use this in multiple places (and will in more places in the future)
so it's worth having as a constant from a clarity point of view
2025-08-26 12:17:55 +02:00
Callum Law
58431603ca LibWeb: Remove unused Element::resolved_css_values 2025-08-26 12:17:55 +02:00
Callum Law
5431f1534a LibWeb: Remove unnecessary check on ComputedProperties array size
This is a constant length array - this check will always be false
2025-08-26 12:17:55 +02:00
Jelle Raaijmakers
65910dc343 LibWeb: Update focusing spec steps
Update a couple of focus-related spec steps and their implementations.
The most relevant change is that we no longer allow focusing on elements
that return false for `->is_focusable()`, which necessitates fixing a
broken test that tried to `.focus()` on `<div>`s that were not
focusable. That test's output now more accurately reflects the expected
outcome as seen in other browsers.
2025-08-26 10:25:59 +02:00
Jelle Raaijmakers
cc19dd3fb0 LibWeb: Simplify getting the document's root element in elementFromPoint 2025-08-26 10:25:59 +02:00
Jelle Raaijmakers
518c048eb4 LibWeb+WebContent: Rename Document::focused_element to ::focused_area
And make it a DOM::Node, not DOM::Element. This makes everything flow
much better, such as spec texts that explicitly mention "focused area"
as the fact that we don't necessarily need to traverse a tree of
elements, since a Node can be focusable as well.

Eventually this will need to be a struct with a separate "focused area"
and "DOM anchor", but this change will make it easier to achieve that.
2025-08-26 10:25:59 +02:00
Jelle Raaijmakers
90f1c8724b LibWeb: Nested editing host focus should propagate to farthest ancestor
Nested editing hosts should act as a single big editing host, as long as
there are no uneditable elements in between.
2025-08-26 10:25:59 +02:00
Jelle Raaijmakers
6c0a0b86ba LibWeb: Simplify delete and return actions in EditingHostManager
No functional changes.
2025-08-26 10:25:59 +02:00
Jelle Raaijmakers
60a501d824 LibWeb: Do not update selection on uneditable contents without Shift key
If selection navigation happens through an editing host, we should
enforce that for collapsed navigations (i.e. moving the caret) it can
only happen if the focus node of the selection is editable.
2025-08-26 10:25:59 +02:00
Jelle Raaijmakers
09645875ea LibWeb: Clean up Selection::move_offset_to_* methods
No functional changes.
2025-08-26 10:25:59 +02:00
Tim Ledbetter
cb1a1a5cb5 LibWeb: Replace is<T>() with as_if<T>() where possible 2025-08-25 18:45:00 +02:00
Andreas Kling
3d97251da3 LibWeb: Wrap out-of-flow table children in anonymous table cells
This fixes an issue where floating children of a table box would not get
laid out at all if they were surrounded by nothing but whitespace.
2025-08-25 14:55:19 +02:00
norbiros
92b560edce LibWeb/CSS: Fix basic absolute positioning inside grid containers
Now elements with position `absolute` properly resolve their position
inside parent elements with `grid`. I also imported some WPT tests
related to that topic.

Part 2 of resolving issues on https://hack4krak.pl
2025-08-25 14:09:12 +02:00
Andreas Kling
0d2800e411 LibWeb: Don't relocate fragments across atomic inline boundary
All fragments inside an atomic inline box should stay within that box,
otherwise we'll screw up the paint order and paint them behind things
that they're supposed to be on top of.

This fixes an issue with inline-block content not appearing on sites
like Google Docs and Reddit, among others.
2025-08-24 21:00:08 +02:00
Andreas Kling
79b30e7c9a LibWeb: Create a new painter after resizing canvas element backing store
Otherwise, we just keep painting into the old backing store. This fixes
an issue where the main spreadsheet area in Google Sheets was not
visually updating, despite everything looking good in memory.
2025-08-24 16:36:24 +02:00
ayeteadoe
3df8e00d91 LibWeb: Enable EXPLICIT_SYMBOL_EXPORT 2025-08-23 16:04:36 -06:00
ayeteadoe
0a699132f3 WebContent: Enable in Windows CI 2025-08-23 16:04:36 -06:00
Aliaksandr Kalenik
025011d8e0 LibWeb: Fix algorithm that distributes space beyond limits [GFC]
Fixes bug when we didn't use `tracks_to_grow_beyond_limits` and instead
distributed extra space to all affected tracks. Also implements missing
"when accommodating max-content" part.
2025-08-23 23:16:18 +02:00
Andreas Kling
3873b1d8cf LibWeb: Create XML document object for SVG-as-image
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
CountBleck
d0d5bffb2d LibWeb: Implement resizable ArrayBuffers for Wasm memories
This commit adds the toResizableBuffer() and toFixedLengthBuffer()
methods to WebAssembly.Memory. This includes the necessary hook to
HostResizeArrayBuffer. Some modifications to function signatures in
LibWeb/WebAssembly/Memory.h were also made (changing the return type
from WebIDL::ExceptionOr to JS::ThrowCompletionOr) to allow the use of
some code in the aforementioned hook.

Note: the hook for HostGrowSharedArrayBuffer isn't implemented, since
LibJS doesn't seem to have complete support for growable
SharedArrayBuffers; the relevant methods/getters don't even exist on
the prototype, let alone HostGrowSharedArrayBuffer!

This should help pass the WebAssembly.Memory WPT tests included in
Interop 2025, except those pertaining to growable SharedArrayBuffers.
2025-08-23 08:26:23 +02:00
CountBleck
f2a170bcfb LibWeb: Implement the WebAssembly "Memory object cache" + other changes
This cache is referenced by a few parts of the JS API spec, including
the threads spec (such as in toFixedLengthBuffer), as well as the
"refresh the Memory buffer" algorithm, which was implemented as a method
of Memory before this change.

Now, this algorithm can be implemented in a spec-like fashion (though it
mostly seems to add extra complexity). This change also fixes a bug
where memories that were re-exported from an imported WebAssembly.Memory
were given a distinct WebAssembly.Memory object, since the caching that
existed in Instance.cpp was instance-local, not global to the realm.

We also make Memory::m_buffer non-lazy, since we have to implement
"initialize a memory object" correctly anyway.
2025-08-23 08:26:23 +02:00
CountBleck
0bda014c96 LibWeb: Don't create a copy SharedArrayBuffer for shared Wasm memories
For whatever reason, the implementation of "create a fixed length memory
buffer" was borked for shared Wasm memories, in that a new
SharedArrayBuffer was created, with the contents of the Wasm memory
copied into it. This is incorrect, since the SharedArrayBuffer should be
a view into the Wasm memory's span, not a copy of it. This helps pass a
WPT subtest in wasm/jsapi/memory/grow.any.html.
2025-08-23 08:26:23 +02:00
Tim Ledbetter
aadd563592 LibWeb: Replace usages of dynamic_cast with as and as_if 2025-08-22 20:26:09 +02:00
Tim Ledbetter
d31aec25e8 AK: Ignore possible const reference when comparing type equality in is 2025-08-22 20:26:09 +02:00
Andreas Kling
5e6b8b2785 LibWeb: Add missing visit of IDBRequest::m_source
Clang plugin bug: LadybirdBrowser/ladybird#5959
2025-08-22 19:29:29 +02:00
Andreas Kling
02f3002081 LibWeb: Add missing visit of IDBCursor::m_value
Clang plugin bug: LadybirdBrowser/ladybird#5958
2025-08-22 19:29:29 +02:00
Timothy Flynn
1f88e6819a LibWeb: Ensure hit testing is grapheme aware
Previously, clicking in the middle of a multi-code point grapheme would
place the cursor at a code unit index somewhere in the middle of the
grapheme. This was not only visually misleading, but the user could then
start typing and insert characters in the middle of the cluster. This
also made text select pretty wonky.

The main issue was that we were treating the glyph index in a glyph run
as a code unit index. We must instead map that glyph index back to a
code unit index with help from LibGfx (via harfbuzz).

The distance computation used here was also a bit off, especially for
the last glyph in a glyph run. We essentially want the cursor to end
up on whichever edge of the clicked glyph it is closest to. The result
of the distance computation limited us to the left edge of the last
glyph. Instead, we can use the same edge tracking we use for form-
associated elements to handle this for us.
2025-08-22 14:06:46 +02:00
Timothy Flynn
c3f4d32162 LibWeb: Extract FormAssociatedElement's grapheme edge code to a helper
The edge detection will be used at least in hit testing.
2025-08-22 14:06:46 +02:00
Timothy Flynn
047f521c4c LibGfx+LibWeb: Add some extra fields to glyph run data
We currently have a mixup in LibWeb between code unit offset and glyph
offset during hit testing. These extra fields will allow us to correct
this discrepency.
2025-08-22 14:06:46 +02:00
Callum Law
5c2fe12772 LibWeb: Don't consider null -> null as a change for invalidation
This avoids excessive invalidation within `recompute_inherited_style`
where we inherit a value but not an animated value.
2025-08-22 12:17:55 +02:00