{
  "commits": {
    "317489@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317489@main",
      "clUrl": "https://commits.webkit.org/317489@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318689\n\nReviewed by Antti Koivisto.\n\nplaceFlexItems read the container's outer (border-box) main-axis extent live off the container\n(flexLayoutUtils().mainAxisExtent()) for the right-to-left row flip, even though that value is fixed before the\nalgorithm runs: it is only used under shouldFlipMainAxis, which is row flow, and recomputeLogicalWidth settles\nthe container's inline size before flex layout, which never changes it afterwards.\n\nSnapshot it into FlexLayoutConstraints as mainAxisBorderBoxExtent (built in flexLayoutConstraints) and read\nm_constraints.mainAxisBorderBoxExtent in placeFlexItems, so FlexLayout gets it from the constraints like its\nother fixed container properties rather than reaching back through the container.\n\nNo change in behavior: the same value, since the container's inline size does not move during flex layout.\n\n* Source/WebCore/rendering/RenderFlexLayout.cpp:\n* Source/WebCore/rendering/RenderFlexLayout.h:\n* Source/WebCore/rendering/RenderFlexibleBox.cpp:\n(RenderFlexibleBox::flexLayoutConstraints):\n\nCanonical link: https://commits.webkit.org/317489@main",
      "email": "zalan@apple.com",
      "hash": "8409bd173ebdb530e5cb4b6ac16812e79b1560e9",
      "subject": "[cleanup] Read the flex container's outer main-axis extent from a constraint instead of off the container"
    },
    "317490@main": {
      "author": "Zak Ridouh",
      "avatar": "https://www.gravatar.com/avatar/d9b65ef530b9cbbfc6dff1ca158faace?d=identicon\u0026s=64",
      "cl": "317490@main",
      "clUrl": "https://commits.webkit.org/317490@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=317789\nrdar://180558300\n\nReviewed by Alex Christensen.\n\nWith site isolation enabled, TestRunner::notifyDone() and\nforceImmediateCompletion() always resolved the dump by posting an async\nmessage from the UI process to the page, even when the calling web\nprocess hosts the local main frame and could dump in place. The async\nround-trip moves the dump out of the JS call stack, so it captures DOM\nstate from after the call returned instead of at the call site.\n\nLet the injected bundle report whether it hosts the local main frame and\npass that to the UI process. When it does (and no work queue is pending),\nthe caller dumps synchronously, matching the non-site-isolation\nsemantics. Callers whose main frame is remote keep routing the dump to\nthe process that owns the local main frame.\n\n* LayoutTests/http/tests/site-isolation/accessibility/focus-in-remote-frame-expected.txt:\n* LayoutTests/http/tests/site-isolation/accessibility/focus-in-remote-frame.html:\n* LayoutTests/platform/ios-site-isolation/TestExpectations:\n* LayoutTests/platform/mac-site-isolation/TestExpectations:\n* Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:\n(WTR::InjectedBundle::pageHasLocalMainFrame const):\n* Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h:\n* Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:\n(WTR::TestRunner::notifyDone):\n(WTR::TestRunner::forceImmediateCompletion):\n* Tools/WebKitTestRunner/TestInvocation.cpp:\n(WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):\n(WTR::TestInvocation::resolveNotifyDone):\n(WTR::TestInvocation::resolveForceImmediateCompletion):\n* Tools/WebKitTestRunner/TestInvocation.h:\n\nCanonical link: https://commits.webkit.org/317490@main",
      "email": "zakr@apple.com",
      "hash": "243980617048805c6cbf2b578381fb643f54ab11",
      "subject": "[Site Isolation] WebKitTestRunner dumps at the wrong moment for notifyDone() and forceImmediateCompletion()"
    },
    "317491@main": {
      "author": "Zak Ridouh",
      "avatar": "https://www.gravatar.com/avatar/d9b65ef530b9cbbfc6dff1ca158faace?d=identicon\u0026s=64",
      "cl": "317491@main",
      "clUrl": "https://commits.webkit.org/317491@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=303746\nrdar://166529986\n\nReviewed by Sam Weinig.\n\nReplace the if/else chain in RenderTable::convertStyleLogicalHeightToComputedHeight()\nwith WTF::switchOn() for improved readability, matching the pattern already used in\nRenderFlexibleBox and other rendering code.\n\nThe intrinsic and stretch sizing keywords are coalesced behind a new\nStyle::IsIntrinsicOrStretchSizeKeyword concept (the compile-time analog of the sizing\ntypes' isIntrinsicOrStretch() predicate), placed in a new\nstyle/values/sizing/StyleSizing.h header. The remaining keywords are enumerated\nexplicitly rather than caught by a generic handler, so that adding a new sizing keyword\nfails to compile here and forces this switch to be revisited.\n\nNo new tests, no change of functionality.\n\n* Source/WebCore/rendering/RenderTable.cpp:\n(WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):\n* Source/WebCore/style/values/sizing/StyleSizing.h: Added.\n* Source/WebCore/WebCore.xcodeproj/project.pbxproj:\n\nCanonical link: https://commits.webkit.org/317491@main",
      "email": "zakr@apple.com",
      "hash": "27059d44ca3687792473995c99ee26b7fb9040d3",
      "subject": "Improve readability of StyleLogicalHeight by adopting a switch on statement."
    },
    "317492@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317492@main",
      "clUrl": "https://commits.webkit.org/317492@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318691\n\nReviewed by Antti Koivisto.\n\ncomputeMainSizeFromAspectRatioUsing resolved a column flex item's percentage/calc cross size against the\ncontainer's physical contentBoxWidth(), even though layout should operate on logical geometry. Use\ncontentBoxLogicalWidth() instead: the cross axis in column flow is the container's inline axis, so its\ninline content size is the correct basis. This also removes the last physical-geometry read from FlexLayout.\n\nBehavior-neutral in horizontal writing mode, where the logical inline size and the physical width are the\nsame value; in a vertical writing mode it aligns the resolution to the logical inline size rather than the\nphysical width (the block/main extent).\n\n* Source/WebCore/rendering/RenderFlexLayout.cpp:\n(WebCore::FlexLayout::computeMainSizeFromAspectRatioUsing):\n\nCanonical link: https://commits.webkit.org/317492@main",
      "email": "zalan@apple.com",
      "hash": "b1cae83e7ff24c43499c7436650e4395578e562d",
      "subject": "[cleanup] Resolve a flex item's aspect-ratio percentage cross size against the container's logical inline size"
    },
    "317493@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317493@main",
      "clUrl": "https://commits.webkit.org/317493@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318693\n\nReviewed by Antti Koivisto.\n\nWhile placing a column line's items, placeFlexItems grew the container's logical height in place\n(setLogicalHeight(max(logicalHeight(), ...))), producing the container's main size as a side effect and\nreading it back for the next line. That is the last place FlexLayout set or read the container's logical\nheight; the algorithm should produce that size as a value, not accumulate it on the container.\n\nHave placeFlexItems return the line's main-axis content extent (its main content size plus the cross-axis\nscrollbar) for column flow, 0 for row flow. handleMainAxisAlignment takes the largest line's extent and\nreturns it alongside the item positions, and layout() feeds it to updateFlexContainerLogicalHeight (column\nflow) the same way the row block extent is fed. FlexLayout no longer calls setLogicalHeight or logicalHeight.\n\nNo change in behavior: the value handed to updateFlexContainerLogicalHeight reconstructs the old border-box\nheight (borderAndPaddingLogicalHeight() + returned extent equals the previous mainAxisOffset + trailing\nborder/padding + scrollbar), and the height is finalized from the largest line before distribute runs, which\nonly re-resolves short lines up to the container main and so never grew it past that maximum.\n\n* Source/WebCore/rendering/RenderFlexLayout.cpp:\n* Source/WebCore/rendering/RenderFlexLayout.h:\n* Source/WebCore/rendering/RenderFlexibleBox.cpp:\n(RenderFlexibleBox::updateFlexContainerLogicalHeight):\n\nCanonical link: https://commits.webkit.org/317493@main",
      "email": "zalan@apple.com",
      "hash": "f8fa87978e1eff9b2c91588f52fca20b0d6bf740",
      "subject": "[cleanup] Return the column flex container's main content extent from placeFlexItems instead of setting it on the container"
    },
    "317494@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317494@main",
      "clUrl": "https://commits.webkit.org/317494@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318696\n\nReviewed by Antti Koivisto.\n\ncomputeMainSizeFromAspectRatioUsing read the container's logical inline content size live\n(m_flexBox.contentBoxLogicalWidth()) to resolve a column flex item's aspect-ratio percentage/calc cross size,\neven though that value is fixed before the algorithm runs, like the other container sizes already snapshotted\ninto FlexLayoutConstraints: recomputeLogicalWidth settles the container's inline size before flex layout, which\nnever changes it afterwards, and the aspect-ratio path runs in the early flex-base pass.\n\nSnapshot it into FlexLayoutConstraints as crossAxisSizeForLengthResolution (built in flexLayoutConstraints) and\nread m_constraints.crossAxisSizeForLengthResolution instead, so FlexLayout gets it from the constraints like its\nother fixed container properties rather than reaching back through the container.\n\nNo change in behavior: the same value, since the container's inline size does not move during flex layout.\n\n* Source/WebCore/rendering/RenderFlexLayout.cpp:\n(WebCore::FlexLayout::computeMainSizeFromAspectRatioUsing):\n* Source/WebCore/rendering/RenderFlexLayout.h:\n* Source/WebCore/rendering/RenderFlexibleBox.cpp:\n(RenderFlexibleBox::flexLayoutConstraints):\n\nCanonical link: https://commits.webkit.org/317494@main",
      "email": "zalan@apple.com",
      "hash": "0c899d275dde4768ffcb878f529b6864dee7a441",
      "subject": "[cleanup] Read the flex container's cross-axis length-resolution size from a constraint instead of off the container"
    },
    "317495@main": {
      "author": "Simon Fraser",
      "avatar": "https://www.gravatar.com/avatar/3763324aa0cdfa93be751c6081b8006a?d=identicon\u0026s=64",
      "cl": "317495@main",
      "clUrl": "https://commits.webkit.org/317495@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319703\nrdar://182544180\n\nReviewed by Tim Nguyen.\n\n`scroll-snap-align`[1] should impact scrolling to anchors, and scrollIntoView per spec.\n\nAdd `adjustScrollAlignmentForScrollSnapAlign()` which computes alignment, and call it\nfrom `LocalFrameView::scrollToAnchor()` and `Element::scrollIntoView()`. In the latter\ncase, it should only override the chosen alignment if the `options` dict doesn't already\ncontain alignment data.\n\n[1] https://drafts.csswg.org/css-scroll-snap-1/#scroll-snap-align\n[2] https://drafts.csswg.org/css-scroll-snap-1/#choosing\n\nThis fixes css/css-scroll-snap/scroll-target-align-001.html and css/css-scroll-snap/scroll-target-align-002.html\n\n* LayoutTests/TestExpectations:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-scroll-snap/scroll-target-align-001.html:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-scroll-snap/scroll-target-align-002.html:\n* Source/WebCore/dom/Element.cpp:\n(WebCore::Element::scrollIntoView):\n* Source/WebCore/page/LocalFrameView.cpp:\n(WebCore::LocalFrameView::scrollToAnchor):\n* Source/WebCore/page/ScrollIntoViewOptions.h:\n(): Deleted.\n* Source/WebCore/page/ScrollIntoViewOptions.idl:\n* Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:\n(WebCore::adjustScrollAlignmentForScrollSnapAlign):\n(WebCore::updateSnapOffsetsForScrollableArea):\n* Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.h:\n\nCanonical link: https://commits.webkit.org/317495@main",
      "email": "simon.fraser@apple.com",
      "hash": "231d6768da287cf5c43dab04722adaed9324d343",
      "subject": "[Scroll snap] Respect scroll-snap-align for `scrollToAnchor()` and `scrollIntoView()`"
    },
    "317496@main": {
      "author": "Dominic Mazzoni",
      "avatar": "https://www.gravatar.com/avatar/f76643c44a7ee3be45148e66d97ed8e4?d=identicon\u0026s=64",
      "cl": "317496@main",
      "clUrl": "https://commits.webkit.org/317496@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319607\nrdar://178549889\n\nReviewed by Tyler Wilcock and Andres Gonzalez.\n\nThe AXObjectCache walks every ancestor of every changed node and posts\na live region change for each ancestor that supports live\nregions. Rebuilding a large subtree fires hundreds of such changes,\nall resolving to the same live region.\n\nWith the fix, postLiveRegionChangeNotification() adds the region to\nm_changedLiveRegions (deduplicated) and starts a zero-delay timer\ninstead of processing inline. When the timer fires,\nliveRegionChangedNotificationPostTimerFired() drives\nAXLiveRegionManager once per unique region. Hundreds of changes to the\nsame region in a single run loop iteration now collapse into a single\nsnapshot rebuild and a single announcement covering the net change.\n\nTest: accessibility/mac/live-regions/live-region-changes-coalesced.html\n\n* LayoutTests/accessibility/mac/live-regions/live-region-changes-coalesced-expected.txt: Added.\n* LayoutTests/accessibility/mac/live-regions/live-region-changes-coalesced.html: Added.\n* LayoutTests/accessibility/mac/live-regions/live-region-types.html:\n* Source/WebCore/accessibility/AXLiveRegionManager.cpp:\n(WebCore::AXLiveRegionManager::buildLiveRegionSnapshot const):\n* Source/WebCore/accessibility/AXLiveRegionManager.h:\n(WebCore::AXLiveRegionManager::snapshotBuildCount const):\n(WebCore::AXLiveRegionManager::resetSnapshotBuildCount):\n* Source/WebCore/accessibility/AXObjectCache.cpp:\n(WebCore::AXObjectCache::liveRegionSnapshotBuildCount const):\n(WebCore::AXObjectCache::resetLiveRegionSnapshotBuildCount):\n(WebCore::AXObjectCache::postLiveRegionChangeNotification):\n(WebCore::AXObjectCache::liveRegionChangedNotificationPostTimerFired):\n* Source/WebCore/accessibility/AXObjectCache.h:\n* Source/WebCore/testing/Internals.cpp:\n(WebCore::Internals::liveRegionSnapshotBuildCount const):\n(WebCore::Internals::resetLiveRegionSnapshotBuildCount const):\n* Source/WebCore/testing/Internals.h:\n* Source/WebCore/testing/Internals.idl:\n\nCanonical link: https://commits.webkit.org/317496@main",
      "email": "dm_mazzoni@apple.com",
      "hash": "c45fe212d9c8dce9cf9bfa1c1647743c5db0e88d",
      "subject": "AX: Coalesce redundant live region snapshot recomputations within a run loop iteration"
    },
    "317497@main": {
      "author": "Simon Fraser",
      "avatar": "https://www.gravatar.com/avatar/3763324aa0cdfa93be751c6081b8006a?d=identicon\u0026s=64",
      "cl": "317497@main",
      "clUrl": "https://commits.webkit.org/317497@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=261810\nrdar://115772410\n\nReviewed by Abrar Rahman Protyasha.\n\nThe wheel event dispatch code in `testdriver-vendor.js` just sent a single wheel event, instead of following [1].\nBut the existing code also had a bug, where the last event had `momentumPhase : \"ended\"` instead of\n`phase : \"ended\"`: that's wrong here, because we haven't generated a momentum phase at all, and it prevented\nend-of-scroll snapping from happening.\n\nSo synthesize a stream of events at 16ms intervals, dividing the delta as described in the spec.\n\nSending a single event with non-zero deltaX and deltaY broke `pointerevent_touch-action-mouse.html`,\nbecause the wheel handling code does aggressive axis-locking (which zeros out the non-dominant axis),\nwhich is why the old code sent two events in this case; we have to preserve this behavior. This\ncould also affect the multi-event code path in future.\n\nThis fixed `css-scroll-snap/input/mouse-wheel.html` and `snap-at-user-scroll-end.html`, and changed\nthe output of `snap-area-overflow-boundary-viewport-covering.html` which is broken for other reasons\n(webkit.org/b/319715).\n\n[1] https://w3c.github.io/webdriver/#dfn-perform-a-scroll\n\n* LayoutTests/TestExpectations:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-scroll-snap/input/mouse-wheel-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-scroll-snap/input/snap-area-overflow-boundary-viewport-covering-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-scroll-snap/snap-at-user-scroll-end-expected.txt:\n* LayoutTests/platform/glib/TestExpectations:\n* LayoutTests/platform/ios/TestExpectations:\n* LayoutTests/resources/testdriver-vendor.js:\n\nCanonical link: https://commits.webkit.org/317497@main",
      "email": "simon.fraser@apple.com",
      "hash": "3b1deb16fd46634de113e032ec4f07113ff84ed7",
      "subject": "[WPT] Wheel actions: Follow tick-based event dispatch logic rather than sending scroll events instantaneously"
    },
    "317498@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317498@main",
      "clUrl": "https://commits.webkit.org/317498@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318702\n\nReviewed by Antti Koivisto.\n\nFlexLayout read the container's scrollbar thickness live off the container in six places while stacking lines,\nplacing items, and sizing the container (crossAxisScrollbarExtent / mainAxisScrollbarExtent, and open-coded\nverticalScrollbarWidth/horizontalScrollbarHeight). The container's scrollbars are constant during flex layout:\nthey are established before it (the initial logical height already seeds in scrollbarLogicalHeight) and only\nre-evaluated afterwards, so they are a fixed input, not something to read back mid-algorithm.\n\nSnapshot them into FlexLayoutConstraints as mainAxisScrollbarExtent and crossAxisScrollbarExtent (built in\nflexLayoutConstraints) and read those instead. Two sites open-coded the flow mapping: the column producer's\nscrollbarLogicalHeight() equals mainAxisScrollbarExtent for column flow, and the vertical-writing-mode\nrtl-column flip's horizontalScrollbarHeight() equals crossAxisScrollbarExtent there. With this, FlexLayout no\nlonger consults the container's geometry at all.\n\nNo change in behavior.\n\n* Source/WebCore/rendering/RenderFlexLayout.cpp:\n* Source/WebCore/rendering/RenderFlexLayout.h:\n* Source/WebCore/rendering/RenderFlexibleBox.cpp:\n(RenderFlexibleBox::flexLayoutConstraints):\n\nCanonical link: https://commits.webkit.org/317498@main",
      "email": "zalan@apple.com",
      "hash": "74528f2862c6efe87763a2b99e20cc8cca7375c3",
      "subject": "[cleanup] Read the flex container's scrollbar extents from constraints instead of off the container"
    },
    "317499@main": {
      "author": "Devin Rousso",
      "avatar": "https://www.gravatar.com/avatar/c9e757d973342c773f107a94b70cb9cd?d=identicon\u0026s=64",
      "cl": "317499@main",
      "clUrl": "https://commits.webkit.org/317499@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=264037\n\u003crdar://problem/118115749\u003e\n\nReviewed by Taher Ali.\n\nSearching only looks at response content, so force that to be shown when viewing a resource.\n\n* Source/WebInspectorUI/UserInterface/Views/ResourceClusterContentView.js:\n(WI.ResourceClusterContentView.prototype.restoreFromCookie):\n\nCanonical link: https://commits.webkit.org/317499@main",
      "email": "hi@devinrousso.com",
      "hash": "82c5eb752649934d5d998fd9933601f1e89dd3af",
      "subject": "Web Inspector: Search results don't select source code line in fetch json"
    },
    "317500@main": {
      "author": "Devin Rousso",
      "avatar": "https://www.gravatar.com/avatar/c9e757d973342c773f107a94b70cb9cd?d=identicon\u0026s=64",
      "cl": "317500@main",
      "clUrl": "https://commits.webkit.org/317500@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=272313\n\u003crdar://problem/126458322\u003e\n\nReviewed by Taher Ali.\n\n* Source/WebCore/inspector/InspectorNodeFinder.cpp:\n(WebCore::InspectorNodeFinder::searchUsingDOMTreeTraversal):\n\n* LayoutTests/inspector/dom/dom-search-shadow-dom.html: Added.\n* LayoutTests/inspector/dom/dom-search-shadow-dom-expected.txt: Added.\n\nCanonical link: https://commits.webkit.org/317500@main",
      "email": "hi@devinrousso.com",
      "hash": "4326ae9fda1b8498c56286d85826f51af7a559e3",
      "subject": "Web Inspector: Search doesn't find results in the Shadow DOM"
    },
    "317501@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317501@main",
      "clUrl": "https://commits.webkit.org/317501@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319763\nrdar://182622185\n\nReviewed by Taher Ali.\n\nUpstream commit: https://github.com/web-platform-tests/wpt/commit/d3ed97f7b225e4aa3051c532bf13380027e2550e\n\n* LayoutTests/imported/w3c/resources/import-expectations.json:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-link-params/inheritance-expected.txt: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-link-params/inheritance.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-link-params/link-parameters-computed-expected.txt: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-link-params/link-parameters-computed.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-link-params/link-parameters-invalid-expected.txt: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-link-params/link-parameters-invalid.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-link-params/link-parameters-valid-expected.txt: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-link-params/link-parameters-valid.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-link-params/w3c-import.log: Added.\n\nCanonical link: https://commits.webkit.org/317501@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "9b980d56e14553998ef3118d2fa7777634b0b952",
      "subject": "Sync `css-link-params` from WPT Upstream"
    },
    "317502@main": {
      "author": "Dan Glastonbury",
      "avatar": "https://www.gravatar.com/avatar/fb7cb28bf9f1bc9fc0c3bbf65566efdc?d=identicon\u0026s=64",
      "cl": "317502@main",
      "clUrl": "https://commits.webkit.org/317502@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319539\nrdar://181951902\n\nReviewed by Mike Wyrzykowski.\n\nThe compositor can place a constraint on the minimum depth value that is\nallowable for the page to render with. When breaking this constraint,\nCompositorServices crashes with a debug message.\n\nQuery the minimum depth and clamp the requested range to the minimum.\n\nAdditionally, when a page tries to use reverse-Z for the depth range generate\nthe projection matrix using the correct convention.\n\nTested on visionPro with WonderLand engine example.\n\n* Source/WebKit/UIProcess/XR/xros/PlatformXRCompositor.h:\n* Source/WebKit/UIProcess/XR/xros/PlatformXRCompositor.mm:\n(WebKit::CompositorCoordinator::getPrimaryDeviceInfo):\n(WebKit::CompositorCoordinator::render):\n\nCanonical link: https://commits.webkit.org/317502@main",
      "email": "djg@apple.com",
      "hash": "b006b42a19efc532b4b7392d644661af5cfe0c8d",
      "subject": "[WebXR] Clamp minimum depth for PlatformXRCompositor"
    },
    "317503@main": {
      "author": "Zak Ridouh",
      "avatar": "https://www.gravatar.com/avatar/d9b65ef530b9cbbfc6dff1ca158faace?d=identicon\u0026s=64",
      "cl": "317503@main",
      "clUrl": "https://commits.webkit.org/317503@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=317454\nrdar://180075330\n\nReviewed by Alex Christensen.\n\nLook Up, Translate, Share, and Add to Dictionary anchor their popovers to the\nselection's bounding rect from the editor state. That rect is in the selected\nframe's root-view coordinates, which for a cross-origin iframe is offset from\nthe main frame, so the popovers appeared in the wrong place.\n\nRecord the selection's local root frame on EditorState::VisualData and convert\nthe rect to main-frame coordinates before presenting each popover.\n\nTest: Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm\n\n* Source/WebKit/Shared/EditorState.h:\n* Source/WebKit/Shared/EditorState.serialization.in:\n* Source/WebKit/UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:\n* Source/WebKit/UIProcess/API/ios/WKWebViewTestingIOS.mm:\n(-[WKWebView _selectionBoundingRectInMainFrameCoordinatesForTesting:]):\n* Source/WebKit/UIProcess/WebPageProxy.h:\n* Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:\n(-[WKContentView lookupForWebView:]):\n(-[WKContentView shareForWebView:]):\n(-[WKContentView translateForWebView:]):\n(-[WKContentView addShortcutForWebView:]):\n* Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm:\n(WebKit::WebPageProxy::convertEditorStateSelectionRectToMainFrameCoordinates):\n* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm:\n(WebKit::UnifiedPDFPlugin::platformPopulateEditorStateIfNeeded const):\n* Source/WebKit/WebProcess/WebPage/WebPage.cpp:\n(WebKit::WebPage::editorState const):\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm:\n(TestWebKitAPI::(SiteIsolation, SelectionBoundingRectInCrossOriginIframeUsesMainFrameCoordinates)):\n(TestWebKitAPI::(SiteIsolation, SelectionBoundingRectInNestedCrossOriginIframesUsesMainFrameCoordinates)):\n(TestWebKitAPI::(SiteIsolation, SelectionBoundingRectInMainFrameIsNotOffset)):\n\nCanonical link: https://commits.webkit.org/317503@main",
      "email": "zakr@apple.com",
      "hash": "59c6b9895dec345d61ac05b9c89a8419a437200a",
      "subject": "[Site Isolation] Fix many selection popovers that are mispositioned in cross-origin iframes"
    },
    "317504@main": {
      "author": "Przemyslaw Gorszkowski",
      "avatar": "https://www.gravatar.com/avatar/e543ed682c6f99c866b01ca9bcbab360?d=identicon\u0026s=64",
      "cl": "317504@main",
      "clUrl": "https://commits.webkit.org/317504@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319475\n\nReviewed by Tyler Wilcock.\n\nOn WPE, if nothing else has queried the accessibility tree yet (e.g. a fresh\nAT-SPI client that goes straight to listening for focus events), the very first\nfocus change finds no AXObjectCache and is silently dropped: onFocusChange() is\nnever called, and no \"focused\" state-changed notification is ever sent.\n\nAdd WPE alongside GTK to the platforms that lazily create the AXObjectCache on\nthe first focus change, matching how GTK already behaves.\n\nTest: accessibility/focus-notification-without-prior-tree-access.html\n\n* LayoutTests/accessibility/focus-notification-without-prior-tree-access-expected.txt: Added.\n* LayoutTests/accessibility/focus-notification-without-prior-tree-access.html: Added.\n* Source/WebCore/dom/Document.cpp:\n(WebCore::Document::setFocusedElement):\n\nCanonical link: https://commits.webkit.org/317504@main",
      "email": "pgorszkowski@igalia.com",
      "hash": "48f6c283035d211286fa0ce6c2d2cf14e7f97d3b",
      "subject": "[WPE][Accessibility] focus change accessibility event is not exposed"
    },
    "317505@main": {
      "author": "David Kilzer",
      "avatar": "https://www.gravatar.com/avatar/e228ffc7a792e70bf2d160563c18dcc6?d=identicon\u0026s=64",
      "cl": "317505@main",
      "clUrl": "https://commits.webkit.org/317505@main",
      "description": "\u003chttps://bugs.webkit.org/show_bug.cgi?id=319767\u003e\n\u003crdar://182627956\u003e\n\nReviewed by Zak Ridouh.\n\nThe `StringImpl*` locals in `testSummaryProviders()` exist only so a\ndeveloper can inspect how the `lldb_webkit.py` summary providers render\nthem at the `breakForTestingSummaryProviders()` breakpoint; the compiled\nprogram never reads them.  Three of them are not otherwise consumed, so\nthe `deadcode.DeadStores` static analyzer flags each initialization as a\ndead store.\n\nMark those three declarations `[[maybe_unused]]` to record that they are\nintentionally never read.  `deadcode.DeadStores` is an AST-based checker\nthat skips any variable carrying the unused attribute, so this silences\nthe finding at its source while keeping the values available for\ninspection.  `an8BitStringImpl` is left unannotated because the\n`CompactPointerTuple` examples below read it.\n\n* Tools/lldb/lldbWebKitTester/main.cpp:\n(testSummaryProviders):\n\nCanonical link: https://commits.webkit.org/317505@main",
      "email": "ddkilzer@apple.com",
      "hash": "f8db9267080e51a24becf80663602b7b03010cc8",
      "subject": "Silence deadcode.DeadStores analyzer findings in lldbWebKitTester"
    },
    "317506@main": {
      "author": "Ryosuke Niwa",
      "avatar": "https://www.gravatar.com/avatar/ed2c71248fe3ea15d9129f6e9a2a1e85?d=identicon\u0026s=64",
      "cl": "317506@main",
      "clUrl": "https://commits.webkit.org/317506@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319649\nrdar://182138793\n\nReviewed by Ben Nham and Megan Gardner.\n\ncanTerminateAuxiliaryProcess() gated caching/termination on pages, remote pages, suspended pages, and\nprovisional pages - but not on m_frameProcessCount. When a page with a cross-site subframe enters the\nback/forward cache, the subframe's WebFrameProxy (and thus its Ref\u003cFrameProcess\u003e on the shared process)\nis preserved for restoration, but the shared process's RemotePageProxy is removed. That empties\nm_remotePages, so maybeShutDown() sees the process as idle and adds it to the WebProcess cache - even\nthough m_sharedProcess's FrameProcess is still alive. The next subframe navigation then finds\nm_sharedProcess valid but it's in the process cache, hitting the condition worked around in 314821@main.\n\nFixed the bug by treating m_frameProcessCount \u003e 0 as in-use in canTerminateAuxiliaryProcess so that\na process still backing live FrameProcess objects (e.g. BFCache-preserved subframes) is never cached or\nterminated. decrementFrameProcessCount() now calls maybeShutDown() when the count reaches zero, mirroring\nremoveRemotePageProxy/removeSuspendedPageProxy. Without this, gating on the count would leak processes\\\n(nothing else re-evaluates shutdown when the last frame goes away).\n\nTest: TestWebKitAPI.SiteIsolation.SharedProcessInProcessCacheAfterNavigation\n\n* Source/WebKit/UIProcess/BrowsingContextGroup.cpp:\n(WebKit::BrowsingContextGroup::sharedProcessForSite):\n* Source/WebKit/UIProcess/WebProcessProxy.cpp:\n(WebKit::WebProcessProxy::decrementFrameProcessCount):\n(WebKit::WebProcessProxy::canTerminateAuxiliaryProcess):\n* Source/WebKit/UIProcess/WebProcessProxy.h:\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm:\n(TestWebKitAPI::siteIsolatedViewWithSharedProcess):\n(TestWebKitAPI::(SiteIsolation, SharedProcessInProcessCacheAfterNavigation)):\n\nCanonical link: https://commits.webkit.org/317506@main",
      "email": "rniwa@webkit.org",
      "hash": "b1a790aab65acaee0e7395b20fe98bff3d539ada",
      "subject": "[Site Isolation] FrameProcess which is still in use can be put into process cache with shared process"
    },
    "317507@main": {
      "author": "Philippe Normand",
      "avatar": "https://www.gravatar.com/avatar/eef27203750af3510263cc29af21a16e?d=identicon\u0026s=64",
      "cl": "317507@main",
      "clUrl": "https://commits.webkit.org/317507@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319502\n\nReviewed by Xabier Rodriguez-Calvar.\n\nSeveral fixes were needed in the video encoder and decoder libwebrtc wrappers, notably when\ndetermining and testing the codec mime-types. The encoder framerate is also now capped to 60 fps.\n\nAlso, as part of this patch video frames now carry the PlatforVideoColorspace information in their caps\nand also potentially as metadata.\n\n* Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:\n(WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas):\n* Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCIceTransportBackend.cpp:\n* Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:\n(WebCore::colorimetryFromColorSpace):\n(WebCore::fillVideoInfoColorimetryFromColorSpace):\n* Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:\n* Source/WebCore/platform/graphics/gstreamer/GStreamerVideoFrameConverter.cpp:\n(WebCore::GStreamerVideoFrameConverter::Pipeline::run):\n(WebCore::GStreamerVideoFrameConverter::convert):\n* Source/WebCore/platform/graphics/gstreamer/GUniquePtrGStreamer.h:\n* Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:\n(WebCore::MediaPlayerPrivateGStreamer::videoFrameForCurrentTime):\n* Source/WebCore/platform/graphics/gstreamer/VideoEncoderGStreamer.cpp:\n(WebCore::GStreamerVideoEncoder::encodeSync):\n* Source/WebCore/platform/graphics/gstreamer/VideoEncoderGStreamer.h:\n* Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp:\n(WebCore::VideoFrame::createFromPixelBuffer):\n(WebCore::VideoFrameGStreamer::create):\n(WebCore::VideoFrameGStreamer::createFromPixelBuffer):\n(WebCore::VideoFrameGStreamer::VideoFrameGStreamer):\n(WebCore::VideoFrameGStreamer::setMetadata):\n(WebCore::VideoFrameGStreamer::convert):\n(WebCore::VideoFrameGStreamer::nativeColorSpace const):\n(WebCore::VideoFrameGStreamer::setMetadataAndContentHint): Deleted.\n* Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.h:\n* Source/WebCore/platform/graphics/gstreamer/VideoFrameMetadataGStreamer.cpp:\n(videoFrameMetadataGetInfo):\n(webkitGstBufferAddVideoFrameMetadata):\n(webkitGstBufferSetVideoFrameMetadata):\n(webkitGstBufferGetNativeColorSpace):\n* Source/WebCore/platform/graphics/gstreamer/VideoFrameMetadataGStreamer.h:\n* Source/WebCore/platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:\n(WebCore::MockRealtimeVideoSourceGStreamer::updateSampleBuffer):\n* Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoDecoderFactory.cpp:\n(WebCore::GStreamerVideoDecoderFactory::Create):\n* Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoEncoderFactory.cpp:\n(WebCore::GStreamerVideoEncoderFactory::Create):\n* Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoFrameLibWebRTC.cpp:\n(WebCore::convertLibWebRTCVideoFrameToGStreamerSample):\n(WebCore::GStreamerVideoFrameLibWebRTC::ToI420):\n* Source/WebCore/platform/mediastream/libwebrtc/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.cpp:\n(WebCore::RealtimeIncomingVideoSourceLibWebRTC::OnFrame):\n* Source/WebCore/platform/mediastream/libwebrtc/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.cpp:\n(WebCore::RealtimeOutgoingVideoSourceLibWebRTC::videoFrameAvailable):\n(WebCore::RealtimeOutgoingVideoSourceLibWebRTC::createBlackFrame):\n* Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp:\n(WebKit::LibWebRTCProvider::LibWebRTCProvider):\n\nCanonical link: https://commits.webkit.org/317507@main",
      "email": "philn@igalia.com",
      "hash": "b3b04b37ff697c9113b5e306b3d08b84270e6eda",
      "subject": "[LibWebRTC][GStreamer] Improvements in video encoder and decoder wrappers"
    },
    "317508@main": {
      "author": "Abrar Rahman Protyasha",
      "avatar": "https://www.gravatar.com/avatar/fce5b3c4e9f3c59a4873e08c9f03c3b1?d=identicon\u0026s=64",
      "cl": "317508@main",
      "clUrl": "https://commits.webkit.org/317508@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319745\nrdar://182586785\n\nReviewed by Richard Robinson.\n\nNode::allowsDoubleTapGesture() is guarded with ENABLE_TWO_PHASE_CLICKS,\nbut its call site in LocalFrame::nodeRespondingToDoubleClickEvent()\nwraps it around ENABLE_TOUCH_EVENTS.\n\nThis patch fixes this incongruency.\n\n* Source/WebCore/page/LocalFrame.cpp:\n(WebCore::LocalFrame::nodeRespondingToDoubleClickEvent):\n\nCanonical link: https://commits.webkit.org/317508@main",
      "email": "a_protyasha@apple.com",
      "hash": "ab01f46f535c95d67f53f6a456adf0b8b302cda2",
      "subject": "Fix erroneous platform guard around Node::allowsDoubleTapGesture() call site"
    },
    "317509@main": {
      "author": "Abrar Rahman Protyasha",
      "avatar": "https://www.gravatar.com/avatar/fce5b3c4e9f3c59a4873e08c9f03c3b1?d=identicon\u0026s=64",
      "cl": "317509@main",
      "clUrl": "https://commits.webkit.org/317509@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319747\nrdar://182587030\n\nReviewed by Richard Robinson.\n\nIn this patch, we add the reverse of two existing conversions, symmetric\nwith their forward counterparts in the same files:\n\n- coreSyntheticClickType(): WebMouseEventSyntheticClickType -\u003e\n  WebCore::SyntheticClickType, mirrors syntheticClickType().\n- WebEventFactory::toWebEventModifierFlags(): NSEventModifierFlags -\u003e\n  OptionSet\u003cWebEventModifier\u003e, mirrors toNSEventModifierFlags().\n\nThese helpers will be adopted in forthcoming patches.\n\n* Source/WebKit/Shared/WebMouseEvent.cpp:\n(WebKit::coreSyntheticClickType):\n* Source/WebKit/Shared/WebMouseEvent.h:\n* Source/WebKit/Shared/mac/WebEventFactory.h:\n* Source/WebKit/Shared/mac/WebEventFactory.mm:\n(WebKit::WebEventFactory::toWebEventModifierFlags):\n\nCanonical link: https://commits.webkit.org/317509@main",
      "email": "a_protyasha@apple.com",
      "hash": "c42e31f1f0791a14c01324c2056ab86d3f4144ec",
      "subject": "Add inverse synthetic click type and modifier flag converters"
    },
    "317510@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317510@main",
      "clUrl": "https://commits.webkit.org/317510@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318707\n\nReviewed by Antti Koivisto.\n\nFlexLayout spelled its per-item and per-line lists as raw Vector\u003cLayoutUnit\u003e/Vector\u003cLayoutPoint\u003e everywhere,\nwhile the LFC Layout::FlexLayout the legacy path is converging on names them SizeList / PositionList /\nLinesCrossSizeList / LinesCrossPositionList. Introduce the same aliases (next to the existing LineRanges and\nFlexBaseAndHypotheticalMainSizeList) and use them across the signatures and layout() locals.\n\nThe aliases resolve to Vector, not FFC's FixedVector, because the legacy pipeline resizes and rewrites these\nmid-algorithm (distribute rewrites the main-size list, the cross-axis phases push into the position lists). A\nfew raw uses are left deliberately: FlexLines::hypotheticalMainSizes (a per-line main size, which FFC has no\nalias for), the flexItemsCrossOffsetList accumulator in performBaselineAlignment, and the std::span main-size\nview in resolveFlexibleLengthsForLineItems.\n\nNo change in behavior.\n\n* Source/WebCore/rendering/RenderFlexLayout.cpp:\n* Source/WebCore/rendering/RenderFlexLayout.h:\n\nCanonical link: https://commits.webkit.org/317510@main",
      "email": "zalan@apple.com",
      "hash": "a5fd3ffea09db8f5b5c3365658b1ee28b5e1e718",
      "subject": "[cleanup] Name FlexLayout's per-item and per-line list types after the LFC FlexLayout aliases"
    },
    "317511@main": {
      "author": "Devin Rousso",
      "avatar": "https://www.gravatar.com/avatar/c9e757d973342c773f107a94b70cb9cd?d=identicon\u0026s=64",
      "cl": "317511@main",
      "clUrl": "https://commits.webkit.org/317511@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=244260\n\u003crdar://problem/99047027\u003e\n\nReviewed by Taher Ali.\n\nIf one of `redirectStart` or `redirectEnd` is invalid, mark both as such instead of just that one.\n\n* Source/WebInspectorUI/UserInterface/Models/ResourceTimingData.js:\n(WI.ResourceTimingData.fromPayload):\n\nCanonical link: https://commits.webkit.org/317511@main",
      "email": "hi@devinrousso.com",
      "hash": "86249d6089d996c1b3190359781e4ba5251c687d",
      "subject": "Web Inspector: Assertion hit in Models/ResourceTimingData.js"
    },
    "317512@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317512@main",
      "clUrl": "https://commits.webkit.org/317512@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319768\nrdar://182628287\n\nReviewed by Devin Rousso.\n\nThe tbody and tfoot cases assign the result of the second\n_implicitlyCloseTagNamesInsideParentTagNames() call back into\ndidClose, but nothing after that reads it before the switch breaks.\nDrop the pointless reassignment; no behavior change.\n\n* Source/WebInspectorUI/UserInterface/Workers/Formatter/HTMLTreeBuilderFormatter.js:\n(HTMLTreeBuilderFormatter.prototype._implicitlyCloseHTMLNodesForOpenTag):\n\nCanonical link: https://commits.webkit.org/317512@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "885d6d83bc5aa88a20bc9d5d193816d66f23448b",
      "subject": "Web Inspector: HTMLTreeBuilderFormatter dead store to didClose in tbody/tfoot cases"
    },
    "317513@main": {
      "author": "Devin Rousso",
      "avatar": "https://www.gravatar.com/avatar/c9e757d973342c773f107a94b70cb9cd?d=identicon\u0026s=64",
      "cl": "317513@main",
      "clUrl": "https://commits.webkit.org/317513@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=273760\n\u003crdar://problem/127991410\u003e\n\nReviewed by Taher Ali.\n\nThis can happen when a property to a style that has no source range (e.g. UserAgent styles).\n\nMatch the existing guard in `WI.DOMNodeStyles.prototype.changeStyleText` that allows for this.\n\n* Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:\n(WI.CSSStyleDeclaration.prototype._rangeAfterPropertyAtIndex):\n\n* LayoutTests/inspector/css/add-css-property-without-source-range.html: Added.\n* LayoutTests/inspector/css/add-css-property-without-source-range-expected.txt: Added.\n\nCanonical link: https://commits.webkit.org/317513@main",
      "email": "hi@devinrousso.com",
      "hash": "eac201ada8db46bfc8ca0f453e24c2a1203732b1",
      "subject": "Uncaught Exception: Uncaught TypeError: Cannot read properties of null (reading 'collapseToEnd')"
    },
    "317514@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317514@main",
      "clUrl": "https://commits.webkit.org/317514@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319774\nrdar://182631730\n\nReviewed by Devin Rousso.\n\nTimelineOverview's constructor registers four listeners on its\nTimelineRecording (InstrumentAdded, InstrumentRemoved, MarkerAdded,\nReset) but its closed() method only removed two unrelated\nWI.timelineManager listeners, leaking the recording listeners for\nthe overview's lifetime. Worse, closed() itself was dead code:\nTimelineOverview extends WI.View, not WI.ContentView, and is added\nto TimelineRecordingContentView as a plain subview, so nothing ever\ncalled TimelineOverview.prototype.closed().\n\n* UserInterface/Views/TimelineOverview.js:\n(WI.TimelineOverview.prototype.closed): Remove the four\nTimelineRecording listeners added in the constructor. Drop the\nsuper.closed() call, since WI.View has no closed() method to call.\n* UserInterface/Views/TimelineRecordingContentView.js:\n(WI.TimelineRecordingContentView.prototype.closed): Call\nthis._timelineOverview.closed() so the cleanup actually runs,\nmirroring the existing this._dataGrid.closed() pattern used\nelsewhere in this file.\n\nCanonical link: https://commits.webkit.org/317514@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "752640dc5c833ce7e17e40d2b5e1912bc9b7c97e",
      "subject": "[Web Inspector] TimelineOverview leaks TimelineRecording listeners; TimelineOverview.prototype.closed is never called"
    },
    "317515@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317515@main",
      "clUrl": "https://commits.webkit.org/317515@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319765\nrdar://182627473\n\nReviewed by Devin Rousso.\n\n_updateLoadTimeStatistic() picked the polling delay using ascending\n`else if` thresholds (\u003e= 1 second, then \u003e= 60 seconds, then \u003e= 1 hour).\nSince each later threshold is a strict superset of the first, the\n1 second and 1 hour branches were unreachable once duration passed\n1 second, so the timer stayed at a 100ms delay indefinitely instead of\nbacking off to 1s after a minute and 10s after an hour.\n\nAlso corrected a comment that mislabeled the 3,600,000ms threshold as\n\"1 minute\" instead of \"1 hour\".\n\n* Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js:\n(WI.NetworkTableContentView.prototype._updateLoadTimeStatistic): Check\nthresholds in descending order so the correct delay tier is selected.\n\nCanonical link: https://commits.webkit.org/317515@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "1d226849e11eff5877a424e3d57b6a19172a350b",
      "subject": "Web Inspector: Network table load-time polling interval never backs off from 100ms"
    },
    "317516@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317516@main",
      "clUrl": "https://commits.webkit.org/317516@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319766\nrdar://182627846\n\nReviewed by Devin Rousso.\n\nHeapSnapshotWorkerProxy._handleMessage's error branch deleted the\npending callback for a callId without ever invoking it, so any caller\nof callMethod()/performAction() (e.g. HeapSnapshotProxy.update,\nHeapSnapshotNodeProxy.dominatedNodes/retainers/shortestGCRootPath)\nwould hang forever if the worker ever responded with an error, such as\nHeapSnapshotWorker's \"No such object.\" response for a stale objectId.\n\n* UserInterface/Proxies/HeapSnapshotWorkerProxy.js:\n(WI.HeapSnapshotWorkerProxy.prototype._handleMessage): Invoke the\npending callback with null instead of dropping it, using Map.take()\nto combine the get/delete pair. Report the error via\nWI.reportInternalError instead of console.error so it surfaces in the\nUncaught Exception Reporter UI instead of only being visible when\ninspecting Web Inspector itself.\n\n* LayoutTests/inspector/unit-tests/heap-snapshot.html:\n* LayoutTests/inspector/unit-tests/heap-snapshot-expected.txt:\nAdd a test that triggers the worker's error response path via an\nunrecognized objectId and verifies the callback is still invoked.\nRebaseline the expected console output for the switch to\nWI.reportInternalError, whose details argument is only shown in the\nUncaught Exception Reporter UI, not the console text.\n\nCanonical link: https://commits.webkit.org/317516@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "25266e4a0ac99640e7f43cb4e581a531f50edb96",
      "subject": "Web Inspector: HeapSnapshotWorkerProxy silently drops pending callback on worker error response, causing callers to hang forever"
    },
    "317517@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317517@main",
      "clUrl": "https://commits.webkit.org/317517@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319771\nrdar://182629416\n\nReviewed by Devin Rousso.\n\nWorkerManager.workerTerminated() only removed the direct subworkers of a\nterminated Worker, so grandchild subworkers (a subworker's own subworker)\nwere never removed from the WorkerTarget map or Multimap, and their\nWI.WorkerTarget objects were never passed to WI.targetManager.removeTarget().\nMake cleanup recursive so terminating any Worker also tears down its full\nsubworker tree, and guard against re-processing a worker that a\npreviously-terminated ancestor already cleaned up.\n\nTest: inspector/worker/worker-terminate-nested-subworker.html\n\n* LayoutTests/inspector/worker/worker-terminate-nested-subworker-expected.txt: Added.\n* LayoutTests/inspector/worker/worker-terminate-nested-subworker.html: Added.\n* Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js:\n(WI.WorkerManager.prototype.workerTerminated):\n(WI.WorkerManager.prototype._cleanUpWorker): Added.\n(WI.WorkerManager):\n\nCanonical link: https://commits.webkit.org/317517@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "1cc5dfa320db9ecf0bf3fbb27fb291398b7bf1fa",
      "subject": "Web Inspector: WorkerManager.workerTerminated leaks nested subworkers' Target/map entries"
    },
    "317518@main": {
      "author": "Devin Rousso",
      "avatar": "https://www.gravatar.com/avatar/c9e757d973342c773f107a94b70cb9cd?d=identicon\u0026s=64",
      "cl": "317518@main",
      "clUrl": "https://commits.webkit.org/317518@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319752\n\nReviewed by Taher Ali.\n\n`parseURL(url).origin` is `null` for `file://` and other URLs with opaque origins.\nPrefer the owning frame's valid security origin, then use the URL scheme or `WI.Resource.Type.Other` as a stable grouping title.\n\n* Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js:\n(WI.SourcesNavigationSidebarPanel.originForURLComponents): Added.\n(WI.SourcesNavigationSidebarPanel.prototype._updateMainFrameTreeElement):\n(WI.SourcesNavigationSidebarPanel.prototype._addResource):\nEnsure a valid grouping origin for `file://`, opaque, invalid, and empty URLs.\nAlways place \"Group by Path\" resources below that origin so malformed URLs cannot add unexpected top-level folders.\n`blob:` URLs include their creator's origin in `urlComponents.path`; use only their final path component when creating folders.\n\n* Source/WebInspectorUI/UserInterface/Views/GeneralTreeElement.js:\n(WI.GeneralTreeElement.prototype.createFoldersAsNeededForSubpath):\nIgnore empty path components and remove the filename before creating folders.\nThis also allows a directory to have the same name as the resource.\n\nCanonical link: https://commits.webkit.org/317518@main",
      "email": "hi@devinrousso.com",
      "hash": "c81ca28ecaec67aae3d468094d633e2d3011511c",
      "subject": "Web Inspector: Sources: `file://` URLs have nameless ancestor folders when \"Group by Path\""
    },
    "317519@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317519@main",
      "clUrl": "https://commits.webkit.org/317519@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319773\nrdar://182630536\n\nReviewed by Devin Rousso.\n\nSourcesNavigationSidebarPanel registered an inline anonymous function as a\nlistener on the static WI.SourceCode event target instead of a named,\nbound instance method. Because the closure was never stored anywhere,\nlistener on the static WI.SourceCode event target instead of a named,\nbound instance method. Because the closure was never stored anywhere,\nclosed() had no way to remove it, so every panel instance leaked its\nlistener (and the panel itself, transitively) each time the panel was\nrecreated.\n\n* Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js:\n(WI.SourcesNavigationSidebarPanel):\n(WI.SourcesNavigationSidebarPanel.prototype.closed):\n(WI.SourcesNavigationSidebarPanel.prototype._handleSourceCodeSourceMapAdded):\n\nCanonical link: https://commits.webkit.org/317519@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "e975af100db2250a0b2db79525a312d6bce2d078",
      "subject": "Web Inspector: SourcesNavigationSidebarPanel leaks an anonymous WI.SourceCode listener on every panel recreation"
    },
    "317520@main": {
      "author": "Etienne Segonzac",
      "avatar": "https://www.gravatar.com/avatar/3566820d0ba7e035bc440dc736c17f0c?d=identicon\u0026s=64",
      "cl": "317520@main",
      "clUrl": "https://commits.webkit.org/317520@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319671\n\u003crdar://182292632\u003e\n\nReviewed by Mike Wyrzykowski.\n\nIntroduce the compile time `ENABLE_SPATIAL_PORTAL` flag and the\n`SpatialPortalEnabled` feature flag to gate CSS Spatial Portals\ndevelopment.\n\nAdd the CSS scaffolding to enable the `spatial: portal` syntax, and\nimplement the minimal observable change: setting up the 2 compositing\nlayers structure to render the DOM content \"on the glass\" and the\nupcoming models in a StereoLayer.\n\nTests: spatial-css/spatial-portal-creation-off.html\n       spatial-css/spatial-portal-graphics-layers.html\n\n* LayoutTests/TestExpectations:\n* LayoutTests/spatial-css/spatial-portal-creation-off-expected.txt: Added.\n* LayoutTests/spatial-css/spatial-portal-creation-off.html: Added.\n* LayoutTests/spatial-css/spatial-portal-graphics-layers-expected.txt: Added.\n* LayoutTests/spatial-css/spatial-portal-graphics-layers.html: Added.\nAdd basic layout tests.\n\n* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:\n* Source/WTF/wtf/PlatformEnable.h:\n* Source/WTF/wtf/PlatformEnableCocoa.h:\nIntroduce the flags.\n\n* Source/WebCore/Headers.cmake:\n* Source/WebCore/Modules/model-element/SpatialPortalController.cpp: Added.\n* Source/WebCore/Modules/model-element/SpatialPortalController.h: Added.\n* Source/WebCore/Sources.txt:\n* Source/WebCore/WebCore.xcodeproj/project.pbxproj:\nIntroduce the SpatialPortalController that will manage the portal /\nModelPlayer for `spatial: portal` elements.\n\n* Source/WebCore/css/CSSProperties.json:\n* Source/WebCore/css/CSSValueKeywords.in:\nIntroduce the CSS property and keywords.\n\n* Source/WebCore/dom/Element.cpp:\n(WebCore::Element::ensureSpatialPortalController):\n(WebCore::Element::spatialPortalController const):\n(WebCore::Element::clearSpatialPortalController):\n* Source/WebCore/dom/Element.h:\n* Source/WebCore/dom/ElementRareData.cpp:\n* Source/WebCore/dom/ElementRareData.h:\n(WebCore::ElementRareData::spatialPortalController const):\n(WebCore::ElementRareData::setSpatialPortalController):\nAdd SpatialPortalController support to Element.\n\n* Source/WebCore/rendering/RenderBox.cpp:\n(WebCore::spatialPortalStyleDidChange):\n(WebCore::RenderBox::styleDidChange):\n(WebCore::RenderBox::requiresLayer const):\nDetect CSS spatial changes, create/destroy the SpatialPortalController\nas needed, and force a RenderLayer the `spatial: portal` elements.\n\n* Source/WebCore/rendering/RenderLayerCompositor.cpp:\n(WebCore::RenderLayerCompositor::updateBackingAndHierarchy):\n(WebCore::RenderLayerCompositor::requiresCompositingLayer const):\n(WebCore::RenderLayerCompositor::requiresOwnBackingStore const):\n(WebCore::RenderLayerCompositor::reasonsForCompositing const):\n(WebCore::compositingReasonToString):\n(WebCore::RenderLayerCompositor::requiresCompositingForSpatialPortal const):\n(WebCore::RenderLayerCompositor::needsContentsCompositingLayer const):\n* Source/WebCore/rendering/RenderLayerCompositor.h:\n`spatial: portal` elements require compositing and 2 graphic layers for\nthe stereo content and the DOM content \"on the glass\".\n\n* Source/WebCore/rendering/style/RenderStyleConstants.cpp:\n(WebCore::operator\u003c\u003c):\n* Source/WebCore/rendering/style/RenderStyleConstants.h:\n* Source/WebCore/style/StyleAdjuster.cpp:\n(WebCore::Style::shouldTreatAutoZIndexAsZero):\n* Source/WebCore/style/computed/data/StyleNonInheritedRareData.cpp:\n(WebCore::Style::NonInheritedRareData::NonInheritedRareData):\n(WebCore::Style::NonInheritedRareData::operator== const):\n(WebCore::Style::NonInheritedRareData::dumpDifferences const):\n* Source/WebCore/style/computed/data/StyleNonInheritedRareData.h:\n* Source/WebCore/style/values/primitives/StyleKeyword+Mappings.h:\n`spatial: portal` support in RenderStyle.\n\n* Source/WebKit/SourcesCocoa.txt:\n* Source/WebKit/UIProcess/Model/PortalPresentationManagerProxy.h: Renamed from Source/WebKit/UIProcess/Model/ModelPresentationManagerProxy.h.\n(WebKit::PortalPresentationManagerProxy::create):\n* Source/WebKit/UIProcess/Model/PortalPresentationManagerProxy.mm: Renamed from Source/WebKit/UIProcess/Model/ModelPresentationManagerProxy.mm.\n(WebKit::PortalPresentationManagerProxy::PortalPresentationManagerProxy):\n(WebKit::PortalPresentationManagerProxy::setUpModelView):\n(WebKit::PortalPresentationManagerProxy::startDragForModel):\n(WebKit::PortalPresentationManagerProxy::doneWithCurrentDragSession):\n(WebKit::PortalPresentationManagerProxy::pageScaleDidChange):\n(WebKit::PortalPresentationManagerProxy::invalidateModel):\n(WebKit::PortalPresentationManagerProxy::invalidateAllModels):\n(WebKit::PortalPresentationManagerProxy::ensurePortalPresentation):\n* Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:\n(WebKit::RemoteLayerTreeHost::layerWillBeRemoved):\n* Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:\n(WebKit::RemoteLayerTreeHost::makeNode):\n* Source/WebKit/UIProcess/WebPageProxy.cpp:\n(WebKit::WebPageProxy::didAttachToRunningProcess):\n(WebKit::WebPageProxy::resetState):\n* Source/WebKit/UIProcess/WebPageProxy.h:\n* Source/WebKit/UIProcess/WebPageProxyInternals.h:\n* Source/WebKit/UIProcess/ios/WKContentView.mm:\n(-[WKContentView _setTransform3DForModelViews:]):\n* Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:\n(-[WKContentView _startDrag:item:nodeID:]):\n(-[WKContentView cleanUpDragSourceSessionState]):\n* Source/WebKit/UIProcess/ios/WKPageHostedPortalView.h: Renamed from Source/WebKit/UIProcess/ios/WKPageHostedModelView.h.\n* Source/WebKit/UIProcess/ios/WKPageHostedPortalView.mm: Renamed from Source/WebKit/UIProcess/ios/WKPageHostedModelView.mm.\n(+[WKPageHostedPortalView _usesStereoContent]):\n(-[WKPageHostedPortalView init]):\n(-[WKPageHostedPortalView dealloc]):\n(-[WKPageHostedPortalView remoteModelView]):\n(-[WKPageHostedPortalView setRemoteModelView:]):\n(-[WKPageHostedPortalView setShouldDisablePortal:]):\n(-[WKPageHostedPortalView applyBackgroundColor:]):\n(-[WKPageHostedPortalView layoutSubviews]):\n(-[WKPageHostedPortalView setPortalCrossing:]):\n* Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm:\n(WebKit::WebPageProxy::portalPresentationManagerProxy const):\n(WebKit::WebPageProxy::modelPresentationManagerProxy const): Deleted.\n* Source/WebKit/WebKit.xcodeproj/project.pbxproj:\nOn the UI Process side, mechanically rename the PageHostedModelView to\nPageHostedPortalView. It will be shared between standalone model\nelements and `spatial: portal` elements. And intrinsically represents the\nportal itself.\n\n* Source/cmake/WebKitFeatures.cmake:\nDeclare the ENABLE_SPATIAL_PORTAL flag.\n\nCanonical link: https://commits.webkit.org/317520@main",
      "email": "sgz@apple.com",
      "hash": "177b2bf532ad755ef536697b9659df5d3801a3b8",
      "subject": "Introduce the feature flag/preference/scaffolding for Spatial Portals"
    },
    "317521@main": {
      "author": "Wenson Hsieh",
      "avatar": "https://www.gravatar.com/avatar/c8fba82556fd4988c78bd3a0aee2a44e?d=identicon\u0026s=64",
      "cl": "317521@main",
      "clUrl": "https://commits.webkit.org/317521@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319786\nrdar://182656863\n\nReviewed by Richard Robinson.\n\nAllow a text extraction interaction such as `{ type: \"click\", text: \"Edit Password\", uid: \"4805\" }`\nto perform a click over the Edit button in the following extraction results:\n\n```\n    role=tabpanel labelledby='Security \u0026 Login'\n        'Password'\n        '**********'\n        button uid=4805 label='Edit Password' 'Edit'\n…\n```\n\nCurrently, this fails because we try to search the target element (4805) for the given text (\"Edit\nPassword\"), which fails because the only rendered text is \"Edit\". Make this interaction more robust\nby allowing the click to go through even if the text search fails, as long as the text is a\nsubstring of the accessibility label text.\n\nTest: TextExtractionTests.InteractionSearchTextMatchesAccessibilityLabel\n\n* Source/WebCore/page/text-extraction/TextExtraction.cpp:\n(WebCore::TextExtraction::resolveMouseTarget):\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/TextExtractionTests.mm:\n(TestWebKitAPI::TEST(TextExtractionTests, InteractionSearchTextMatchesAccessibilityLabel)):\n\nCanonical link: https://commits.webkit.org/317521@main",
      "email": "wenson_hsieh@apple.com",
      "hash": "46b1da1ae7896695deaf55f14b3a51a1f17f50e0",
      "subject": "[Text Extraction] Interactions with both text \u0026 uid should work as long as the text matches accessibility label"
    }
  },
  "date": "2026-07-19",
  "days": 1,
  "generatedAt": "2026-07-19T22:05:32Z",
  "markdown": "## Highlights\n\n- **DevTools** Web Inspector got a concentrated stability pass that fixes multiple listener leaks, hung callbacks, and an overly aggressive 100ms network polling loop that could waste memory and CPU during long sessions. [commit 317519@main](https://commits.webkit.org/317519@main) [commit 317517@main](https://commits.webkit.org/317517@main) [commit 317516@main](https://commits.webkit.org/317516@main) [commit 317515@main](https://commits.webkit.org/317515@main) [commit 317514@main](https://commits.webkit.org/317514@main)\n\n- **Web Platform** `scrollToAnchor()` and `scrollIntoView()` now respect `scroll-snap-align`, closing a visible standards gap for snapped scrolling behavior. [commit 317495@main](https://commits.webkit.org/317495@main)\n\n- **Security** Site Isolation fixed a bad process-cache path where a `FrameProcess` still in active use could be cached when sharing was involved, reducing process lifecycle risk in a sensitive area. [commit 317506@main](https://commits.webkit.org/317506@main)\n\n- **UI** Cross-origin iframe selection popovers are now positioned correctly, fixing a user-facing Site Isolation regression in mixed-origin page layouts. [commit 317503@main](https://commits.webkit.org/317503@main)\n\n- **A11y** Live region work now coalesces redundant snapshot recomputation within a run loop iteration, which should cut unnecessary accessibility churn on dynamic pages. [commit 317496@main](https://commits.webkit.org/317496@main)\n\n- **A11y** WPE now exposes focus-change accessibility events, bringing a missing signal back to assistive tech on that port. [commit 317504@main](https://commits.webkit.org/317504@main)\n\n- **Media** LibWebRTC's GStreamer encoder and decoder wrappers were improved, a solid under-the-hood media pipeline update for Linux and embedded stacks. [commit 317507@main](https://commits.webkit.org/317507@main)\n\n- **Web Platform** Spatial Portals landed feature-flag and preference scaffolding, which is the first visible plumbing step toward experimental support. [commit 317520@main](https://commits.webkit.org/317520@main)\n\n- **Mobile** Text Extraction interaction matching now works when both text and UID are present as long as the text matches the accessibility label, tightening real-world extraction behavior. [commit 317521@main](https://commits.webkit.org/317521@main)\n\n## What landed by area\n\n### Web Inspector\n\n- **DevTools** Fixed `file://` path grouping so ancestor folders are named correctly in Sources when \"Group by Path\" is enabled. [commit 317518@main](https://commits.webkit.org/317518@main)\n- **DevTools** Fixed a crash from reading `collapseToEnd` on null. [commit 317513@main](https://commits.webkit.org/317513@main)\n- **DevTools** Removed a dead store in `HTMLTreeBuilderFormatter` around `didClose` handling for `tbody` and `tfoot`. [commit 317512@main](https://commits.webkit.org/317512@main)\n- **DevTools** Fixed an assertion in `Models/ResourceTimingData.js`. [commit 317511@main](https://commits.webkit.org/317511@main)\n- **DevTools** Search now finds matches inside Shadow DOM. [commit 317500@main](https://commits.webkit.org/317500@main)\n- **DevTools** Search results from fetched JSON now select the correct source line. [commit 317499@main](https://commits.webkit.org/317499@main)\n\n### Site Isolation and process model\n\n- **Security** WebKitTestRunner now dumps at the correct moment for `notifyDone()` and `forceImmediateCompletion()`, improving test fidelity around Site Isolation timing. [commit 317490@main](https://commits.webkit.org/317490@main)\n\n### Accessibility and input automation\n\n- **A11y** Added inverse synthetic click type and modifier-flag converters for input synthesis plumbing. [commit 317509@main](https://commits.webkit.org/317509@main)\n- **Mobile** Fixed an erroneous platform guard around `Node::allowsDoubleTapGesture()` call sites. [commit 317508@main](https://commits.webkit.org/317508@main)\n\n### Layout and rendering\n\n- **Refactor** Renamed FlexLayout per-item and per-line list types to match LFC FlexLayout aliases, making the code easier to follow. [commit 317510@main](https://commits.webkit.org/317510@main)\n- **Refactor** Flex layout now reads scrollbar extents from constraints instead of from the container object. [commit 317498@main](https://commits.webkit.org/317498@main)\n- **Refactor** Flex layout now reads cross-axis length-resolution size from constraints instead of from the container. [commit 317494@main](https://commits.webkit.org/317494@main)\n- **Refactor** Column flex containers now return main content extent from `placeFlexItems` instead of mutating the container. [commit 317493@main](https://commits.webkit.org/317493@main)\n- **Rendering** Flex item aspect-ratio percentage cross sizes are now resolved against the container's logical inline size. [commit 317492@main](https://commits.webkit.org/317492@main)\n- **Refactor** `StyleLogicalHeight` readability was improved by switching to a `switch` statement. [commit 317491@main](https://commits.webkit.org/317491@main)\n- **Refactor** Flex layout now reads outer main-axis extent from constraints instead of from the container. [commit 317489@main](https://commits.webkit.org/317489@main)\n\n### Web platform and standards\n\n- **Web Platform** Synced `css-link-params` from upstream WPT, keeping CSS link parameter coverage aligned with upstream tests. [commit 317501@main](https://commits.webkit.org/317501@main)\n- **Web Platform** Wheel actions now follow tick-based event dispatch instead of firing scroll events instantaneously, improving WPT conformance. [commit 317497@main](https://commits.webkit.org/317497@main)\n\n### Graphics, XR, and media\n\n- **GPU** WebXR now clamps minimum depth for `PlatformXRCompositor`, tightening compositor behavior at the rendering boundary. [commit 317502@main](https://commits.webkit.org/317502@main)\n\n### Build and tooling\n\n- **Build** Silenced `deadcode.DeadStores` analyzer findings in `lldbWebKitTester`. [commit 317505@main](https://commits.webkit.org/317505@main)\n\n## Reverts \u0026 Reapplies\n\nNo reverts or reapplies in this window.",
  "repo": "webkit",
  "repoDisplay": "WebKit",
  "rollGroups": [],
  "since": "2026-07-19",
  "totals": {
    "commits": 33,
    "features": 33,
    "rolls": 0
  },
  "until": "2026-07-19"
}