Shannon Booth
8e37cd2f71
LibURL: Remove URL's valid state
...
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, 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
No code now relies on using URL's valid state.
A URL can still be _technically_ invalid through use of the URL
constructor or by directly changing URL fields.
However, all URLs should be constructed through the URL parser,
and we should ideally be getting rid of the default constructor
at some stage.
Also, any code which is manually setting URL fields need to be
aware that this is full of pitfalls since there are many different
forms of canonicalization which is bypassed by not going through
the URL parser.
2025-04-19 07:18:43 -04:00
Shannon Booth
8d0fb91450
Headless: Remove uneeded URL validity check
...
All of the URLs in the browser options must be valid.
2025-04-19 07:18:43 -04:00
Shannon Booth
8794bf568a
LibWebView: Remove uneeded URL valdity check in CookieJar
...
The URL given will always be valid.
2025-04-19 07:18:43 -04:00
Shannon Booth
f48b760011
LibWeb/CSS: Avoid URL validity check parsing CSS URLs
2025-04-19 07:18:43 -04:00
Shannon Booth
733dfdaa05
LibWeb: Avoid URL validity check for 'Resource'
...
Which was previously signally an invalid Resource by a default
constructed invalid URL. Instead, switch this over to an Optional
URL.
2025-04-19 07:18:43 -04:00
Shannon Booth
8ab541b3f6
LibCore: Remove URL validity check for parsing URL's
...
Now that URL does not implicitly construct from a String, it is
safe to rely on always being passed a valid URL.
2025-04-19 07:18:43 -04:00
Shannon Booth
00bbb2105b
LibURL: Port create_with_file_scheme to Optional
...
Removing one of the main remaining users of URL valid state.
2025-04-19 07:18:43 -04:00
Shannon Booth
2072eee83d
LibURL: Implement create_with_file_scheme using URL Parser
...
Creating a URL should almost always go through the URLParser to
handle all of the small edge cases involved. This reduces the
need for URL valid state.
2025-04-19 07:18:43 -04:00
Glenn Skrzypczak
9c758e5f65
LibWeb/HTML: Correctly parse milliseconds in time inputs
...
This commit brings the way we parse time inputs closer to the spec by
no longer ignoring milliseconds in time strings.
2025-04-19 07:09:36 -04:00
Glenn Skrzypczak
d37d0e4b59
LibWeb: Prevent crash when encoding into detached buffer
...
This handles the case where data is encoded into a detached buffer.
2025-04-19 07:08:12 -04:00
Timothy Flynn
8ec420bc28
LibGC: Allow move-assigning RootVector instances
...
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, 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
Rule of 5 - we were missing a move-assignment operator, thus all move
assignments resulted in a copy.
2025-04-19 02:03:43 +02:00
Andreas Kling
e0b32b1863
LibJS: Use premade shape when creating mapped arguments objects
...
Knocks out a 0.4% profile item on Speedometer 3.
2025-04-19 01:14:02 +02:00
Andreas Kling
ed5ad267c7
LibWeb: Keep harfbuzz hb_buffer instead of reallocating every time
...
Easy 1% speed-up on Speedometer 3.
2025-04-19 01:14:02 +02:00
Andreas Kling
5df3838a80
LibWeb: Evaluate style sheet media rules immediately on insertion
...
Before this change, we were waiting for Document to lazily evaluate
sheet media and media rules. This often meant that we'd get two
full-document style invalidations: one from adding a new style sheet,
and one from the media queries changing state.
By evaluating the rules eagerly on insertion, we coalesce the two
invalidations into one. This reduces the number of full-document
invalidations on Speedometer 3 from 51 to 34.
2025-04-19 01:14:02 +02:00
Andreas Kling
28d564197c
LibWeb: Compute containing block boxes once at start of layout
...
We now cache the containing block (box) once at the start of layout,
which allows Layout::Node::containing_block() to return instantly
instead of doing tree traversal.
Removes a 0.7% profile item on Speedometer 3.
2025-04-19 01:14:02 +02:00
Ali Mohammad Pur
3b4a184f1a
LibRegex: Avoid hashing the state hashes again
...
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, 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 already had a really nice hash that had a single issue, this commit
fixes that and makes it *the* hash for the hash table, so we avoid
double-hashing and making a long chain.
This is an easy 10% perf gain.
2025-04-18 17:09:27 +02:00
Ali Mohammad Pur
446a453719
LibRegex: Pull out the first compare to avoid unnecessary execution
...
This adds a fast-path to drop view indices we know will not match
immediately without going through the regex VM.
2025-04-18 17:09:27 +02:00
Ali Mohammad Pur
76f5dce3db
LibRegex: Flatten capture group list in MatchState
...
This makes copying the capture group COWVector significantly cheaper,
as we no longer have to run any constructors for it - just memcpy.
2025-04-18 17:09:27 +02:00
Andreas Kling
bbef0e8375
LibWeb: Avoid dynamic_cast in DOM::Document::is_decoded_svg()
2025-04-18 14:45:56 +02:00
Andreas Kling
ce263eaf78
LibWeb: Avoid dynamic_cast in relevant_agent()
...
There's only ever one kind of JS::VM::CustomData in play anyway.
2025-04-18 14:45:56 +02:00
Andreas Kling
57809b1100
LibWeb: Skip dynamic_cast in CSSRGB after we already did a type check
2025-04-18 14:45:56 +02:00
Andreas Kling
d8188c9f14
LibJS+LibWeb: Add JS::Object::fast_is<T> helpers for some LibWeb types
...
These are slightly unfortunate as we're crossing the library boundary,
but there's precedent with Object::is_dom_node(), and these are just
knocking down a few more items that were showing up in profiles.
2025-04-18 14:45:56 +02:00
Andreas Kling
207afb0d3b
LibWeb: Avoid double dynamic_cast in parent_element_for_event_dispatch()
2025-04-18 14:45:56 +02:00
Andreas Kling
877391d569
LibWeb: Add more fast_is<T> helpers for layout and paintable nodes
2025-04-18 14:45:56 +02:00
Andreas Kling
aecb144df0
LibWeb: Add more fast_is<T> helpers for DOM::Node subclasses
2025-04-18 14:45:56 +02:00
Andreas Kling
0e490e3352
LibWeb: Add fast_is<T> helpers for Navigable & TraversableNavigable
2025-04-18 14:45:56 +02:00
Andreas Kling
f35069d63b
LibJS+LibWeb: Add fast_is<T> helpers for Realm::HostDefined class family
2025-04-18 14:45:56 +02:00
Andreas Kling
a9e415b3c4
LibJS+LibWeb: Add fast_is<T> helpers for HTML::Script class family
2025-04-18 14:45:56 +02:00
Andreas Kling
e7b6b84648
LibWeb: Avoid dynamic_cast in EventTarget initialization
...
Let's use a virtual to tell if something uses the
WindowOrWorkerGlobalScope mixin instead.
2025-04-18 14:45:56 +02:00
Andreas Kling
84626c7db2
LibJS: Add a bunch of fast_is<T> helpers for commonly checked types
...
Based on what was hitting dynamic_cast<T> on Speedometer.
2025-04-18 14:45:56 +02:00
Glenn Skrzypczak
c0cbd439a2
LibWeb/HTML: Dispatch command
events
...
Command events are now dispatched when buttons are activated. The
special commands for popovers and dialogs are also implemented.
2025-04-18 12:09:57 +01:00
Glenn Skrzypczak
cce7d8c0fb
LibWeb/HTML: Implement CommandEvent
class
...
This implements the `CommandEvent` class.
2025-04-18 12:09:57 +01:00
Glenn Skrzypczak
ffe0b05abd
LibWeb/HTML: Add the commandForElement attribute to the button element
...
This commit adds the commandForElement attribute to the
button element. Executing commands is not implemented yet.
2025-04-18 12:09:57 +01:00
Glenn Skrzypczak
b2db07f002
LibWeb/HTML: Add the command attribute to the button element
...
This commit adds the getter and setter for the command attribute to the
button element. Executing commands is not implemented yet.
2025-04-18 12:09:57 +01:00
Timothy Flynn
629cd3c42a
LibWeb: Sort remaining stream AOs (mostly) in spec order
...
The remaining AOs can stay where they are. This patch just sorts them in
spec order to match the other AO files. Section 8.1 is last, however, as
these are all templates and need the declarations of other AOs above.
2025-04-18 06:55:40 -04:00
Timothy Flynn
3e8c6dbaff
LibWeb: Move TransformStream AOs into their own file
...
The main streams AO file has gotten very large, and is a bit difficult
to navigate. In an effort to improve DX, this migrates TransformStream
AOs to their own file.
2025-04-18 06:55:40 -04:00
Timothy Flynn
26c01f0957
LibWeb: Move WritableStream AOs into their own file
...
The main streams AO file has gotten very large, and is a bit difficult
to navigate. In an effort to improve DX, this migrates WritableStream
AOs to their own file.
2025-04-18 06:55:40 -04:00
Timothy Flynn
a9ddd427cb
LibWeb: Move ReadableStream AOs into their own file
...
The main streams AO file has gotten very large, and is a bit difficult
to navigate. In an effort to improve DX, this migrates ReadableStream
AOs to their own file. And the helper classes used for the tee and pipe-
to operations are also in their own files.
2025-04-18 06:55:40 -04:00
Timothy Flynn
c35ef36293
LibWeb: Fix typos in ReadableStream AO names
2025-04-18 06:55:40 -04:00
Sam Atkins
141f6cb392
LibWeb/HTML: Use relevant global object's document in History
...
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, 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
Corresponds to dba6e7b6c2
and 4c0401186c
The spec algorithms now use "the relevant global object's associated
document", so remove the concept of the History object itself having an
associated document. The spec has also combined the implementations for
forward/back/go so I've matched that too.
2025-04-18 10:49:56 +02:00
Sam Atkins
5b57856eae
LibWeb/HTML: Check associated document is fully active, not the window
...
This is a spec change, but we already implemented the correct version.
Corresponds to aa39b6b6b0
2025-04-18 10:49:56 +02:00
Sam Atkins
343df5d00f
LibWeb: Update focus-related spec text
...
Corresponds to 03ab71775b
I've also split the `Document::has_focus()` method for clarity. Actually
implementing the "has focus steps" turns out to be quite involved so
I've left it for now.
2025-04-18 10:49:56 +02:00
Sam Atkins
609d568776
LibWeb: Remove "locked for focus" concept
...
Corresponds to 5ba23f9f6d
2025-04-18 10:49:56 +02:00
Shannon Booth
3e17b1c9ae
LibWeb: Make Node::parent_element return GC::Ptr
...
This is useful for people like myself who run with debug mode to
more reliably get stacktraces without spinning up a debugger.
2025-04-18 10:49:02 +02:00
Shannon Booth
a14481ee05
LibWeb/HTML: Handle no parent element for Element::list_owner
...
Fixes a crash when running Speedometer 3.0 as reduced in the included
test case.
2025-04-18 10:48:47 +02:00
sideshowbarker
b88fddbf47
FAQ: Add question and answer about ad blocker
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, 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-04-17 20:00:51 +02:00
Andreas Kling
832b0a0ace
LibWeb: Invalidate style when HTMLDialogElement modal state changes
...
This fixes Layout/input/dialog-open-modal.html which began flaking
super hard after the preceding commits that reduced style invalidation
for focus-related pseudo class selectors.
2025-04-17 19:45:55 +02:00
Andreas Kling
8d51c41a42
LibWeb: Remove no-longer-used StyleInvalidationReasons :^)
2025-04-17 19:45:55 +02:00
Andreas Kling
55ab8ff539
LibWeb: Use optimized invalidation for :active pseudo class
2025-04-17 19:45:55 +02:00
Andreas Kling
6da48c60ca
LibWeb: Use optimized invalidation for target-related pseudo classes
2025-04-17 19:45:55 +02:00