{
  "commits": {
    "318384@main": {
      "author": "Patrick Griffis",
      "avatar": "https://www.gravatar.com/avatar/2233c3a857004b126158572af9fe36f7?d=identicon\u0026s=64",
      "cl": "318384@main",
      "clUrl": "https://commits.webkit.org/318384@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320809\n\nReviewed by Carlos Garcia Campos.\n\nThis has been enabled on Apple ports for a while.\nAfter the fixes in https://commits.webkit.org/318384@main\nit just works.\n\n* LayoutTests/platform/glib/TestExpectations:\n* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:\n\nCanonical link: https://commits.webkit.org/318405@main",
      "email": "pgriffis@igalia.com",
      "hash": "f829d55f99a8880786d653e93c8fe3c941365354",
      "subject": "[GLib] Enable Storage API"
    },
    "318389@main": {
      "author": "Justin Michaud",
      "avatar": "https://www.gravatar.com/avatar/36e0433ee725a08f7e1122a6bc584b57?d=identicon\u0026s=64",
      "cl": "318389@main",
      "clUrl": "https://commits.webkit.org/318389@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320416\n\nReviewed by Yusuke Suzuki.\n\nARMv7 runs on CLoop now. We remove all 32-bit jit\nreferences, and some dangling x86 references too.\n\nCanonical link: https://commits.webkit.org/318389@main",
      "email": "jmichaud@igalia.com",
      "hash": "857bd4334690edda28e6f535e2f828dbc5064c4d",
      "subject": "[armv7] Remove ARMv7 JIT support"
    },
    "318390@main": {
      "author": "Jamie Murphy",
      "avatar": "https://www.gravatar.com/avatar/6b42429f4e7db820c9d55e550001567f?d=identicon\u0026s=64",
      "cl": "318390@main",
      "clUrl": "https://commits.webkit.org/318390@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319792\n\nReviewed by Timothy Hatcher.\n\nFollowing up the work performed for WebExtensionAPITest, this ports the Alarms\nAPI code to C++. Also creates a unified C++ build of the derived JavaScript APIs\nfor C++.\n\n* Source/WebKit/CMakeLists.txt:\n* Source/WebKit/DerivedSources-output.xcfilelist:\n* Source/WebKit/DerivedSources.make:\n* Source/WebKit/Shared/Extensions/WebExtensionUtilities.cpp:\n(WebKit::classToClassString):\n(WebKit::valueToTypeString):\n(WebKit::constructExpectedMessage):\n(WebKit::validate):\n(WebKit::formatList):\n(WebKit::validateDictionary):\n* Source/WebKit/Shared/Extensions/WebExtensionUtilities.h:\n(WebKit::toWebAPI):\n* Source/WebKit/Sources.txt:\n* Source/WebKit/SourcesCocoa.txt:\n* Source/WebKit/UIProcess/Extensions/API/WebExtensionContextAPIAlarms.cpp: Renamed from Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIAlarmsCocoa.mm.\n* Source/WebKit/WebKit.xcodeproj/project.pbxproj:\n* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIAlarms.cpp: Renamed from Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIAlarmsCocoa.mm.\n(WebKit::toWebAPI):\n(WebKit::WebExtensionAPIAlarms::createAlarm):\n(WebKit::WebExtensionAPIAlarms::get):\n(WebKit::WebExtensionAPIAlarms::getAll):\n(WebKit::WebExtensionAPIAlarms::clear):\n(WebKit::WebExtensionContextProxy::dispatchAlarmsEvent):\n* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIAlarms.h:\n* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIEvent.h:\n(WebKit::WebExtensionAPIEvent::invokeListenersWithParametersArgument):\n* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIKeys.h: Renamed from Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIKeys.h.\n* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPINamespace.h:\n* Source/WebKit/WebProcess/Extensions/Bindings/JSWebExtensionWrapper.cpp:\n(WebKit::toJSONArray):\n(WebKit::fromJSValue):\n(WebKit::toJSONValue):\n* Source/WebKit/WebProcess/Extensions/Bindings/JSWebExtensionWrapper.h:\n* Source/WebKit/WebProcess/Extensions/Bindings/Scripts/CodeGeneratorExtensions.pm:\n(_hasAutomaticExceptions):\n(_installArgumentTypeExceptions):\n(_installAutomaticExceptions):\n(_javaScriptTypeCondition):\n(_platformType):\n(_platformTypeConstructor):\n(_platformTypeVariableDeclaration):\n* Source/WebKit/WebProcess/Extensions/Bindings/Scripts/GenerateImports.pl:\n* Source/WebKit/WebProcess/Extensions/Bindings/Scripts/IDLAttributes.json:\n* Source/WebKit/WebProcess/Extensions/Cocoa/_WKWebExtensionWebRequestFilter.mm:\n* Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIAlarms.idl:\n* Source/WebKit/Shared/Cocoa/InteractionInformationAtPosition.h:\n\nCanonical link: https://commits.webkit.org/318390@main",
      "email": "jmurphy@igalia.com",
      "hash": "40fe2aa4f091b0ebe6e1a3cd69e38b9a374f92ff",
      "subject": "Port WebExtensionAPIAlarms to C++"
    },
    "318391@main": {
      "author": "Justin Michaud",
      "avatar": "https://www.gravatar.com/avatar/36e0433ee725a08f7e1122a6bc584b57?d=identicon\u0026s=64",
      "cl": "318391@main",
      "clUrl": "https://commits.webkit.org/318391@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320822\n\nUnreviewed build fix.\n\nFix for:\n\nLLIntOffsetsExtractor.cpp:\n    unique_ptr.h:78:19: error: invalid application of 'sizeof' to an incomplete type\n                       'JSC::PropertyInlineCacheClearingWatchpoint'\n    note: in implicit destructor for 'JSC::InlineCacheHandler' first required here\n    note: RefPtr\u003cInlineCacheHandler\u003e::~RefPtr requested from\n          InlineCacheCompiler.h:65 AccessGenerationResult(Kind)\n\nCanonical link: https://commits.webkit.org/318391@main",
      "email": "jmichaud@igalia.com",
      "hash": "64be3bc711542fa36a1fd466ae6381fe618d3258",
      "subject": "Unreviewed build fix"
    },
    "318392@main": {
      "author": "Sosuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/e63b87350fe19bdd9a30c7234eda45af?d=identicon\u0026s=64",
      "cl": "318392@main",
      "clUrl": "https://commits.webkit.org/318392@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320619\n\nReviewed by Yusuke Suzuki.\n\nCharacterClassConstructor::nonLatin1OpSorted() computes v-mode class set\noperations over the non-Latin-1 range by walking 0x100..0x10FFFF in\n2048-codepoint chunks until every LHS/RHS index is consumed. It had an\nearly-exit for intersection with an exhausted RHS, but that compared\nrhsRangeIndex with '\u003e' against rhsRanges32.size(), which can never be true,\nso /[\\p{Any}\u0026\u0026[a-c]]/v scanned all ~540 chunks even though the RHS has no\nnon-Latin-1 elements at all.\n\nReplace the loop condition with an op-aware canProduceMore() predicate:\nunion continues while either side has input left, intersection while both\ndo, and subtraction while the LHS does. This subsumes the dead early-exit and\nthe empty-input bail-out, and additionally stops early when the LHS of an\nintersection or a subtraction is exhausted. The resulting character sets are\nunchanged.\n\nMicrobenchmark (500 constructions of new RegExp(\"(?:x\" + i + \")?\" + pattern, \"v\")):\n\n    pattern                        baseline      patched\n\n    [\\p{Any}\u0026\u0026[a-c]]                1876.6 ms       2.9 ms\n    [[a-c]\u0026\u0026\\p{Any}]                1866.6 ms       2.3 ms\n    [\\p{L}\u0026\u0026\\p{Any}]                2458.2 ms     981.7 ms\n    [\\p{Any}--[a-c]]                4862.2 ms    4932.5 ms\n    [[\\u{100}-\\u{200}]--\\p{Any}]    1774.9 ms       6.8 ms\n    [\\p{L}[0-9]]                     645.5 ms     696.4 ms\n\n* Source/JavaScriptCore/yarr/YarrPattern.cpp:\n(JSC::Yarr::CharacterClassConstructor::nonLatin1OpSorted):\n\nCanonical link: https://commits.webkit.org/318392@main",
      "email": "sosuke@bun.sh",
      "hash": "a458a6c1f0a71390a7641f8fbb5a5485c6900a1e",
      "subject": "[YARR] Stop the chunked v-mode class set operation loop as soon as it can produce nothing more"
    },
    "318393@main": {
      "author": "Justin Michaud",
      "avatar": "https://www.gravatar.com/avatar/36e0433ee725a08f7e1122a6bc584b57?d=identicon\u0026s=64",
      "cl": "318393@main",
      "clUrl": "https://commits.webkit.org/318393@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320803\n\nReviewed by Marcus Plutowski.\n\n32-bit JSValues aren't actually needed for cloop, so let's remove them.\n\nWhile we are at it, we also remove NEEDS_ALIGNED_ACCESS. RV64 shouldn't\nneed this on hardware powerful enough to actually care about.\n\nCanonical link: https://commits.webkit.org/318393@main",
      "email": "jmichaud@igalia.com",
      "hash": "29ceb3c03de31db81c3c7df2079a32c09f245967",
      "subject": "Remove 32-bit JSValues."
    },
    "318395@main": {
      "author": "Sergey Rubanov",
      "avatar": "https://www.gravatar.com/avatar/d04164fa4e06ce85533085f24c766e17?d=identicon\u0026s=64",
      "cl": "318395@main",
      "clUrl": "https://commits.webkit.org/318395@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319894\n\nReviewed by Yusuke Suzuki.\n\nRegression coverage for i32 extended constant expressions used as data/elem\noffsets and global inits (mod 2^32). Production readers already truncate typed\ni32 results (see 314444 / 317633@main for memory32 data offsets).\n\n* JSTests/wasm/stress/const-expr-i32-wrap.js: Added.\n\nCanonical link: https://commits.webkit.org/318395@main",
      "email": "chi187@gmail.com",
      "hash": "238312eeaa6a8afc001b849bb3bbcb422085a81e",
      "subject": "[JSC][Wasm] Add regression test for i32 extended const wrap-around"
    },
    "318396@main": {
      "author": "Sergey Rubanov",
      "avatar": "https://www.gravatar.com/avatar/d04164fa4e06ce85533085f24c766e17?d=identicon\u0026s=64",
      "cl": "318396@main",
      "clUrl": "https://commits.webkit.org/318396@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=166701\n\nReviewed by Yusuke Suzuki.\n\ncustomSections already allocates a new ArrayBuffer via tryCreate(span)\nand memcpy. Cover the bug 166701 requirement that mutating a returned\nbuffer does not affect later customSections results or other returned\nbuffers, and that successive calls do not reuse the same objects.\n\n* JSTests/wasm/js-api/Module.customSection.js:\n\nCanonical link: https://commits.webkit.org/318396@main",
      "email": "chi187@gmail.com",
      "hash": "4517c96eee8667596c8e8db38520221837d3faa2",
      "subject": "[JSC][Wasm] Test Module.customSections returns independent ArrayBuffer copies"
    },
    "318397@main": {
      "author": "Sergey Rubanov",
      "avatar": "https://www.gravatar.com/avatar/d04164fa4e06ce85533085f24c766e17?d=identicon\u0026s=64",
      "cl": "318397@main",
      "clUrl": "https://commits.webkit.org/318397@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=319826\n\nReviewed by Keith Miller.\n\nAccept the optional ExceptionOptions argument on WebAssembly.Exception.\nWhen traceStack is true, capture a stack and store it under a private\nname; expose it via a prototype getter (IDL attribute). Default remains\nno stack. Set the constructor length to 2 to match the IDL.\n\nKeep Error on CommonIdentifiers::stack. Register stackPrivateName as a\nprivate-only special case (like polyProto) so Exception storage does not\nintroduce a second public \"stack\" Identifier.\n\n* Source/JavaScriptCore/wasm/js/WebAssemblyExceptionConstructor.cpp:\n* Source/JavaScriptCore/wasm/js/WebAssemblyExceptionPrototype.cpp:\n* Source/JavaScriptCore/builtins/BuiltinNames.h:\n* Source/JavaScriptCore/builtins/BuiltinNames.cpp:\n* JSTests/wasm/stress/exception-trace-stack.js: Added.\n* LayoutTests/imported/w3c/web-platform-tests/wasm/jsapi/exception/constructor.tentative.any-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/jsapi/exception/constructor.tentative.any.worker-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/jsapi/idlharness.any-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/jsapi/idlharness.any.worker-expected.txt:\n\nCanonical link: https://commits.webkit.org/318397@main",
      "email": "chi187@gmail.com",
      "hash": "bf6512f84f7d9275332b8d119ab2b79a72ee8287",
      "subject": "[JSC][Wasm] Support WebAssembly.Exception options.traceStack"
    },
    "318398@main": {
      "author": "Richard Robinson",
      "avatar": "https://www.gravatar.com/avatar/a0d2f862985ed0fd47887be66f5a3e4f?d=identicon\u0026s=64",
      "cl": "318398@main",
      "clUrl": "https://commits.webkit.org/318398@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320772\nrdar://183774945\n\nReviewed by Aditya Keerthi.\n\nExpose SPI to define the content environment of a page, a more flexible version of the existing `_editable` WKWebView SPI.\n\nAlso refactor WebPage to have a dedicated SPI file.\n\n* Source/WebKit/UIProcess/API/Swift/WebPage+SPI.swift: Added.\n(WebPage.setMenuBuilder(_:)):\n(WebPage.smartListsEnabled):\n(terminateWebContentProcess):\n(editorStateSnapshots):\n(contentEnvironment):\n* Source/WebKit/UIProcess/API/Swift/WebPage.swift:\n(editorStateSnapshotsContinuations):\n(setMenuBuilder(_:)): Deleted.\n(smartListsEnabled): Deleted.\n(terminateWebContentProcess): Deleted.\n(editorStateSnapshots): Deleted.\n* Source/WebKit/WebKit.xcodeproj/project.pbxproj:\n\nCanonical link: https://commits.webkit.org/318398@main",
      "email": "richard_robinson2@apple.com",
      "hash": "88df87f94496dffe265df6d5281c7043cf7becbc",
      "subject": "[SwiftUI WebKit API] Expose _editable on WebPage"
    },
    "318399@main": {
      "author": "Yusuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/3455d9081295e3e740c1ffa901217d9b?d=identicon\u0026s=64",
      "cl": "318399@main",
      "clUrl": "https://commits.webkit.org/318399@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320820\nrdar://183831879\n\nReviewed by Justin Michaud.\n\nStringRecursionChecker behavior is not specified in the spec, and rather\ncausing many random weird behavior. For example, array.join should\nfinish even if we are using a recursion if we have some getter which\nbreaks the cycle in the middle. But it does not happen and showing\nincorrect behavior.\n\nLet's just focus on stack overflow instead of adding StringRecursionChecker\nchecks which is incorrect in terms of the spec. This patch removes\nStringRecursionChecker. Most of functions are fine as it is\nautomatically doing error checks through JS -\u003e C++ calls. But some are\nnot. In those places, we insert stack overflow check and throwing an\nerror when it is happening.\n\nAlso WPT is having a wrong test which relies on non-specified behavior.\nThis patch fixes it, and upstreaming a change[1].\n\n[1]: https://github.com/web-platform-tests/wpt/pull/61678\n\nTest: JSTests/stress/string-conversion-recursion.js\n\n* JSTests/stress/regress-191731.js:\n* JSTests/stress/string-conversion-recursion.js: Added.\n(shouldBe):\n(shouldThrowRangeError):\n(shouldThrowRangeError.get return):\n(array.0.toString):\n(shouldBe.array.join):\n(new.Error):\n* JSTests/wasm/v8/regress/regress-769846.js:\n(catch):\n* LayoutTests/imported/w3c/IndexedDB-private-browsing/keypath-expected.txt:\n* LayoutTests/imported/w3c/IndexedDB-private-browsing/keypath.html:\n* LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath.any-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath.any.js:\n(indexeddb_test):\n* LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath.any.serviceworker-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath.any.sharedworker-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath.any.worker-expected.txt:\n* LayoutTests/js/array-string-recursion-expected.txt:\n* LayoutTests/js/array-tostring-and-join-expected.txt:\n* LayoutTests/js/dom/cyclic-ref-toString-expected.txt:\n* LayoutTests/js/dom/script-tests/cyclic-ref-toString.js:\n* LayoutTests/js/kde/crash-1-expected.txt:\n* LayoutTests/js/script-tests/array-string-recursion.js:\n(catch):\n* LayoutTests/js/script-tests/array-tostring-and-join.js:\n(Object.prototype.toString):\n(plain.toString):\n(obj.__proto__.toString): Deleted.\n* LayoutTests/js/script-tests/toString-recursion.js:\n* LayoutTests/js/toString-recursion-expected.txt:\n* Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:\n* Source/JavaScriptCore/Sources.txt:\n* Source/JavaScriptCore/runtime/ArrayPrototype.cpp:\n(JSC::JSC_DEFINE_HOST_FUNCTION):\n* Source/JavaScriptCore/runtime/ArrayPrototypeInlines.h:\n* Source/JavaScriptCore/runtime/ErrorPrototype.cpp:\n(JSC::JSC_DEFINE_HOST_FUNCTION):\n* Source/JavaScriptCore/runtime/JSArray.cpp:\n(JSC::JSArray::fastToString):\n* Source/JavaScriptCore/runtime/RegExpPrototype.cpp:\n(JSC::JSC_DEFINE_HOST_FUNCTION):\n* Source/JavaScriptCore/runtime/StringRecursionChecker.cpp: Removed.\n* Source/JavaScriptCore/runtime/StringRecursionChecker.h: Removed.\n* Source/JavaScriptCore/runtime/VM.h:\n\nCanonical link: https://commits.webkit.org/318399@main",
      "email": "ysuzuki@apple.com",
      "hash": "f2f2c2ddf6371b6238958865ea46cff6c97a1661",
      "subject": "[JSC] Remove StringRecursionChecker"
    },
    "318400@main": {
      "author": "Abrar Rahman Protyasha",
      "avatar": "https://www.gravatar.com/avatar/fce5b3c4e9f3c59a4873e08c9f03c3b1?d=identicon\u0026s=64",
      "cl": "318400@main",
      "clUrl": "https://commits.webkit.org/318400@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320732\nrdar://183717723\n\nReviewed by Pascoe.\n\nFailing results suggest that `barCenter` was computed before the HUD bar\nsubview was not fully laid out, which produced a bad hit test. This\npatch attempts to make the test more robust by waiting for not only \u003e=2\nHUDs, but also for non-empty bar frames.\n\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/UnifiedPDFTests.mm:\n(TestWebKitAPI::UNIFIED_PDF_TEST):\n\nCanonical link: https://commits.webkit.org/318400@main",
      "email": "a_protyasha@apple.com",
      "hash": "917b750511ac8bbc09d1db058066e00d049b9c58",
      "subject": "NEW TEST(317936@main): TestWebKitAPI.UnifiedPDF.PDFHUDMultiplePluginsDoNotInterceptHitTesting is a flaky failure on macOS Sequoia bots"
    },
    "318401@main": {
      "author": "Fujii Hironori",
      "avatar": "https://www.gravatar.com/avatar/ef99cb23f5e5d27977968ca097d9a85f?d=identicon\u0026s=64",
      "cl": "318401@main",
      "clUrl": "https://commits.webkit.org/318401@main",
      "description": "* LayoutTests/platform/glib/TestExpectations:\n* LayoutTests/platform/gtk/TestExpectations:\n* LayoutTests/platform/wpe/TestExpectations:\n\nCanonical link: https://commits.webkit.org/318401@main",
      "email": "fujii@igalia.com",
      "hash": "6b2225c0ddca62cf23ae30e3998c2806777df875",
      "subject": "[GLib] Unreviewed layout test gardening"
    },
    "318402@main": {
      "author": "Alejandro G. Castro",
      "avatar": "https://www.gravatar.com/avatar/c8c6e17acbdf0549b05d6f7fc2c1c4dc?d=identicon\u0026s=64",
      "cl": "318402@main",
      "clUrl": "https://commits.webkit.org/318402@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320745\n\nReviewed by Carlos Garcia Campos and Nikolas Zimmermann.\n\nm_contentsOpaque only describes what the layer paints into its own tiles, so a\nlayer whose contents come from an opaque buffer like a WebGL canvas created with\nalpha:false, an opaque video frame or an opaque image, are composited with\nsource-over and read the destination for every pixel adding read bandwidth usage.\nTextureMapper gets the same decision off the buffer flags.\n\nConsider those flags too, restricted to layers with no backing store of their\nown, since the flag says nothing about the opacity of the layer's own tiles.\n\n* Source/WebCore/platform/graphics/skia/SkiaCompositingLayer.cpp:\n(WebCore::SkiaCompositingLayer::paintContents):\n\nCanonical link: https://commits.webkit.org/318402@main",
      "email": "alex@igalia.com",
      "hash": "f878301fffa7b5ec870e60c44cd59d893f92408f",
      "subject": "[WPE][GTK] Skia compositor blends opaque contents buffers, wasting memory bandwidth"
    },
    "318403@main": {
      "author": "Devin Rousso",
      "avatar": "https://www.gravatar.com/avatar/c9e757d973342c773f107a94b70cb9cd?d=identicon\u0026s=64",
      "cl": "318403@main",
      "clUrl": "https://commits.webkit.org/318403@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320700\n\nReviewed by Mike Wyrzykowski.\n\n* Source/JavaScriptCore/inspector/protocol/Canvas.json:\n* Source/WebCore/inspector/agents/InspectorCanvasAgent.h:\n(WebCore::InspectorCanvasAgent::setShaderProgramDisabled):\n(WebCore::InspectorCanvasAgent::isWebGPURenderPipelineDisabled): Added.\n* Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp:\n(WebCore::InspectorCanvasAgent::setShaderProgramDisabled):\n(WebCore::InspectorCanvasAgent::isWebGPURenderPipelineDisabled): Added.\n* Source/WebCore/inspector/InspectorShaderProgram.h:\n* Source/WebCore/inspector/InspectorShaderProgram.cpp:\n(WebCore::InspectorShaderProgram::setDisabled):\n* Source/WebCore/inspector/InspectorInstrumentation.h:\n(WebCore::InspectorInstrumentation::isWebGPURenderPipelineDisabled): Added.\n(WebCore::InspectorInstrumentation::isWebGPURenderPipelineDisabledImpl): Added.\n* Source/WebCore/inspector/InspectorInstrumentation.cpp:\n(WebCore::InspectorInstrumentation::isWebGPURenderPipelineDisabledImpl): Added.\nExpose disabling for `GPURenderPipeline` and throw when attempting the same for `GPUComputePipeline`.\n\n* Source/WebCore/Modules/WebGPU/GPURenderPassEncoder.h:\n(WebCore::GPURenderPassEncoder):\n* Source/WebCore/Modules/WebGPU/GPURenderPassEncoder.cpp:\n(WebCore::GPURenderPassEncoder::setPipeline):\n(WebCore::GPURenderPassEncoder::draw):\n(WebCore::GPURenderPassEncoder::drawIndexed):\n(WebCore::GPURenderPassEncoder::drawIndirect):\n(WebCore::GPURenderPassEncoder::drawIndexedIndirect):\n(WebCore::GPURenderPassEncoder::executeBundles):\n(WebCore::GPURenderPassEncoder::end):\n* Source/WebCore/Modules/WebGPU/GPURenderBundleEncoder.h:\n(WebCore::GPURenderBundleEncoder):\n* Source/WebCore/Modules/WebGPU/GPURenderBundleEncoder.cpp:\n(WebCore::GPURenderBundleEncoder::setPipeline):\n(WebCore::GPURenderBundleEncoder::draw):\n(WebCore::GPURenderBundleEncoder::drawIndexed):\n(WebCore::GPURenderBundleEncoder::drawIndirect):\n(WebCore::GPURenderBundleEncoder::drawIndexedIndirect):\n(WebCore::GPURenderBundleEncoder::finish):\nTrack the current `GPURenderPipeline` and bail if inspector says it's disabled.\n\n* Source/WebInspectorUI/UserInterface/Models/ShaderProgram.js:\n(WI.ShaderProgram.prototype.get supportsDisabling): Added.\n(WI.ShaderProgram.prototype.set disabled):\n* Source/WebInspectorUI/UserInterface/Views/ShaderProgramTreeElement.js:\n(WI.ShaderProgramTreeElement.prototype.constructor):\n(WI.ShaderProgramTreeElement.prototype.onattach):\n(WI.ShaderProgramTreeElement.prototype.ondetach):\n(WI.ShaderProgramTreeElement.prototype.populateContextMenu):\nAlso allow disabling for ` WI.Canvas.ContextType.WebGPU` (but not `WI.ShaderProgram.ProgramType.Compute`).\n\n* LayoutTests/inspector/canvas/resources/shaderProgram-utilities-webgpu.js:\n* LayoutTests/inspector/canvas/setShaderProgramDisabled-webgpu.html: Added.\n* LayoutTests/inspector/canvas/setShaderProgramDisabled-webgpu-expected.txt: Added.\n* LayoutTests/inspector/canvas/shaderProgram-add-remove-webgpu.html:\n* LayoutTests/inspector/canvas/shaderProgram-add-remove-webgpu-expected.txt:\n* LayoutTests/platform/glib/TestExpectations:\n* LayoutTests/platform/win/TestExpectations:\n\nCanonical link: https://commits.webkit.org/318403@main",
      "email": "hi@devinrousso.com",
      "hash": "7be5445e4a22c61e7c197e81bbcb15d965650f7c",
      "subject": "Web Inspector: Canvas: support disabling WebGPU render pipelines"
    },
    "318404@main": {
      "author": "Patrick Griffis",
      "avatar": "https://www.gravatar.com/avatar/2233c3a857004b126158572af9fe36f7?d=identicon\u0026s=64",
      "cl": "318404@main",
      "clUrl": "https://commits.webkit.org/318404@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320784\n\nReviewed by Adrian Perez de Castro and Carlos Garcia Campos.\n\nThis was using the wrong flags to match types. Update docs\nand add tests for more types.\n\nTest: Tools/TestWebKitAPI/Tests/WebKit/WKWebView/glib/TestWebsiteData.cpp\n\n* Source/WebKit/UIProcess/API/glib/WebKitWebsiteData.cpp:\n(webkit_website_data_get_size):\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/glib/TestWebsiteData.cpp:\n(testWebsiteDataStorage):\n(testWebsiteDataDatabases):\n(testWebsiteDataDOMCache):\n(testWebsiteDataSizes):\n(beforeAll):\n\nCanonical link: https://commits.webkit.org/318404@main",
      "email": "pgriffis@igalia.com",
      "hash": "31a2484dd863a7a449323c3c222b47e028c2acf1",
      "subject": "[GLib] Fix looking up the size of various website data types"
    },
    "318406@main": {
      "author": "Aleksei Marchenko",
      "avatar": "https://www.gravatar.com/avatar/9a469093291c12531caccfcaa6ab73b1?d=identicon\u0026s=64",
      "cl": "318406@main",
      "clUrl": "https://commits.webkit.org/318406@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320724\nrdar://182292429\n\nReviewed by Etienne Segonzac.\n\nLet a spatial portal host more than one \u003cmodel\u003e child. SpatialPortalController\ntracks its children in a map keyed by NodeIdentifier, loading each one and\nrouting callbacks back to the right child. The Model process keeps one entity\nper node, and a new UnloadModel message removes one without tearing down the\nplayer the other models share.\n\nThe container transform fits the union of every hosted model's bounding box.\nThe first model to load still owns stage mode, animation reporting and the\nenvironment map, so the single-model case is unchanged.\n\nTests: spatial-css/spatial-portal-multi-model-error.html\n       spatial-css/spatial-portal-multi-model-insert-remove.html\n       spatial-css/spatial-portal-multi-model-move.html\n       spatial-css/spatial-portal-multi-model-source-change.html\n       spatial-css/spatial-portal-multi-model.html\n\n* LayoutTests/spatial-css/resources/spatial-portal-utils.js: Added.\n(const.appendModel):\n* LayoutTests/spatial-css/spatial-portal-multi-model-error-expected.txt: Added.\n* LayoutTests/spatial-css/spatial-portal-multi-model-error.html: Added.\n* LayoutTests/spatial-css/spatial-portal-multi-model-expected.txt: Added.\n* LayoutTests/spatial-css/spatial-portal-multi-model-insert-remove-expected.txt: Added.\n* LayoutTests/spatial-css/spatial-portal-multi-model-insert-remove.html: Added.\n* LayoutTests/spatial-css/spatial-portal-multi-model-move-expected.txt: Added.\n* LayoutTests/spatial-css/spatial-portal-multi-model-move.html: Added.\n* LayoutTests/spatial-css/spatial-portal-multi-model-source-change-expected.txt: Added.\n* LayoutTests/spatial-css/spatial-portal-multi-model-source-change.html: Added.\n* LayoutTests/spatial-css/spatial-portal-multi-model.html: Added.\n* Source/WebCore/Modules/model-element/HTMLModelElement.cpp:\n(WebCore::HTMLModelElement::setSourceURL):\n* Source/WebCore/Modules/model-element/SpatialPortalController.cpp:\n(WebCore::SpatialPortalController::~SpatialPortalController):\n(WebCore::SpatialPortalController::hostedModelElement const):\n(WebCore::SpatialPortalController::unregisterChildModel):\n(WebCore::SpatialPortalController::registerChildModel):\n(WebCore::SpatialPortalController::childModelDidChange):\n(WebCore::SpatialPortalController::loadChildModelsIfReady):\n(WebCore::SpatialPortalController::loadChildModelIfReady):\n(WebCore::SpatialPortalController::viewportIntersectionChanged):\n(WebCore::SpatialPortalController::deleteModelPlayer):\n(WebCore::SpatialPortalController::unloadChildModel):\n(WebCore::SpatialPortalController::configureGraphicsLayer):\n(WebCore::SpatialPortalController::modelDidFinishLoading):\n(WebCore::SpatialPortalController::modelDidFailLoading):\n(WebCore::SpatialPortalController::modelDidUnload):\n(WebCore::SpatialPortalController::unloadModel): Deleted.\n* Source/WebCore/Modules/model-element/SpatialPortalController.h:\n(WebCore::SpatialPortalController::numberOfHostedModels const):\n* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.h:\n* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.messages.in:\n* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.mm:\n(WebKit::ModelProcessModelPlayerProxy::~ModelProcessModelPlayerProxy):\n(WebKit::ModelProcessModelPlayerProxy::loadModel):\n(WebKit::ModelProcessModelPlayerProxy::reloadModel):\n(WebKit::ModelProcessModelPlayerProxy::unloadModelTimerFired):\n(WebKit::ModelProcessModelPlayerProxy::computeTransform):\n(WebKit::ModelProcessModelPlayerProxy::updateTransform):\n(WebKit::ModelProcessModelPlayerProxy::updateOpacity):\n(WebKit::ModelProcessModelPlayerProxy::didFinishLoading):\n(WebKit::ModelProcessModelPlayerProxy::didFailLoading):\n(WebKit::ModelProcessModelPlayerProxy::load):\n(WebKit::ModelProcessModelPlayerProxy::unloadModel):\n(WebKit::ModelProcessModelPlayerProxy::clearReportingModelIfNeeded):\n(WebKit::ModelProcessModelPlayerProxy::reportingModelScale const):\n(WebKit::ModelProcessModelPlayerProxy::findHostedEntityForLoader):\n(WebKit::ModelProcessModelPlayerProxy::cancelAllLoaders):\n(WebKit::ModelProcessModelPlayerProxy::setUpLoadedEntity):\n(WebKit::ModelProcessModelPlayerProxy::sizeDidChange):\n(WebKit::ModelProcessModelPlayerProxy::updateForCurrentStageMode):\n(WebKit::ModelProcessModelPlayerProxy::updateTransformSRT):\n(WebKit::ModelProcessModelPlayerProxy::teardownEntity):\n(WebKit::ModelProcessModelPlayerProxy::ensureImmersivePresentation):\n(WebKit::ModelProcessModelPlayerProxy::exitImmersivePresentation):\n(WebKit::ModelProcessModelPlayerProxy::startAnimating): Deleted.\n* Source/WebKit/WebKitSwift/RealityKit/WKRKEntity.h:\n* Source/WebKit/WebKitSwift/RealityKit/WKRKEntity.swift:\n(WKRKEntity.removeFromParentEntity):\n* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.cpp:\n(WebKit::ModelProcessModelPlayer::unload):\n* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.h:\n* Tools/TestWebKitAPI/Resources/spatial-portal-two-models-page.html:\n\nCanonical link: https://commits.webkit.org/318406@main",
      "email": "aleksei@apple.com",
      "hash": "0a2f1dc58ef4988d8790951481df1854c5c3b2fc",
      "subject": "Implement child model loading IPC for spatial portals"
    },
    "318407@main": {
      "author": "Devin Rousso",
      "avatar": "https://www.gravatar.com/avatar/c9e757d973342c773f107a94b70cb9cd?d=identicon\u0026s=64",
      "cl": "318407@main",
      "clUrl": "https://commits.webkit.org/318407@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=201651\n\nReviewed by Mike Wyrzykowski.\n\n* Source/WebCore/Modules/WebGPU/GPUDevice.idl:\n* Source/WebCore/Modules/WebGPU/GPUDevice.h:\n(WebCore::GPUDevice::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUDevice::setHasActiveInspectorCanvasCallTracer): Added.\n* Source/WebCore/Modules/WebGPU/GPUDevice.cpp:\n(WebCore::GPUDevice::GPUDevice):\n(WebCore::GPUDevice::createSampler):\n(WebCore::GPUDevice::importExternalTexture):\n(WebCore::GPUDevice::createBindGroupLayout):\n(WebCore::GPUDevice::createAutoPipelineLayout):\n(WebCore::GPUDevice::createPipelineLayout):\n(WebCore::GPUDevice::createBindGroup):\n(WebCore::GPUDevice::createShaderModule):\n(WebCore::GPUDevice::createCommandEncoder):\n(WebCore::GPUDevice::createRenderBundleEncoder):\n(WebCore::GPUDevice::createQuerySet):\n* Source/WebCore/Modules/WebGPU/GPUQueue.idl:\n* Source/WebCore/Modules/WebGPU/GPUQueue.h:\n(WebCore::GPUQueue::create):\n* Source/WebCore/Modules/WebGPU/GPUQueue.cpp:\n(WebCore::GPUQueue::GPUQueue):\n(WebCore::GPUQueue::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUQueue::device const): Added.\n(WebCore::GPUQueue::submit):\n* Source/WebCore/Modules/WebGPU/GPUBuffer.idl:\n* Source/WebCore/Modules/WebGPU/GPUBuffer.h:\n* Source/WebCore/Modules/WebGPU/GPUBuffer.cpp:\n(WebCore::GPUBuffer::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUBuffer::device const): Added.\n* Source/WebCore/Modules/WebGPU/GPUTexture.idl:\n* Source/WebCore/Modules/WebGPU/GPUTexture.h:\n(WebCore::GPUTexture::create):\n* Source/WebCore/Modules/WebGPU/GPUTexture.cpp:\n(WebCore::GPUTexture::GPUTexture):\n(WebCore::GPUTexture::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUTexture::device const): Added.\n(WebCore::GPUTexture::createView):\n* Source/WebCore/Modules/WebGPU/GPUTextureView.idl:\n* Source/WebCore/Modules/WebGPU/GPUTextureView.h:\n(WebCore::GPUTextureView::create):\n* Source/WebCore/Modules/WebGPU/GPUTextureView.cpp:\n(WebCore::GPUTextureView::GPUTextureView): Added.\n(WebCore::GPUTextureView::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUTextureView::device const): Added.\n* Source/WebCore/Modules/WebGPU/GPUExternalTexture.idl:\n* Source/WebCore/Modules/WebGPU/GPUExternalTexture.h:\n(WebCore::GPUExternalTexture::create):\n* Source/WebCore/Modules/WebGPU/GPUExternalTexture.cpp:\n(WebCore::GPUExternalTexture::GPUExternalTexture): Added.\n(WebCore::GPUExternalTexture::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUExternalTexture::device const): Added.\n* Source/WebCore/Modules/WebGPU/GPUSampler.idl:\n* Source/WebCore/Modules/WebGPU/GPUSampler.h:\n(WebCore::GPUSampler::create):\n* Source/WebCore/Modules/WebGPU/GPUSampler.cpp:\n(WebCore::GPUSampler::GPUSampler): Added.\n(WebCore::GPUSampler::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUSampler::device const): Added.\n* Source/WebCore/Modules/WebGPU/GPUBindGroupLayout.idl:\n* Source/WebCore/Modules/WebGPU/GPUBindGroupLayout.h:\n(WebCore::GPUBindGroupLayout::create):\n* Source/WebCore/Modules/WebGPU/GPUBindGroupLayout.cpp:\n(WebCore::GPUBindGroupLayout::GPUBindGroupLayout): Added.\n(WebCore::GPUBindGroupLayout::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUBindGroupLayout::device const): Added.\n* Source/WebCore/Modules/WebGPU/GPUBindGroup.idl:\n* Source/WebCore/Modules/WebGPU/GPUBindGroup.h:\n(WebCore::GPUBindGroup::create):\n* Source/WebCore/Modules/WebGPU/GPUBindGroup.cpp:\n(WebCore::GPUBindGroup::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUBindGroup::device const): Added.\n(WebCore::GPUBindGroup::GPUBindGroup):\n* Source/WebCore/Modules/WebGPU/GPUPipelineLayout.idl:\n* Source/WebCore/Modules/WebGPU/GPUPipelineLayout.h:\n(WebCore::GPUPipelineLayout::create):\n* Source/WebCore/Modules/WebGPU/GPUPipelineLayout.cpp:\n(WebCore::GPUPipelineLayout::GPUPipelineLayout): Added.\n(WebCore::GPUPipelineLayout::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUPipelineLayout::device const): Added.\n* Source/WebCore/Modules/WebGPU/GPUShaderModule.idl:\n* Source/WebCore/Modules/WebGPU/GPUShaderModule.h:\n(WebCore::GPUShaderModule::create):\n* Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp:\n(WebCore::GPUShaderModule::GPUShaderModule): Added.\n(WebCore::GPUShaderModule::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUShaderModule::device const): Added.\n* Source/WebCore/Modules/WebGPU/GPUComputePipeline.idl:\n* Source/WebCore/Modules/WebGPU/GPUComputePipeline.h:\n* Source/WebCore/Modules/WebGPU/GPUComputePipeline.cpp:\n(WebCore::GPUComputePipeline::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUComputePipeline::getBindGroupLayout):\n* Source/WebCore/Modules/WebGPU/GPURenderPipeline.idl:\n* Source/WebCore/Modules/WebGPU/GPURenderPipeline.h:\n* Source/WebCore/Modules/WebGPU/GPURenderPipeline.cpp:\n(WebCore::GPURenderPipeline::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPURenderPipeline::getBindGroupLayout):\n* Source/WebCore/Modules/WebGPU/GPUCommandEncoder.idl:\n* Source/WebCore/Modules/WebGPU/GPUCommandEncoder.h:\n(WebCore::GPUCommandEncoder::create):\n* Source/WebCore/Modules/WebGPU/GPUCommandEncoder.cpp:\n(WebCore::GPUCommandEncoder::GPUCommandEncoder):\n(WebCore::GPUCommandEncoder::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUCommandEncoder::device const): Added.\n(WebCore::GPUCommandEncoder::beginRenderPass):\n(WebCore::GPUCommandEncoder::beginComputePass):\n(WebCore::GPUCommandEncoder::finish):\n* Source/WebCore/Modules/WebGPU/GPUComputePassEncoder.idl:\n* Source/WebCore/Modules/WebGPU/GPUComputePassEncoder.h:\n(WebCore::GPUComputePassEncoder::create):\n* Source/WebCore/Modules/WebGPU/GPUComputePassEncoder.cpp:\n(WebCore::GPUComputePassEncoder::GPUComputePassEncoder):\n(WebCore::GPUComputePassEncoder::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUComputePassEncoder::device const): Added.\n(WebCore::GPUComputePassEncoder::end):\n* Source/WebCore/Modules/WebGPU/GPURenderPassEncoder.idl:\n* Source/WebCore/Modules/WebGPU/GPURenderPassEncoder.h:\n(WebCore::GPURenderPassEncoder::create):\n* Source/WebCore/Modules/WebGPU/GPURenderPassEncoder.cpp:\n(WebCore::GPURenderPassEncoder::GPURenderPassEncoder):\n(WebCore::GPURenderPassEncoder::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPURenderPassEncoder::device const): Added.\n(WebCore::GPURenderPassEncoder::end):\n* Source/WebCore/Modules/WebGPU/GPURenderBundleEncoder.idl:\n* Source/WebCore/Modules/WebGPU/GPURenderBundleEncoder.h:\n(WebCore::GPURenderBundleEncoder::create):\n* Source/WebCore/Modules/WebGPU/GPURenderBundleEncoder.cpp:\n(WebCore::GPURenderBundleEncoder::GPURenderBundleEncoder): Added.\n(WebCore::GPURenderBundleEncoder::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPURenderBundleEncoder::device const): Added.\n(WebCore::GPURenderBundleEncoder::finish):\n* Source/WebCore/Modules/WebGPU/GPURenderBundle.idl:\n* Source/WebCore/Modules/WebGPU/GPURenderBundle.h:\n(WebCore::GPURenderBundle::create):\n* Source/WebCore/Modules/WebGPU/GPURenderBundle.cpp:\n(WebCore::GPURenderBundle::GPURenderBundle): Added.\n(WebCore::GPURenderBundle::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPURenderBundle::device const): Added.\n* Source/WebCore/Modules/WebGPU/GPUCommandBuffer.idl:\n* Source/WebCore/Modules/WebGPU/GPUCommandBuffer.h:\n* Source/WebCore/Modules/WebGPU/GPUCommandBuffer.cpp:\n(WebCore::GPUCommandBuffer::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUCommandBuffer::device const): Added.\n* Source/WebCore/Modules/WebGPU/GPUQuerySet.idl:\n* Source/WebCore/Modules/WebGPU/GPUQuerySet.h:\n(WebCore::GPUQuerySet::create):\n* Source/WebCore/Modules/WebGPU/GPUQuerySet.cpp:\n(WebCore::GPUQuerySet::GPUQuerySet):\n(WebCore::GPUQuerySet::hasActiveInspectorCanvasCallTracer const): Added.\n(WebCore::GPUQuerySet::device const): Added.\n* Source/WebCore/Modules/WebGPU/GPUPresentationContext.h:\n* Source/WebCore/inspector/RecordingSwizzleType.h:\n* Source/WebCore/inspector/InspectorCanvasCallTracer.h:\n(WebCore::InspectorCanvasCallTracer::processArgument):\n(WebCore::InspectorCanvasCallTracer::recordAction):\n(WebCore::InspectorCanvasCallTracer::receiverSwizzleType): Added.\n(WebCore::InspectorCanvasCallTracer::receiverSwizzleTypeImpl): Added.\n* Source/WebCore/inspector/InspectorCanvasCallTracer.cpp:\n(WebCore::enabledCanvasAgent):\n(WebCore::InspectorCanvasCallTracer::enabledInspectorCanvas):\n(WebCore::InspectorCanvasCallTracer::recordAction):\nAdd `CallTrace` to every WebGPU IDL (including those without any methods today so future API additions automatically get support).\nEach object now has a link to the owner `GPUDevice` so the `CallTracer` can check whether recording is active.\n\n* Source/JavaScriptCore/inspector/protocol/Recording.json:\n* Source/JavaScriptCore/inspector/scripts/codegen/generator.py:\n* Source/WebCore/inspector/InspectorCanvas.h:\n* Source/WebCore/inspector/InspectorCanvas.cpp:\n(WebCore::InspectorCanvas::hasActiveInspectorCanvasCallTracer): Added.\n(WebCore::InspectorCanvas::setHasActiveInspectorCanvasCallTracer): Added.\n(WebCore::InspectorCanvas::resetRecordingData):\n(WebCore::shouldSnapshotWebGPUAction): Added.\n(WebCore::InspectorCanvas::recordAction):\n(WebCore::buildActionReceiver): Added.\n(WebCore::InspectorCanvas::releaseObjectForRecording):\n(WebCore::InspectorCanvas::getContentAsDataURL): Added WebGPU support for device-backed canvases.\n(WebCore::InspectorCanvas::appendActionSnapshotIfNeeded):\n(WebCore::InspectorCanvas::identifierForRecordingObject): Added.\n(WebCore::InspectorCanvas::buildInitialState):\nStore explicit receivers as `[identifier, swizzleType]` before the optional snapshot field.\n\n* Source/WebCore/inspector/agents/InspectorCanvasAgent.h:\n* Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp:\n(WebCore::InspectorCanvasAgent::startRecording):\n(WebCore::InspectorCanvasAgent::stopRecording):\n(WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):\n(WebCore::InspectorCanvasAgent::didCreateWebGPUDevice):\n(WebCore::InspectorCanvasAgent::recordAction):\n(WebCore::InspectorCanvasAgent::scheduleRecordingCanvasFrame): Added.\n(WebCore::InspectorCanvasAgent::consoleStartRecordingCanvas):\n(WebCore::InspectorCanvasAgent::consoleStopRecordingCanvas):\n(WebCore::InspectorCanvasAgent::reset):\n(WebCore::InspectorCanvasAgent::unbindCanvas):\nSupport explicit and automatic `GPUDevice` recordings.\n\n* Source/WebCore/page/FrameConsoleClient.cpp:\n(WebCore::FrameConsoleClient::record):\n(WebCore::FrameConsoleClient::recordEnd):\n* Source/WebCore/workers/WorkerConsoleClient.cpp:\n(WebCore::WorkerConsoleClient::record):\n(WebCore::WorkerConsoleClient::recordEnd):\n* Source/WebCore/inspector/InspectorInstrumentation.h:\n(WebCore::InspectorInstrumentation::consoleStartRecordingCanvas):\n(WebCore::InspectorInstrumentation::consoleStopRecordingCanvas):\n* Source/WebCore/inspector/InspectorInstrumentation.cpp:\n(WebCore::InspectorInstrumentation::consoleStartRecordingCanvasImpl):\n(WebCore::InspectorInstrumentation::consoleStopRecordingCanvasImpl):\nSupport `console.record()` and `console.recordEnd()` for `GPUDevice`.\n\n* Source/WebInspectorUI/UserInterface/Models/Canvas.js:\n(WI.Canvas.prototype.get supportsRecording): Deleted.\n(WI.Canvas.prototype.recordingProgress):\n* Source/WebInspectorUI/UserInterface/Views/CanvasContentView.js:\n(WI.CanvasContentView.prototype.initialLayout):\n* Source/WebInspectorUI/UserInterface/Views/CanvasSidebarPanel.js:\n(WI.CanvasSidebarPanel.prototype._canvasChanged):\n(WI.CanvasSidebarPanel.prototype._updateRecordNavigationItem):\nPass the backend recording version when parsing a live recording.\n\n* Source/WebInspectorUI/UserInterface/Models/Recording.js:\n(WI.Recording.fromPayload):\n(WI.Recording.displayNameForRecordingType):\n(WI.Recording.displayNameForReceiver): Added.\n(WI.Recording.prototype.get isCanvas):\n(WI.Recording.prototype.get isCanvasWebGPU): Added.\n(WI.Recording.prototype.createContext):\n(WI.Recording.prototype.toJSON):\n(WI.Recording.prototype.toHTML):\n(WI.Recording.prototype._process):\n* Source/WebInspectorUI/UserInterface/Models/RecordingAction.js:\n(WI.RecordingAction):\n(WI.RecordingAction.fromPayload):\n(WI.RecordingAction.isFunctionForType):\n(WI.RecordingAction.bitfieldNamesForParameter):\n(WI.RecordingAction.constantNameForParameter):\n(WI.RecordingAction._prototypeForType):\n(WI.RecordingAction.prototype.get receiver): Added.\n(WI.RecordingAction.prototype.get contextReplacer): Deleted.\n(WI.RecordingAction.prototype.process):\n(WI.RecordingAction.prototype.swizzle):\n(WI.RecordingAction.prototype.get isCanvasReceiver): Added.\n(WI.RecordingAction.prototype.apply):\n(WI.RecordingAction.prototype.toJSON):\n* Source/WebInspectorUI/UserInterface/Models/RecordingFrame.js:\n(WI.RecordingFrame.fromPayload):\n(WI.RecordingFrame.prototype.toJSON):\nParse snapshot-based WebGPU recordings without attempting to replay WebGPU commands.\nDisplay receiver identifier and type pairs as lower-camel-cased names.\nDrive-by: Include offscreen WebGL(2) recordings when resolving constants, bitfields, and snapshot-based processing.\n\n* Source/WebInspectorUI/UserInterface/Views/RecordingActionTreeElement.js:\n(WI.RecordingActionTreeElement._generateDOM):\n(WI.RecordingActionTreeElement._classNameForAction):\n(WI.RecordingActionTreeElement.prototype.populateContextMenu):\n* Source/WebInspectorUI/UserInterface/Views/RecordingActionTreeElement.css:\n(body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus-within .item.recording-action.selected:not(.invalid, .initial-state, .name-unknown) \u003e .icon): Renamed from `body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus-within .item.recording-action.selected:not(.invalid, .initial-state, .has-context-replacer, .name-unknown) \u003e .icon`.\n(.item.recording-action:not(.invalid, .initial-state, .name-unknown) \u003e .icon): Renamed from `.item.recording-action:not(.invalid, .initial-state, .has-context-replacer, .name-unknown) \u003e .icon`.\nDisplay only explicit receivers and copy actions against the correct `GPUDevice`, `CanvasRenderingContext`, or `\u003ccanvas\u003e`.\n\n* Source/WebInspectorUI/UserInterface/Views/RecordingContentView.js:\n(WI.RecordingContentView):\n(WI.RecordingContentView.prototype._generateContentFromSnapshot):\n(WI.RecordingContentView.prototype._updateImageGrid):\nShow WebGPU content from snapshots and clear stale preview content when a recording has no initial snapshot.\n\n* Source/WebInspectorUI/UserInterface/Views/TreeOutline.js:\n(WI.TreeOutline.prototype.registerScrollVirtualizer):\nDrive-by: disable native scroll anchoring when virtualized so recycled recording rows do not cause scrolling to continue on its own.\n\n* Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js:\n\n* LayoutTests/inspector/canvas/recording.html:\n* LayoutTests/inspector/canvas/recording-expected.txt:\n* LayoutTests/inspector/canvas/recording-webgpu.html: Added.\n* LayoutTests/inspector/canvas/recording-webgpu-expected.txt: Added.\n* LayoutTests/platform/glib/TestExpectations:\n* LayoutTests/platform/win/TestExpectations:\n\nCanonical link: https://commits.webkit.org/318407@main",
      "email": "hi@devinrousso.com",
      "hash": "3722912ff800feef138f91f0f4fe26f13d68742e",
      "subject": "Web Inspector: Canvas: support recording WebGPU devices"
    },
    "318408@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "318408@main",
      "clUrl": "https://commits.webkit.org/318408@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320793\nrdar://183802316\n\nReviewed by Simon Fraser.\n\nUpstream commit: https://github.com/web-platform-tests/wpt/commit/a1b7d24dec7163c59f3ab5554a40b68ba5f7ccbe\n\n* LayoutTests/imported/w3c/web-platform-tests/css/CSS2/abspos/static-inside-float-inside-inline-expected.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/CSS2/abspos/static-inside-float-inside-inline.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/CSS2/abspos/w3c-import.log:\n\nCanonical link: https://commits.webkit.org/318408@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "68cd1fc888923fababa46698a434b86c62b2b19d",
      "subject": "Resync `css/CSS2/abspos` from WPT Upstream"
    },
    "318409@main": {
      "author": "Devin Rousso",
      "avatar": "https://www.gravatar.com/avatar/c9e757d973342c773f107a94b70cb9cd?d=identicon\u0026s=64",
      "cl": "318409@main",
      "clUrl": "https://commits.webkit.org/318409@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320841\n\nReviewed by Mike Wyrzykowski.\n\n* Source/JavaScriptCore/inspector/protocol/Canvas.json:\n* Source/WebCore/inspector/InspectorCanvas.cpp:\n(WebCore::InspectorCanvas::buildObjectForCanvas):\n* Source/WebCore/inspector/InspectorShaderProgram.cpp:\n(WebCore::InspectorShaderProgram::buildObjectForShaderProgram):\nExpose the `label` of a `GPUDevice`, `GPUComputePipeline`, and `GPURenderPipeline` as optional parameters of `Canvas.Canvas` and `Canvas.ShaderProgram`.\n\n* Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js:\n(WI.CanvasManager.prototype.programCreated):\n* Source/WebInspectorUI/UserInterface/Models/Canvas.js:\n(WI.Canvas):\n(WI.Canvas.fromPayload):\n(WI.Canvas.prototype.get displayName):\n* Source/WebInspectorUI/UserInterface/Models/ShaderProgram.js:\n(WI.ShaderProgram):\n(WI.ShaderProgram.prototype.get displayName):\nIf a `label` is set then use that instead of any generated name.\n\n* LayoutTests/inspector/canvas/resources/shaderProgram-utilities-webgpu.js:\n(initializeWebGPU):\n(createComputePipeline):\n(createRenderPipeline):\n* LayoutTests/inspector/canvas/resources/webgpu-worker.js:\n(initialize):\n* LayoutTests/inspector/canvas/create-context-webgpu.html:\n* LayoutTests/inspector/canvas/create-context-webgpu-expected.txt:\n* LayoutTests/inspector/canvas/shaderProgram-add-remove-webgpu.html:\n* LayoutTests/inspector/canvas/shaderProgram-add-remove-webgpu-expected.txt:\n* LayoutTests/inspector/canvas/worker-webgpu.html:\n* LayoutTests/inspector/canvas/worker-webgpu-expected.txt:\n\nCanonical link: https://commits.webkit.org/318409@main",
      "email": "hi@devinrousso.com",
      "hash": "86575c4e15164c6b9b9e76765cb9771ea2fda91b",
      "subject": "Web Inspector: Canvas: show WebGPU `label` where able"
    }
  },
  "date": "2026-08-02",
  "days": 1,
  "generatedAt": "2026-08-02T22:05:27Z",
  "markdown": "## Highlights\n- **DevTools** Web Inspector's Canvas tooling can now record WebGPU devices, a big step toward practical GPU capture and debugging. [commit 318407@main](https://commits.webkit.org/318407@main)\n- **DevTools** Canvas inspection now surfaces WebGPU `label` metadata where available, making captured resources easier to identify fast. [commit 318409@main](https://commits.webkit.org/318409@main)\n- **DevTools** Canvas recording can now disable WebGPU render pipelines, giving developers a cleaner way to isolate draw issues. [commit 318403@main](https://commits.webkit.org/318403@main)\n- **Web Platform** GLib now enables the Storage API, expanding standards coverage on Linux ports. [commit 318384@main](https://commits.webkit.org/318384@main)\n- **Rendering** Spatial portals gained child model loading IPC, pushing 3D and immersive document plumbing forward. [commit 318406@main](https://commits.webkit.org/318406@main)\n- **Perf** WPE and GTK stop blending opaque buffers in the Skia compositor, cutting wasted memory bandwidth on composited content. [commit 318402@main](https://commits.webkit.org/318402@main)\n- **V8** JavaScriptCore removes 32-bit JSValues, simplifying engine internals and narrowing the legacy configuration surface. [commit 318393@main](https://commits.webkit.org/318393@main)\n- **Web Platform** JavaScriptCore adds `WebAssembly.Exception` `traceStack` support, improving Wasm exception diagnostics and spec alignment. [commit 318397@main](https://commits.webkit.org/318397@main)\n\n## What landed by area\n\n### Web Inspector\n- **DevTools** Canvas inspection now shows WebGPU `label` values where available so captured GPU objects are easier to map back to app code. [commit 318409@main](https://commits.webkit.org/318409@main)\n- **DevTools** Canvas recording adds WebGPU device support, broadening capture coverage for modern graphics apps. [commit 318407@main](https://commits.webkit.org/318407@main)\n- **DevTools** Canvas tooling can disable WebGPU render pipelines during capture, helping isolate rendering state and pipeline-specific failures. [commit 318403@main](https://commits.webkit.org/318403@main)\n\n### JavaScriptCore and Wasm\n- **V8** JavaScriptCore removes `StringRecursionChecker`, trimming engine complexity in string handling paths. [commit 318399@main](https://commits.webkit.org/318399@main)\n- **Web Platform** JavaScriptCore implements `WebAssembly.Exception` `options.traceStack`, improving Wasm exception behavior and debuggability. [commit 318397@main](https://commits.webkit.org/318397@main)\n- **Web Platform** Wasm now has coverage ensuring `Module.customSections()` returns independent `ArrayBuffer` copies, locking down observable semantics. [commit 318396@main](https://commits.webkit.org/318396@main)\n- **Web Platform** A regression test lands for i32 extended const wrap-around in Wasm, hardening constant-expression correctness. [commit 318395@main](https://commits.webkit.org/318395@main)\n- **Refactor** WebKit removes 32-bit JSValues, continuing the cleanup of old engine configurations and assumptions. [commit 318393@main](https://commits.webkit.org/318393@main)\n- **Perf** YARR stops v-mode class set chunk processing as soon as no more output is possible, shaving wasted regex work. [commit 318392@main](https://commits.webkit.org/318392@main)\n- **Build** ARMv7 JIT support is removed, reducing maintenance burden for an aging backend. [commit 318389@main](https://commits.webkit.org/318389@main)\n\n### GLib, WPE, and GTK\n- **Web Platform** GLib enables the Storage API, bringing more complete platform support to that port. [commit 318384@main](https://commits.webkit.org/318384@main)\n- **Privacy** GLib fixes website data size lookup across multiple data types, improving correctness for data management and site data accounting. [commit 318404@main](https://commits.webkit.org/318404@main)\n- **Perf** WPE and GTK avoid blending opaque content buffers in the Skia compositor, reducing unnecessary bandwidth use. [commit 318402@main](https://commits.webkit.org/318402@main)\n- **Build** GLib gets unreviewed layout test gardening to keep port-specific test expectations in sync. [commit 318401@main](https://commits.webkit.org/318401@main)\n\n### Rendering and layout\n- **Rendering** Spatial portals now have child model loading IPC, adding core infrastructure for nested model content. [commit 318406@main](https://commits.webkit.org/318406@main)\n- **Rendering** WebKit resyncs `css/CSS2/abspos` from upstream WPT, pulling in current absolute-positioning conformance coverage. [commit 318408@main](https://commits.webkit.org/318408@main)\n\n### API surface and embedders\n- **UI** The SwiftUI WebKit API now exposes `_editable` on `WebPage`, giving embedders more control over editable state. [commit 318398@main](https://commits.webkit.org/318398@main)\n- **Refactor** WebExtensionAPIAlarms is ported to C++, continuing migration of extension plumbing to native implementation. [commit 318390@main](https://commits.webkit.org/318390@main)\n\n### PDF and hit testing\n- **UI** A new API test covers UnifiedPDF HUD behavior with multiple plugins to catch hit-testing flakiness on macOS Sequoia bots. [commit 318400@main](https://commits.webkit.org/318400@main)\n\n### Build and platform fixes\n- **Build** A Windows build break caused by an earlier change is fixed to restore that port. [commit 318390@main](https://commits.webkit.org/318390@main)\n- **Build** An unreviewed build fix lands to keep the tree green after the engine cleanup churn. [commit 318391@main](https://commits.webkit.org/318391@main)",
  "repo": "webkit",
  "repoDisplay": "WebKit",
  "rollGroups": [],
  "since": "2026-08-02",
  "totals": {
    "commits": 21,
    "features": 21,
    "rolls": 0
  },
  "until": "2026-08-02"
}