This Week in WebKit — ISO Week 09, 2026 (Feb 23 – Mar 1, 2026)
Featured
The lock broker lives in the UI process and used to accept whichever ClientOrigin the renderer attached to its IPC, treating the field as ground truth. This patch routes every lock request through the committedOrigins set populated by didCommitLoad, so a compromised WebContent process can no longer claim a sibling origin's lock namespace. The mechanism is straightforward; the interesting questions are around the edges. Lifetime, registration paths for non-document committers, and the TOCTOU window between commit and lock IPC are all left to the reader.
The Await algorithm requires each microtask job's realm to be locked at the await site. JSC's resolveWithInternalMicrotask shortcut existed for the common same-realm case but applied unconditionally, so cross-realm awaits left subsequent thenable resolvers anchored to the settle site's globalObject instead of the awaiter's. The symptom is observable from JS: f.constructor inside a cross-realm then callback pointed at the foreign realm's Function. The fix derives the realm from the driven object — generator, result promise, or module — and inserts an extra microtask on the cross-realm path that changes async ordering in ways embedders should re-test.
LBSE puts SVG transforms through the standard CSS layout pipeline, so every attribute mutation used to fire repaintOrRelayoutAfterSVGTransformChange() synchronously. This patch queues mutations on LocalFrameViewLayoutContext and runs a three-phase flush — snapshot rects, mutate transforms, delta repaint — once per frame, with a dirty bit lazily recomputing getBBox(). The wrinkle: in updateLayoutIfDimensionsOutOfDate the flush runs before the isInRenderTreeLayout() guard, so re-entrant geometry queries during phase 2 can observe partially-mutated transform state mid-flush.
Variable-count parentheses with a non-zero floor used to bail out of the JIT and silently run on the interpreter. This commit ships native code for the count-enforcement path: when iteration falls below the minimum during backtracking, the engine re-enters the latest iteration's content to try other alternatives rather than failing outright. The new invariants live entirely in JIT-emitted branch logic — count register, ParenContext frame index, and capture-slot bookkeeping all under hand-allocated registers. Off-by-ones here produce matches with fewer iterations than the pattern requires, the exact failure mode that silently bypasses regex-based allow/deny filters.
Security fixes
-
[JSC FTL] Fix indexing-type mismatch in OSR exit array materialization during bad time
High JSC FTL JIT
-
[JSC] Add write barrier to op_del_by_id/op_del_by_val in baseline JIT
High JSC Baseline JIT
-
[JSC] Defer GC across direct eval cache key construction
High JSC interpreter
-
[WebCore] Fix UAF in Range::createContextualFragment via Trusted Types policy callback
High WebCore DOM Range
-
[WebCore] Validate SameSite initiator in FrameLoader::load
High WebCore FrameLoader
-
[WebKit] Validate firstPartyForCookies on StartDownload/ConvertMainResourceLoadToDownload IPC
High WebKit NetworkProcess
-
[WebKit] Add origin validation to setAppBadge / setAppBadgeFromWorker
Medium WebKit UIProcess Badging
-
[WebKit] Validate Badging IPC origin against WebProcessProxy
Medium WebKit UIProcess Badging
-
[WebCore] Defer Safe Browsing download decision until lookup completes
Medium WebKit UIProcess navigation policy
-
[WebCore] Re-validate same-origin after CSP sandbox application in view transitions
High WebCore View Transitions
-
[WebCore] IndexedDB hash invariant fix for -0/+0 keys
High WebCore IndexedDB / NetworkProcess
-
[WebKit] Add MessagePort entanglement check to takeAllMessagesForPort IPC
High WebKit Network process
-
[WebKit] Pin WebPageProxy across completion handlers via RefPtr promotion
High WebKit UIProcess
-
[JSC] Fix data race in WaiterListManager::unregister
Medium JSC `WaiterListManager`
-
[WebKit] Validate Permissions Query identifier/source combination
Medium WebKit UIProcess Permissions
-
[WebCore] Bound grid masonry span and exclude excluded-from-normal-layout from subgrid
Medium WebCore rendering (Grid masonry/subgrid)
-
[JSC Wasm IPInt] Widen frame-size accumulator in IPInt::finalize
High JSC Wasm IPInt
-
[WebCore] Fix INT32_MIN UB in BackForwardController distance arithmetic
Low WebKit UIProcess back/forward navigation
-
[WebKit] Add webcontent_sandbox_entitlements to Mac Catalyst variant
Low WebKit build-time entitlements
-
[WebKit] MessagePort lifecycle on NetworkProcess restart
Low MessagePort lifecycle
-
Pass an extra ApplicationBundleIdentifier through PCM
Low WebKit Networking / PCM
-
[grid layout] Don't call viewportContentsChanged() from scroll updates during render tree layout
Low WebCore rendering
Notable development
-
[JSC] Add String fast iteration
optimization
-
FileSystemHandle IndexedDB storage
-
REGRESSION(314479@main): Crash in WebPushD::Connection::connectionReceivedEvent() due to xpc_object_t ODR violation
-
Cherry-pick 305413.548@safari-7624-branch — Web Locks origin validation
-
[JSC] Promise jobs must not run with the realm of a cross-realm settle site
-
[LBSE] Defer per-element SVG transform-attribute work without style recalc
-
[JSC] Implement Variable Count Parentheses in YarrJIT
-
[JSC] MapIterator / SetIterator should be handled in DFG