{
  "commits": {
    "310724@main": {
      "author": "Elliott Williams",
      "avatar": "https://www.gravatar.com/avatar/4086acbe078d65242df929cb51298130?d=identicon\u0026s=64",
      "cl": "310724@main",
      "clUrl": "https://commits.webkit.org/310724@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319707\nrdar://182547726\n\nUnreviewed build fix.\n\nFor the workaround introduced in https://commits.webkit.org/310724@main\nto activate, projects need to be configured to use build rules for Copy\nheaders tasks. WebCore was not; fix it.\n\nThe other main framework targets all have this setting set already.\n\n* Source/WebCore/Configurations/WebCore.xcconfig:\n\nCanonical link: https://commits.webkit.org/317428@main",
      "email": "emw@apple.com",
      "hash": "7962ea288972c35669cd7b7129b651724e4e9ec2",
      "subject": "[Xcode] WorkAround173516139.h module cache fix not applying in WebCore"
    },
    "317426@main": {
      "author": "Sammy Gill",
      "avatar": "https://www.gravatar.com/avatar/715a3cfee5d85ee90ccfdaa2a4a7a5a3?d=identicon\u0026s=64",
      "cl": "317426@main",
      "clUrl": "https://commits.webkit.org/317426@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318818\nrdar://181635324\n\nReviewed by Alan Baradlay.\n\nThis patch serves as the initial implementation of the \"Increase sizes\nto accommodate spanning items crossing flexible tracks,\" of the track\nsizing algorithm.\nhttps://www.w3.org/TR/css-grid-2/#algo-spanning-flex-items\n\nThis is all about going through all of the items that span flexible\ntracks, taking whatever remaining space is left, and distributing them\nin the order that is described in the spec (tracks with intrinsic\nminimums, then content-based minimums, etc). Note that we do not have\nthe logic yet to actually perform the space distribution because I\nwanted to do that separately in order to keep this patch focused. Also,\nsince we currently do not allow items that span multiple tracks we do\nnot implement the previous step in the track sizing algorithm which does\nalmost exactly the same thing but in a slightly different order. That\nwill also be done in a separate patch and will likely share code that is\nintroduced here.\n\n* Source/WebCore/layout/formattingContexts/grid/TrackSizingAlgorithm.cpp:\n(WebCore::Layout::ResolveIntrinsicTrackSizesContext::ResolveIntrinsicTrackSizesContext):\nWe need to know the type of constraint the grid is being sized under\n(i.e. definite vs min-content vs max-content) so we can store it on this\ncontext to use later.\n\n(WebCore::Layout::fixedMaxTrackSizingFunctionSum):\n(WebCore::Layout::limitedContentContributions):\nWe already had some of these helper functions to compute a specific type\nof contributions among the items. Since the logic in the spec calls for\npotentially querying the limited min/max content contributions we added\nthose here as well.\n\n(WebCore::Layout::flexibleTracksMatching):\nDepending on the specific step of the spec we need certain types of\nflexible tracks depending on the the min track sizing function is. Since\nthis is a matter of querying the min track sizing function this helper\ndoes most of the work by using the passed in predicate over all the\ntracks\n\n(WebCore::Layout::distributeExtraSpaceToBaseSizes):\nThis is currently just a stub function so that this patch is more\nmanageable to understand and is focused. The second part to implementing\nthis portion of the spec will require implementing the distribution\nlogic appropriately.\n\nCanonical link: https://commits.webkit.org/317426@main",
      "email": "sammy.gill@apple.com",
      "hash": "a79fa11c6b40db82b5f368494c7a99149cb1f964",
      "subject": "[GFC] Create initial implementation for increase sizes to accommodate spanning items crossing flexible tracks."
    },
    "317427@main": {
      "author": "Charlie Wolfe",
      "avatar": "https://www.gravatar.com/avatar/857b3b5ff3394c31fa2689310a93dbab?d=identicon\u0026s=64",
      "cl": "317427@main",
      "clUrl": "https://commits.webkit.org/317427@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318374\nrdar://181163674\n\nReviewed by Alex Christensen.\n\nRemove DidReceiveEventIPC in favor of sendWithAsyncReply. This allows us to remove several message\nchecks that verify the size of the event queues.\n\n* LayoutTests/ipc/remote-user-input-event-data-with-empty-event-deque-expected.txt: Removed.\n* LayoutTests/ipc/remote-user-input-event-data-with-empty-event-deque.html: Removed.\n* Source/WebKit/Scripts/webkit/messages.py:\n(message_to_struct_declaration):\n* Source/WebKit/Scripts/webkit/model.py:\n* Source/WebKit/Scripts/webkit/tests/MessageArgumentDescriptions.cpp:\n(IPC::jsValueForArguments):\n(IPC::jsValueForReplyArguments):\n(IPC::messageArgumentDescriptions):\n(IPC::messageReplyArgumentDescriptions):\n* Source/WebKit/Scripts/webkit/tests/MessageNames.cpp:\n* Source/WebKit/Scripts/webkit/tests/MessageNames.h:\n* Source/WebKit/Scripts/webkit/tests/TestWithSuperclass.messages.in:\n* Source/WebKit/Scripts/webkit/tests/TestWithSuperclassMessageReceiver.cpp:\n(WebKit::TestWithSuperclass::didReceiveMessage):\n(IPC::jsValueForDecodedMessage\u003cMessageName::TestWithSuperclass_TestAsyncMessageAnyThread\u003e):\n(IPC::jsValueForDecodedMessageReply\u003cMessageName::TestWithSuperclass_TestAsyncMessageAnyThread\u003e):\n(IPC::jsValueForDecodedMessage\u003cMessageName::TestWithSuperclass_TestAsyncMessageAnyThreadReply\u003e):\n* Source/WebKit/Scripts/webkit/tests/TestWithSuperclassMessages.h:\n(Messages::TestWithSuperclass::TestAsyncMessageAnyThread::name):\n(Messages::TestWithSuperclass::TestAsyncMessageAnyThread::asyncMessageReplyName):\n(Messages::TestWithSuperclass::TestAsyncMessageAnyThread::TestAsyncMessageAnyThread):\n(Messages::TestWithSuperclass::TestAsyncMessageAnyThread::encode):\n(Messages::TestWithSuperclass::TestAsyncMessageAnyThreadReply::name):\n(Messages::TestWithSuperclass::TestAsyncMessageAnyThreadReply::TestAsyncMessageAnyThreadReply):\n(Messages::TestWithSuperclass::TestAsyncMessageAnyThreadReply::encode):\n* Source/WebKit/UIProcess/WebPageProxy.cpp:\n(WebKit::WebPageProxy::sendMouseEvent):\n(WebKit::WebPageProxy::processNextQueuedMouseEvent):\n(WebKit::WebPageProxy::sendWheelEvent):\n(WebKit::WebPageProxy::sendKeyEvent):\n(WebKit::WebPageProxy::sendGestureEvent):\n(WebKit::WebPageProxy::sendPreventableTouchEvent):\n(WebKit::WebPageProxy::handlePreventableTouchEvent):\n(WebKit::WebPageProxy::handleTouchEvent):\n(WebKit::WebPageProxy::mouseEventHandlingCompleted):\n(WebKit::WebPageProxy::gestureEventHandlingCompleted):\n(WebKit::WebPageProxy::keyEventHandlingCompleted):\n(WebKit::WebPageProxy::didReceiveEventIPC): Deleted.\n(WebKit::WebPageProxy::didReceiveEvent): Deleted.\n* Source/WebKit/UIProcess/WebPageProxy.h:\n* Source/WebKit/UIProcess/WebPageProxy.messages.in:\n* Source/WebKit/WebProcess/WebPage/EventDispatcher.cpp:\n(WebKit::EventDispatcher::internalWheelEvent):\n(WebKit::EventDispatcher::wheelEvent):\n(WebKit::EventDispatcher::dispatchWheelEventViaMainThread):\n(WebKit::EventDispatcher::dispatchWheelEvent):\n(WebKit::EventDispatcher::handleSyntheticWheelEvent):\n(WebKit::EventDispatcher::sendDidReceiveEvent): Deleted.\n* Source/WebKit/WebProcess/WebPage/EventDispatcher.h:\n* Source/WebKit/WebProcess/WebPage/EventDispatcher.messages.in:\n* Source/WebKit/WebProcess/WebPage/WebPage.cpp:\n(WebKit::WebPage::mouseEvent):\n(WebKit::WebPage::flushDeferredDidReceiveMouseEvent):\n(WebKit::WebPage::keyEvent):\n* Source/WebKit/WebProcess/WebPage/WebPage.h:\n* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:\n\nCanonical link: https://commits.webkit.org/317427@main",
      "email": "charliew@apple.com",
      "hash": "55f1bf713ee4e46f83429240e0e6b6bc8ce3572b",
      "subject": "Remove `DidReceiveEventIPC`"
    },
    "317429@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317429@main",
      "clUrl": "https://commits.webkit.org/317429@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318643\n\nReviewed by Antti Koivisto.\n\nFlexLayout threaded the render-tree RelayoutChildren flag through layout() and layoutFlexItems only to\nhand it to RenderFlexibleBox's per-item layout, even though FlexLayout is meant to reach the render tree\nonly through the container. The flag is really a property of each item RenderFlexibleBox collects.\n\nCarry it on FlexLayoutItem as shouldInvalidateChildContent, set in collectFlexItems from\nrelayoutChildren == RelayoutChildren::Yes, and read it in layoutFlexItemWithMainSize. FlexLayout no\nlonger mentions RelayoutChildren, and the multi-line-column re-resolve no longer passes\nRelayoutChildren::No: that was already a no-op, because the !hasFlexItemCompletedLayout guard makes a\nre-layout non-forcing regardless.\n\nWhile here, rename for clarity, mirroring the LFC Layout::FlexLayout the legacy path converges on:\nperformFlexLayout becomes layout, and layoutFlexItemAfterMainSizing becomes layoutFlexItemWithMainSize\n(the point is that the flexed main size is imposed on the item, not that it runs \"after\" a step). The\nline-positioning lambda becomes computeFlexLineCrossPositions (it fills flexLinesCrossPositionList; the\nused cross size, 9.6 #15, is resolved later in updateFlexContainerLogicalHeight), which also fixes a\ncomment that labeled it 9.6 ahead of the 9.5 main-axis step that necessarily precedes it.\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* Source/WebCore/rendering/RenderFlexibleBox.h:\n\nCanonical link: https://commits.webkit.org/317429@main",
      "email": "zalan@apple.com",
      "hash": "b625ca0f27952dc40a77e264bbeafa44e11b4e23",
      "subject": "[cleanup] Drop RelayoutChildren from FlexLayout (carry it on FlexLayoutItem) and rename its layout entry points"
    },
    "317430@main": {
      "author": "Alex Christensen",
      "avatar": "https://www.gravatar.com/avatar/b087c5dfcb1233e80cad9105fd5a1ac6?d=identicon\u0026s=64",
      "cl": "317430@main",
      "clUrl": "https://commits.webkit.org/317430@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319709\nrdar://182548261\n\nReviewed by Timothy Hatcher.\n\nJSWebExtensionAPITest.cpp wasn't being built, resulting in JSWebExtensionAPITest::testClassSingleton\nbeing a missing linker symbol.\n\n* Source/WebKit/CMakeLists.txt:\n* Source/WebKit/WebProcess/Extensions/Bindings/Scripts/CodeGeneratorExtensions.pm:\n(_generateImplementationFile):\n\nCanonical link: https://commits.webkit.org/317430@main",
      "email": "achristensen@apple.com",
      "hash": "0a7873ae1bf6af82fcd943dfed1bd3b8eeb7725d",
      "subject": "Fix cmake build after 317383@main"
    },
    "317431@main": {
      "author": "David Kilzer",
      "avatar": "https://www.gravatar.com/avatar/e228ffc7a792e70bf2d160563c18dcc6?d=identicon\u0026s=64",
      "cl": "317431@main",
      "clUrl": "https://commits.webkit.org/317431@main",
      "description": "\u003chttps://bugs.webkit.org/show_bug.cgi?id=319689\u003e\n\u003crdar://182533373\u003e\n\nReviewed by Elliott Williams.\n\nOn iOSMac builds, WebKit installs its headers under the\n`/System/iOSSupport` prefix, and the reader-side\n`WEBKIT_TESTSUPPORT_INSTALLED_DIR` that TestWebKitAPI uses to find the\nIPC testing headers already resolves into that prefix.  The Production\ndestination added in 317372@main omitted the prefix, so on iOSMac the\nheaders installed outside `/System/iOSSupport`, where TestWebKitAPI\ncould not find them.\n\nInsert `$(SYSTEM_PREFIX)` into the Production destination.  It expands\nto `/System/iOSSupport` for the iOSMac SDK variant and to nothing\notherwise, so the headers install alongside the rest of the iOSMac\nheaders and match the reader-side search path on every build variant.\n\nNo new tests since this change is not directly testable.\n\n* Source/WebKit/Configurations/Base.xcconfig:\n\nCanonical link: https://commits.webkit.org/317431@main",
      "email": "ddkilzer@apple.com",
      "hash": "bd8403b6908162f50cdb20632fdf6d1f00335ba4",
      "subject": "REGRESSION (317372@main): IPC testing headers are installed outside the /System/iOSSupport prefix on iOSMac builds"
    },
    "317432@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317432@main",
      "clUrl": "https://commits.webkit.org/317432@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319659\nrdar://182489990\n\nReviewed by Alan Baradlay.\n\nhasContentfulInlineContent() and isBlockContent() each called\nhasContentfulInFlowContent() (which calls inflowContentType()) and\nthen dereferenced inflowContentType() again. Compute it once and\ncompare against the optional directly.\n\n* Source/WebCore/layout/formattingContexts/inline/LineLayoutResult.h:\n(WebCore::Layout::LineLayoutResult::hasContentfulInlineContent const):\n(WebCore::Layout::LineLayoutResult::isBlockContent const):\n\nCanonical link: https://commits.webkit.org/317432@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "9337e8d94ce13926d3dcf1cf7daa6fdf4179fda0",
      "subject": "LineLayoutResult::inflowContentType() is computed twice in hasContentfulInlineContent()/isBlockContent()"
    },
    "317433@main": {
      "author": "Andy Estes",
      "avatar": "https://www.gravatar.com/avatar/643f10f01b26fd94d03482a2013b2ea0?d=identicon\u0026s=64",
      "cl": "317433@main",
      "clUrl": "https://commits.webkit.org/317433@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319638\nrdar://182125629\n\nReviewed by Jer Noble.\n\nTwo bugs led to video playback remaining active on a wireless device after the user switches back\nto local playback in Safari:\n\n1. On routes that support video URL casting but not real-time audio streaming, an\n   AVAudioSessionRouteChangeNotification notification is not dispatched when that route is selected\n   or deselected. This bypassed the logic in -[WebMediaSessionHelper activeOutputDeviceDidChange:]\n   that would reconfigure the media engine for local playback.\n2. In MediaPlayerPrivateWirelessPlayback::setWirelessPlaybackTarget, we would not disconnect the\n   old playback target's route session prior to switching to the new playback target. This resulted\n   in playback continuing on the wireless route.\n\nResolved (1) by consolidating the logic for switching between wireless and local routes into\nMediaSessionHelper::activeRoutesDidChange, since that function is called whether or not the\nwireless route supports real-time audio streaming. Resolved (2) by disconnecting the outgoing route\nfrom its playback session and clearing ourselves as the route client in\nMediaPlayerPrivateWirelessPlayback::setWirelessPlaybackTarget.\n\nTests: media/wireless-playback-media-player/route-deactivate-pauses-playback.html\n       media/wireless-playback-media-player/route-switch-disconnects-previous-route.html\n\n* LayoutTests/media/wireless-playback-media-player/route-deactivate-pauses-playback-expected.txt: Added.\n* LayoutTests/media/wireless-playback-media-player/route-deactivate-pauses-playback.html: Added.\n* LayoutTests/media/wireless-playback-media-player/route-switch-disconnects-previous-route-expected.txt: Added.\n* LayoutTests/media/wireless-playback-media-player/route-switch-disconnects-previous-route.html: Added.\n* Source/WebCore/PAL/pal/spi/cocoa/AVFoundationSPI.h:\n* Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.mm:\n(MediaSessionHelper::activeRoutesDidChange):\n(-[WebMediaSessionHelper activeOutputDeviceDidChange:]):\n* Source/WebCore/platform/graphics/MediaPlayerPrivateWirelessPlayback.cpp:\n(WebCore::MediaPlayerPrivateWirelessPlayback::setWirelessPlaybackTarget):\n* Source/WebCore/platform/graphics/avfoundation/MediaPlaybackTargetCocoa.h:\n* Source/WebCore/platform/graphics/avfoundation/MediaPlaybackTargetCocoa.mm:\n(WebCore::MediaPlaybackTargetCocoa::supportsCustomProtocolVideoPlayback const):\n\nCanonical link: https://commits.webkit.org/317433@main",
      "email": "aestes@apple.com",
      "hash": "165c11e88f109c66d6b3edb325dd67660c1c650f",
      "subject": "[iOS] Video playback remains active on a wireless device after switching back to local playback"
    },
    "317434@main": {
      "author": "Elliott Williams",
      "avatar": "https://www.gravatar.com/avatar/4086acbe078d65242df929cb51298130?d=identicon\u0026s=64",
      "cl": "317434@main",
      "clUrl": "https://commits.webkit.org/317434@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319710\nrdar://182549120\n\nReviewed by Richard Robinson.\n\nThis script phase needs to be opted-out because it prunes old task\noutputs (and would cause a dependency cycle if it listed them). The \"//\"\nin the rdar URI breaks its listing in xcconfigs, where it is parsed as a\ncomment.\n\nFix by renaming the script phase to not contain a double slash.\n\n* Source/JavaScriptCore/Configurations/Base.xcconfig:\n* Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:\n* Source/WebKit/Configurations/Base.xcconfig:\n* Source/WebKit/WebKit.xcodeproj/project.pbxproj:\n* Source/WebKitLegacy/WebKitLegacy.xcodeproj/project.pbxproj:\n* Source/WebKitLegacy/mac/Configurations/Base.xcconfig:\n\nCanonical link: https://commits.webkit.org/317434@main",
      "email": "emw@apple.com",
      "hash": "6f4a962539ff1caca2ad3b6beb87cedd45f92f12",
      "subject": "[Xcode] Sandboxing override for \"Work around rdar://109484516\" not taking effect"
    },
    "317435@main": {
      "author": "Sihui Liu",
      "avatar": "https://www.gravatar.com/avatar/fea095a2fb34b599fa6e7d581666903b?d=identicon\u0026s=64",
      "cl": "317435@main",
      "clUrl": "https://commits.webkit.org/317435@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319440\nrdar://182254652\n\nReviewed by Basuke Suzuki.\n\nCommit 314948@main fixed BFCache restore for back-navigation through a data: URL under Site\nIsolation by forcing a process swap on main-frame data: URL navigations. However, this broke the\nexisting behavior that data: URL navigations should stay in the same process, which is consistent\nwith other browsers.\n\nThe process swap is unnecessary because the in-process BFCache (WebCore::BackForwardCache) handles\nthis case correctly on its own: when navigating from a regular page to a data: URL without a process\nswap, the source page is suspended into the in-process BFCache and is correctly restored on back\nnavigation.\n\nRevert the data: URL carve-out from processForNavigationInternal, restoring data: URLs to\nsame-origin treatment (no process swap) under Site Isolation.\n\nHowever, this exposed a separate gap: when navigating back to a page that was cached only via the\nin-process BFCache (no SuspendedPageProxy, because no process swap occurred), processForNavigation\nunder Site Isolation had no way to find the correct process. It checked targetItem-\u003esuspendedPage()\nbut not targetItem-\u003ebackForwardCacheEntry(). Since the WebContent process already notifies the\nUIProcess via didCacheBackForwardItem (which calls WebBackForwardCache::addEntry with the process\nidentifier), a valid BackForwardCacheEntry exists on the item — it just wasn't being consulted.\n\nAdd a fallback in processForNavigation: after the suspendedPage check, also check\nbackForwardCacheEntry() and reuse its process when available. This ensures back navigation to pages\ncached via in-process BFCache correctly reuses the original process instead of spawning a new one.\n\nThe !site.isEmpty() gate fix from 314948@main (which allows SuspendedPageProxy lookup for\nback-navigations to file:// and other empty-site URLs) is intentionally kept as it is an independent\nimprovement.\n\n* Source/WebKit/UIProcess/WebProcessPool.cpp:\n(WebKit::WebProcessPool::processForNavigation):\n(WebKit::WebProcessPool::processForNavigationInternal):\n\nCanonical link: https://commits.webkit.org/317435@main",
      "email": "sihui_liu@apple.com",
      "hash": "98a1df0a260dab874c97274992b92f2ef667d053",
      "subject": "[Site Isolation] Fix TestWebKitAPI.ProcessSwap.NavigateToDataURLThenBack"
    },
    "317436@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317436@main",
      "clUrl": "https://commits.webkit.org/317436@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318644\n\nReviewed by Antti Koivisto.\n\npositionList held each flex item's position, but the name did not say whose. Rename it to\nflexItemsPositionList, matching the per-item flexItems...List naming the rest of the pipeline already\nuses (flexItemsMainSizeList, flexItemsCrossSizeList, flexItemsCrossOffsetList) and mirroring\nflexLinesCrossPositionList for lines. The placeFlexItems / layoutColumnReverse span parameter stays\nnamed positions, since it is a per-line subspan rather than the whole list.\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/317436@main",
      "email": "zalan@apple.com",
      "hash": "8d081b822aea5a7f9c903b4a39d8056ee861ac75",
      "subject": "[cleanup] Rename FlexLayout's positionList to flexItemsPositionList"
    },
    "317437@main": {
      "author": "Marta Darbinyan",
      "avatar": "https://www.gravatar.com/avatar/6143b3673258642a8b75585c768ccf10?d=identicon\u0026s=64",
      "cl": "317437@main",
      "clUrl": "https://commits.webkit.org/317437@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318258\nrdar://181053006\n\nUnreviewed test gardening\n\n* LayoutTests/platform/ios/TestExpectations:\n* LayoutTests/platform/mac-wk2/TestExpectations:\n\nCanonical link: https://commits.webkit.org/317437@main",
      "email": "darbinyan@apple.com",
      "hash": "aa99d0c9dbd20ee3182393aeaae9ee3299b3b26d",
      "subject": "[Gardening]: NEW TEST(315306@main): [ iOS macOS Debug ] ipc/fecolormatrix-type-values-mismatch-crash.html is a constant failure (TEXT)"
    },
    "317438@main": {
      "author": "Dominic Mazzoni",
      "avatar": "https://www.gravatar.com/avatar/f76643c44a7ee3be45148e66d97ed8e4?d=identicon\u0026s=64",
      "cl": "317438@main",
      "clUrl": "https://commits.webkit.org/317438@main",
      "description": "rdar://182338926\nhttps://bugs.webkit.org/show_bug.cgi?id=319522\n\nReviewed by Tyler Wilcock and Andres Gonzalez.\n\nlineIndex() computed a marker's line number by walking the tree line-by-line from\nthe start of the document (or editable/text-control root) to the target line, so\nit is O(lines-from-start) per call. VoiceOver requests AXLineForTextMarker on every\ncaret movement, so on a page that is a single large block wrapping onto thousands\nof lines (e.g. a long flat list of links) character navigation degrades to O(n^2).\n\nWhen the start marker and the target marker share a containing block, both line\nIDs come from that block's own monotonic line numbering, so the line count between\nthem is just the difference of their line indices — no walk needed. Inline replaced\nelements store their own renderer in the lineID's containing-block slot, so they\ndon't match here and correctly fall through to the existing walk.\n\nAdds line-index-marker-in-large-block.html: pure-text (no replaced elements) so the\nresult is unambiguous and identical on the live and isolated trees, verifying\nlineIndex() is correct for markers deep inside a single block.\n\n* LayoutTests/accessibility/mac/line-index-marker-in-large-block-expected.txt: Added.\n* LayoutTests/accessibility/mac/line-index-marker-in-large-block.html: Added.\n* Source/WebCore/accessibility/AXTextMarker.cpp:\n(WebCore::AXTextMarker::lineIndex const):\n\nCanonical link: https://commits.webkit.org/317438@main",
      "email": "dm_mazzoni@apple.com",
      "hash": "1d20b393299846d0309ebc7240db4a680b18b46b",
      "subject": "AX: Make AXTextMarker::lineIndex() O(1) when start and target share a containing block"
    },
    "317439@main": {
      "author": "Megan Gardner",
      "avatar": "https://www.gravatar.com/avatar/b466a5bcbfabf4d82a8ecc595db5a531?d=identicon\u0026s=64",
      "cl": "317439@main",
      "clUrl": "https://commits.webkit.org/317439@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319675\nrdar://182523249\n\nReviewed by Jessica Cheung.\n\nWhen a highlight's text-decoration covered text that was a direct child of its block, WebKit painted only the highlight's decoration and dropped the originating\nelement's own — the root-inline-box shortcut in collectDecoratingBoxesForBackgroundPainting/...ForegroundPainting appended just the highlight's override and\nreturned, never adding the box's own decoration (the non-root path already layers ancestor decorations beneath). Append the originating box's own decoration as a\nlayer beneath the highlight's in that shortcut, guarded so it only kicks in when a highlight actually changed the decoration.\n\nimported/w3c/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-019.html\n\n* LayoutTests/TestExpectations:\n* Source/WebCore/rendering/TextBoxPainter.cpp:\n(WebCore::TextBoxPainter::collectDecoratingBoxesForBackgroundPainting):\n(WebCore::TextBoxPainter::collectDecoratingBoxesForForegroundPainting):\n\nCanonical link: https://commits.webkit.org/317439@main",
      "email": "megan_gardner@apple.com",
      "hash": "762b3509edb3672d4aad07a8d09add9ad36fec0d",
      "subject": "[Custom Highlight] ::highlight() decoration replaces the originating element's decoration instead of layering over it."
    },
    "317440@main": {
      "author": "Megan Gardner",
      "avatar": "https://www.gravatar.com/avatar/b466a5bcbfabf4d82a8ecc595db5a531?d=identicon\u0026s=64",
      "cl": "317440@main",
      "clUrl": "https://commits.webkit.org/317440@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319645\nrdar://182466757\n\nReviewed by Jessica Cheung.\n\n::highlight() and ::target-text overlays dropped text-underline-offset: unlike the decoration's color, style, and thickness, the offset was never carried on\nTextDecorationPainter::Styles, so at paint time it was read from the originating box's style and the pseudo's value was lost. Carry it as an optional override on\nthe decoration styles — set from the pseudo in computeStyleForPseudoElementStyle, propagated through the same-range decoration coalesce, and threaded into\nunderlineOffsetForTextBoxPainting, defaulting to the painting box's own value so non-highlighted text is unchanged.\n\nimported/w3c/web-platform-tests/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001.html\nimported/w3c/web-platform-tests/css/css-highlight-api/painting/css-target-text-decoration-001.html\n\n* LayoutTests/TestExpectations:\n* Source/WebCore/rendering/StyledMarkedText.cpp:\n(WebCore::computeStyleForPseudoElementStyle):\n(WebCore::computeStylesForTextDecorations):\n* Source/WebCore/rendering/TextBoxPainter.cpp:\n(WebCore::TextBoxPainter::paintBackgroundDecorations):\n* Source/WebCore/rendering/TextDecorationPainter.cpp:\n(WebCore::TextDecorationPainter::Styles::operator== const):\n* Source/WebCore/rendering/TextDecorationPainter.h:\n* Source/WebCore/style/InlineTextBoxStyle.cpp:\n(WebCore::computedUnderlineOffset):\n(WebCore::underlineOffsetForTextBoxPainting):\n* Source/WebCore/style/InlineTextBoxStyle.h:\n\nCanonical link: https://commits.webkit.org/317440@main",
      "email": "megan_gardner@apple.com",
      "hash": "bba5a8d070c5f6d54de3a1143d894a7b8ba8a3a1",
      "subject": "[Custom Highlight] ::highlight() and ::target-text ignore text-underline-offset."
    },
    "317441@main": {
      "author": "Ari Young",
      "avatar": "https://www.gravatar.com/avatar/0cd464869823d95556c74fd9f9419f92?d=identicon\u0026s=64",
      "cl": "317441@main",
      "clUrl": "https://commits.webkit.org/317441@main",
      "description": "rdar://156534472\nhttps://bugs.webkit.org/show_bug.cgi?id=296398\n\nReviewed by Timothy Hatcher.\n\nThis patch fixes a myriad of compiler errors which prevent Webkit from building with\nENABLE_WK_WEB_EXTENSIONS_SIDEBAR turned on. It also somewhat simplifies some of the parsing logic in\nWebExtensionAPISidePanelCocoa.mm and WebExtensionAPISidebarActionCocoa.mm. Fix several places where\nwe were checking whether a weak pointer is nil and then using it without retaining a strong\nreference between check and use. A manifest that configures no panel path no longer resolves to\nabout:blank and reports itself as openable, so an action click falls through instead of opening a\nblank sidebar. Make getTitle() fall back to the extension name when no title is set.\n\n* Source/WebKit/Platform/cocoa/CocoaHelpers.h:\n(WebKit::toOptional): Add implementation of RefPtr\u003cT\u003e -\u003e std::optional\u003cRef\u003cT\u003e\u003e\n* Source/WebKit/Shared/Extensions/WebExtensionPermission.cpp: Fix feature guard\n* Source/WebKit/Shared/Extensions/WebExtensionPermission.h: Fix feature guard\n* Source/WebKit/Shared/Extensions/WebExtensionSidebarParameters.h:\n* Source/WebKit/Shared/Extensions/WebExtensionSidebarParameters.serialization.in:\n* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionSidebar.mm:\n(-[_WKWebExtensionSidebar webExtensionContext]):\n(-[_WKWebExtensionSidebar title]): Convert String to NSString\n(-[_WKWebExtensionSidebar iconForSize:]): Handle WebExtensionSidebar::icon returning an optional\n* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPISidebarCocoa.mm:\n(WebKit::getSidebarWithIdentifiers): Null-check the tab's window before dereferencing it.\n* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionSidebarCocoa.mm:\n(-[_WKWebExtensionSidebarWebViewDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):\n(-[_WKWebExtensionSidebarWebViewDelegate webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):\n(-[_WKWebExtensionSidebarViewController initWithWebExtensionSidebar:]): Convert String to NSString\n(WebKit::getDefaultIconsDictFromExtension): Fix return type\n(WebKit::WebExtensionSidebar::WebExtensionSidebar): Remove helper functions, directly get title and\ndocument path since these are now returned as optionals.\n(WebKit::WebExtensionSidebar::extensionContext const):\n(WebKit::WebExtensionSidebar::tab const):\n(WebKit::WebExtensionSidebar::window const):\n(WebKit::WebExtensionSidebar::parent const):\n(WebKit::WebExtensionSidebar::icon): Return optional\u003cRef\u003e rather than nullable RefPtr, fix types\n(WebKit::WebExtensionSidebar::setIconsDictionary): Take optional\u003cRef\u003e rather than nullable RefPtr\n(WebKit::WebExtensionSidebar::title const):\n(WebKit::WebExtensionSidebar::setTitle): Remove helper function, directly get optional title\n(WebKit::WebExtensionSidebar::resolvedSidebarPath const):\n(WebKit::WebExtensionSidebar::sidebarPath const):\n(WebKit::WebExtensionSidebar::setSidebarPath): Remove helper function, directly get optional path\n(WebKit::WebExtensionSidebar::didReceiveUserInteraction):\n(WebKit::WebExtensionSidebar::webView): Convert String to NSString for accessibility label\n(WebKit::WebExtensionSidebar::notifyDelegateOfPropertyUpdate):\n(WebKit::WebExtensionSidebar::reloadWebView): Convert URL to NSURL for loadRequest\n(toOptionalRef): Deleted.\n(WebKit::getDefaultSidebarTitleFromExtension): Deleted.\n(WebKit::getDefaultSidebarPathFromExtension): Deleted.\n* Source/WebKit/UIProcess/Extensions/WebExtension.cpp:\n(WebKit::WebExtension::sidebarDocumentPath): Return optional\u003cString\u003e rather than nullable String\n(WebKit::WebExtension::sidebarTitle): Return optional\u003cString\u003e rather than nullable String\n(WebKit::WebExtension::populateSidebarPropertiesIfNeeded): Dereference sidebarActionObject and\nsidePanelObject to pass reference directly\n(WebKit::toOptionalString):\n(WebKit::WebExtension::populateSidebarActionProperties): Use nullopt instead of null\n(WebKit::WebExtension::populateSidePanelProperties): Use nullopt instead of null\n* Source/WebKit/UIProcess/Extensions/WebExtension.h: Fix types, make many things optional\ninstead of nullable.\n* Source/WebKit/UIProcess/Extensions/WebExtensionSidebar.h: Fix types, make many things optional\ninstead of nullable.\n(WebKit::WebExtensionSidebar::opensSidebar):\n* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPISidePanelCocoa.mm:\n(WebKit::parseTabIdentifier): Simplify parsing, remove SidebarError, use Expected\u003coptional\u003c...\u003e, ...\u003e\ninstead of Variant.\n(WebKit::parseWindowIdentifier): Simplify parsing, remove SidebarError, use Expected\u003coptional\u003c...\u003e, ...\u003e\ninstead of Variant.\n(WebKit::parseActionClickBehavior): Miscellaneous type fixes.\n(WebKit::serializeSidebarParameters): Miscellaneous type fixes.\n(WebKit::deserializeSidebarParameters): Miscellaneous type fixes.\n(WebKit::WebExtensionAPISidePanel::getOptions): Convert String to NSString.\n(WebKit::WebExtensionAPISidePanel::setOptions): Convert String to NSString.\n(WebKit::WebExtensionAPISidePanel::getPanelBehavior): Convert String to NSString.\n(WebKit::WebExtensionAPISidePanel::setPanelBehavior): Convert String to NSString.\n(WebKit::WebExtensionAPISidePanel::open): Convert String to NSString, remove uses of toOptional.\n* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPISidebarActionCocoa.mm:\n(WebKit::parseSidebarActionDetails): Use Expected instead of Variant, miscellaneous fixes.\n(WebKit::parseDetailsStringFromKey): Use Expected instead of Variant, miscellaneous fixes.\n(WebKit::getIdentifiers): Take parameter which is an optional variant instead of just variant\n(WebKit::WebExtensionAPISidebarAction::open): Convert String to NSString.\n(WebKit::WebExtensionAPISidebarAction::close): Convert String to NSString.\n(WebKit::WebExtensionAPISidebarAction::toggle): Convert String to NSString.\n(WebKit::WebExtensionAPISidebarAction::isOpen): Convert String to NSString.\n(WebKit::WebExtensionAPISidebarAction::getPanel): Convert String to NSString, use Expected instead\nof Variant.\n(WebKit::WebExtensionAPISidebarAction::setPanel): Convert String to NSString, use Expected instead\nof Variant.\n(WebKit::WebExtensionAPISidebarAction::getTitle): Convert String to NSString, use Expected instead\nof Variant.\n(WebKit::WebExtensionAPISidebarAction::setTitle): Convert String to NSString, use Expected instead\nof Variant.\n* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPISidebarAction.h:\n(WebKit::indicatesError): Utility function which checks if an Expected contains an error, and\nreturns it as a RetainPtr\u003cNSString\u003e if so.\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebExtensionAPISidebar.mm:\n(TestWebKitAPI::WKWebExtensionAPISidebar::WKWebExtensionAPISidebar): Fix `nonPersistant` typo.\n(TestWebKitAPI::TEST_F(WKWebExtensionAPISidebar, SidePanelActionClickDoesNotOpenPathlessSidebar)):\n\nCanonical link: https://commits.webkit.org/317441@main",
      "email": "ari_young@apple.com",
      "hash": "d72f14c26732a3c34010616e9015baded054e9f5",
      "subject": "Fix extension sidebar code"
    },
    "317442@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317442@main",
      "clUrl": "https://commits.webkit.org/317442@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318645\n\nReviewed by Antti Koivisto.\n\ncomputeMainSizeForFlexItems and handleMainAxisAlignment took the row flex container's inner main size by\nconsulting the container live (m_flexBox.contentBoxLogicalWidth()), even though that value is already\nsnapshotted in FlexLayoutConstraints as mainAxisAvailableSpace: RenderFlexibleBox::mainAxisAvailableSpace\nreturns contentBoxLogicalWidth for row flow, taken after recomputeLogicalWidth and fixed for the rest of\nlayout.\n\nRead m_constraints.mainAxisAvailableSpace in the row branch instead, so FlexLayout gets the container's\nmain inner size from the constraint like its other container properties rather than reaching back through\nthe container. The column branch still computes columnInnerMainSize per line.\n\nNo change in behavior: the same value, since the container's width does not move during flex layout.\n\n* Source/WebCore/rendering/RenderFlexLayout.cpp:\n\nCanonical link: https://commits.webkit.org/317442@main",
      "email": "zalan@apple.com",
      "hash": "3cfdab9e390ed39d79d481b6174d58e8f71180c9",
      "subject": "[cleanup] Read FlexLayout's row main inner size from the mainAxisAvailableSpace constraint"
    },
    "317443@main": {
      "author": "Abrar Rahman Protyasha",
      "avatar": "https://www.gravatar.com/avatar/fce5b3c4e9f3c59a4873e08c9f03c3b1?d=identicon\u0026s=64",
      "cl": "317443@main",
      "clUrl": "https://commits.webkit.org/317443@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319664\nrdar://182499287\n\nReviewed by Antoine Quint.\n\nPer the pointer events spec, \"touch-action: manipulation\" enables panning\nand continuous zoom gestures but disables additional gestures such as\ndouble-tap-to-zoom (DTTZ). On iOS, WKTouchActionGestureRecognizer only\nprevented DTTZ when \"touch-action: none\" was specified, though. This\nseems to be behavior explicitly added in 213469@main (with a test in\npointerevents/ios/touch-action-manipulation-double-tap-to-zoom.html).\n\nIn this patch, we prevent DTTZ recognizers when the touched element has\na touch-action: manipulation value.\n\nThere may be some web compatibility ramifications, but I'm weighing that\nagainst the spec (and, prior WebKit blogs!).\n\n* LayoutTests/pointerevents/ios/touch-action-manipulation-double-tap-to-zoom-expected.txt:\n* LayoutTests/pointerevents/ios/touch-action-manipulation-double-tap-to-zoom.html:\n* Source/WebKit/UIProcess/ios/WKTouchActionGestureRecognizer.mm:\n(-[WKTouchActionGestureRecognizer canPreventGestureRecognizer:]):\n\nCanonical link: https://commits.webkit.org/317443@main",
      "email": "a_protyasha@apple.com",
      "hash": "504edb5c563f9ad8d0436f60b5a608f0ec384f42",
      "subject": "[iOS] \"touch-action: manipulation\" does not prevent double-tap-to-zoom"
    },
    "317444@main": {
      "author": "Wenson Hsieh",
      "avatar": "https://www.gravatar.com/avatar/c8fba82556fd4988c78bd3a0aee2a44e?d=identicon\u0026s=64",
      "cl": "317444@main",
      "clUrl": "https://commits.webkit.org/317444@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319636\nrdar://182459757\n\nReviewed by Megan Gardner and Abrar Rahman Protyasha.\n\nAdd support for creating interactions with a JS handle, representing the targeted element. This\nallows clients to drive interactions based on the results of script evaluation (e.g. using\n`document.querySelector`).\n\n* Source/WebCore/page/text-extraction/TextExtractionTypes.h:\n* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:\n* Source/WebKit/UIProcess/API/Cocoa/WKWebView+TextExtraction.mm:\n(-[WKWebView _convertToWebCoreInteraction:nodeIdentifier:]):\n(-[WKWebView _describeInteraction:completionHandler:]):\n* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:\n(-[WKWebView _performInteraction:completionHandler:]):\n* Source/WebKit/UIProcess/API/Cocoa/_WKTextExtraction.h:\n* Source/WebKit/UIProcess/API/Cocoa/_WKTextExtraction.mm:\n(-[_WKTextExtractionInteraction elementHandle]):\n(-[_WKTextExtractionInteraction setElementHandle:]):\n* Source/WebKit/WebProcess/WebPage/WebFrame.cpp:\n(WebKit::interactionWithResolvedTargetNode):\n(WebKit::WebFrame::describeTextExtractionInteraction):\n(WebKit::WebFrame::handleTextExtractionInteraction):\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/TextExtractionTests.mm:\n(TestWebKitAPI::ClickInteractionWithElementHandle)):\n(TestWebKitAPI::FilteringRules)): Deleted.\n(TestWebKitAPI::FilteringRulesAreIsolated)): Deleted.\n(TestWebKitAPI::SubframeInteractions)): Deleted.\n(TestWebKitAPI::SubframeOriginInDebugText)): Deleted.\n(TestWebKitAPI::ClickInteractionWithTextOnly)): Deleted.\n(TestWebKitAPI::ScrollToRevealFallsBackToFullDocumentWhenNodeMisses)): Deleted.\n\nCanonical link: https://commits.webkit.org/317444@main",
      "email": "wenson_hsieh@apple.com",
      "hash": "b773985374b46f18027933645166d0ad194e0d38",
      "subject": "[Text Extraction] Add a way for clients to issue interactions by passing in a WKJSHandle"
    },
    "317445@main": {
      "author": "Elliott Williams",
      "avatar": "https://www.gravatar.com/avatar/4086acbe078d65242df929cb51298130?d=identicon\u0026s=64",
      "cl": "317445@main",
      "clUrl": "https://commits.webkit.org/317445@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319729\nrdar://182562094\n\nUnreviewed CI fix.\n\nForce measure-build-time to deploy to the SDK version, instead of\ndeploying to the host OS version. This support more realistic build time\ntesting on a stable (unreleased) OS version.\n\nAlso, disable Xcode compilation caching in measure-build-time. The script\nalready clears the cache, but we think this may yield a more accurate\ncomparison by eliminating cache overhead.\n\nAs a drive-by, add 27.x version numbers to DeploymentTargets.xcconfig.\nWe'll need them later this year.\n\n* Configurations/DeploymentTargets.xcconfig:\n* Configurations/Makefile:\n* Tools/Scripts/measure-build-time:\n\nCanonical link: https://commits.webkit.org/317445@main",
      "email": "emw@apple.com",
      "hash": "235612cd16a7be7d448cd86fbf8b318f5cad3d2e",
      "subject": "[Build perf] Fix broken measure-build-time config"
    },
    "317446@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317446@main",
      "clUrl": "https://commits.webkit.org/317446@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318648\n\nReviewed by Antti Koivisto.\n\nFlexLayout read the flex container's used cross size live off the container (crossAxisContentExtent\nand crossAxisExtent, via FlexLayoutUtils) in five places: the single-line height, the align-content\npass, the two stretch helpers, and the final item placement. That size is only settled once\nupdateFlexContainerLogicalHeight has resolved the container's logical height (9.6 #15), so each of\nthose reads reached back through the container after the fact.\n\nHave updateFlexContainerLogicalHeight return the used cross extents instead, as a\nFlexContainerCrossExtents: the content-box extent (line positioning, align-content, and each item's\ncross size) and the border-box extent (the right-to-left column flip). layout() captures them once\nand threads them to the consumers, so FlexLayout no longer reads the container's cross size anywhere.\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* Source/WebCore/rendering/RenderFlexibleBox.h:\n\nCanonical link: https://commits.webkit.org/317446@main",
      "email": "zalan@apple.com",
      "hash": "6ce0d1f6a9460f363bc266428c05dfbaf6e52950",
      "subject": "[cleanup] Take FlexLayout's used cross size from updateFlexContainerLogicalHeight instead of reading it off the container"
    },
    "317447@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317447@main",
      "clUrl": "https://commits.webkit.org/317447@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319562\nrdar://182390905\n\nReviewed by Simon Fraser.\n\nWhen multiple snap areas are aligned at a scroll position, the re-snap\nalgorithm prefers a focused (or fragment-targeted) area over the others.\nWe applied that preference unconditionally, even when the focused area's\nscroll snap area is scrolled entirely outside the snapport in the axis\nthat is not snapping. Per css-scroll-snap \"Scoping Valid Snap Positions\nto Visible Boxes\" [1], such a scroll position is not a valid snap\nposition, so the focused area must not win the preference; the scroll\ncontainer should snap to an aligned area that is actually visible.\n\nThe scroll path already enforces this in closestSnapOffset() via\nfindCompatibleSnapArea(), but the re-snap/selection path did not, so a\nfocused-but-offscreen area could keep the scroller pinned to an invalid\noffset after a layout change.\n\nEvaluate the same cross-axis visibility in the selection path, at the\ncurrent scroll position (recorded on each snap/re-snap), rather than at\noffset-collection time (which is tied to layout timing and would make\nresults depend on when snap offsets were last computed). Only areas in a\ncontainer that does not snap in the cross axis are affected; a container\nthat snaps in both axes can bring the area into view by snapping the\nother axis, so it is left to closestSnapOffset()'s 2D handling.\n\nThe recorded scroll offset and viewport size are converted from client\ncoordinates by dividing out the page scale factor, matching the\nconvention used elsewhere in this file (closestSnapPointForOffset(),\nadjustedScrollDestination(), targetOffsetForStartOffset()). Added two\ntests: one WebKit-specific, pinch-zooming the main frame around an\noverflow scroller (which always reports a page scale factor of 1) to\nexercise that conversion directly; and one cross-browser WPT test using\na scaled ancestor (transform: scale()) as a portable stand-in for the\nsame coordinate-space concern, since page scale factor isn't scriptable\noutside WebKit.\n\n[1] https://drafts.csswg.org/css-scroll-snap/#snap-scope\n\n* Source/WebCore/platform/ScrollSnapAnimatorState.cpp:\n(WebCore::ScrollSnapAnimatorState::selectSnapTargetForAxis): Ignore the\nfocus/target preference when the representative area is off-screen in a\nnon-snapping cross axis, and drop off-screen areas from the candidate list.\n(WebCore::ScrollSnapAnimatorState::innermostAlignedAreaIndicesForAxis):\nSkip areas that are off-screen in a non-snapping cross axis.\n(WebCore::ScrollSnapAnimatorState::isSnapAreaVisibleInCrossAxis): Added.\n(WebCore::ScrollSnapAnimatorState::focusedOrTargetedBox): Made a member and\nmade it skip areas off-screen in a non-snapping cross axis.\n(WebCore::ScrollSnapAnimatorState::resnapAfterLayout): Record the scroll\noffset and viewport size used by the visibility check.\n(WebCore::ScrollSnapAnimatorState::setNearestScrollSnapIndexForOffset): Ditto.\n(WebCore::focusedOrTargetedBox): Deleted.\n* Source/WebCore/platform/ScrollSnapAnimatorState.h:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-scroll-snap/snap-after-relayout/multiple-aligned-targets/prefer-focused-element-expected.txt:\nProgression.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-scroll-snap/snap-after-relayout/multiple-aligned-targets/prefer-focused-element-scaled-ancestor.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-scroll-snap/snap-after-relayout/multiple-aligned-targets/prefer-focused-element-scaled-ancestor-expected.txt: Added.\n* LayoutTests/fast/scrolling/resnap-focused-offscreen-overflow-scaled.html: Added.\n* LayoutTests/fast/scrolling/resnap-focused-offscreen-overflow-scaled-expected.txt: Added.\n\nCanonical link: https://commits.webkit.org/317447@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "0beb8b67a954e4e9017b8d78b319bc4667a2b587",
      "subject": "[CSS Scroll Snap] Re-snap should ignore a focused snap area that is scrolled out of the snapport"
    },
    "317448@main": {
      "author": "Yusuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/3455d9081295e3e740c1ffa901217d9b?d=identicon\u0026s=64",
      "cl": "317448@main",
      "clUrl": "https://commits.webkit.org/317448@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319688\nrdar://182533142\n\nReviewed by Keith Miller.\n\nLet's place the slow path of emitWriteBarrier in m_slowPaths to make the\nmain path tight and clean.\n\n* Source/JavaScriptCore/wasm/WasmBBQJIT.cpp:\n(JSC::Wasm::BBQJITImpl::BBQJIT::emitWriteBarrier):\n\nCanonical link: https://commits.webkit.org/317448@main",
      "email": "ysuzuki@apple.com",
      "hash": "03d11dcd3986d5218cf235dd40f6088ca222ec4c",
      "subject": "[JSC] Put slow path of emitWriteBarrier in m_slowPaths"
    },
    "317449@main": {
      "author": "Tyler Wilcock",
      "avatar": "https://www.gravatar.com/avatar/9545082e6bed96158a9f52dac6e4b869?d=identicon\u0026s=64",
      "cl": "317449@main",
      "clUrl": "https://commits.webkit.org/317449@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319702\nrdar://182544199\n\nReviewed by Dominic Mazzoni.\n\nWhen accessibility is running off the main thread (AXThread mode) and a navigation\ncreates a new AXObjectCache, nothing guarantees that cache's isolated tree ever gets\nbuilt. VoiceOver's off-main-thread root request in WKAccessibilityWebPageObject keeps\nserving the previous document's now-stale tree (via the m_isolatedTree weak pointer),\nso it returns early and never routes to the main thread to call getOrCreateIsolatedTree()\non the new cache. transitionToAXThreadModeIfNeeded() builds trees for all existing\ncaches, but only once at the transition, so caches created by later navigations are not\ncovered. The result is that VoiceOver is left on empty web content until some later\nmain-thread accessibility request happens to build the tree, which may never happen.\n\nFix this by proactively queueing the isolated tree build from the AXObjectCache\nconstructor when we are already in AXThread mode. The build is queued on the existing\nbuild timer rather than run synchronously because the cache is not yet installed on its\nDocument -- Document::axObjectCache() assigns m_axObjectCache only after the constructor\nreturns, so building now would re-enter Document::axObjectCache() and construct a second\ncache.\n\nTest clients are excluded: getOrCreateIsolatedTree() builds their tree synchronously on\nrequest and never uses this timer, so starting it here would build a duplicate tree.\n\n* Source/WebCore/accessibility/AXObjectCache.cpp:\n(WebCore::AXObjectCache::AXObjectCache):\n\nCanonical link: https://commits.webkit.org/317449@main",
      "email": "tyler_w@apple.com",
      "hash": "4417bb5d1534ec7403480e529f8adcdbaa81cee4",
      "subject": "AX: Web content is empty after navigation because the new cache's isolated tree is never built"
    },
    "317450@main": {
      "author": "David Kilzer",
      "avatar": "https://www.gravatar.com/avatar/e228ffc7a792e70bf2d160563c18dcc6?d=identicon\u0026s=64",
      "cl": "317450@main",
      "clUrl": "https://commits.webkit.org/317450@main",
      "description": "\u003chttps://bugs.webkit.org/show_bug.cgi?id=319732\u003e\n\u003crdar://182570316\u003e\n\nUnreviewed build fix.\n\nFix the `-Wunguarded-availability-new` error introduced by 317433@main.\nThe AVRouting SDK annotates the `AVOutputDeviceType` enumerator\n`AVOutputDeviceTypeCustomProtocol` as `SPI_AVAILABLE(macos(27.0),\nios(27.0), tvos(27.0), watchos(27.0), visionos(27.0))`, so referencing\nit in `supportsCustomProtocolVideoPlayback()` fails to build for\ndeployment targets earlier than 27.0.\n\nSuppress the availability warning rather than adding a runtime\n`@available` guard.  The enumerator is a compile-time constant and\n`-[AVOutputDevice deviceType]` has been available since macOS 10.12, so\nno runtime API is absent on older systems.  On those systems, no output\ndevice reports the custom-protocol type, so the loop already returns\nfalse.\n\nNo new tests since this change is not directly testable.\n\n* Source/WebCore/platform/graphics/avfoundation/MediaPlaybackTargetCocoa.mm:\n(WebCore::MediaPlaybackTargetCocoa::supportsCustomProtocolVideoPlayback const):\n\nCanonical link: https://commits.webkit.org/317450@main",
      "email": "ddkilzer@apple.com",
      "hash": "d8474d43be34f4568b8cfc5ce3895ff20ac8e1fe",
      "subject": "REGRESSION (317433@main): Build failure: AVOutputDeviceTypeCustomProtocol is only available on macOS 27.0 or newer"
    },
    "317451@main": {
      "author": "Abrar Rahman Protyasha",
      "avatar": "https://www.gravatar.com/avatar/fce5b3c4e9f3c59a4873e08c9f03c3b1?d=identicon\u0026s=64",
      "cl": "317451@main",
      "clUrl": "https://commits.webkit.org/317451@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319730\nrdar://182562045\n\nReviewed by Richard Robinson.\n\nThe CSS `touch-action` rule that double-tap-to-zoom-like gestures are\ndisabled by both `none` and `manipulation` can be shared by multiple\nreaders.\n\nIn this patch, we make it a single inline predicate, and we adopt it in\nWKTouchActionGestureRecognizer. More callers will follow.\n\n* Source/WebCore/platform/TouchAction.h:\n(WebCore::touchActionAllowsDoubleTapToZoom):\n* Source/WebKit/UIProcess/ios/WKTouchActionGestureRecognizer.mm:\n(-[WKTouchActionGestureRecognizer canPreventGestureRecognizer:]):\n\nCanonical link: https://commits.webkit.org/317451@main",
      "email": "a_protyasha@apple.com",
      "hash": "1448205ae3fa7c6ff3d6bb6379288cd230c8cd72",
      "subject": "Add a touch-action double-tap-to-zoom policy predicate"
    },
    "317452@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317452@main",
      "clUrl": "https://commits.webkit.org/317452@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319701\nrdar://182543349\n\nReviewed by Sammy Gill.\n\noppositeAxisConstraintForTrackSizing() took its Vector\u003cLayoutUnit\u003e\nparameter by value, so it copied the entire opposite-axis track-sizes\nvector on every call. It is called once per grid item from within the\nplacedGridItems.map() lambdas in sizeColumnTracks() and sizeRowTracks(),\nturning what should be a read-only lookup into an O(items x tracks)\nallocation-and-copy during track sizing.\n\nThe function only reads from the vector, so take it by const reference.\nBoth call sites pass lvalues, so binding is safe.\n\nNo change in behavior, so no new tests.\n\n* Source/WebCore/layout/formattingContexts/grid/GridLayout.cpp:\n(WebCore::Layout::oppositeAxisConstraintForTrackSizing):\n\nCanonical link: https://commits.webkit.org/317452@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "449c37a36b7d45202d279c6526075364f695f14f",
      "subject": "[Grid] oppositeAxisConstraintForTrackSizing() copies the track-sizes Vector for every grid item"
    },
    "317453@main": {
      "author": "David Kilzer",
      "avatar": "https://www.gravatar.com/avatar/e228ffc7a792e70bf2d160563c18dcc6?d=identicon\u0026s=64",
      "cl": "317453@main",
      "clUrl": "https://commits.webkit.org/317453@main",
      "description": "\u003chttps://bugs.webkit.org/show_bug.cgi?id=319732\u003e\n\u003crdar://182570316\u003e\n\nUnreviewed build fix.\n\nThe AVRouting SDK declares the `AVOutputDeviceType` enumerator\n`AVOutputDeviceTypeCustomProtocol` only as of the macOS 27.0 / iOS 27.0\nSDK; earlier SDKs do not declare it at all.  Suppressing\n`-Wunguarded-availability-new` with `ALLOW_NEW_API_WITHOUT_GUARDS`\naddressed only the SDKs that already declare the enumerator; against an\nSDK that predates it, the reference fails to compile outright with \"use\nof undeclared identifier\".\n\nGate the reference on a new `HAVE(AVOUTPUTDEVICE_CUSTOM_PROTOCOL)`\nkeyed on a 27.0 deployment target.  Since the SDK is never older than\nthe deployment target, a 27.0 target guarantees the enumerator is\npresent, which also makes the availability suppression unnecessary.  On\nearlier targets no output device can report the custom-protocol type,\nso `supportsCustomProtocolVideoPlayback()` correctly returns false.\n\nNo new tests since this change is not directly testable.\n\n* Source/WTF/wtf/PlatformHave.h:\n* Source/WebCore/platform/graphics/avfoundation/MediaPlaybackTargetCocoa.mm:\n(WebCore::MediaPlaybackTargetCocoa::supportsCustomProtocolVideoPlayback const):\n\nCanonical link: https://commits.webkit.org/317453@main",
      "email": "ddkilzer@apple.com",
      "hash": "202993f5a8458d12bad8101a293600569788b011",
      "subject": "Build fix: REGRESSION (317433@main): Build failure: AVOutputDeviceTypeCustomProtocol is only available on macOS 27.0 or newer"
    },
    "317454@main": {
      "author": "Roberto Rodriguez",
      "avatar": "https://www.gravatar.com/avatar/45f4995b936231d4893f38e70cbc4805?d=identicon\u0026s=64",
      "cl": "317454@main",
      "clUrl": "https://commits.webkit.org/317454@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319508\nrdar://177723577\n\nReviewed by Ryan Reno.\n\nUnder a strict-dynamic policy WebKit checks whether a script's content hash matches\none of the policy's allowed hashes. This check is meant for inline scripts, whose content\nis known. But it also runs for external scripts, whose content is not yet available, so their\ncontent is treated as empty. When a policy allows the hash of the empty string, every\nparser-inserted external script matches it and runs, even with no nonce and no matching\nintegrity.\n\nFix by comparing a script's content hash against the policy only when the script is inline.\nAn external script still matches an allowed hash through its integrity attribute, but its empty\nbody is no longer treated as matching the empty-string hash.\n\nAlso rename violatedDirectiveForNonParserInsertedScripts to violatedDirectiveForScriptUnderStrictDynamic\nsince the method gates any script under a strict-dynamic policy, not just non-parser-inserted ones.\n\nTest: imported/w3c/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_module_empty_hash.html\n\n* LayoutTests/imported/w3c/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_module_empty_hash-expected.txt: Added.\n* LayoutTests/imported/w3c/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_module_empty_hash.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_module_empty_hash.html.headers: Added.\n* Source/WebCore/page/csp/ContentSecurityPolicy.cpp:\n(WebCore::ContentSecurityPolicy::allowScriptForStrictDynamic const):\n* Source/WebCore/page/csp/ContentSecurityPolicyDirectiveList.cpp:\n(WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForScriptUnderStrictDynamic const):\n(WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForNonParserInsertedScripts const): Deleted.\n* Source/WebCore/page/csp/ContentSecurityPolicyDirectiveList.h:\n\nCanonical link: https://commits.webkit.org/317454@main",
      "email": "roberto_rodriguez2@apple.com",
      "hash": "46c234678e15965db1e2b936d50cb6861de6e7ee",
      "subject": "CSP matches a script's content hash even for external scripts under strict-dynamic"
    },
    "317455@main": {
      "author": "Claudio Saavedra",
      "avatar": "https://www.gravatar.com/avatar/376a6edb56b8e52de407ea171c869bcf?d=identicon\u0026s=64",
      "cl": "317455@main",
      "clUrl": "https://commits.webkit.org/317455@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318877\n\nReviewed by Ryan Haddad.\n\nMake safe-merge-queue usable on the webkitglib/x.yy stable branches. This\nis two-fold:\n\n1) For these branches safe-merge-queue should only require a subset of\n   Linux-related bots to be green. The Mac, iOS and Windows bots are\n   irrelevant here and are skipped.\n\n2) merge-queue does not work with the stable webkitglib branches: it\n   builds for Mac, and these branches are not meant to be built on Mac,\n   so they would likely fail to build. For webkitglib branches\n   safe-merge-queue should therefore flip the PR to unsafe-merge-queue\n   instead of merge-queue.\n\nTo do this, propagate the PR base branch through the safe-merge-queue\nflow by fetching baseRefName in the GraphQL query and storing it as\ngithub.base.ref in DetermineLabelOwner. When the target branch is a\nwebkitglib/x.yy stable branch, check only the Linux queues (GTK, WPE,\nand JSC ARMv7), and once the PR passes, label it unsafe-merge-queue\nrather than merge-queue.\n\n* Tools/CISupport/ews-build/steps.py:\n(DetermineLabelOwner.run):\n(RemoveAndAddLabels.run):\n(RetrievePRDataFromLabel.run):\n(RetrievePRDataFromLabel.getAllPRData):\n(CheckStatusOfPR):\n(CheckStatusOfPR.getQueueStatusFromList):\n(AddMergeLabelsToPRs.run):\n* Tools/CISupport/ews-build/steps_unittest.py:\n\nCanonical link: https://commits.webkit.org/317455@main",
      "email": "csaavedra@igalia.com",
      "hash": "6555a8fff78c4e1b3d20a22d42260cd15b571bcf",
      "subject": "[EWS] Support safe-merge-queue for webkitglib stable branches"
    },
    "317456@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317456@main",
      "clUrl": "https://commits.webkit.org/317456@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319724\nrdar://182557883\n\nReviewed by Alan Baradlay.\n\nWhen building the inline box index cache, the loop that trims each\nvector's excess capacity iterated the HashMap by value:\n\n    for (auto entry : *m_inlineBoxIndexCache)\n        entry.value.shrinkToFit();\n\nSince InlineBoxIndexCache is a HashMap\u003cCheckedRef\u003cconst Layout::Box\u003e,\nVector\u003csize_t\u003e\u003e, `auto entry` copies each key-value pair, so shrinkToFit()\ntrims a throwaway copy of the vector while the vector stored in the map\nkeeps its over-allocated capacity. The optimization was a no-op, and each\niteration paid for a needless copy of the vector (plus CheckedRef churn).\n\nIterate by reference so shrinkToFit() acts on the stored vector.\n\n* Source/WebCore/layout/integration/inline/LayoutIntegrationInlineContent.cpp:\n(WebCore::LayoutIntegration::InlineContent::nonRootInlineBoxIndexesForLayoutBox const):\n\nCanonical link: https://commits.webkit.org/317456@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "06d1695c9a81233d9f279c8983122dd8909a02e5",
      "subject": "shrinkToFit() operates on a temporary copy in InlineContent::nonRootInlineBoxIndexesForLayoutBox()"
    },
    "317457@main": {
      "author": "Anne van Kesteren",
      "avatar": "https://www.gravatar.com/avatar/09bb44ac3625a121017cd98d0a7dc52c?d=identicon\u0026s=64",
      "cl": "317457@main",
      "clUrl": "https://commits.webkit.org/317457@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319097\n\nReviewed by Ryosuke Niwa.\n\nAlign WebKit with the model proposed over at:\n\n   https://github.com/whatwg/dom/issues/977\n\nfast/images/pagewide-play-pause-offscreen-animations.html is changed\nslightly so the element checks are realm-agnostic.\n\nTests: imported/w3c/web-platform-tests/dom/nodes/node-realm-adoption-after-frame-removal.html\n       imported/w3c/web-platform-tests/dom/nodes/node-realm-mixed-across-adoption.html\n       imported/w3c/web-platform-tests/dom/nodes/node-realm-preserved-across-frameless-adoption.html\n\nUpstream: https://github.com/web-platform-tests/wpt/pull/61212\nCanonical link: https://commits.webkit.org/317457@main",
      "email": "annevk@annevk.nl",
      "hash": "df39c2cbd60522face8fdae91375f045709ea923",
      "subject": "Correct the realm of nodes"
    },
    "317458@main": {
      "author": "Ryosuke Niwa",
      "avatar": "https://www.gravatar.com/avatar/ed2c71248fe3ea15d9129f6e9a2a1e85?d=identicon\u0026s=64",
      "cl": "317458@main",
      "clUrl": "https://commits.webkit.org/317458@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319681\n\nReviewed by David Kilzer.\n\nEnable alpha.webkit.UncheckedLambdaCapturesChecker when it's available\nto prepare for the next rollout of safer C++ static analyzers.\n\n* Tools/Scripts/build-and-analyze:\n(make_analyzer_flags):\n\nCanonical link: https://commits.webkit.org/317458@main",
      "email": "rniwa@webkit.org",
      "hash": "48d77f21514cd3507785be686d50be8220e59d08",
      "subject": "Enable alpha.webkit.UncheckedLambdaCapturesChecker when it's available"
    },
    "317459@main": {
      "author": "Ronan Turner",
      "avatar": "https://www.gravatar.com/avatar/b0adc2e7c8739eb712598294baec9184?d=identicon\u0026s=64",
      "cl": "317459@main",
      "clUrl": "https://commits.webkit.org/317459@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319376\nrdar://170252891\n\nReviewed by Adrian Taylor and Abrar Rahman Protyasha.\n\nThis is a upstream of HAVE_ENHANCED_SECURITY_LINKS.\n\nTest: Tools/TestWebKitAPI/Tests/WebKit/WKWebView/EnhancedSecurityPolicies.mm\n\n* Source/WTF/wtf/PlatformHave.h:\n* Source/WebKit/NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:\n* Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.Development.sb.in:\n* Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb.in:\n* Source/WebKit/Shared/Cocoa/EnhancedSecurityLinkUtilities.h:\n* Source/WebKit/Shared/Cocoa/EnhancedSecurityLinkUtilities.mm:\n(WebKit::hasURLsRequiringEnhancedSecurityCheck):\n(WebKit::isEnhancedSecurityEnabledForURL):\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/EnhancedSecurityPolicies.mm:\n(TEST(EnhancedSecurityPolicies, LinkInStoreEnablesEnhancedSecurity)):\n(TEST(EnhancedSecurityPolicies, HttpLinkInStoreRemainsOnceUpgraded)):\n\nCanonical link: https://commits.webkit.org/317459@main",
      "email": "ronan_turner@apple.com",
      "hash": "2353515764da1f3b6ec7f23306d7b2219eda3b7f",
      "subject": "Enhanced Security: Move HAVE_ENHANCED_SECURITY_LINKS to WebKit"
    },
    "317460@main": {
      "author": "Philippe Normand",
      "avatar": "https://www.gravatar.com/avatar/eef27203750af3510263cc29af21a16e?d=identicon\u0026s=64",
      "cl": "317460@main",
      "clUrl": "https://commits.webkit.org/317460@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319579\n\nReviewed by Xabier Rodriguez-Calvar.\n\nIn situations where the muxed data has an audio track and video track the decoder harness might be\ncreated after the demuxer audio pad was exposed, so we can't expect m_decoderHarness to be valid\nwhen logging the \"Ignoring non-video track\" message.\n\n* Source/WebCore/platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:\n(WebCore::ImageDecoderGStreamer::ImageDecoderGStreamer):\n\nCanonical link: https://commits.webkit.org/317460@main",
      "email": "philn@igalia.com",
      "hash": "7ee2d908b212f0e197edd91139aaad0f25133650",
      "subject": "[GStreamer] Fix a debug logging call in the ImageDecoder"
    },
    "317461@main": {
      "author": "Carlos Alberto Lopez Perez",
      "avatar": "https://www.gravatar.com/avatar/05326c1dbe06f486e884975e73f25179?d=identicon\u0026s=64",
      "cl": "317461@main",
      "clUrl": "https://commits.webkit.org/317461@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319686\n\nReviewed by Nikolas Zimmermann.\n\nWhen a build step runs through filter-test-logs, buildbot only sees the\nfew lines the filter prints, since the full output goes to a log file.\nTo avoid buildbot killing the step for lack of output, filter-test-logs\nprints a progress line from time to time. But the check to wether it\nshould print the summary por not ran only once every 100 lines.\nWith a command that prints slowly (for example one line every 15 seconds),\nthe check ran once every 1500 seconds which is above the standard 1200\nbuildbot timeout, so buildbot killed the step with \"command timed\nout: XXX seconds without output\".\n\nThis patch changes it to run the check if it should print the summary for\nevery line received. Calling time.time() is way cheaper than I thought at\n303319@main\nI have benchmarked this an the cost is well under 100 nanoseconds per call,\nso doing it once per line adds only a few milliseconds to a standard layout\ntest run with ~150k lines.\n\nThe format to print the summary is also improved, now includes a timestamp\nand how many lines arrived since the last update.\nThe frequency to print the summary is changed to once per minute instead of\nonce each 5 minutes, that should not be an issue for buildbot to handle, and\nmakes more interactive and helpful to look at the progress of a filtered\non-going build.\n\n* Tools/Scripts/filter-test-logs:\n(KeepAliveStdoutProgress):\n(KeepAliveStdoutProgress.__init__):\n(KeepAliveStdoutProgress.maybe_update_progress):\n\nCanonical link: https://commits.webkit.org/317461@main",
      "email": "clopez@igalia.com",
      "hash": "c35e39f7208608e335e85b3c121b938c6549307c",
      "subject": "[WKCI] filter-test-logs can cause that buildbot ends killing an in-progress step when the test runner produces output slowly"
    },
    "317462@main": {
      "author": "Anne van Kesteren",
      "avatar": "https://www.gravatar.com/avatar/09bb44ac3625a121017cd98d0a7dc52c?d=identicon\u0026s=64",
      "cl": "317462@main",
      "clUrl": "https://commits.webkit.org/317462@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319658\n\nReviewed by Ryosuke Niwa.\n\nKeith Cirkel pointed out that the constructor map as defined did not\nquite work and also that WebKit did not implement it.\n\nThis aligns WebKit with the proposed changes to DOM and HTML and also\nadds some additional test coverage for the gaps:\n\n- https://github.com/whatwg/dom/pull/1494\n- https://github.com/whatwg/html/pull/12696\n\nTests: imported/w3c/web-platform-tests/custom-elements/createElement-reentrant-construction.window.html\n       imported/w3c/web-platform-tests/custom-elements/registries/constructor-direct-call-fallback-registry.window.html\n       imported/w3c/web-platform-tests/custom-elements/registries/constructor-reentry-createElement.window.html\n\nCanonical link: https://commits.webkit.org/317462@main",
      "email": "annevk@annevk.nl",
      "hash": "48915d8239475d1ebbcf5936f6b25dccf24659b3",
      "subject": "Implement the active custom element constructor map"
    },
    "317463@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317463@main",
      "clUrl": "https://commits.webkit.org/317463@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318650\n\nReviewed by Antti Koivisto.\n\nWhile stacking the flex lines, computeFlexLineCrossPositions grew m_flexBox's logical height in place: it read\nlogicalHeight() back per line, compared, and called setLogicalHeight() to fit each line and then the inter-line\ngaps. FlexLayout should reach the container to hand it results, not to accumulate geometry on it.\n\nHave computeFlexLineCrossPositions build the flex content's block-axis extent (line cross sizes, inter-line\ngaps, and the cross-axis scrollbar) and return it, without touching the container. layout() passes it to\nupdateFlexContainerLogicalHeight, which sets the height from it just as the flex formatting context integration\ndoes in layoutUsingFlexFormattingContext: max(logicalHeight(), borderAndPaddingLogicalHeight() + extent). Column\nflow's block axis is its main size, still set while placing the items, so nothing is built here for it.\n\nAlso fold the single-caller adjustLogicalHeightForLineIfEmpty into updateFlexContainerLogicalHeight.\n\nNo change in behavior.\n\n* Source/WebCore/rendering/RenderFlexLayout.cpp:\n(WebCore::FlexLayout::layout):\n* Source/WebCore/rendering/RenderFlexibleBox.cpp:\n(WebCore::RenderFlexibleBox::layoutBlock):\n(WebCore::RenderFlexibleBox::updateFlexContainerLogicalHeight):\n(WebCore::RenderFlexibleBox::adjustLogicalHeightForLineIfEmpty): Deleted.\n* Source/WebCore/rendering/RenderFlexibleBox.h:\n\nCanonical link: https://commits.webkit.org/317463@main",
      "email": "zalan@apple.com",
      "hash": "6155262fc8d70a8c6a7baa74ebc091ab96b8c7b9",
      "subject": "[cleanup] Build the row flex content height in FlexLayout and resolve it in updateFlexContainerLogicalHeight"
    },
    "317464@main": {
      "author": "Keith Miller",
      "avatar": "https://www.gravatar.com/avatar/bddc1595b29098429a6ce7c8bf4aced2?d=identicon\u0026s=64",
      "cl": "317464@main",
      "clUrl": "https://commits.webkit.org/317464@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319669\nrdar://182513824\n\nReviewed by Yusuke Suzuki.\n\nRun the imported Web Platform Tests WebAssembly suite\n(LayoutTests/imported/w3c/web-platform-tests/wasm/{core/js,jsapi}) directly in the jsc\ncommand-line shell, diffing stdout against the committed -expected.txt baselines. This\nexercises the tests across the full wasm JIT-configuration matrix (BBQ/OMG/no-CJIT/eager/\nSIMD/...) that the browser layout-test run does not cover.\n\nThree harness shims bracket each test to reproduce the browser testharness reporting path\nin a shell that has no DOM or event loop:\n- wpt-harness-pre.js supplies self and a no-op console before testharness.js loads.\n- wpt-harness-mid.js drains microtasks (so the WAST harness's deferred import registry\nProxy is installed before the test body reads it) and marks the run explicit_done.\n- wpt-harness-post.js registers a completion callback that prints the PASS/FAIL text in\nthe committed baseline format, then calls done().\n\nrun-jsc-stress-tests gains recursive collection support (one yaml entry per suite root\ninstead of per proposal directory) and a data-returning wasm JIT-config matrix shared by\nthe new runners.\n\nasync_index.js reduces the assertion-location stack in each assert description to\nbasenames so the text is identical whether the tests are served over HTTP by the WPT\nserver or loaded from local files by a shell; the core baselines are regenerated to match.\n\njsc gains --enable-all-experimental-features, generated from the JSC web-preference\nfeature flags via FOR_EACH_JSC_EXPERIMENTAL_WEB_PREFERENCE_OPTION, mirroring\nWebKitTestRunner's --enable-all-experimental-features. run-jsc-stress-tests passes\nit when running WPT tests. In a future change we can apply it to other test drivers.\n\nCanonical link: https://commits.webkit.org/317464@main",
      "email": "keith_miller@apple.com",
      "hash": "bdf5f869dc927e99bacd206f46558a505ebbd5a1",
      "subject": "[JSC] Run WPT Wasm tests in run-jsc-stress-tests' wasm.yaml"
    },
    "317465@main": {
      "author": "Sosuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/e63b87350fe19bdd9a30c7234eda45af?d=identicon\u0026s=64",
      "cl": "317465@main",
      "clUrl": "https://commits.webkit.org/317465@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319237\n\nReviewed by Yusuke Suzuki.\n\nA rope stores its length inline, so the fast path can compare lengths and skip\nrope elements without resolving them, instead of bailing out to the slow path\nat the first rope element. The slow path is now only entered when a rope's\nlength matches the search element. This avoids the operation call for scans\nstepping over freshly created ropes, e.g. RegExp matches arrays whose captures\nare substring ropes.\n\n                                                    baseline                  patched\n\narray-indexof-string-rope-before-match        11.8110+-0.5658     ^      8.2470+-0.2127        ^ definitely 1.4322x faster\narray-includes-string-rope-before-match       13.2017+-0.3347     ^      9.1412+-0.4073        ^ definitely 1.4442x faster\n\nTests: JSTests/microbenchmarks/array-includes-string-rope-before-match.js\n       JSTests/microbenchmarks/array-indexof-string-rope-before-match.js\n       JSTests/stress/array-index-of-string-rope-elements-16bit.js\n       JSTests/stress/array-index-of-string-rope-elements-from-index.js\n       JSTests/stress/array-index-of-string-rope-elements-holes.js\n       JSTests/stress/array-index-of-string-rope-elements-rescan.js\n       JSTests/stress/array-index-of-string-rope-elements.js\n\n* JSTests/microbenchmarks/array-includes-string-rope-before-match.js: Added.\n(makeRope):\n(test):\n* JSTests/microbenchmarks/array-indexof-string-rope-before-match.js: Added.\n(makeRope):\n(test):\n* JSTests/stress/array-index-of-string-rope-elements-16bit.js: Added.\n(shouldBe):\n(makeRope):\n(indexOfValue):\n* JSTests/stress/array-index-of-string-rope-elements-from-index.js: Added.\n(shouldBe):\n(makeRope):\n(indexOfValueFrom):\n* JSTests/stress/array-index-of-string-rope-elements-holes.js: Added.\n(shouldBe):\n(makeRope):\n(indexOfValue):\n* JSTests/stress/array-index-of-string-rope-elements-rescan.js: Added.\n(shouldBe):\n(makeRope):\n(indexOfValue):\n(includesValue):\n* JSTests/stress/array-index-of-string-rope-elements.js: Added.\n(shouldBe):\n(makeRope):\n(indexOfValue):\n(includesValue):\n* Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:\n* Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:\n(JSC::FTL::DFG::LowerDFGToB3::compileArrayIndexOfOrArrayIncludes):\n\nCanonical link: https://commits.webkit.org/317465@main",
      "email": "sosuke@bun.sh",
      "hash": "a84e1b4694055dfe89ceb1106d8850405421aa7f",
      "subject": "[JSC] `Array#indexOf` / `includes` should not take the slow path for rope elements with mismatched length"
    },
    "317466@main": {
      "author": "Sosuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/e63b87350fe19bdd9a30c7234eda45af?d=identicon\u0026s=64",
      "cl": "317466@main",
      "clUrl": "https://commits.webkit.org/317466@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319351\n\nReviewed by Yusuke Suzuki.\n\nRegExp matches arrays have non-original structures (they carry the index,\ninput, and groups property transitions), so the ArrayIndexOf/ArrayIncludes\nintrinsic was rejected and every call went through the generic host function.\nSince their prototype is still the original Array.prototype, we can use the\nintrinsic by checking the structure against the matches array structures and\nwatching for having-a-bad-time, which replaces those structures with SlowPut\nvariants. The speculation is driven by a new ArrayProfile flag recorded when\nprofiling observes a matches array structure. Routers scanning the matches\narray of a combined route regexp (e.g. Hono's RegExpRouter) hit this on every\nrequest.\n\n                                                    baseline                  patched\n\nregexp-matches-array-index-of                 17.6912+-1.4997     ^     13.2829+-0.4919        ^ definitely 1.3319x faster\nregexp-matches-array-includes                 22.3299+-1.0463     ^     16.6826+-0.3012        ^ definitely 1.3385x faster\n\nTests: JSTests/microbenchmarks/regexp-matches-array-includes.js\n       JSTests/microbenchmarks/regexp-matches-array-index-of.js\n       JSTests/stress/regexp-matches-array-index-of-have-a-bad-time.js\n       JSTests/stress/regexp-matches-array-index-of-mixed.js\n       JSTests/stress/regexp-matches-array-index-of-mutated.js\n       JSTests/stress/regexp-matches-array-index-of-with-indices.js\n       JSTests/stress/regexp-matches-array-index-of.js\n\n* JSTests/microbenchmarks/regexp-matches-array-includes.js: Added.\n(test):\n* JSTests/microbenchmarks/regexp-matches-array-index-of.js: Added.\n(test):\n* JSTests/stress/regexp-matches-array-index-of-have-a-bad-time.js: Added.\n(shouldBe):\n(indexOfValue):\n* JSTests/stress/regexp-matches-array-index-of-mixed.js: Added.\n(shouldBe):\n(indexOfValue):\n* JSTests/stress/regexp-matches-array-index-of-mutated.js: Added.\n(shouldBe):\n(indexOfValue):\n* JSTests/stress/regexp-matches-array-index-of-with-indices.js: Added.\n(shouldBe):\n(indexOfValue):\n(includesValue):\n* JSTests/stress/regexp-matches-array-index-of.js: Added.\n(shouldBe):\n(indexOfEmpty):\n(indexOfValue):\n(indexOfUndefined):\n(indexOfNegativeFrom):\n(includesEmpty):\n(includesValue):\n(indexOfOnNamed):\n* Source/JavaScriptCore/bytecode/ArrayProfile.cpp:\n(JSC::ArrayProfile::computeUpdatedPrediction):\n* Source/JavaScriptCore/bytecode/ArrayProfile.h:\n(JSC::ArrayProfile::mayBeRegExpMatchesArray const):\n* Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:\n(JSC::DFG::ByteCodeParser::profiledArrayMayBeRegExpMatchesArray):\n(JSC::DFG::ByteCodeParser::handleIntrinsicCall):\n\nCanonical link: https://commits.webkit.org/317466@main",
      "email": "sosuke@bun.sh",
      "hash": "1d97334bd2adc29eeb83cd1e268bdb22af458ad3",
      "subject": "[JSC] DFG should use the `ArrayIndexOf` / `ArrayIncludes` intrinsic for RegExp matches arrays"
    },
    "317467@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317467@main",
      "clUrl": "https://commits.webkit.org/317467@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318673\n\u003crdar://problem/181485387\u003e\n\nReviewed by Antti Koivisto.\n\n    \u003cdiv contenteditable style=\"display: flex; writing-mode: vertical-rl; height: 100px\"\u003e\u003c/div\u003e\n\nThe empty flex container should be one line tall along its block axis, so 20px wide here. Instead it\ncollapsed to zero width.\n\nAn editable flex container has a line even when empty, so it reserves at least one line's worth of size\nalong its block axis. That minimum was applied by comparing it against borderBoxHeight(), the container's\nphysical height, which is the inline extent in a vertical writing mode rather than the block axis, so the\nfloor never took effect.\n\nFold the empty-line minimum into the block-axis max in updateFlexContainerLogicalHeight so it floors the\nlogical height directly, independent of writing mode.\n\n* Source/WebCore/rendering/RenderFlexibleBox.cpp:\n(RenderFlexibleBox::updateFlexContainerLogicalHeight):\n* LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/flex-container-line-if-empty-vertical-writing-mode.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/flex-container-line-if-empty-vertical-writing-mode-ref.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/flex-container-line-if-empty-vertical-writing-mode-expected.html: Added.\n\nCanonical link: https://commits.webkit.org/317467@main",
      "email": "zalan@apple.com",
      "hash": "b5750973a2f6600e8f79d9b8d12a9d5e2269e916",
      "subject": "An empty editable flex container does not reserve a line's worth of block size in vertical writing modes"
    },
    "317468@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317468@main",
      "clUrl": "https://commits.webkit.org/317468@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318685\n\nReviewed by Antti Koivisto.\n\nplaceFlexItems grew the column flex container's logical height while positioning a line's items and, for\ncolumn-reverse, then called updateLogicalHeight() and layoutColumnReverse() from inside that same per-line\ncall, so it produced the container main size and read it back to reverse the line in one breath, before the\nother lines were placed and before distributeMainAxisFreeSpaceForMultilineColumnIfNeeded re-resolved the\nshort ones.\n\nMove the reverse repositioning out of placeFlexItems into reverseColumnLinesFromContainerMainEndIfNeeded, a\nsingle pass run from layout() after the container's main size is finalized (updateFlexContainerLogicalHeight)\nand after distribute has run. layoutColumnReverse\nnow takes the finalized main-axis border-box extent as a parameter instead of reading m_flexBox.logicalHeight()\nback, and placeFlexItems keeps only its height accumulation. This follows the spec order: css-flexbox-1 9.2\ndetermines the flex container's main size before 9.5 aligns the items along the main axis, and reverse\nplacement is part of 9.5.\n\nEvery line now reverses against the one finalized main size, matching what distribute already did when it\nre-placed short lines. Single-line, definite-height, and multi-line wrapping column-reverse place items\nidentically; the last is covered by the added test.\n\n* Source/WebCore/rendering/RenderFlexLayout.cpp:\n* Source/WebCore/rendering/RenderFlexLayout.h:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/flex-column-reverse-multiline-item-position.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/flex-column-reverse-multiline-item-position-ref.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/flex-column-reverse-multiline-item-position-expected.html: Added.\n\nCanonical link: https://commits.webkit.org/317468@main",
      "email": "zalan@apple.com",
      "hash": "c19c7a86d4fa753ed165ccfd96665c209ca5a93c",
      "subject": "[cleanup] Reverse column-reverse flex lines against the finalized container main size instead of reading it back mid-placement"
    },
    "317469@main": {
      "author": "David Kilzer",
      "avatar": "https://www.gravatar.com/avatar/e228ffc7a792e70bf2d160563c18dcc6?d=identicon\u0026s=64",
      "cl": "317469@main",
      "clUrl": "https://commits.webkit.org/317469@main",
      "description": "\u003chttps://bugs.webkit.org/show_bug.cgi?id=319723\u003e\n\u003crdar://182557522\u003e\n\nReviewed by Alex Christensen.\n\nAdd a Production build configuration to the TestWebKitAPI Xcode\nproject, matching WebKitTestRunner, gtest, and gmock.\n\nSet Production as the default configuration so Production builds use it\ninstead of Release.  This avoids loading `DebugRelease.xcconfig`, which\nincludes `ccache.xcconfig` (a file absent from the Production sandbox),\nand resolves `WTF_BUILD_SCRIPTS_DIR` to the SDK path rather than the\nempty `BUILT_PRODUCTS_DIR` engineering path.\n\nAlso remove the stray empty strings that Xcode accumulated in the\ninstall-extensions `PBXBuildRule` script array in the same project\nfile.\n\nNo new tests since this change is not directly testable.\n\n* .submitproject-tools:\n- Add TestWebKitAPI sources for tools submissions.\n* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:\n- Add Production build configurations.\n\nCanonical link: https://commits.webkit.org/317469@main",
      "email": "ddkilzer@apple.com",
      "hash": "e0ee95bcafc0c470dfce6db7cfd8ce708c6e9e5e",
      "subject": "[TestWebKitAPI] Add Production build configuration"
    },
    "317470@main": {
      "author": "Simon Fraser",
      "avatar": "https://www.gravatar.com/avatar/3763324aa0cdfa93be751c6081b8006a?d=identicon\u0026s=64",
      "cl": "317470@main",
      "clUrl": "https://commits.webkit.org/317470@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319648\nrdar://182472161\n\nReviewed by Cameron McCormack.\n\nWhen we import WPTs we often have to mark tests as `ImageOnlyFailure` when they just need pixel tolerance\nadjustment. If we modify the tests at import time, re-exporting is harder. Then we forget about them.\n\nSo go back and fix pixel tolerance for a set of tests.\n\nSome SVG tests which TestExpectations suggests only needed tolerance adjustment seem to have actual\nrendering issues, so remove the comments.\n\n* LayoutTests/TestExpectations:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-masking/clip-path/clip-path-paddingBox-1c.html:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-masking/mask-image/mask-image-inline-sliced-1.html:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-001.html:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-002.html:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-003.html:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-masking/clip-path/animations/clip-path-transition-allow-discrete-shape.html:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-masking/clip-path/clip-path-borderBox-1c.html:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-masking/clip-path/clip-path-strokeBox-1a.html:\n* LayoutTests/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003.svg:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-masking/clip-path/clip-path-viewBox-1c.html:\n\nCanonical link: https://commits.webkit.org/317470@main",
      "email": "simon.fraser@apple.com",
      "hash": "1164339199c9bab6c47898813324875bd3d3fbdc",
      "subject": "Adjust pixel tolerance in various WPTs"
    },
    "317471@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317471@main",
      "clUrl": "https://commits.webkit.org/317471@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319737\nrdar://182577068\n\nReviewed by Devin Rousso.\n\nMissing parentheses around `i \u003c newRange[0] || i \u003e newRange[1]` let `\u0026\u0026`\nbind tighter than `||`, so the classList.contains() check only\nguarded the `i \u003e newRange[1]` side. Currently latent since\nDOMTokenList.remove() and Array.prototype.remove() are no-ops on\nabsent values, but add explicit parentheses to match the intended logic.\n\n* Source/WebInspectorUI/UserInterface/Views/LogContentView.js:\n(WI.LogContentView.prototype._updateMessagesSelection):\n\nCanonical link: https://commits.webkit.org/317471@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "15b4a799985c255d12b4d25a3ffe8cf01344803e",
      "subject": "Web Inspector: operator precedence bug in LogContentView range selection deselect check"
    },
    "317472@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317472@main",
      "clUrl": "https://commits.webkit.org/317472@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319738\nrdar://182578510\n\nReviewed by Devin Rousso.\n\nm_statusCode had no default member initializer, unlike the other\nmembers of InspectorThreadableLoaderClient. It is set in\ndidReceiveResponse() and read in didFinishLoading(), which relies on\nThreadableLoaderClient's contract that didReceiveResponse() always\nprecedes didFinishLoading(). Give it a safe default so a future\nchange to that contract can't read uninitialized memory\n\n* Source/WebCore/inspector/InspectorThreadableLoaderClient.h:\n\nCanonical link: https://commits.webkit.org/317472@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "163805a73a698688a0d044e7bb31c8fa362408a8",
      "subject": "Web Inspector: InspectorThreadableLoaderClient::m_statusCode is uninitialized"
    },
    "317473@main": {
      "author": "Wenson Hsieh",
      "avatar": "https://www.gravatar.com/avatar/c8fba82556fd4988c78bd3a0aee2a44e?d=identicon\u0026s=64",
      "cl": "317473@main",
      "clUrl": "https://commits.webkit.org/317473@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319722\nrdar://181954850\n\nReviewed by Abrar Rahman Protyasha.\n\nOn Google search results on iPhone and iPad, the search field is fixed to the top of the page.\nSelecting text in it and then dragging a selection handle causes the main frame to autoscroll on\nits own because the fixed field stays in place while the page scrolls underneath it.\n\n290497@main made selection autoscroll engage as soon as the drag point is close to the viewport\nedge, dropping the earlier requirement that the drag first move toward the edge. A field fixed to\nthe top of the page is always inside the top edge band, so merely adjusting its selection now starts\na main-frame autoscroll.\n\nScrolling the main frame can never reveal more of a fixed-position container, so autoscrolling it\nfor such a selection serves no purpose. Rather than restore the drag-distance requirement (which\nwould undo the scrolling smoothness 290497@main added), don't start main-frame selection autoscroll\nwhen the selection is anchored inside a fixed-position container; a scrollable subframe nested\nwithin it may still autoscroll, since scrolling it can reveal more content.\n\nAutoscrollController::startAutoscrollForSelection now reports whether it actually started\nautoscrolling, and the UI process marks itself autoscrolling only once the web process confirms it\ndid.\n\nTest: editing/selection/ios/autoscroll-does-not-scroll-main-frame-in-fixed-container.html\n\n* LayoutTests/editing/selection/ios/autoscroll-does-not-scroll-main-frame-in-fixed-container-expected.txt: Added.\n* LayoutTests/editing/selection/ios/autoscroll-does-not-scroll-main-frame-in-fixed-container.html: Added.\n* Source/WebCore/page/AutoscrollController.cpp:\n(WebCore::AutoscrollController::startAutoscrollForSelection):\n* Source/WebCore/page/AutoscrollController.h:\n* Source/WebCore/page/EventHandler.h:\n* Source/WebCore/page/cocoa/EventHandlerCocoa.mm:\n(WebCore::EventHandler::startSelectionAutoscroll):\n\nMake this return whether or not autoscrolling started, and bubble that result back into the WebKit\nclient layer (as well as through the IPC reply to `StartAutoscrollAtPosition`). This returns `false`\nin the case where the selection is inside a fixed-position renderer, and the mainframe is the\nautoscrolled renderer.\n\n* Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm:\n(WebKit::WebPageProxy::startAutoscrollAtPosition):\n(WebKit::WebPageProxy::cancelAutoscroll):\n* Source/WebKit/UIProcess/WebPageProxy.h:\n\nTurn `m_isAutoscrolling` into a tri-state enum, since the value is now set asynchronously. In the\ncase where we start and then immediately stop autoscrolling before the IPC reply for autoscroll\nstart is received, we won't end up permanently stuck in autoscrolling state.\n\n* Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm:\n(WebKit::WebPage::startAutoscrollAtPosition):\n* Source/WebKit/WebProcess/WebPage/WebPage.h:\n* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:\n\nCanonical link: https://commits.webkit.org/317473@main",
      "email": "wenson_hsieh@apple.com",
      "hash": "16a8a13f3916c670aebb3e3f4367f07234d25051",
      "subject": "REGRESSION (290497@main): [iOS] Adjusting selection handles in Google search field causes page to autoscroll"
    },
    "317474@main": {
      "author": "Patrick Griffis",
      "avatar": "https://www.gravatar.com/avatar/2233c3a857004b126158572af9fe36f7?d=identicon\u0026s=64",
      "cl": "317474@main",
      "clUrl": "https://commits.webkit.org/317474@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319653\n\nReviewed by Claudio Saavedra.\n\n* Source/cmake/FindUdev.cmake:\n\nCanonical link: https://commits.webkit.org/317474@main",
      "email": "pgriffis@igalia.com",
      "hash": "5ee3fc6ce3a666bf122495362f4557588345a4c9",
      "subject": "[CMake] Fix pkg-config name of libudev"
    },
    "317475@main": {
      "author": "David Kilzer",
      "avatar": "https://www.gravatar.com/avatar/e228ffc7a792e70bf2d160563c18dcc6?d=identicon\u0026s=64",
      "cl": "317475@main",
      "clUrl": "https://commits.webkit.org/317475@main",
      "description": "\u003chttps://bugs.webkit.org/show_bug.cgi?id=319751\u003e\n\u003crdar://182563983\u003e\n\nUnreviewed build fix.\n\nConforming `WTF.BorrowedBytes` and `NonNullBytes` to\n`Foundation.ContiguousBytes` (317262@main) references the protocol's\nRawSpan-based `withBytes(_:)` requirement, which is SPI in a newer iOS\nSDK.\n\nAllow the symbol with a `swift-decls` entry, which names the Swift\ndeclaration instead of its mangled form so it survives the\nsymbol-mangling changes that occur across SDK builds (310820@main).\n\nNo new tests since this change is not directly testable.\n\n* Source/WebCore/Configurations/AllowedSPI.toml:\n\nCanonical link: https://commits.webkit.org/317475@main",
      "email": "ddkilzer@apple.com",
      "hash": "ecd3adca1f981f7b14daa1cde14bbb7f8e631f30",
      "subject": "REGRESSION (317262@main): Safari/WebKit iOS builds fail the SPI audit for Foundation.ContiguousBytes.withBytes(_:) with a newer SDK"
    },
    "317476@main": {
      "author": "David Kilzer",
      "avatar": "https://www.gravatar.com/avatar/e228ffc7a792e70bf2d160563c18dcc6?d=identicon\u0026s=64",
      "cl": "317476@main",
      "clUrl": "https://commits.webkit.org/317476@main",
      "description": "\u003chttps://bugs.webkit.org/show_bug.cgi?id=319751\u003e\n\u003crdar://182563983\u003e\n\nUnreviewed build fix.\n\nUpdate entry to work with older iOS SDKs.\n\n* Source/WebCore/Configurations/AllowedSPI.toml:\n\nCanonical link: https://commits.webkit.org/317476@main",
      "email": "ddkilzer@apple.com",
      "hash": "987c0f0250950d61cd33cf228f6fe151a82bd985",
      "subject": "Build fix: REGRESSION (317262@main): Safari/WebKit iOS builds fail the SPI audit for Foundation.ContiguousBytes.withBytes(_:) with a newer SDK"
    },
    "317477@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317477@main",
      "clUrl": "https://commits.webkit.org/317477@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318674\n\nReviewed by Antti Koivisto.\n\nminimumHeightForLineIfEmpty had a single caller, updateFlexContainerLogicalHeight, which already computes\nthe container's logical height in one std::max. Inline it there (compute the empty-line minimum from\nhasLineIfEmpty right where it feeds the max) and remove the standalone method and its declaration.\n\nWhile here, tidy the FlexLayout content pipeline: size flexLinesCrossPositionList at its declaration (the\nflex lines are already collected by performContentSizing before it, so the separate assignment inside\ncomputeFlexLineCrossPositions was redundant), and drop the blank lines between the steps in\nperformContentAlignment so it reads like performContentSizing.\n\nNo change in behavior.\n\n* Source/WebCore/rendering/RenderFlexLayout.cpp:\n* Source/WebCore/rendering/RenderFlexibleBox.cpp:\n(RenderFlexibleBox::updateFlexContainerLogicalHeight):\n* Source/WebCore/rendering/RenderFlexibleBox.h:\n\nCanonical link: https://commits.webkit.org/317477@main",
      "email": "zalan@apple.com",
      "hash": "3a9487df981031613862461b927dd63456357289",
      "subject": "[cleanup] Fold minimumHeightForLineIfEmpty into updateFlexContainerLogicalHeight"
    },
    "317478@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317478@main",
      "clUrl": "https://commits.webkit.org/317478@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=218258\nrdar://70736409\n\nReviewed by Devin Rousso.\n\nSourceCodeTextEditor.prototype.willDismissPopover always released the\n\"popover\" RuntimeAgent object group on `this.target`, but the object\ngroup is actually created using\n`WI.debuggerManager.activeCallFrame.target` when paused (see\n_tokenTrackingControllerHighlightedJavaScriptExpression). Editing the\nInspector Bootstrap Script exposed the mismatch: it is a WI.LocalScript\nwith a null target, so `this.target` was null and dereferencing\n`.RuntimeAgent` threw.\n\nResolve the target in willDismissPopover the same way it is resolved\nwhen the object group is created, and skip releasing it if no target\nis available.\n\n* Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:\n(WI.SourceCodeTextEditor.prototype.willDismissPopover):\n\nCanonical link: https://commits.webkit.org/317478@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "8b12e6d64336315ee3176f59a903caf938324ad9",
      "subject": "Web Inspector: Uncaught Exception: TypeError: null is not an object (evaluating 'this.target.RuntimeAgent')"
    },
    "317479@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317479@main",
      "clUrl": "https://commits.webkit.org/317479@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318686\n\nReviewed by Antti Koivisto.\n\nFlexLayout reported each flex line's start-item index to the inspector overlay\n(flexibleBoxRendererWrappedToNextLine) from inside the cross-axis position loop, even though the line\nboundaries are a line-collection fact that has nothing to do with cross-axis positioning.\n\nReport them right after computeFlexLines instead, in a small loop over flexLines.ranges. No change in\nbehavior: it still runs after flexibleBoxRendererBeganLayout (which resets the per-container list) and\nappends each line's end index in line order, and the inspector reads the list on demand after layout.\n\n* Source/WebCore/rendering/RenderFlexLayout.cpp:\n\nCanonical link: https://commits.webkit.org/317479@main",
      "email": "zalan@apple.com",
      "hash": "8a23cf8a33f522b1ddf4488bcefeff84918c7f26",
      "subject": "[cleanup] Report flex line boundaries to the inspector next to computeFlexLines"
    },
    "317480@main": {
      "author": "Zak Ridouh",
      "avatar": "https://www.gravatar.com/avatar/d9b65ef530b9cbbfc6dff1ca158faace?d=identicon\u0026s=64",
      "cl": "317480@main",
      "clUrl": "https://commits.webkit.org/317480@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=303881\nrdar://166173246\n\nReviewed by Ryosuke Niwa.\n\nAdd a console warning whenever any XSLT code is used by web developers. This shows up in the WebInspector console.\n\n* LayoutTests/fast/events/xsl-onload-expected.txt:\n* LayoutTests/fast/parser/external-entities-in-xslt-expected.txt:\n* LayoutTests/fast/parser/xslt-with-html-expected.txt:\n* LayoutTests/fast/xsl/default-html-expected.txt:\n* LayoutTests/fast/xsl/deprecation-warning/resources/document.xml: Added.\n* LayoutTests/fast/xsl/deprecation-warning/resources/transform.xsl: Added.\n* LayoutTests/fast/xsl/deprecation-warning/xslt-deprecation-warning-once-per-page-expected.txt: Added.\n* LayoutTests/fast/xsl/deprecation-warning/xslt-deprecation-warning-once-per-page.html: Added.\n* LayoutTests/fast/xsl/deprecation-warning/xslt-deprecation-warning-xml-stylesheet-expected.txt: Added.\n* LayoutTests/fast/xsl/deprecation-warning/xslt-deprecation-warning-xml-stylesheet.html: Added.\n* LayoutTests/fast/xsl/deprecation-warning/xslt-deprecation-warning-xsltprocessor-expected.txt: Added.\n* LayoutTests/fast/xsl/deprecation-warning/xslt-deprecation-warning-xsltprocessor.html: Added.\n* LayoutTests/fast/xsl/dtd-in-source-document-expected.txt:\n* LayoutTests/fast/xsl/exslt-node-set-expected.txt:\n* LayoutTests/fast/xsl/extra-lf-at-end-expected.txt:\n* LayoutTests/fast/xsl/generate-id-distinct-elements-unique-value-expected.txt:\n* LayoutTests/fast/xsl/generate-id-multiple-calls-same-value-expected.txt:\n* LayoutTests/fast/xsl/import-after-comment-expected.txt:\n* LayoutTests/fast/xsl/import-non-document-node-expected.txt:\n* LayoutTests/fast/xsl/mozilla-tests-expected.txt:\n* LayoutTests/fast/xsl/nbsp-in-stylesheet-expected.txt:\n* LayoutTests/fast/xsl/sort-unicode-expected.txt:\n* LayoutTests/fast/xsl/subframe-location-expected.txt:\n* LayoutTests/fast/xsl/transform-to-html-expected.txt:\n* LayoutTests/fast/xsl/transform-xhr-doc-expected.txt:\n* LayoutTests/fast/xsl/transformToFragment-XML-declaration-expected.txt:\n* LayoutTests/fast/xsl/utf8-chunks-expected.txt:\n* LayoutTests/fast/xsl/xslt-bad-import-uri-expected.txt:\n* LayoutTests/fast/xsl/xslt-contentType-expected.txt:\n* LayoutTests/fast/xsl/xslt-doc-enc-expected.txt:\n* LayoutTests/fast/xsl/xslt-doc-noenc-expected.txt:\n* LayoutTests/fast/xsl/xslt-entity-enc-expected.txt:\n* LayoutTests/fast/xsl/xslt-fragment-in-empty-doc-expected.txt:\n* LayoutTests/fast/xsl/xslt-max-depth-expected.txt:\n* LayoutTests/fast/xsl/xslt-mismatched-tags-in-xslt-expected.txt:\n* LayoutTests/fast/xsl/xslt-nested-stylesheets-expected.txt:\n* LayoutTests/fast/xsl/xslt-node-set-empty-expected.txt:\n* LayoutTests/fast/xsl/xslt-processor-expected.txt:\n* LayoutTests/fast/xsl/xslt-processor-template-expected.txt:\n* LayoutTests/fast/xsl/xslt-recursion-expected.txt:\n* LayoutTests/fast/xsl/xslt-second-level-import-expected.txt:\n* LayoutTests/fast/xsl/xslt-string-parameters-expected.txt:\n* LayoutTests/fast/xsl/xslt-text-expected.txt:\n* LayoutTests/fast/xsl/xslt-transform-script-expected.txt:\n* LayoutTests/fast/xsl/xslt-transform-to-fragment-crash-expected.txt:\n* LayoutTests/fast/xsl/xslt-transform-to-fragment-no-xml-parsing-crash-expected.txt:\n* LayoutTests/fast/xsl/xslt-transformToDocument-crash-expected.txt:\n* LayoutTests/fast/xsl/xslt-url-expected.txt:\n* LayoutTests/fast/xsl/xslt-xhtml-template-expected.txt:\n* LayoutTests/http/tests/misc/location-test-xsl-style-sheet-expected.txt:\n* LayoutTests/http/tests/misc/xslt-bad-import-expected.txt:\n* LayoutTests/http/tests/security/contentSecurityPolicy/xsl-allowed-expected.txt:\n* LayoutTests/http/tests/security/contentSecurityPolicy/xsl-blocked-expected.txt:\n* LayoutTests/http/tests/security/contentSecurityPolicy/xsl-img-blocked-expected.txt:\n* LayoutTests/http/tests/security/contentSecurityPolicy/xsl-redirect-allowed-expected.txt:\n* LayoutTests/http/tests/security/contentSecurityPolicy/xsl-redirect-allowed2-expected.txt:\n* LayoutTests/http/tests/security/contentSecurityPolicy/xsl-redirect-blocked-expected.txt:\n* LayoutTests/http/tests/security/contentSecurityPolicy/xsl-unaffected-by-style-src-1-expected.txt:\n* LayoutTests/http/tests/security/contentSecurityPolicy/xsl-unaffected-by-style-src-2-expected.txt:\n* LayoutTests/http/tests/security/cross-origin-xsl-redirect-BLOCKED-expected.txt:\n* LayoutTests/http/tests/security/xss-ALLOWED-xsl-external-entity-xslt-docloader-expected.txt:\n* LayoutTests/http/tests/security/xss-DENIED-xsl-document-expected.txt:\n* LayoutTests/http/tests/security/xss-DENIED-xsl-document-redirect-expected.txt:\n* LayoutTests/http/tests/security/xss-DENIED-xsl-document-securityOrigin-expected.txt:\n* LayoutTests/http/tests/security/xss-DENIED-xsl-external-entity-xslt-docloader-expected.txt:\n* LayoutTests/http/tests/xmlviewer/dumpAsText/xsl-stylesheet-expected.txt:\n* LayoutTests/http/tests/xsl/xslt-import-delayed-subresource-crash-expected.txt:\n* LayoutTests/http/tests/xsl/xslt-transform-with-javascript-disabled-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/document-function-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt-bad-import-uri-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt-enc-cyr-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt-enc-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt-enc16-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt-enc16to16-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt-entity-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt-extra-content-at-end-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt-import-depth-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt-mismatched-tags-in-xslt-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt-missing-namespace-in-xslt-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt-relative-path-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt-transform-to-fragment-no-xml-parsing-crash-expected.txt:\n* LayoutTests/platform/glib/fast/xsl/xslt_unicode-expected.txt:\n* LayoutTests/platform/glib/http/tests/misc/xslt-bad-import-expected.txt:\n* LayoutTests/platform/glib/http/tests/security/contentSecurityPolicy/xsl-redirect-blocked-expected.txt:\n* LayoutTests/platform/glib/http/tests/security/cross-origin-xsl-redirect-BLOCKED-expected.txt:\n* LayoutTests/platform/glib/http/tests/security/xss-ALLOWED-xsl-external-entity-xslt-docloader-expected.txt: Added.\n* LayoutTests/platform/glib/http/tests/xsl/xslt-import-delayed-subresource-crash-expected.txt:\n* LayoutTests/platform/gtk/http/tests/security/xss-DENIED-xsl-external-entity-expected.txt:\n* LayoutTests/platform/gtk/http/tests/security/xss-DENIED-xsl-external-entity-redirect-expected.txt:\n* LayoutTests/platform/ios/fast/xsl/document-function-expected.txt:\n* LayoutTests/platform/ios/fast/xsl/xslt-enc-cyr-expected.txt:\n* LayoutTests/platform/ios/fast/xsl/xslt-enc-expected.txt:\n* LayoutTests/platform/ios/fast/xsl/xslt-enc16-expected.txt:\n* LayoutTests/platform/ios/fast/xsl/xslt-enc16to16-expected.txt:\n* LayoutTests/platform/ios/fast/xsl/xslt-entity-expected.txt:\n* LayoutTests/platform/ios/fast/xsl/xslt-import-depth-expected.txt:\n* LayoutTests/platform/ios/fast/xsl/xslt-relative-path-expected.txt:\n* LayoutTests/platform/ios/fast/xsl/xslt_unicode-expected.txt:\n* LayoutTests/platform/mac/fast/xsl/document-function-expected.txt:\n* LayoutTests/platform/mac/fast/xsl/sort-locale-expected.txt:\n* LayoutTests/platform/mac/fast/xsl/xslt-enc-cyr-expected.txt:\n* LayoutTests/platform/mac/fast/xsl/xslt-enc-expected.txt:\n* LayoutTests/platform/mac/fast/xsl/xslt-enc16-expected.txt:\n* LayoutTests/platform/mac/fast/xsl/xslt-enc16to16-expected.txt:\n* LayoutTests/platform/mac/fast/xsl/xslt-entity-expected.txt:\n* LayoutTests/platform/mac/fast/xsl/xslt-extra-content-at-end-expected.txt:\n* LayoutTests/platform/mac/fast/xsl/xslt-import-depth-expected.txt:\n* LayoutTests/platform/mac/fast/xsl/xslt-missing-namespace-in-xslt-expected.txt:\n* LayoutTests/platform/mac/fast/xsl/xslt-relative-path-expected.txt:\n* LayoutTests/platform/mac/fast/xsl/xslt_unicode-expected.txt:\n* LayoutTests/platform/mac/http/tests/security/xss-DENIED-xsl-external-entity-expected.txt:\n* LayoutTests/platform/mac/http/tests/security/xss-DENIED-xsl-external-entity-redirect-expected.txt:\n* LayoutTests/platform/win/http/tests/misc/xslt-bad-import-expected.txt:\n* LayoutTests/platform/win/http/tests/security/cross-origin-xsl-redirect-BLOCKED-expected.txt:\n* LayoutTests/platform/wpe/fast/xsl/sort-locale-expected.txt:\n* Source/WebCore/dom/Document.cpp:\n(WebCore::Document::logXSLTDeprecationWarningIfNeeded):\n(WebCore::Document::applyPendingXSLTransformsTimerFired):\n* Source/WebCore/dom/Document.h:\n* Source/WebCore/xml/XSLTProcessor.cpp:\n(WebCore::XSLTProcessor::transformToDocument):\n(WebCore::XSLTProcessor::transformToFragment):\n* Source/WebCore/xml/XSLTProcessor.h:\n* Source/WebCore/xml/XSLTProcessor.idl:\n\nCanonical link: https://commits.webkit.org/317480@main",
      "email": "zakr@apple.com",
      "hash": "ad77bdfcc670bb4350902c86f2419c9f79b9e4ce",
      "subject": "[xslt] Add deprecation console warning upon usage of XSLT APIs"
    },
    "317481@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317481@main",
      "clUrl": "https://commits.webkit.org/317481@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319740\nrdar://182580121\n\nReviewed by Devin Rousso.\n\nInspectorCanvas.cpp's buildArrayForVector\u003cT\u003e was structurally identical\nto the no-functor mapToArray overload in InspectorCanvasArguments.cpp.\nMove the shared helper into InspectorProtocolTypes.h, as buildArray, so\nboth files use one implementation.\n\n* Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:\n(Inspector::Protocol::buildArray):\n* Source/WebCore/inspector/InspectorCanvas.cpp:\n(WebCore::InspectorCanvas::buildInitialState):\n(WebCore::buildArrayForVector): Deleted.\n* Source/WebCore/inspector/InspectorCanvas.h:\n(WebCore::mapToArray): Deleted.\n* Source/WebCore/inspector/InspectorCanvasArguments.cpp:\n(WebCore::mapToArray): Deleted.\n\nCanonical link: https://commits.webkit.org/317481@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "40772733505bef5ce93894e6cda61196687b9593",
      "subject": "Deduplicate buildArrayForVector/mapToArray in Inspector canvas recording code"
    },
    "317482@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317482@main",
      "clUrl": "https://commits.webkit.org/317482@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319739\nrdar://182579545\n\nReviewed by Devin Rousso.\n\n_isRangeWhitespace() called this._sourceText.substring(from, to) and\nthen scanned the resulting substring character-by-character, even\nthough it only needed to read character codes out of the original\nsource text.\n\nJSC's String.prototype.substring() doesn't copy the underlying\ncharacter buffer; it shares the source StringImpl via a small\nsubstring-view JSString. But outside a few no-allocation fast paths\n(empty result, single character, or the whole string), it still\nallocates that view object on every call, and reading through it via\ncharCodeAt() adds an extra layer of indirection versus indexing the\noriginal string directly.\n\nScan this._sourceText directly by index instead, avoiding that\nper-call allocation and indirection. This requires handling from \u003e to\nexplicitly, since String.prototype.substring() silently swaps its\narguments when indexStart \u003e indexEnd, and some call sites (e.g.\nForStatement semicolon handling) rely on that behavior to check\nranges where the \"from\" token comes after the \"to\" node in the\nsource.\n\n* Source/WebInspectorUI/UserInterface/Workers/Formatter/JSFormatter.js:\n(JSFormatter.prototype._isRangeWhitespace):\n\nCanonical link: https://commits.webkit.org/317482@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "e51cb5fa24f6b3641bb0e4e0eedd42a4cdec0afd",
      "subject": "Web Inspector: JSFormatter._isRangeWhitespace should avoid allocating a substring to scan"
    },
    "317483@main": {
      "author": "Alan Baradlay",
      "avatar": "https://www.gravatar.com/avatar/788d66417db806c567552cfa1ae89f77?d=identicon\u0026s=64",
      "cl": "317483@main",
      "clUrl": "https://commits.webkit.org/317483@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318688\n\nReviewed by Antti Koivisto.\n\nAfter updateFlexContainerLogicalHeight finalized the container's logical height, three column-flow sites read\nit back off the container: distributeMainAxisFreeSpaceForMultilineColumnIfNeeded and the column-reverse\nrepositioning read contentBoxLogicalHeight(), and the reverse pass also read logicalHeight() for the main-axis\nend. These run after the finalize, so the value is already computed; FlexLayout should take it as a value, not\nconsult the container.\n\nExtend the finalize's return (renamed FlexContainerCrossExtents to FlexContainerUsedExtents) with the used\nblock-axis extents (contentBoxLogicalHeight and logicalHeight) alongside the cross-axis ones it already\nreturned, and thread those into distribute and reverseColumnLinesFromContainerMainEndIfNeeded as parameters.\n\nNo change in behavior: nothing grows the container's logical height between the finalize and these consumers\n(distribute only re-resolves short multi-line-column lines up to the container main, never past it), so each\nthreaded value equals what the live read returned.\n\n* Source/WebCore/rendering/RenderFlexLayout.cpp:\n* Source/WebCore/rendering/RenderFlexLayout.h:\n* Source/WebCore/rendering/RenderFlexibleBox.cpp:\n(RenderFlexibleBox::updateFlexContainerLogicalHeight):\n* Source/WebCore/rendering/RenderFlexibleBox.h:\n\nCanonical link: https://commits.webkit.org/317483@main",
      "email": "zalan@apple.com",
      "hash": "1f01bcc97a8691e93438864747e11ea24c4dae86",
      "subject": "[cleanup] Return the flex container's used block extents from updateFlexContainerLogicalHeight instead of reading them back"
    },
    "317484@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317484@main",
      "clUrl": "https://commits.webkit.org/317484@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319755\nrdar://182605625\n\nReviewed by Devin Rousso.\n\n* Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp:\n(buildWebSocketMessage): Use the named WebSocketFrame::OpCodeText enumerator\ninstead of the bare literal 1 when deciding whether to report the payload\nas UTF-8 text or base64.\n\nCanonical link: https://commits.webkit.org/317484@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "8320da5a64dc8edaec8630a36f84d8803572b9e7",
      "subject": "Web Inspector: buildWebSocketMessage() uses magic number 1 instead of WebSocketFrame::OpCodeText"
    },
    "317485@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317485@main",
      "clUrl": "https://commits.webkit.org/317485@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319756\nrdar://182606146\n\nReviewed by Devin Rousso.\n\nInspectorInstrumentation kept a file-scope raw HashSet\u003cInstrumentingAgents*\u003e*\nthat it new'd on first registration and delete'd once the last agent\nunregistered. Replace it with the usual WebKit pattern for a lazily\nconstructed global registry — a static accessor function wrapping a\nfunction-local NeverDestroyed\u003cHashSet\u003cInstrumentingAgents*\u003e\u003e, matching\nNode::liveNodes, GCReachableRefMap::map(), etc. This drops the manual\nnew/delete and the null checks at every call site; the set is simply left\nempty when unused. No behavior change.\n\n* Source/WebCore/inspector/InspectorInstrumentation.cpp:\n(WebCore::InspectorInstrumentation::willDestroyCachedResourceImpl):\n(WebCore::InspectorInstrumentation::registerInstrumentingAgents):\n(WebCore::InspectorInstrumentation::unregisterInstrumentingAgents):\n\nCanonical link: https://commits.webkit.org/317485@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "96442108e57a1e5bae0e51960e42749254332ced",
      "subject": "Web Inspector: InspectorInstrumentation's instrumenting-agents registry manually new/deletes its HashSet"
    },
    "317486@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "317486@main",
      "clUrl": "https://commits.webkit.org/317486@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319754\nrdar://182605155\n\nReviewed by Devin Rousso.\n\ninstancesWithClassName(), dominatedNodes(), retainedNodes(), and\nretainers() each collected raw node/edge indices into an array and\nthen called .map(this.serializeNode/serializeEdge) to produce the\nresult, allocating and traversing a throwaway array for no reason.\nPush the serialized node/edge directly in the collection loop instead.\n\n* Source/WebInspectorUI/UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:\n(HeapSnapshot.instancesWithClassName):\n(HeapSnapshot.prototype.dominatedNodes):\n(HeapSnapshot.prototype.retainedNodes):\n(HeapSnapshot.prototype.retainers):\n\nCanonical link: https://commits.webkit.org/317486@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "5fe81ead06933befd1839a98c5fe131594fa4f4c",
      "subject": "HeapSnapshot.js allocates unnecessary intermediate arrays before serializing nodes/edges"
    },
    "317487@main": {
      "author": "Zak Ridouh",
      "avatar": "https://www.gravatar.com/avatar/d9b65ef530b9cbbfc6dff1ca158faace?d=identicon\u0026s=64",
      "cl": "317487@main",
      "clUrl": "https://commits.webkit.org/317487@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=317474\nrdar://180100566\n\nReviewed by Alex Christensen.\n\nhandleAcceptedCandidate sends HandleAcceptedCandidate to the main frame's\nprocess. When the focused field is in a cross-origin iframe that process has no\nlocal focused frame, so the accepted candidate is dropped and the input is\nnever updated.\n\nRoute the message to the process containing the focused frame.\n\nTest: Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm\n\n* Source/WebKit/UIProcess/WebPageProxy.cpp:\n(WebKit::WebPageProxy::handleAcceptedCandidate):\n(WebKit::WebPageProxy::sendToFocusedOrMainFrameProcess):\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm:\n(TestWebKitAPI::TEST(SiteIsolation, HandleAcceptedCandidateInCrossOriginIframe)):\n* Source/WebKit/UIProcess/WebPageProxy.h:\n\nCanonical link: https://commits.webkit.org/317487@main",
      "email": "zakr@apple.com",
      "hash": "87d8d6035b7ce6d0c16181d49d3ae6b06e19a49e",
      "subject": "[Site Isolation] Accepting a text suggestion does nothing for inputs in cross-origin iframes on macOS"
    },
    "317488@main": {
      "author": "lilly",
      "avatar": "https://www.gravatar.com/avatar/d0533d52eeb271270df480f37629a407?d=identicon\u0026s=64",
      "cl": "317488@main",
      "clUrl": "https://commits.webkit.org/317488@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319603\nrdar://182432597\n\nReviewed by Simon Fraser.\n\nThis is infrastructure for CSS corner-shape rendering. Drawing corner shapes\nusing Bezier Curves requires clipping the Bézier segments that describe a\ncorner to the corner's bounding box, so that a curve extending past the box\nis trimmed to just the portion inside it. BezierUtilities is where that\ngeometry lives, but it previously exposed only unimplemented stubs\n(intersectBezierAndLine, splitBezier). This fills in the logic and replaces\nthose stubs with a single public entry point, trimBezierToRect(), which\nreturns the sub-curves of a cubic Bézier that lie inside a given FloatRect.\n\nBezierUtilities.h is a private framework header, so it is included via\n\u003cWebCore/BezierUtilities.h\u003e (the framework form) rather than a quoted include,\nso that the WebCore_Private module picks it up.\n\nTest: Tools/TestWebKitAPI/Tests/WebCore/BezierUtilitiesTests.cpp\n\n* Source/WebCore/Headers.cmake:\n* Source/WebCore/WebCore.xcodeproj/project.pbxproj:\n* Source/WebCore/platform/graphics/BezierUtilities.cpp:\n(WebCore::trimBezierToRect):\n(WebCore::intersectBezierAndLine): Deleted.\n(WebCore::splitBezier): Deleted.\n* Source/WebCore/platform/graphics/BezierUtilities.h:\n(): Deleted.\n* Tools/TestWebKitAPI/CMakeLists.txt:\n* Tools/TestWebKitAPI/Tests/WebCore/BezierUtilitiesTests.cpp: Added.\n(TestWebKitAPI::lineCurve):\n(TestWebKitAPI::expectPointNear):\n(TestWebKitAPI::TEST(BezierUtilities, TrimReturnsStraightCurveInsideUnchanged)):\n(TestWebKitAPI::TEST(BezierUtilities, TrimReturnsCurvedBezierInsideUnchanged)):\n(TestWebKitAPI::TEST(BezierUtilities, TrimReturnsEmptyForCurveOutside)):\n(TestWebKitAPI::TEST(BezierUtilities, TrimClipsSpanningLineToLeftAndRightEdges)):\n(TestWebKitAPI::TEST(BezierUtilities, TrimKeepsInsideEndpointAndClipsCrossedEdge)):\n(TestWebKitAPI::TEST(BezierUtilities, TrimClipsDiagonalLineAtEdgeCrossing)):\n(TestWebKitAPI::TEST(BezierUtilities, TrimClipsCurveDippingThroughTopEdge)):\n(TestWebKitAPI::TEST(BezierUtilities, TrimClipsVerticalSpanningLineToTopAndBottomEdges)):\n(TestWebKitAPI::TEST(BezierUtilities, TrimKeepsInsideEndpointAndClipsVerticalCrossedEdge)):\n(TestWebKitAPI::TEST(BezierUtilities, TrimReturnsSinglePointCurveInsideUnchanged)):\n(TestWebKitAPI::TEST(BezierUtilities, TrimReturnsEmptyForSinglePointCurveOutside)):\n(TestWebKitAPI::TEST(BezierUtilities, TrimReturnsEmptyForHorizontalLineLeftOfRect)):\n(TestWebKitAPI::TEST(BezierUtilities, TrimKeepsLineLyingAlongTopEdge)):\n* Source/WebCore/platform/graphics/CornerShapeUtilities.cpp:\n\nCanonical link: https://commits.webkit.org/317488@main",
      "email": "173393835+cupidsity@users.noreply.github.com",
      "hash": "f5eba498b2d50f4e6721ae2db870cf61715a050e",
      "subject": "corner-shape: Implement trimBezierToRect() to clip a cubic Bézier to a rectangle"
    }
  },
  "date": "2026-07-18",
  "days": 1,
  "generatedAt": "2026-07-18T22:06:26Z",
  "markdown": "## Highlights\n- **Web Platform** Custom elements and DOM realm correctness both moved forward, tightening spec alignment in places pages can actually observe. [commit 317462@main](https://commits.webkit.org/317462@main) [commit 317457@main](https://commits.webkit.org/317457@main)\n- **Security** CSP now accepts a matching content hash for external scripts under `strict-dynamic`, fixing a real policy compliance gap. [commit 317454@main](https://commits.webkit.org/317454@main)\n- **Mobile** iOS finally honors `touch-action: manipulation` for double-tap zoom prevention, with related policy plumbing landing alongside it. [commit 317443@main](https://commits.webkit.org/317443@main) [commit 317451@main](https://commits.webkit.org/317451@main)\n- **A11y** A navigation regression that left web content empty in the new AX cache's isolated tree got fixed, restoring accessibility tree construction after page loads. [commit 317449@main](https://commits.webkit.org/317449@main)\n- **Rendering** Highlight painting got more correct: custom highlights now preserve underline offset and layer decoration over the originating element instead of replacing it. [commit 317440@main](https://commits.webkit.org/317440@main) [commit 317439@main](https://commits.webkit.org/317439@main)\n- **UI** macOS text suggestions in cross-origin iframes work again under Site Isolation instead of silently doing nothing. [commit 317487@main](https://commits.webkit.org/317487@main)\n- **V8** JavaScriptCore sped up common array lookup paths, including RegExp match arrays and rope-backed strings that were falling off the fast path. [commit 317466@main](https://commits.webkit.org/317466@main) [commit 317465@main](https://commits.webkit.org/317465@main)\n- **Rendering** Flexbox work dominated the day, fixing vertical writing mode sizing bugs while continuing a broad cleanup of height, placement, and inspector reporting paths. [commit 317467@main](https://commits.webkit.org/317467@main) [commit 317479@main](https://commits.webkit.org/317479@main) [commit 317483@main](https://commits.webkit.org/317483@main)\n- **Media** iOS remote playback no longer keeps video playing on the wireless target after switching back to local playback. [commit 317433@main](https://commits.webkit.org/317433@main)\n\n## What landed by area\n\n### Web Inspector\n- **DevTools** Heap snapshot serialization stops building unnecessary intermediate arrays first, trimming avoidable allocation overhead. [commit 317486@main](https://commits.webkit.org/317486@main)\n- **Refactor** InspectorInstrumentation now uses cleaner ownership for its instrumenting-agents set instead of manual new/delete management. [commit 317485@main](https://commits.webkit.org/317485@main)\n- **Refactor** WebSocket message building now uses `WebSocketFrame::OpCodeText` instead of a magic constant. [commit 317484@main](https://commits.webkit.org/317484@main)\n- **Perf** JSFormatter whitespace scanning avoids allocating substrings just to inspect a range. [commit 317482@main](https://commits.webkit.org/317482@main)\n- **Refactor** Inspector canvas recording deduplicates `buildArrayForVector` and `mapToArray` helpers. [commit 317481@main](https://commits.webkit.org/317481@main)\n- **DevTools** A null `RuntimeAgent` crash in Web Inspector got fixed. [commit 317478@main](https://commits.webkit.org/317478@main)\n- **Security** `InspectorThreadableLoaderClient::m_statusCode` is no longer left uninitialized. [commit 317472@main](https://commits.webkit.org/317472@main)\n- **DevTools** A precedence bug in log range deselection logic was corrected in `LogContentView`. [commit 317471@main](https://commits.webkit.org/317471@main)\n- **UI** Extension sidebar code got fixed up. [commit 317441@main](https://commits.webkit.org/317441@main)\n\n### Layout and Rendering\n- **Rendering** `corner-shape` gained `trimBezierToRect()` for clipping cubic Beziers to a rectangle. [commit 317488@main](https://commits.webkit.org/317488@main)\n- **Refactor** Flex container block extents are now returned directly from `updateFlexContainerLogicalHeight` instead of being read back later. [commit 317483@main](https://commits.webkit.org/317483@main)\n- **Refactor** Flex line boundaries are reported to Inspector next to `computeFlexLines`, tightening data flow around layout introspection. [commit 317479@main](https://commits.webkit.org/317479@main)\n- **Refactor** Empty-line minimum height logic was folded into `updateFlexContainerLogicalHeight`. [commit 317477@main](https://commits.webkit.org/317477@main)\n- **Refactor** Column-reverse flex lines now reverse against the finalized container main size instead of rereading it mid-placement. [commit 317468@main](https://commits.webkit.org/317468@main)\n- **Refactor** Row flex content height is built in `FlexLayout` and resolved later in `updateFlexContainerLogicalHeight`. [commit 317463@main](https://commits.webkit.org/317463@main)\n- **Perf** Grid track sizing stops copying the track-sizes vector for every grid item in `oppositeAxisConstraintForTrackSizing()`. [commit 317452@main](https://commits.webkit.org/317452@main)\n- **Rendering** CSS Scroll Snap re-snap now ignores a focused snap area once it has scrolled out of the snapport. [commit 317447@main](https://commits.webkit.org/317447@main)\n- **Refactor** Flex used cross size is now taken directly from `updateFlexContainerLogicalHeight` instead of the container object. [commit 317446@main](https://commits.webkit.org/317446@main)\n- **Refactor** Flex row main inner size now reads from the `mainAxisAvailableSpace` constraint. [commit 317442@main](https://commits.webkit.org/317442@main)\n- **Perf** `shrinkToFit()` was operating on a temporary copy in `InlineContent::nonRootInlineBoxIndexesForLayoutBox()`, and that waste is gone. [commit 317456@main](https://commits.webkit.org/317456@main)\n- **Perf** `LineLayoutResult::inflowContentType()` is no longer computed twice in common query paths. [commit 317432@main](https://commits.webkit.org/317432@main)\n- **Refactor** `FlexLayout`'s `positionList` was renamed to `flexItemsPositionList` for clarity. [commit 317436@main](https://commits.webkit.org/317436@main)\n- **Refactor** `RelayoutChildren` was dropped from `FlexLayout`, moved onto `FlexLayoutItem`, and the layout entry points were renamed. [commit 317429@main](https://commits.webkit.org/317429@main)\n- **Rendering** Grid flexible-track sizing got an initial implementation for increasing sizes when spanning items cross flexible tracks. [commit 317426@main](https://commits.webkit.org/317426@main)\n\n### DOM and Web Platform\n- **Web Platform** XSLT API use now emits a deprecation console warning, a clear signal that legacy paths are on borrowed time. [commit 317480@main](https://commits.webkit.org/317480@main)\n- **Web Platform** `::highlight()` and `::target-text` now respect `text-underline-offset`. [commit 317440@main](https://commits.webkit.org/317440@main)\n- **Rendering** Custom highlight decoration now layers over the originating element's decoration instead of replacing it. [commit 317439@main](https://commits.webkit.org/317439@main)\n\n### JavaScriptCore and Wasm\n- **V8** DFG now uses `ArrayIndexOf` and `ArrayIncludes` intrinsics for RegExp match arrays. [commit 317466@main](https://commits.webkit.org/317466@main)\n- **V8** `Array#indexOf` and `includes` keep the fast path for rope elements with mismatched length where possible. [commit 317465@main](https://commits.webkit.org/317465@main)\n- **Build** JSC stress runs now include WPT Wasm coverage in `wasm.yaml`. [commit 317464@main](https://commits.webkit.org/317464@main)\n- **V8** `emitWriteBarrier` now stores its slow path in `m_slowPaths`, simplifying codegen bookkeeping. [commit 317448@main](https://commits.webkit.org/317448@main)\n\n### Accessibility and Input\n- **A11y** `AXTextMarker::lineIndex()` is now O(1) when start and target live in the same containing block. [commit 317438@main](https://commits.webkit.org/317438@main)\n- **UI** On iOS, dragging selection handles in the Google search field no longer autoscrolls the page as a side effect. [commit 317473@main](https://commits.webkit.org/317473@main)\n- **UI** Text extraction clients can now issue interactions through a `WKJSHandle`. [commit 317444@main](https://commits.webkit.org/317444@main)\n\n### Site Isolation, IPC, and Process Model\n- **Security** A Site Isolation bug that broke accepting text suggestions inside cross-origin iframes on macOS was fixed. [commit 317487@main](https://commits.webkit.org/317487@main)\n- **Security** `ProcessSwap.NavigateToDataURLThenBack` was fixed in TestWebKitAPI coverage. [commit 317435@main](https://commits.webkit.org/317435@main)\n- **Refactor** `DidReceiveEventIPC` was removed. [commit 317427@main](https://commits.webkit.org/317427@main)\n\n### Media, Networking, and Platform Integration\n- **Media** GStreamer image decoder logging was corrected. [commit 317460@main](https://commits.webkit.org/317460@main)\n- **Privacy** Enhanced Security link gating moved into WebKit via `HAVE_ENHANCED_SECURITY_LINKS`. [commit 317459@main](https://commits.webkit.org/317459@main)\n\n### Build, CI, and Tooling\n- **Build** iOS SPI audit fallout from newer SDKs around `Foundation.ContiguousBytes.withBytes(_:)` got fixed. [commit 317476@main](https://commits.webkit.org/317476@main) [commit 317475@main](https://commits.webkit.org/317475@main)\n- **Build** CMake now uses the correct pkg-config name for `libudev`. [commit 317474@main](https://commits.webkit.org/317474@main)\n- **Build** `TestWebKitAPI` gained a Production build configuration. [commit 317469@main](https://commits.webkit.org/317469@main)\n- **Build** `filter-test-logs` no longer risks getting buildbot to kill an in-progress step when runner output is slow. [commit 317461@main](https://commits.webkit.org/317461@main)\n- **Build** The unchecked lambda captures checker is enabled when available. [commit 317458@main](https://commits.webkit.org/317458@main)\n- **Build** AVFoundation availability fallout around `AVOutputDeviceTypeCustomProtocol` was fixed for newer macOS SDKs. [commit 317453@main](https://commits.webkit.org/317453@main) [commit 317450@main](https://commits.webkit.org/317450@main)\n- **Perf** Broken `measure-build-time` config was repaired. [commit 317445@main](https://commits.webkit.org/317445@main)\n- **Build** Xcode sandboxing override logic for the `rdar://109484516` workaround now actually takes effect. [commit 317434@main](https://commits.webkit.org/317434@main)\n- **Build** IPC testing headers are once again installed under the right `/System/iOSSupport` prefix on iOSMac builds. [commit 317431@main](https://commits.webkit.org/317431@main)\n- **Build** A CMake break introduced after 317383@main was fixed. [commit 317430@main](https://commits.webkit.org/317430@main)\n- **Build** The `WorkAround173516139.h` module cache fix now applies in WebCore. [commit 310724@main](https://commits.webkit.org/310724@main)\n- **Build** EWS gained safe-merge-queue support for webkitglib stable branches. [commit 317455@main](https://commits.webkit.org/317455@main)\n- **Build** A constant failure in `ipc/fecolormatrix-type-values-mismatch-crash.html` was gardened in test expectations. [commit 317437@main](https://commits.webkit.org/317437@main)\n- **Refactor** Various WPT pixel tolerances were adjusted to match current rendering reality. [commit 317470@main](https://commits.webkit.org/317470@main)\n\n## Reverts \u0026 Reapplies",
  "repo": "webkit",
  "repoDisplay": "WebKit",
  "rollGroups": [],
  "since": "2026-07-18",
  "totals": {
    "commits": 63,
    "features": 63,
    "rolls": 0
  },
  "until": "2026-07-18"
}