Commit graph

64561 commits

Author SHA1 Message Date
Timothy Flynn
e649cd9108 LibWeb: Begin implementing the Element Send Keys endpoint
(cherry picked from commit 23d134708c6ba20fcb6a18ee6552dc1b5ac0cd6d)
2024-11-28 18:58:55 -05:00
Timothy Flynn
6e4d7015bc WebDriver: Generalize asynchronous event handling
Instead of having N functions all implement the same practice of looping
until an async event has arrived, this templatizes the bulk of the work.

(cherry picked from commit 922837f31b4cc66f6a3acd875962b54c6d547f65)
2024-11-28 18:58:55 -05:00
Timothy Flynn
5281349590 LibWeb: Support appending files to <input type=file>
This isn't exposed to the Web, but WebDriver requires this feature.

(cherry picked from commit 63b24e38faab768799a6597e1b7703f4b62cac02)
2024-11-28 18:58:55 -05:00
Timothy Flynn
fb11a8266c LibWeb: Implement dispatching WebDriver key down and key up actions
(cherry picked from commit d6a8fc00c3435bd9b4e61edeb364dec5c1bf65ea)
2024-11-28 18:58:55 -05:00
Timothy Flynn
d50fb09301 LibWeb: Support non-required numpad code names
These aren't required to comply with the UIEvents spec, but they are
required by WebDriver.

(cherry picked from commit 5b2633d90f81d0098d5d7cea1274b98c91851fae;
amended to change `MOD_KEYPAD` to 32 to match serenity's `Mod_Keypad`
in Kernel/API/KeyCode.h)
2024-11-28 18:58:55 -05:00
Timothy Flynn
45f89decac LibWeb: Allow multi-byte code point events to have their key field set
Multi-byte code point presses do not have a UIEvents::KeyCode value, so
we would previously set the event's key field to "Unidentified".

(cherry picked from commit a11e5055c7f225da3b96571e892042868fd2af18)
2024-11-28 18:58:55 -05:00
Timothy Flynn
496cccab85 LibWeb: Properly handle when (shift+)tab wraps around the page
We have support for using (shift+)tab to move focus to the next/previous
element on the page. However, there were several ways for this to crash
as written. This updates our implementation to check if we did not find
a node to move focus to, and to reset focus to the first/last node in
the document.

This doesn't seem to work when wrapping around from the first to the
last node. A FIXME has been added for that, as this would already not
work before this patch (the main focus here is not crashing).

(cherry picked from commit 96b5646fc116a98dac80559b9a4be2c149f2e157)
2024-11-28 18:58:55 -05:00
Timothy Flynn
1b8ace0d25 WebContent: Wait for same-URL WebDriver navigations to complete
The spec says we don't need to await navigations if we navigate to the
same URL that we are already on, but at least in our implementation, we
should still await the page load. Otherwise, we will invoke WebDriver
endpoints on the wrong page.

(cherry picked from commit 13fe3477ab8ac253bd7346d50b3224baf891872e)
2024-11-28 18:58:55 -05:00
Timothy Flynn
5e555ee02b WebContent: Create an execution context when getting an element property
Calling Object::get requires a running execution context.

(cherry picked from commit cbf8f1495ccd553f4d9e0919ce707938912fca5f)
2024-11-28 18:58:55 -05:00
Timothy Flynn
965e1baa8c LibWeb+UI: Detect and handle left vs. right modifier keys
Our handling of left vs. right modifiers keys (shift, ctrl, etc.) was
largely not to spec. This patch adds explicit UIEvents::KeyCode values
for these keys, and updates the UI to match native key events to these
keys (as best as we are able).

(cherry picked from commit 4fcaeabe1a6acd9f4d5fd811a36f2e86748b2a72;
amended to make the rest of the system build and to keep `Mod_AltGr`
around in addition to adding it as a key)

Co-authored-by: Nico Weber <thakis@chromium.org>
2024-11-28 15:15:36 -05:00
Timothy Flynn
96ba151190 LibWeb: Only fire keypress events if the key press produced a character
For example, pressing just the shift key should not producde a keypress
event.

(cherry picked from commit 448754d95dc797b44d9b066c1e37dabec79d79e6;
amended to not use ICU in CharacterTypes.cpp)
2024-11-28 15:15:36 -05:00
Timothy Flynn
3e85b7bf53 LibWeb: Fire keydown and keypress events sooner
Fire the events before handling any close requests or selection changes.
Pages must have an opportunity to cancel the events.

(cherry picked from commit 3925317c118e23a9b87b65ca792c5d94a92c98a7)
2024-11-28 15:15:36 -05:00
Timothy Flynn
50fd33a531 UI/AppKit: Send keyboard events for modifier-only key presses/releases
If the user only presses the shift key, for example, we are required to
still send that event to WebContent and generate the corresponding JS
events. Unfortunately, NSApp does not inform us of these events via the
keyDown/keyUp methods. We have to implement the flagsChanged interface,
and track for ourselves what modifier keys were pressed or released.

(cherry picked from commit eabd5b0f2271e7a89727daf80dd28623711f3416)
2024-11-28 15:15:36 -05:00
Nico Weber
7a735481ba Meta: Add BeforeUnloadEvent to the GN build 2024-11-28 14:15:33 -05:00
Tim Ledbetter
310390eaf0 LibWeb: Implement the "check if unloading is canceled" AO
This method is responsible for firing `beforeunload` events.

(cherry picked from commit 1fa948f11444108bf1759d39b3dc14e76dd053c6)
2024-11-28 14:15:33 -05:00
Tim Ledbetter
d0651581f6 LibWeb: Ensure special error event handling applies to workers
(cherry picked from commit f807b2800e8c1e4fcf15bd44a181377b351f0a4c)
2024-11-28 14:15:33 -05:00
Tim Ledbetter
13f5bff2eb LibWeb: Implement BeforeUnloadEvent
This is required to support legacy behavior of the `returnValue`
attribute.

(cherry picked from commit 99ef078c9733f5dae04e29aa0c5393ec1acc7fb9)
2024-11-28 14:15:33 -05:00
Psychpsyo
425941cfb1 LibWeb: Add handling for 'an end tag whose tag name is sarcasm'
(cherry picked from commit e602578501924f9ea5cf4915a51fb60187b61fae)
2024-11-27 20:00:55 -05:00
Tim Ledbetter
cbbd5cb8ed LibWeb: Use [URL] extended attribute for HTMLInputElement.src
(cherry picked from commit cc0ad0d1ef653c7e56a527c310bb7192f153c76b)
2024-11-27 20:00:55 -05:00
Hendiadyoin1
be91f5c12f Kernel: Use TypedMapping<T volatile[]> in the RTL8168NetworkAdapter 2024-11-27 22:16:45 +01:00
Hendiadyoin1
72024008c0 Kernel: Use TypedMapping<T volatile[]> in the E1000[E]NetworkAdapters 2024-11-27 22:16:45 +01:00
Hendiadyoin1
c90111a8bc Kernel: Add support for Arrays to TypedMapping
This is quite useful, as it is a common pattern that a Kernel allocated
DMA buffer is just a simple array of some type.
2024-11-27 22:16:45 +01:00
Hendiadyoin1
16a5c8a181 Kernel: Remove unused ScatterGatherList.h include from VirtIO/Queue.h 2024-11-27 22:16:45 +01:00
Ninad Sachania
6d7bca7f1c Utilities/markdown-check: Use ByteString for file paths 2024-11-27 14:55:02 -05:00
Jelle Raaijmakers
a19bb3d808 LibWeb: Clear grapheme segmenter when invalidating TextNode text
We only set the grapheme segmenter's text once after creating a new
segmenter, so we also need to clear it whenever we invalidate the text.

(cherry picked from commit 25516e351e46104ff445216e7835aaab9f9b9535)
2024-11-27 12:57:15 -05:00
Timothy Flynn
bb8b24eef7 LibWeb: Move initial creation of Unicode segmenters to the Document
The expensive part of creating a segmenter is doing the locale and UCD
data lookups at creation time. Instead of doing this once per text node,
cache the segmenters on the document, and clone them as needed (cloning
is much, much cheaper).

On a profile loading Ladybird's GitHub repo, the following hot methods
changed as follows:

    ChunkIterator ctor: 6.08% -> 0.21%
    Segmenter factory:  5.86% ->    0%
    Segmenter clone:    N/A   -> 0.09%

(cherry picked from commit 5d7175874258f00763adcced230149dd1379e4a6;
mended as usual for Unicode::Segmenter -> Locale::Segmenter, and also
to resolve minor conflicts due to serenity not yet having
LadybirdBrowser/ladybird#1106. Also, due to serenity not using ICU,
this doesn't have a big performance effect over here, but it still
makes future cherry-picks easier)
2024-11-27 12:57:15 -05:00
Nico Weber
833147b7a6 LibUnicode: Fix a spec link in a comment 2024-11-27 12:09:20 -05:00
Timothy Flynn
886f9016ab LibWeb: Iterate over text chunks using a grapheme-aware segmenter
Our current text iterator is not aware of multi-code point graphemes.
Instead of simply incrementing an iterator one code point at a time, use
our Unicode grapheme segmenter to break text into fragments.

(cherry picked from commit f0105b473b9cc3446ec36359b559db9a8e78446d;
amended as usual for Unicode::Segmenter -> Locale::Segmenter, and to
tweak expected/multi-code-point-graphemes.txt for serenity's superior
emoji glyphs)
2024-11-27 11:43:26 -05:00
Nico Weber
b46bb32584 LibLocale: Make Segmenter store segment boundaries
Instead of recomputing boundaries on every iteration, this now
computes boundaries once and then searches that vector.

This is still O(n^2) for now, but already much faster (at the expense
of using O(n) memory): `BenchmarkSegmenter.for_each_boundary` stays
at around 3ms, but `forward` and `backward` go from ~13s to ~60ms
on my system.
2024-11-27 10:42:35 -05:00
Nico Weber
414500c462 Tests: Make TestSegmenter test next_boundary() and previous_boundary() 2024-11-27 10:42:35 -05:00
Nico Weber
7b19c3e9d6 Tests: Extract test_segmentation() function in TestSegmenter 2024-11-27 10:42:35 -05:00
Nico Weber
5d1a926b46 Tests: Add a benchmark for Locale::Segmenter 2024-11-27 10:42:35 -05:00
Nico Weber
7211ba30be Meta: Add more commits and PRs to lb-cherry-picks.py 2024-11-26 23:27:06 -05:00
Tim Ledbetter
aac1e1e289 LibWeb: Use correct integer parsing rules in HTMLOListElement::start()
(cherry picked from commit 9face18ab265376916aa18c0adce113596b99a1e)
2024-11-26 22:37:15 -05:00
Tim Ledbetter
0ea547dc2d LibWeb: Use correct integer parsing rules in HTMLLIElement::value()
(cherry picked from commit a61883ae88eb3fd4b35cc51db77a4c9405480fb5)
2024-11-26 22:37:15 -05:00
Tim Ledbetter
107ea0c79a LibWeb: Use [URL] extended attribute for HTMLVideoElement.poster
(cherry picked from commit 67d05b0104dab928fc5334fe63e46cd62d1e4e22)
2024-11-26 22:37:15 -05:00
Tim Ledbetter
255d0d6973 LibWeb: Update Screen IDL definition to not inherit from EventTarget
(cherry picked from commit 8ad3479e0ecfb55ed382a4932256020e98edb9e6)
2024-11-26 22:37:15 -05:00
Jelle Raaijmakers
d8c7460f32 LibWeb: Fix various local names for custom elements
This fixes the typo in `HTMLFieldSetElement` and adds valid local names
for `<meta>`, `<ol>` and `<optgroup>`.

(cherry picked from commit 06863479bed8d99865b40e10df1c2fbc3a43e090)
2024-11-26 22:37:15 -05:00
Glenn Skrzypczak
4fce2cffb2 LibWeb/HTML: Implement cite attribute according to spec
Implements the cite attribute of `q`, `blockqoute`, `ins` and `del`
elements according to spec by returning a valid URL.

(cherry picked from commit 74645facae366d62ee4c44bd4a96d02df345a5d4)
2024-11-26 22:37:15 -05:00
Sam Atkins
6026e4b2e7 LibWeb: Fill-in some fixmes around sandboxing flag sets
...Including a couple of steps in
obtain_a_browsing_context_to_use_for_a_navigation_response() which
didn't have FIXMEs.

No apparent changes on WPT.

(cherry picked from commit 310cdc35f05946be15cb16ccc2f32e4f1e43efe3)
2024-11-26 22:37:15 -05:00
Sam Atkins
25f9dfdd20 LibWeb/HTML: Consume user activation when choosing a Navigable
Corresponds to https://github.com/whatwg/html/pull/10547

(cherry picked from commit 2c7e73072685d241585795c8f82bb9f1b1840c98)
2024-11-26 22:37:15 -05:00
Pavel Shliak
563e599efe LibJS: Make a __JS_ENUMERATE comment more informative
(cherry picked from commit 4ae3a0dcba21080927634f01d52c5cbd3296629f)
2024-11-26 22:37:15 -05:00
Timothy Flynn
b09eaa121e LibWeb: Use a Unicode text segmenter to select words on double-click
We currently use a naive word segmentation, looking for ASCII spaces to
mark a word boundary. Use LibUnicode's complete implementation instead.

(cherry picked from commit 430c9d3e3fb6ec9e2aa3d962381672b70957c395;
amended to use Locale::Segmenter instead of Unicode::Segmenter due
to LibLocale and LibUnicode being two distinct libraries in serenity)
2024-11-26 17:08:34 -05:00
Timothy Flynn
071d85e1cc LibWeb: Re-assign cmd+arrow key events to home/end keys on macOS
In text documents, pressing the left/right arrow keys with the cmd key
pressed should be treated as home/end key presses.

(cherry picked from commit bf9d05d97a570e8d4ebd83ca7e757938c2b504b3)
2024-11-26 16:03:32 -05:00
Timothy Flynn
5bc052948a LibWeb: Support jumping across word boundaries in text nodes
This also supports holding shift to modify the selection.

(cherry picked from commit a0072f422a11229d4b35308e7aa6badd23d08ba6)
2024-11-26 16:03:32 -05:00
Timothy Flynn
d89c41e4ad LibWeb: Add Document helpers to move its cursor to word boundaries
This implementation is based on the same feature I added to Serenity's
TextEditor:

https://github.com/SerenityOS/serenity/pull/17477

(cherry picked from commit ecf2cc600bea8f8396061f5fe6aba8358a033bbb;
amended to change Unicode::Segmenter to Locale::Segmenter due to
LibLocale and LibUnicode being separate libraries in serenity)
2024-11-26 16:03:32 -05:00
Timothy Flynn
d4c5942664 LibWeb: Rename CharacterData's segmenter indicate it is for graphemes
We will be adding a word segmenter as well, so this is to disambiguate
the two.

(cherry picked from commit eece7697fdcaf50eed98fff069c5e678ac425784;
amended to fix conflict due to Serenity's Segmenter still being in
LibLocale, while upstream combined LibLocale and LibUnicode)
2024-11-26 16:03:32 -05:00
Timothy Flynn
f1ad3f7969 LibWeb: Define a helper constant for the platform word-jumping key
On Linux/Windows, the ctrl key is used in conjunction with arrow keys to
jump word-by-word in text documents. On macOS, the option key is used
(which is mapped to the alt key code).

(cherry picked from commit feecf89d65b3f76a4fe090daa01928439efb9fce;
amended to fix minor conflict)
2024-11-26 16:03:32 -05:00
Timothy Flynn
7ba0f65fe4 LibUnicode: Add code point GC queries for Punctuation and Separator
(cherry picked from commit 3e116769fb29544498633bddd41d862a917379f0;
amended to not use ICU)
2024-11-26 16:03:32 -05:00
Timothy Flynn
d0e18b896b LibWeb: Support ctrl/cmd-clicking a link to open it in a new tab
The spec does not define activation behavior of ctrl/cmd clicks, so we
have to go a bit ad-hoc here. When an anchor element is clicked with the
cmd (on macOS) or ctrl (on other platforms) modifier pressed, we will
skip activation of that element and pass the event on to the chrome. We
still dispatch the event to allow scripts to cancel the event.

(cherry picked from commit 40b2d24d5585a94f09f521bb0ceb055dcae7b6e9)
2024-11-26 16:03:32 -05:00