Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
238 commits
Select commit Hold shift + click to select a range
86affe8
LibWebView+UI: Show spinner for startup URLs
awesomekling Jul 10, 2026
ec3d994
LibWeb: Stop forcing definite sizes on abspos containing block state
kalenikaliaksandr Jul 11, 2026
db77995
LibWeb: Don't copy containing block into throwaway layout states
kalenikaliaksandr Jul 11, 2026
61a6d62
LibWeb: Don't copy ancestor state into measurement layout states
kalenikaliaksandr Jul 11, 2026
ce6d519
LibWeb: Remove unused LayoutState::populate_node_from()
kalenikaliaksandr Jul 11, 2026
203ccdf
LibWeb: Compute inline containing block rect without cumulative_offset
kalenikaliaksandr Jul 11, 2026
6433914
LibWeb: Skip abspos layout inside measurement layout states
kalenikaliaksandr Jul 11, 2026
dc019aa
LibWeb: Lay out table cells at most once per committing layout state
kalenikaliaksandr Jul 11, 2026
4163f30
LibWeb: Reject double registration of contained abspos children
kalenikaliaksandr Jul 11, 2026
5c07397
LibWeb: Clear stale navigation IDs left by non-continued navigations
awesomekling Jul 11, 2026
2a3bc6a
LibWeb: Lay out markers for inline list items
kalenikaliaksandr Jul 10, 2026
8c680f6
LibWeb: Make foreignObject a fixed positioning containing block
kalenikaliaksandr Jul 11, 2026
b9afd6b
LibWeb: Cancel document fetches when aborting a load
awesomekling Jul 11, 2026
924a998
UI+LibWeb+LibWebView+WebContent: Stop page loading with Escape
awesomekling Jul 11, 2026
18b2758
WebContent: Preserve fractional frame deadlines
awesomekling Jul 11, 2026
aa1ef6f
Compositor: Defer stale async scroll frames locally
awesomekling Jul 11, 2026
f2e9a4e
Compositor: Track presentation backing store ownership
awesomekling Jul 11, 2026
9dce2af
Compositor: Rasterize only damaged regions
awesomekling Jul 11, 2026
d236b0e
Compositor: Raster partial frames on damage-sized surfaces
awesomekling Jul 11, 2026
0a8caa2
Compositor: Keep blocked frames scheduled for vsync
awesomekling Jul 11, 2026
132f319
Compositor: Propagate frame damage to frontends
awesomekling Jul 11, 2026
bb0beb8
Tests/LibWeb: Add test for anchors outside the containing block
kalenikaliaksandr Jul 12, 2026
e329245
LibWeb: Only accept anchors scoped to the abspos containing block
kalenikaliaksandr Jul 12, 2026
091edae
LibWeb: Reduce GC churn in the HTMLCollection prune-after-GC test
sideshowbarker Jul 12, 2026
7de4b94
LibWeb: Invalidate style and layout synchronously for cached images
sideshowbarker Jul 11, 2026
a014d64
Tests/LibWeb: Add test for Backspace cancelled on keydown
awesomekling Jul 11, 2026
15adfd7
LibWeb: Don't run delete editing action when keydown is cancelled
awesomekling Jul 11, 2026
2d8851b
LibWeb: Place cursor at first caret position when focusing editable
awesomekling Jul 11, 2026
f0359ef
Tests/LibWeb: Add test for legacy key attributes on keypress events
awesomekling Jul 11, 2026
8eb49e5
LibWeb: Report the character code in keyCode and which on keypress
awesomekling Jul 11, 2026
06fb641
Tests/LibWeb: Add test for the legacy textInput event
awesomekling Jul 11, 2026
fbc1a6d
LibWeb: Dispatch legacy textInput events when inserting text
awesomekling Jul 11, 2026
58be693
LibWeb: Don't run the caret blink timer in test mode
awesomekling Jul 11, 2026
50ea8b7
LibWeb: Repaint the paintable that owns a text's caret fragments
awesomekling Jul 11, 2026
4b49d9b
Tests/LibWeb: Add test for caret navigation across editable blocks
awesomekling Jul 11, 2026
b6ada1c
LibWeb: Support caret navigation across nodes in editing hosts
awesomekling Jul 11, 2026
1e86bb1
LibWeb: Repaint the node the caret moved away from
awesomekling Jul 11, 2026
a94d51c
Tests/LibWeb: Add test for caret navigation over <br> empty lines
awesomekling Jul 11, 2026
4f95aba
LibWeb: Support caret navigation onto empty lines rendered by <br>
awesomekling Jul 11, 2026
1c0c962
Tests/LibWeb: Add test for extending a selection across blocks
awesomekling Jul 11, 2026
3cd4827
LibWeb: Move the selection focus, not the anchor, in caret navigation
awesomekling Jul 11, 2026
7dea4f2
LibWeb: Paint the caret on the correct empty <br> line
awesomekling Jul 11, 2026
579c3e4
Tests/LibWeb: Add test for Selection.modify() across blocks
awesomekling Jul 11, 2026
d153367
LibWeb: Support element positions and more granularities in modify()
awesomekling Jul 11, 2026
93c68c7
LibWeb: Don't use detached paintables in mousedown default actions
awesomekling Jul 11, 2026
b86a4a7
LibWebView: Isolate test clipboards per view
awesomekling Jul 12, 2026
865fce2
Tests/LibWeb: Add test for clipboard shortcut keys
awesomekling Jul 12, 2026
71c3b4f
LibWeb: Implement the clipboard actions for Ctrl+C, Ctrl+X and Ctrl+V
awesomekling Jul 12, 2026
3541bd3
LibWeb: Continue pending media element loads after document adoption
awesomekling Jul 11, 2026
f3e68c8
LibWeb: Don't leak load event delayer count in delayer move-assignment
awesomekling Jul 11, 2026
5114d5f
LibWeb: Don't fire spurious load events for img elements in picture
awesomekling Jul 11, 2026
df94bd0
LibWeb: Clean up when a navigation fizzles without a document
awesomekling Jul 11, 2026
74c6f7a
LibWeb: Accept audio sample rates in the range 3000 to 768000
awesomekling Jul 11, 2026
a7290d2
LibWeb: Let DOMContentLoaded handlers delay the load event
awesomekling Jul 11, 2026
7cc9a6f
LibWeb: Wake ancestor parser end states when a load delayer clears
awesomekling Jul 11, 2026
ea9d7ba
LibWeb: Share document observer retargeting between adopting elements
awesomekling Jul 11, 2026
c44da28
LibWeb: Fire container load events before the ancestor's load event
awesomekling Jul 11, 2026
f454f6c
LibWeb: Keep child history completions runnable
shannonbooth Jul 11, 2026
e17b694
LibWeb: Generalize NavigableId to CrossProcessId
shannonbooth Jul 11, 2026
43c7baa
LibWebView: Use CrossProcessId for session history document state
shannonbooth Jul 11, 2026
10f0626
LibWeb: Add test for WebGL canvas display list invalidation
awesomekling Jul 12, 2026
c05a402
LibWeb: Track canvas content generation in DrawCanvas commands
awesomekling Jul 12, 2026
b236432
LibWeb: Don't invalidate the display list on WebGL content updates
awesomekling Jul 12, 2026
113eadc
LibWeb: Track video frame content generation in DrawVideoFrame
awesomekling Jul 12, 2026
517b5f0
LibWebView: Make omnibox activation generation-safe
awesomekling Jul 11, 2026
88759ec
LibWebView: Query omnibox history off the UI thread
awesomekling Jul 11, 2026
2a16426
LibWebView: Rank omnibox history with bounded signals
awesomekling Jul 11, 2026
fbbac95
LibWebView: Mux omnibox candidates by intent and relevance
awesomekling Jul 11, 2026
24f5d28
LibWebView: Debounce remote omnibox suggestions
awesomekling Jul 11, 2026
1c5f1ac
LibDatabase: Support binding and reading doubles
awesomekling Jul 11, 2026
e5a0e3d
LibWebView: Rank history with decayed visit intent
awesomekling Jul 11, 2026
6c5c28c
LibWebView: Add bookmarks to omnibox ranking
awesomekling Jul 12, 2026
8782d4a
LibWebView: Store committed omnibox engagements
awesomekling Jul 12, 2026
0a9a5fe
LibWebView: Rank adaptive omnibox engagements
awesomekling Jul 12, 2026
ce2561c
LibWebView: Learn from committed omnibox actions
awesomekling Jul 12, 2026
1ce44c7
LibWebView: Stabilize asynchronous omnibox results
awesomekling Jul 12, 2026
68d4397
LibWebView: Rank aggregate history origins
awesomekling Jul 12, 2026
946c74c
LibDatabase: Support interruptible statements
awesomekling Jul 12, 2026
b10b68f
LibWebView: Preempt stale local omnibox queries
awesomekling Jul 12, 2026
c1e2795
LibWebView: Guard query strings from inline completion
awesomekling Jul 12, 2026
3b1c41e
LibWebView: Use semantic omnibox destination identity
awesomekling Jul 12, 2026
ef2de51
LibWebView: Honor the history schema fallback in autocomplete
awesomekling Jul 12, 2026
6ddd9db
LibWebView: Classify redirected history visits
awesomekling Jul 12, 2026
d5670dd
LibDatabase: Allow configuring a busy timeout
awesomekling Jul 12, 2026
7961c95
LibWebView: Tolerate concurrent history writers
awesomekling Jul 12, 2026
f7e34db
LibWebView: Rank short queries by proven intent
awesomekling Jul 12, 2026
8a75160
UI: Blend omnibox results without source headers
awesomekling Jul 12, 2026
8c74e5f
LibWebView: Finish omnibox completion acceptance
awesomekling Jul 12, 2026
82936fd
LibWebView: Preserve bookmarked omnibox learning
awesomekling Jul 12, 2026
efaf97f
LibWebView: Cover short-prefix and private integration
awesomekling Jul 12, 2026
78b26a2
UI: Refine omnibox suggestion presentation
awesomekling Jul 12, 2026
32d6ee3
LibWebView: Preserve valid remote omnibox suggestions
awesomekling Jul 12, 2026
befcaaf
LibWebView: Match exact short bookmark titles
awesomekling Jul 12, 2026
2fb3d81
Documentation: Add omnibox design
awesomekling Jul 12, 2026
876128c
LibWebView: Initialize autocomplete test suggestions
awesomekling Jul 12, 2026
2804141
Tests/LibWeb: Add test for stale intrinsic sizes after ancestor resize
kalenikaliaksandr Jul 12, 2026
cdca113
Tests/LibWeb: Add test for border-box min-width under intrinsic sizing
kalenikaliaksandr Jul 12, 2026
879da2a
LibWeb: Use non-cyclic basis for table-wrapper min-content queries
kalenikaliaksandr Jul 12, 2026
0a4acd2
LibWeb: Do not apply a measured box's own min/max-width in measurement
kalenikaliaksandr Jul 12, 2026
71a3d95
LibWeb: Key the intrinsic-size cache by its measurement inputs
kalenikaliaksandr Jul 12, 2026
a37c9ff
WebContent: Allow WebDriver to add parent-domain cookies
awesomekling Jul 12, 2026
4323a10
Tests/LibWeb: Cover rule cache builds forced by pending :has flushes
awesomekling Jul 12, 2026
24ac849
LibWeb: Don't force rule cache builds to early-out of :has flushes
awesomekling Jul 12, 2026
e3bd123
LibWeb: Count style scopes examined by pending :has flushes
awesomekling Jul 12, 2026
808096d
LibWeb: Only flush :has invalidations for scopes that scheduled them
awesomekling Jul 12, 2026
ada84b9
LibWeb: Count stylesheet add/remove invalidation set builds
awesomekling Jul 12, 2026
3df9db1
LibWeb: Cache each stylesheet's add/remove invalidation set
awesomekling Jul 12, 2026
a9963d1
LibWeb: Count style scope rule cache builds
awesomekling Jul 12, 2026
c06dec2
LibWeb: Share style caches across scopes with identical sheet sets
awesomekling Jul 12, 2026
4399ab3
Tests/LibWeb: Cover recompute scope of on-demand computed style reads
awesomekling Jul 12, 2026
be1d7cc
LibWeb: Don't recompute unrelated dirty elements for style reads
awesomekling Jul 12, 2026
1284aa8
LibWeb: Move shadow roots between document lists on adoption
awesomekling Jul 12, 2026
44fded4
AK: Bounds-check the count in FixedMemoryStream::read_in_place
Lubrsi Jun 4, 2026
bdba618
AK: Add a LEB128 writer
Lubrsi Jun 18, 2026
7523983
LibWeb/HTML: Frame object properties with a terminator, not a count
Lubrsi Jun 20, 2026
abb6d66
LibWeb/HTML: Serialize int32-range numbers with a dedicated tag
Lubrsi Jun 20, 2026
e4f3e4b
LibWeb/HTML: Assign structured clone ids from the live memory count
Lubrsi Jun 10, 2026
998ed12
LibWeb: Add stable structured serialize storage records
Lubrsi Jun 7, 2026
9033e81
LibWeb/Bindings: Add helpers to create simple and principal JS realms
Lubrsi Jun 4, 2026
e8416a9
LibWeb: Export the remaining serializable platform objects
Lubrsi Jun 7, 2026
7b216f4
Tests/LibWeb: Test the structured serialize storage format
Lubrsi Jun 7, 2026
b3c243b
Tests/LibWeb: Test that a repeated typed array reference stays one view
Lubrsi Jun 27, 2026
941917c
Tests/LibWeb: Add durable frozen-record coverage for the format
Lubrsi Jun 7, 2026
56562db
Tests/LibWeb: Test rejection of malformed storage records
Lubrsi Jun 7, 2026
96dcdcc
Tests/LibWeb: Round-trip CryptoKeys through IndexedDB
Lubrsi Jun 11, 2026
99aa4be
LibWeb/IndexedDB: Reject undecodable stored records
Lubrsi Jul 8, 2026
8cd705e
Tests/LibWeb: Add a frozen decode corpus for the storage format
Lubrsi Jul 8, 2026
53d32e8
LibWeb: Update font faces when stylesheet media changes
awesomekling Jul 12, 2026
2b99693
LibWeb: Support non-scaling SVG strokes
awesomekling Jul 12, 2026
863671d
LibWeb: Use flow-root layout inside fieldsets
awesomekling Jul 12, 2026
ae9294e
LibWeb: Establish formatting contexts for button layout
awesomekling Jul 12, 2026
b0a3f34
LibWeb: Refresh dynamically propagated viewport overflow
awesomekling Jul 12, 2026
a413471
LibWeb: Move scrollable overflow measurement out of LayoutState::commit
kalenikaliaksandr Jul 12, 2026
d585a33
LibWeb: Add scroll frame reassignment and sticky constraint refresh
kalenikaliaksandr Jul 12, 2026
f79a9e7
LibWeb: Add a scrollable-overflow bit to style change invalidation
kalenikaliaksandr Jul 12, 2026
5bd7863
LibWeb: Invalidate accumulated visual contexts on transform-box change
kalenikaliaksandr Jul 13, 2026
be19572
LibWeb: Update scrollable overflow without layout on transform change
kalenikaliaksandr Jul 12, 2026
1fb8692
Tests/LibWeb: Add coverage for scrollable overflow recalculation
kalenikaliaksandr Jul 12, 2026
aac8b16
Docs: Note the Qt 6.9 minimum in the build instructions
sideshowbarker Jul 13, 2026
f812991
LibWeb: Consider ratio-dependent height definite when appropriate
Calme1709 Jul 10, 2026
6119b52
LibWeb: Only block scripts on the document's own style sheets
awesomekling Jul 13, 2026
3d08000
Tests: Stabilize :has() invalidation counter coverage
awesomekling Jul 13, 2026
8fa085f
Tests/LibWeb: Make modal animation test deterministic
awesomekling Jul 13, 2026
7c325de
LibWeb: Make media adoption fetch test deterministic
awesomekling Jul 13, 2026
1bfd4e2
RequestServer: Stop setting CURLOPT_PIPEWAIT, to avoid a deadlock
sideshowbarker Jul 13, 2026
1f741ad
LibWeb: Keep carets visible at inline scrollport edges
awesomekling Jul 13, 2026
b56cbcd
LibWeb: Keep single-line input text vertically stable
awesomekling Jul 13, 2026
4a669bf
LibWeb: Invalidate cached canvas commands after WebGL draws
awesomekling Jul 13, 2026
38f338a
Tests/LibWeb: Make `setTestTimeout()` always set a new timeout
gmta Jul 13, 2026
139d601
LibWeb: Prevent quadratic insertion performance in parser
gmta Jul 13, 2026
770ac61
Tests: Drop unstable counters from :has() sibling combinator test
sideshowbarker May 27, 2026
d895b1d
LibWeb: Test text control input event ordering
awesomekling Jul 13, 2026
26189d3
LibWeb: Dispatch text control input events synchronously
awesomekling Jul 13, 2026
5a466f8
LibWeb: Test form control event ordering
awesomekling Jul 13, 2026
e42f144
LibWeb: Dispatch form control events synchronously
awesomekling Jul 13, 2026
48c2308
Docs: Clarify note about Kitware’s apt repository
sideshowbarker Jul 13, 2026
57cf468
LibWeb: Prepare paint helpers and tests for inline fragment rework
kalenikaliaksandr Jul 11, 2026
7055cc8
LibWeb: Compute inline box pieces during inline layout
kalenikaliaksandr Jul 11, 2026
fc5fba3
LibWeb: Store inline content flat on the block and add InlinePaintable
kalenikaliaksandr Jul 11, 2026
1f35784
LibWeb: Store a single paintable pointer on Layout::Node
kalenikaliaksandr Jul 11, 2026
aa947a7
LibWeb: Simplify text fragment iteration over flat inline storage
kalenikaliaksandr Jul 11, 2026
4954ea3
LibWebView: Add browser profile path resolver
awesomekling Jul 13, 2026
eb54bb5
Meta: Add profile migration tool
awesomekling Jul 13, 2026
257d355
LibWebView: Isolate browser state by profile
awesomekling Jul 13, 2026
9744e83
UI/AppKit: Isolate saved window frames by profile
awesomekling Jul 13, 2026
f117cfb
LibWeb: Place text control carets from padding clicks
awesomekling Jul 13, 2026
77493ee
UI: Distinguish profiles with Dock icon badges
awesomekling Jul 13, 2026
132cf4d
LibWeb: Store Web platform strings as UTF-16
awesomekling Jul 13, 2026
d8e9b8b
LibWeb: Honor IDL nonces on inline style elements
kalenikaliaksandr Jul 14, 2026
832e181
UI/Qt: Offset native macOS window controls
awesomekling Jul 14, 2026
d6e3640
LibWeb: Resolve user-select values without layout nodes
awesomekling Jul 13, 2026
200606e
LibWeb: Clear text selection after clicking within it
awesomekling Jul 14, 2026
c1280c4
UI/Qt: Focus web view after activating bookmarks
awesomekling Jul 14, 2026
b5be6ec
UI/Qt: Open external URLs outside private windows
awesomekling Jul 14, 2026
1ef3389
UI/Qt: Recreate web view when detaching tabs
awesomekling Jul 14, 2026
0806d55
UI/Qt: Cascade popups without explicit coordinates
awesomekling Jul 14, 2026
6d92dff
LibWeb: Preserve text input size after table normalization
awesomekling Jul 13, 2026
6e8de4e
LibWeb: Separate in-flow bounds from scrollable overflow
awesomekling Jul 13, 2026
bcb3e72
LibWeb: Detach chrome widgets from stale paintables
awesomekling Jul 14, 2026
3738371
LibSandbox: Report sandbox violations instead of killing the process
sideshowbarker Jun 23, 2026
aa6b2bb
LibWeb: Support VERTEX_ARRAY_BINDING_OES in getParameter
gmta Jul 14, 2026
48ff294
LibWeb: Add table flex item stretch layout coverage
awesomekling Jul 14, 2026
6141e99
LibWeb: Stretch table grids with flex item wrappers
awesomekling Jul 14, 2026
5b04398
Tests: Drop html-parser-script-created-parser-many-flat-siblings test
sideshowbarker Jul 14, 2026
86bb10c
LibWeb: Report only audible media playback to browser chrome
awesomekling Jul 14, 2026
df1e712
UI/Qt: Display ampersands once in tab titles
awesomekling Jul 14, 2026
2ea1c72
LibWeb: Remove task queue entries in constant time
awesomekling Jul 14, 2026
ca6e68b
LibWeb: Support the legacy font/x-woff media type
awesomekling Jul 14, 2026
6f5cb00
LibWeb: Apply scroll margins to lazy loading roots
awesomekling Jul 14, 2026
bbb2eec
LibWeb: Expand pseudo-element computed style coverage
awesomekling Jul 14, 2026
5b1133f
LibWeb: Skip empty pseudo-element rule caches
awesomekling Jul 14, 2026
ba0a898
LibWebView: Cancel provisional loads on browser UI back
awesomekling Jul 14, 2026
753f601
LibWebView: Restore cross-site provisional traversal targets
awesomekling Jul 14, 2026
1d34431
LibWebView: Restore canceled cross-site provisional loads
awesomekling Jul 14, 2026
64b864a
RequestServer: Initialize libcurl before sandboxing
gmta Jul 14, 2026
0e22a1f
UI/Qt: Tighten horizontal browser chrome
awesomekling Jul 14, 2026
f7d843f
UI/Qt: Dim disabled chrome icons
awesomekling Jul 14, 2026
969715b
UI/Qt: Lighten the hamburger icon
awesomekling Jul 14, 2026
163d56a
UI/Qt: Reduce the default horizontal tab width
awesomekling Jul 14, 2026
70f5cca
UI/Qt: Preserve window control offsets while resizing
awesomekling Jul 14, 2026
b0326b9
UI/Qt: Fix light-mode omnibox bookmark badges
awesomekling Jul 14, 2026
cb607cc
Meta/WPT.sh: Do not run venv preparation inside namespaces
gmta Jul 14, 2026
d34b87e
Tests: Import some CSSAnimation tests
Calme1709 Jul 14, 2026
97b98b6
LibWeb: Move `last_css_animation_play_state()` to `CSSAnimation`
Calme1709 Jul 13, 2026
0739a6e
LibWeb: Remove `Animatable::remove_css_animation` declaration
Calme1709 Jul 13, 2026
1d002a4
LibWeb: Respect `animation-name` index for CSSAnimation composite order
Calme1709 Jul 14, 2026
f6416e8
LibWeb: Handle duplicate `animation-name` entries
Calme1709 Jul 14, 2026
05a99cc
LibWeb: Set `has_css_defined_animations` inline
Calme1709 Jul 14, 2026
1194907
LibWeb: Don't use nested SVG roots as partial relayout boundaries
kalenikaliaksandr Jul 14, 2026
b5e659a
LibWeb: Reassign scroll frames and text blocks after partial relayout
kalenikaliaksandr Jul 14, 2026
6d3460e
LibWeb: Reinsert partial relayout roots at their paint tree position
kalenikaliaksandr Jul 14, 2026
8b5776f
LibWeb: Propagate marks on already-dirty SVG partial relayout roots
kalenikaliaksandr Jul 15, 2026
0684c7c
LibWeb: Funnel post-layout-commit refreshes through one shared path
kalenikaliaksandr Jul 14, 2026
172a6e0
LibWeb: Assign layout indices when layout nodes are constructed
kalenikaliaksandr Jul 14, 2026
4f01d8b
LibWeb: Make formatting context factory functions static
kalenikaliaksandr Jul 14, 2026
b050fcc
LibWeb: Track partial relayout roots as generic layout boxes
kalenikaliaksandr Jul 14, 2026
3f33ad5
LibWeb: Collect partial relayout boundaries at dispatch time
kalenikaliaksandr Jul 14, 2026
6b3dd53
LibWeb: Generalize relayout_svg_root into relayout_subtree
kalenikaliaksandr Jul 14, 2026
3fc9536
LibWeb: Bundle abspos layout inputs into a replayable struct
kalenikaliaksandr Jul 14, 2026
a3f454e
LibWeb: Save the inputs used to lay out absolutely positioned boxes
kalenikaliaksandr Jul 14, 2026
6e5d8e9
LibWeb: Derive escaped-by-abspos facts from containing block pointers
kalenikaliaksandr Jul 14, 2026
9c1f708
LibWeb: Force full relayout when containing block establishment changes
kalenikaliaksandr Jul 14, 2026
6276106
LibWeb: Repair fragment references when replacing a layout box in place
kalenikaliaksandr Jul 14, 2026
39e1729
LibWeb: Report layout tree update confinement from TreeBuilder
kalenikaliaksandr Jul 14, 2026
142a955
LibWeb: Add internals counters for partial and full layout passes
kalenikaliaksandr Jul 14, 2026
6b45a77
LibWeb: Add tests for extending partial relayout to abspos boundaries
kalenikaliaksandr Jul 14, 2026
a2b478e
LibWeb: Use absolutely positioned boxes as partial relayout boundaries
kalenikaliaksandr Jul 14, 2026
156f581
LibWeb: Run confined layout tree updates through partial relayout
kalenikaliaksandr Jul 14, 2026
b357d7e
LibWeb: Run boundary-self style changes through partial relayout
kalenikaliaksandr Jul 14, 2026
9c70025
LibWeb: Rebuild partial relayout boundary boxes in place
kalenikaliaksandr Jul 14, 2026
bc418cc
LibWeb: Keep nested sticky offsets separate from scrolling
awesomekling Jul 14, 2026
297f4f7
Meta/WPT.sh: Prevent venv setup failure because of missing test behavior
gmta Jul 15, 2026
4485436
LibWebView: Skip browser process coordination under WebDriver
tcl3 Jul 15, 2026
a658b46
WebDriver: Use one browser profile per WebDriver process
tcl3 Jul 15, 2026
9ff2722
WebDriver+Meta: Create WPT browser profiles under a per-run root
tcl3 Jul 15, 2026
934080c
RequestServer: Implement AIA fetching, for sites with broken cert chains
sideshowbarker Jul 12, 2026
e0beb40
Tests/RequestServer: Add unit tests for AIA certificate parsing
sideshowbarker Jul 12, 2026
49fe55f
Tests/LibWeb: Add an end-to-end AIA certificate-fetching test
sideshowbarker Jul 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/actions/setup/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ runs:
python3 -m pip install --upgrade pip
if ${{ inputs.type == 'build' }} ; then
pip3 install pyyaml requests six
pip3 install pyyaml requests six cryptography
else
pip3 install pyright ruff
fi
Expand Down
4 changes: 4 additions & 0 deletions AK/Debug.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,10 @@
# cmakedefine01 SPAM_DEBUG
#endif

#ifndef STRUCTURED_SERIALIZE_DEBUG
# cmakedefine01 STRUCTURED_SERIALIZE_DEBUG
#endif

#ifndef SYNTAX_HIGHLIGHTING_DEBUG
# cmakedefine01 SYNTAX_HIGHLIGHTING_DEBUG
#endif
Expand Down
69 changes: 67 additions & 2 deletions AK/JsonObjectSerializer.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,16 +72,46 @@ class JsonObjectSerializer {
return {};
}

ErrorOr<void> add(StringView key, Utf16View const& value)
{
TRY(begin_item(key));
if constexpr (IsLegacyBuilder<Builder>) {
TRY(m_builder.try_append('"'));
TRY(m_builder.try_append_escaped_for_json(value));
TRY(m_builder.try_append('"'));
} else {
TRY(m_builder.append('"'));
TRY(m_builder.append_escaped_for_json(value));
TRY(m_builder.append('"'));
}
return {};
}

ErrorOr<void> add(Utf16View const& key, Utf16View const& value)
{
TRY(begin_item(key));
if constexpr (IsLegacyBuilder<Builder>) {
TRY(m_builder.try_append('"'));
TRY(m_builder.try_append_escaped_for_json(value));
TRY(m_builder.try_append('"'));
} else {
TRY(m_builder.append('"'));
TRY(m_builder.append_escaped_for_json(value));
TRY(m_builder.append('"'));
}
return {};
}

ErrorOr<void> add(StringView key, char const* value)
{
TRY(begin_item(key));
if constexpr (IsLegacyBuilder<Builder>) {
TRY(m_builder.try_append('"'));
TRY(m_builder.try_append_escaped_for_json({ value, __builtin_strlen(value) }));
TRY(m_builder.try_append_escaped_for_json(StringView { value, __builtin_strlen(value) }));
TRY(m_builder.try_append('"'));
} else {
TRY(m_builder.append('"'));
TRY(m_builder.append_escaped_for_json({ value, __builtin_strlen(value) }));
TRY(m_builder.append_escaped_for_json(StringView { value, __builtin_strlen(value) }));
TRY(m_builder.append('"'));
}
return {};
Expand Down Expand Up @@ -183,12 +213,24 @@ class JsonObjectSerializer {
return JsonArraySerializer<Builder>::try_create(m_builder);
}

ErrorOr<JsonArraySerializer<Builder>> add_array(Utf16View const& key)
{
TRY(begin_item(key));
return JsonArraySerializer<Builder>::try_create(m_builder);
}

ErrorOr<JsonObjectSerializer<Builder>> add_object(StringView key)
{
TRY(begin_item(key));
return JsonObjectSerializer::try_create(m_builder);
}

ErrorOr<JsonObjectSerializer<Builder>> add_object(Utf16View const& key)
{
TRY(begin_item(key));
return JsonObjectSerializer::try_create(m_builder);
}

ErrorOr<void> finish()
{
VERIFY(!m_finished);
Expand Down Expand Up @@ -229,6 +271,29 @@ class JsonObjectSerializer {
return {};
}

ErrorOr<void> begin_item(Utf16View const& key)
{
VERIFY(!m_finished);
if (!m_empty) {
if constexpr (IsLegacyBuilder<Builder>)
TRY(m_builder.try_append(','));
else
TRY(m_builder.append(','));
}
m_empty = false;

if constexpr (IsLegacyBuilder<Builder>) {
TRY(m_builder.try_append('"'));
TRY(m_builder.try_append_escaped_for_json(key));
TRY(m_builder.try_append("\":"sv));
} else {
TRY(m_builder.append('"'));
TRY(m_builder.append_escaped_for_json(key));
TRY(m_builder.append("\":"sv));
}
return {};
}

Builder& m_builder;
bool m_empty { true };
bool m_finished { false };
Expand Down
45 changes: 45 additions & 0 deletions AK/LEB128.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,52 @@ class [[gnu::packed]] LEB128 {
return LEB128<ValueType> { result };
}

ErrorOr<void> write_to_stream(Stream& stream) const
{
ErrorOr<void> result;
for_each_leb128_byte(m_value, [&](u8 byte) {
if (!result.is_error())
result = stream.write_value(byte);
});
return result;
}

template<typename Buffer>
static void append_to(Buffer& output, ValueType value)
{
for_each_leb128_byte(value, [&output](u8 byte) { output.append(byte); });
}

private:
template<typename Callback>
static void for_each_leb128_byte(ValueType value, Callback&& callback)
requires(Unsigned<ValueType>)
{
do {
u8 byte = value & 0x7F;
value >>= 7;
if (value != 0)
byte |= 0x80; // More bytes follow.
callback(byte);
} while (value != 0);
}

template<typename Callback>
static void for_each_leb128_byte(ValueType value, Callback&& callback)
requires(Signed<ValueType>)
{
while (true) {
u8 byte = value & 0x7F;
value >>= 7; // Arithmetic shift; preserves the sign.
bool const sign_bit_set = (byte & 0x40) != 0;
if ((value == 0 && !sign_bit_set) || (value == -1 && sign_bit_set)) {
callback(byte);
return;
}
callback(static_cast<u8>(byte | 0x80));
}
}

ValueType m_value { 0 };
};

Expand Down
8 changes: 7 additions & 1 deletion AK/MemoryStream.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#pragma once

#include <AK/Checked.h>
#include <AK/Error.h>
#include <AK/OwnPtr.h>
#include <AK/Stream.h>
Expand Down Expand Up @@ -74,8 +75,13 @@ class FixedMemoryStream : public SeekableStream {
return Error::from_string_literal("Tried to obtain a non-const span from a read-only FixedMemoryStream");
}

Checked<size_t> byte_count = sizeof(T);
byte_count *= count;
if (byte_count.has_overflow() || byte_count.value() > remaining())
return Error::from_string_literal("Read of out-of-bounds span from FixedMemoryStream");

Span<T> span { reinterpret_cast<T*>(m_bytes.offset_pointer(m_offset)), count };
TRY(discard(sizeof(T) * count));
TRY(discard(byte_count.value()));
return span;
}

Expand Down
7 changes: 7 additions & 0 deletions AK/Utf16FlyString.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,13 @@ Utf16FlyString Utf16FlyString::from_utf8(StringView string)
return Utf16String::from_utf8(string);
}

Utf16FlyString Utf16FlyString::from_ascii_without_validation(StringView string)
{
if (auto result = create_fly_string_from_cache(string); result.has_value())
return result.release_value();
return Utf16String::from_ascii_without_validation(string.bytes());
}

Utf16FlyString Utf16FlyString::from_utf8_without_validation(StringView string)
{
if (auto result = create_fly_string_from_cache(string); result.has_value())
Expand Down
1 change: 1 addition & 0 deletions AK/Utf16FlyString.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class [[nodiscard]] Utf16FlyString {
static Utf16FlyString from_utf8(String const& string) { return from_utf8_without_validation(string); }
static Utf16FlyString from_utf8(FlyString const& string) { return from_utf8_without_validation(string); }
static Utf16FlyString from_fly_string(FlyString const& string) { return from_utf8_without_validation(string); }
static Utf16FlyString from_ascii_without_validation(StringView);
static Utf16FlyString from_utf8_without_validation(StringView);
static Utf16FlyString from_utf8_but_should_be_ported_to_utf16(StringView string) { return from_utf8_without_validation(string); }

Expand Down
68 changes: 68 additions & 0 deletions AK/Utf16StringBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,74 @@ void Utf16StringBuilder::append_repeated(Utf16View const& view, size_t count)
append(view);
}

void Utf16StringBuilder::append_escaped_for_json(Utf16View const& string)
{
MUST(try_append_escaped_for_json(string));
}

void Utf16StringBuilder::append_escaped_for_json(StringView string)
{
MUST(try_append_escaped_for_json(string));
}

ErrorOr<void> Utf16StringBuilder::try_append(char code_unit)
{
append_ascii(code_unit);
return {};
}

ErrorOr<void> Utf16StringBuilder::try_append(StringView string)
{
if (string.is_ascii()) {
append_ascii(string);
return {};
}

auto utf16_string = TRY(Utf16String::try_from_utf8(string));
append(utf16_string.utf16_view());
return {};
}

ErrorOr<void> Utf16StringBuilder::try_append(Utf16View const& view)
{
append(view);
return {};
}

ErrorOr<void> Utf16StringBuilder::try_append_escaped_for_json(StringView string)
{
return try_append_escaped_for_json(Utf16View { string });
}

ErrorOr<void> Utf16StringBuilder::try_append_escaped_for_json(Utf16View const& string)
{
for (auto code_point : string) {
switch (code_point) {
case '\b':
append_ascii("\\b"sv);
break;
case '\n':
append_ascii("\\n"sv);
break;
case '\t':
append_ascii("\\t"sv);
break;
case '"':
append_ascii("\\\""sv);
break;
case '\\':
append_ascii("\\\\"sv);
break;
default:
if (code_point <= 0x1f)
TRY(try_appendff("\\u{:04x}", code_point));
else
append_code_point(code_point);
}
}
return {};
}

Utf16String Utf16StringBuilder::to_string()
{
return Utf16String::from_string_builder({}, *this);
Expand Down
8 changes: 8 additions & 0 deletions AK/Utf16StringBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,14 @@ class Utf16StringBuilder {
void append_code_point(u32);
void append_repeated_ascii(char, size_t);
void append_repeated(Utf16View const&, size_t);
void append_escaped_for_json(StringView);
void append_escaped_for_json(Utf16View const&);

ErrorOr<void> try_append(char);
ErrorOr<void> try_append(StringView);
ErrorOr<void> try_append(Utf16View const&);
ErrorOr<void> try_append_escaped_for_json(StringView);
ErrorOr<void> try_append_escaped_for_json(Utf16View const&);

template<typename... Parameters>
ErrorOr<void> try_appendff(CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters)
Expand Down
7 changes: 5 additions & 2 deletions Documentation/BuildInstructionsLadybird.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

## Build Prerequisites

Qt6 development packages, nasm, additional build tools, and a C++23 capable compiler are required.
Qt6.9+ development packages, nasm, additional build tools, and a C++23 capable compiler are required.

> [!NOTE]
> Some distributions still package a Qt6 older than 6.9; for example, Debian 13 (trixie) ships Qt 6.8 — so configuring against it fails. If your Qt6 is older than 6.9, install a newer one from a newer distribution release, or directly from the [Qt online installer](https://www.qt.io/download-open-source), and then point the build to it using `CMAKE_PREFIX_PATH`.

A Rust toolchain is also required. You can install it via [rustup](https://rustup.rs/).

Expand All @@ -25,7 +28,7 @@ sudo apt install autoconf autoconf-archive automake build-essential ccache cmake
- Recommendation: Install `CMake 3.30` or newer from [Kitware's apt repository](https://apt.kitware.com/):

> [!NOTE]
> This repository is Ubuntu-only
> Kitware’s apt repository is Ubuntu-only.

```bash
# Add Kitware GPG signing key
Expand Down
Loading