{
  "commits": {
    "316531@main": {
      "author": "Zak Ridouh",
      "avatar": "https://www.gravatar.com/avatar/d9b65ef530b9cbbfc6dff1ca158faace?d=identicon\u0026s=64",
      "cl": "316531@main",
      "clUrl": "https://commits.webkit.org/316531@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=317620\nrdar://180349185\n\nReviewed by Richard Robinson.\n\nConvert some Xcode Groups to modern Xcode buildable folders\nfor some SwiftBrowser folders.\n\n* Tools/SwiftBrowser/SwiftBrowser.xcodeproj/project.pbxproj:\n\nCanonical link: https://commits.webkit.org/316531@main",
      "email": "zakr@apple.com",
      "hash": "402dc1b3bf265f5afd15d1b68374ef0885824299",
      "subject": "Use modern Xcode Folders for SwiftBrowser xcodeproj"
    },
    "316532@main": {
      "author": "Sam Weinig",
      "avatar": "https://www.gravatar.com/avatar/354b409240f9fb3357f498c547423d96?d=identicon\u0026s=64",
      "cl": "316532@main",
      "clUrl": "https://commits.webkit.org/316532@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318632\n\nReviewed by Darin Adler.\n\nAdds a new off by default bit to `CSS::PropertyParserState` called `absoluteLengthUnitsOnly`\nto make it parse error to consume length units that are not absolute (e.g. font/viewport/container\nrelative units). Uses this for the `DOMMatrix` (`parseTransformRaw`) and `IntersectionObserver`\n(`parseMargin`) parsers.\n\nAdditionally, added support for using a `CSS::{primitive}Raw` type in the MetaConsumer, indicating\nthat the parse should not allow `calc()`. Uses this to remove the post parse check in the\n`IntersectionObserver` (`parseMargin`) parser.\n\nAdded a test for non-px, but still absolute units in IntersectionObserver and updated a failing\nDOMMatrix test result.\n\nTest: imported/w3c/web-platform-tests/intersection-observer/root-margin-scroll-margin-units.html\n* LayoutTests/imported/w3c/web-platform-tests/css/geometry/DOMMatrix-001-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/intersection-observer/root-margin-scroll-margin-units-expected.txt: Added.\n* LayoutTests/imported/w3c/web-platform-tests/intersection-observer/root-margin-scroll-margin-units.html: Added.\n* Source/WebCore/css/calc/CSSCalcTree+Parser.cpp:\n* Source/WebCore/css/parser/CSSPropertyParserConsumer+AngleDefinitions.h:\n* Source/WebCore/css/parser/CSSPropertyParserConsumer+AnglePercentageDefinitions.h:\n* Source/WebCore/css/parser/CSSPropertyParserConsumer+FlexDefinitions.h:\n* Source/WebCore/css/parser/CSSPropertyParserConsumer+FrequencyDefinitions.h:\n* Source/WebCore/css/parser/CSSPropertyParserConsumer+IntegerDefinitions.h:\n* Source/WebCore/css/parser/CSSPropertyParserConsumer+LengthDefinitions.h:\n* Source/WebCore/css/parser/CSSPropertyParserConsumer+LengthPercentageDefinitions.h:\n* Source/WebCore/css/parser/CSSPropertyParserConsumer+NumberDefinitions.h:\n* Source/WebCore/css/parser/CSSPropertyParserConsumer+PercentageDefinitions.h:\n* Source/WebCore/css/parser/CSSPropertyParserConsumer+ResolutionDefinitions.h:\n* Source/WebCore/css/parser/CSSPropertyParserConsumer+TimeDefinitions.h:\n* Source/WebCore/css/parser/CSSPropertyParserConsumer+Transform.cpp:\n* Source/WebCore/css/parser/CSSPropertyParserState.h:\n* Source/WebCore/page/IntersectionObserver.cpp:\n\nCanonical link: https://commits.webkit.org/316532@main",
      "email": "sam@webkit.org",
      "hash": "31871cbfb029cd2dc2389d87b70af72876ef52ec",
      "subject": "Fix issues with DOMMatrix/IntersectionObserver absolute length unit requirements"
    },
    "316533@main": {
      "author": "Kimmo Kinnunen",
      "avatar": "https://www.gravatar.com/avatar/7f063a2c9e40666bfe998109608180b7?d=identicon\u0026s=64",
      "cl": "316533@main",
      "clUrl": "https://commits.webkit.org/316533@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318431\nrdar://181217130\n\nReviewed by Dan Glastonbury\n\nContains upstream commits:\na32d31d2f123 Manual Roll vulkan-deps from f2b9fece7c67 to 0af4fee9206d\n6dab7c7e742b Capture/Replay: Include inactive resources when retracing\ne0580dcb02d8 Refactor ValidateTexStorage\n88921cc5ab0b Roll Chromium from 82de21bc9ada to 9513633ed143 (930 revisions)\n5fbcc75bac96 Roll VK-GL-CTS from 93834259e350 to 06ae3bf12ae5 (21 revisions)\n98dab44d9cd2 Vulkan: Add initializeColorAttachmentWithWhite for app workaround\n79053f47bd64 Use standard enums for 64-bit types\nbb1024656d39 IR Validation: add pointer validation for operands and results\na4eea1fbedac Vulkan: Fix layer index/count for update from FBO\n09c7bd10a9c1 Increase size of buffer pool for argument buffers.\nc740e731ac92 Consolidate common arch flags\n6e65aeaa7006 [translator] Fix cloning switch case nodes without a condition\n4a0e6eecaa9a Vulkan: Fix Uninitialized GPU memory leak in reinitImageAsRenderable\n093a0d8f75a2 Split EGL_PLATFORM_ANGLE_DISPLAY_KEY_ANGLE into a new ext\n51afe011d316 vulkan: Fix UAF in VertexArrayVk\nde05d95e714f Fix incorrect null check in removeDrawFramebufferBinding\n8350b506968c Move the ownership of the Metal backend to lehoangquyen@google.com.\ndc89a1293bdd Remove unreachable texture validation code\nfc6b2b8a4985 Adds new pragma for disabling hlsl warnings.\n46a0234b977a Metal: only allocate native texture storage for defined levels.\nae75b852f8d6 Unsuppress fixed deqp test\n3afccdedc1ec Refactor CompressedTexSubImage validation\na5d77662738d Roll SwiftShader from 0255eccc9824 to f3e464b1e567 (1 revision)\n13e5114ff61c Roll vulkan-deps from 4cd4bfcf818e to f2b9fece7c67 (11 revisions)\n15d26b7d15b0 Roll Chromium from 4d151fce616e to 82de21bc9ada (750 revisions)\nc8313f42e1d7 [WGPU] Don't destroy wgpu::Texture in ImageHelper::resetImage\n44ba9d57ecb1 Put paletted texture formats at end of list.\nf998b0379cca Introduce additional flat array for lock-free handle path\nc073400b3d7c Vulkan: Refactor EGL image glCopyTex*Image paths\n38cac5971fef D3D11: Remove remaining Feature Level 9_3 remnants\n9884b41def85 Vulkan: Refactor EGL image draw paths\nd4c975d917a6 Rename angle_v2 recipes\n1466aafdb807 Fix ValidateDamageRegion test not assume triple buffer behavior\n82a623fafe0b D3D: Handle uniforms that are optimized out by TranslatorHLSL\n2601ce62a53c Clear all level's image descs when binding a pbuffer.\n6d0f0d10ffda Use separate types for texture's own and source level/layer/index\n4dc260a39474 Roll SwiftShader from 2843cbcc714f to 0255eccc9824 (1 revision)\n89847bfb9850 Unconditionally apply BaseInstanceOverflow validation\nedebbb70cb88 Roll vulkan-deps from 5481b8c77757 to 4cd4bfcf818e (13 revisions)\n45a14602dff9 Roll Chromium from 3ebaa3a7d74a to 4d151fce616e (643 revisions)\nb9aa07e9d122 Vulkan: Fix the bug related to queue family global priority\nd97a65839d09 Vulkan: Disable supportsGlobalPriority feature for all\n21c3abd8d941 Generate gn_isolate_map.pyl\nafb8744a126e MSL/AST: Handle non-unary/binary expr in loop-forward-progress\n7d1617f8c78d Roll vulkan-deps from e73c8345b94e to 5481b8c77757 (9 revisions)\nff11ff01d6ba Roll Chromium from e23ff548502b to 3ebaa3a7d74a (745 revisions)\n195369f6675e Track EGL image source image index in renderbuffer too\n796483ddbf0e Vulkan: Improve appBasedFeatureOverrides\ne0f321c3f28f D3D11: Remove additional non-shader Feature Level 9_3 code\n3e7c372c7b6d Switch Android/arm64/Perf to test trigger CAS\n4f7183076c33 Remove legacy Win/x64/ASan test specs\n86faae9a382f Switch Win/x64/Perf to test trigger CAS\nd0c30d112691 Switch Win/x64/ASan to test trigger CAS\n1f047a0aca4a Switch Win/x86/Release to test trigger CAS\n4f505b04635f Tests: Add more tests for MSRTT with framebuffer fetch\nb54d36331810 Switch Linux/x64/TSan to test trigger CAS\n79137f56be40 Switch Linux/x64/ASan to test trigger CAS\n1285539522b7 [Tests] Add macros for -Wunsafe-buffer-usage in ANGLE\nd462b0275178 Fix robust-init bypass in glClearBufferfi\n74622ea206bd Fix clamping indices to gl_FragData vs dual source blending\nabcbf90919e8 Refactor CompressedTexImage validation\nb7473852da1f Don't use component build on Android ANGLE bots.\n0bde2f8e6d4d Roll vulkan-deps from fac28bbc554e to e73c8345b94e (18 revisions)\n\nCanonical link: https://commits.webkit.org/316533@main",
      "email": "kkinnunen@apple.com",
      "hash": "6115059613eff0e204bf87b7f2531a57e9c545ea",
      "subject": "Update ANGLE to 2026-06-29 (a32d31d2f1230711f398ff4cbfc272bdcca72a5e)"
    },
    "316534@main": {
      "author": "Yusuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/3455d9081295e3e740c1ffa901217d9b?d=identicon\u0026s=64",
      "cl": "316534@main",
      "clUrl": "https://commits.webkit.org/316534@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318642\nrdar://181445937\n\nReviewed by Yijia Huang.\n\nThis patch adds fast path for indexOf / includes with AtomString arrays.\nIf Array is an AtomString array and input is JSString with AtomString,\nwe do pointer comparison loop. Also we use compare32 to clean up result\ngeneration in DFG code, which becomes branchless and faster. FTL already\nachieves it due to B3's conversion.\n\nTests: JSTests/stress/array-indexof-includes-cow-atom-strings.js\n       JSTests/stress/array-indexof-includes-result-boundaries.js\n\n* JSTests/stress/array-indexof-includes-cow-atom-strings.js: Added.\n(shouldBe):\n(idxFrom):\n(inc):\n(idxEmptyAndSingle):\n* JSTests/stress/array-indexof-includes-result-boundaries.js: Added.\n(shouldBe):\n(i32Includes):\n(i32IncludesFrom):\n(dblIndex):\n(dblIncludes):\n(strIndex):\n(strIncludes):\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/316534@main",
      "email": "ysuzuki@apple.com",
      "hash": "23903f1a1cc7fa0b403cd150387669c8ecb3a6ad",
      "subject": "[JSC] Add AtomString Array loop in DFG / FTL"
    },
    "316535@main": {
      "author": "Yusuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/3455d9081295e3e740c1ffa901217d9b?d=identicon\u0026s=64",
      "cl": "316535@main",
      "clUrl": "https://commits.webkit.org/316535@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318640\nrdar://181445350\n\nReviewed by Yijia Huang.\n\n1. Have usesEntrySwitch flag to avoid scanning the graph in Air::lowerEntrySwitch.\n   EntrySwitch is not frequently used, thus we can remember when it is\n   added.\n2. Record whether simplifyCFG can be beneficial and run it only it can\n   make code changed.\n\n* Source/JavaScriptCore/b3/B3LowerToAir.cpp:\n* Source/JavaScriptCore/b3/B3Procedure.h:\n(JSC::B3::Procedure::setUsesEntrySwitch):\n(JSC::B3::Procedure::usesEntrySwitch const):\n* Source/JavaScriptCore/b3/air/AirGenerate.cpp:\n(JSC::B3::Air::prepareForGeneration):\n* Source/JavaScriptCore/b3/air/AirLowerEntrySwitch.cpp:\n(JSC::B3::Air::lowerEntrySwitch):\n* Source/JavaScriptCore/b3/air/AirLowerEntrySwitch.h:\n* Source/JavaScriptCore/b3/air/AirReportUsedRegisters.cpp:\n(JSC::B3::Air::reportUsedRegisters):\n* Source/JavaScriptCore/b3/air/AirReportUsedRegisters.h:\n\nCanonical link: https://commits.webkit.org/316535@main",
      "email": "ysuzuki@apple.com",
      "hash": "7b3dbc197b140fa6c1b7383e6770bb3f1cb9be7b",
      "subject": "[JSC] Skip LowerEntrySwitch and SimplifyCFG if possible"
    },
    "316536@main": {
      "author": "Yijia Huang",
      "avatar": "https://www.gravatar.com/avatar/5bc95a5f0a5fdfc107bbdec6979dae89?d=identicon\u0026s=64",
      "cl": "316536@main",
      "clUrl": "https://commits.webkit.org/316536@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318649\nrdar://181454253\n\nReviewed by Yusuke Suzuki.\n\nExposes Profiler::Database::save() as dumpBytecodeProfile(path). Lets JS\ncallers write the profiler state mid-run instead of only at atexit, which\ncan be used to dump iteration-0 bytecode profile data in JS3 — counters\nare monotonic, so a snapshot at end of iteration 0 captures iter-0-only\nexecution counts.\n\nNo-op when jsc is run without `-p`.\n\nCanonical link: https://commits.webkit.org/316536@main",
      "email": "yijia_huang@apple.com",
      "hash": "b8fd555bffe2b1ed0a6d9dd3c8c948b76d3d378a",
      "subject": "[JSC] Add dumpBytecodeProfile"
    },
    "316537@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "316537@main",
      "clUrl": "https://commits.webkit.org/316537@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318618\nrdar://181413103\n\nReviewed by Simon Fraser.\n\nIn AnchorScrollAdjuster, the block-axis (Y) scroll-adjustment check for\nanchor-center read alignSelf().isAnchorCenter() in both the horizontal and\nvertical writing-mode arms of the ternary. The horizontal-axis (X) check\ncorrectly pairs justify-self/align-self per axis, but the vertical arm of the\nY check was a copy-paste of the horizontal arm.\n\nFor a vertical containing writing mode, the block (Y) axis is controlled by\njustify-self, not align-self, so an abspos box using anchor-center never set\nm_needsYAdjustment. As a result it was not compensated for its anchor's scroll\noffset and drifted away from the anchor after scrolling.\n\nPair the vertical arm with justifySelf().isAnchorCenter(), matching the\nper-axis logic already used by the position-area block above.\n\nTests: imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-scroll-horizontal-wm-001.html\n       imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-scroll-vertical-wm-001.html\n\n* LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-scroll-horizontal-wm-001-expected.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-scroll-horizontal-wm-001-ref.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-scroll-horizontal-wm-001.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-scroll-vertical-wm-001-expected.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-scroll-vertical-wm-001-ref.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-scroll-vertical-wm-001.html: Added.\n* Source/WebCore/style/AnchorPositionEvaluator.cpp:\n(WebCore::AnchorScrollAdjuster::AnchorScrollAdjuster):\n\nCanonical link: https://commits.webkit.org/316537@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "c1dbbbee21268435cb02a16d1dc354d11a79f338",
      "subject": "anchor-center in a vertical writing mode is not scroll-adjusted along the block axis"
    },
    "316538@main": {
      "author": "Sosuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/e63b87350fe19bdd9a30c7234eda45af?d=identicon\u0026s=64",
      "cl": "316538@main",
      "clUrl": "https://commits.webkit.org/316538@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318528\n\nReviewed by Yusuke Suzuki.\n\nObject.prototype.hasOwnProperty.call(o, p) is a common guard inside `for (p in o)`\n(eslint's no-prototype-builtins rewrites o.hasOwnProperty(p) into this form).\nHowever, op_enumerator_has_own_property is not emitted for it: the recognition\nhappens only in the parser, which matches the exact syntactic form\n`o.hasOwnProperty(p)`, so the .call spelling (and Object.hasOwn) falls back to\nthe generic HasOwnProperty node that hashes the key on every iteration.\n\nThis patch additionally converts HasOwnProperty to EnumeratorHasOwnProperty in\nDFG strength reduction, when the key is the EnumeratorNextUpdatePropertyName of\nan enumeration whose GetPropertyEnumerator base is the same node as the object.\nThis makes the guard a structure ID comparison regardless of spelling.\n\n                                                   Baseline                  Patched\n\nobject-has-own-for-in-loop                      4.7828+-0.0548     ^      4.0638+-0.0909        ^ definitely 1.1769x faster\nhas-own-property-call-for-in-loop              12.0470+-0.2778     ^      9.5166+-0.2442        ^ definitely 1.2659x faster\n\nTests: JSTests/microbenchmarks/has-own-property-call-for-in-loop.js\n       JSTests/stress/for-in-has-own-property-call-edge-cases.js\n       JSTests/stress/for-in-has-own-property-call.js\n\n* JSTests/microbenchmarks/has-own-property-call-for-in-loop.js: Added.\n(assert):\n(test1.count):\n(test1):\n* JSTests/stress/for-in-has-own-property-call-edge-cases.js: Added.\n(assert):\n(oracle):\n(deleteCurrent):\n(deleteCurrentHasOwn):\n(clobber):\n(guardAfterClobber):\n(differential):\n(reassign):\n(nested):\n(proxyGuard):\n(proxyThrow):\n(polyBase):\n(makeLarge):\n(i.assert.guardAfterClobber):\n(i.assert):\n(i.p.string_appeared_here.Object.setPrototypeOf):\n(i.assert.nested):\n(i.assert.polyBase):\n(i.assert.polyBase.Object.freeze):\n* JSTests/stress/for-in-has-own-property-call.js: Added.\n(assert):\n(countOwn):\n(countHasOwn):\n(crossCheck):\n(deleteDuring):\n(countIndexed):\n* Source/JavaScriptCore/dfg/DFGNode.cpp:\n(JSC::DFG::Node::convertToEnumeratorHasOwnProperty):\n* Source/JavaScriptCore/dfg/DFGNode.h:\n* Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:\n(JSC::DFG::StrengthReductionPhase::handleNode):\n\nCanonical link: https://commits.webkit.org/316538@main",
      "email": "sosuke@bun.sh",
      "hash": "752e7e8b0d05a5b13ce3d573bb75e7e8c86ad019",
      "subject": "[JSC] Convert `HasOwnProperty` on the current for-in property name to `EnumeratorHasOwnProperty`"
    },
    "316539@main": {
      "author": "Sosuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/e63b87350fe19bdd9a30c7234eda45af?d=identicon\u0026s=64",
      "cl": "316539@main",
      "clUrl": "https://commits.webkit.org/316539@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318603\n\nReviewed by Yusuke Suzuki.\n\nNow that op_try_get_by_id and the @tryGetById builtin intrinsic are gone,\nthe DFG TryGetById node is only created by the ByteCodeParser for a handful\nof intrinsics, where it performs a runtime \"is this property still the\nprimordial one\" check:\n\n- RegExpTestIntrinsic / RegExpSearchIntrinsic / RegExpMatchIntrinsic /\n  RegExpSplitIntrinsic verify that the RegExp object's \"exec\" is the\n  primordial RegExp.prototype.exec.\n- PromisePrototypeCatchIntrinsic verifies that the promise's \"then\" is the\n  primordial Promise.prototype.then.\n\nThese checks can be expressed as a watchpoint plus a CheckStructure against\nthe primordial structure instead (subclass instances now take the generic\npath, like the other RegExp intrinsics already do). Do that, and delete the\nnode along with the IC layer's TryGetById support, which was only reachable\nfrom DFG / FTL.\n\n* JSTests/stress/promise-catch-own-then.js: Added.\n* JSTests/stress/regexp-test-exec-watchpoint-invalidation.js: Added.\n* JSTests/stress/regexp-test-own-exec.js: Added.\n* JSTests/stress/regexp-test-subclass-exec.js: Added.\n* Source/JavaScriptCore/bytecode/InlineCacheCompiler.cpp:\n(JSC::InlineCacheCompiler::generateSlowPathCode):\n(JSC::InlineCacheCompiler::compileOneAccessCaseHandler):\n* Source/JavaScriptCore/bytecode/PropertyInlineCache.cpp:\n(JSC::PropertyInlineCache::reset):\n* Source/JavaScriptCore/bytecode/PropertyInlineCache.h:\n(JSC::appropriateGetByIdOptimizeFunction):\n(JSC::appropriateGetByIdGenericFunction):\n(JSC::hasConstantIdentifier):\n* Source/JavaScriptCore/bytecode/Repatch.cpp:\n(JSC::appropriateGetByOptimizeFunction):\n(JSC::appropriateGetByGaveUpFunction):\n(JSC::tryCacheGetBy):\n* Source/JavaScriptCore/bytecode/Repatch.h:\n* Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:\n(JSC::DFG::AbstractInterpreter\u003cAbstractStateType\u003e::executeEffects):\n* Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:\n(JSC::DFG::ByteCodeParser::handleIntrinsicCall):\n(JSC::DFG::ByteCodeParser::handleGetById):\n* Source/JavaScriptCore/dfg/DFGClobberize.h:\n(JSC::DFG::clobberize):\n* Source/JavaScriptCore/dfg/DFGClobbersExitState.cpp:\n(JSC::DFG::clobbersExitState):\n* Source/JavaScriptCore/dfg/DFGDoesGC.cpp:\n(JSC::DFG::doesGC):\n* Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:\n(JSC::DFG::FixupPhase::fixupNode):\n* Source/JavaScriptCore/dfg/DFGGraph.h:\n(JSC::DFG::Graph::isWatchingPromiseThenWatchpoint):\n* Source/JavaScriptCore/dfg/DFGNode.h:\n(JSC::DFG::Node::hasCacheableIdentifier):\n(JSC::DFG::Node::cacheableIdentifier):\n(JSC::DFG::Node::hasGetByIdData const):\n* Source/JavaScriptCore/dfg/DFGNodeType.h:\n* Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:\n* Source/JavaScriptCore/dfg/DFGSafeToExecute.h:\n(JSC::DFG::safeToExecute):\n* Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:\n(JSC::DFG::SpeculativeJIT::compile):\n(JSC::DFG::SpeculativeJIT::compileGetById):\n* Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:\n(JSC::DFG::SpeculativeJIT::compile):\n(JSC::DFG::SpeculativeJIT::compileGetById):\n* Source/JavaScriptCore/ftl/FTLCapabilities.cpp:\n(JSC::FTL::canCompile):\n* Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:\n(JSC::FTL::DFG::LowerDFGToB3::compileNode):\n(JSC::FTL::DFG::LowerDFGToB3::compileGetById):\n* Source/JavaScriptCore/jit/JITOperations.cpp:\n* Source/JavaScriptCore/jit/JITOperations.h:\n\nCanonical link: https://commits.webkit.org/316539@main",
      "email": "sosuke@bun.sh",
      "hash": "1cdf1c9f02aa1592b606dd986e6bd9e5b1e03efc",
      "subject": "[JSC] Remove DFG TryGetById node"
    },
    "316540@main": {
      "author": "Devin Rousso",
      "avatar": "https://www.gravatar.com/avatar/c9e757d973342c773f107a94b70cb9cd?d=identicon\u0026s=64",
      "cl": "316540@main",
      "clUrl": "https://commits.webkit.org/316540@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=283981\n\u003crdar://problem/140880870\u003e\n\nReviewed by Antoine Quint.\n\nCustom properties in a keyframe should be serialized from the keyframe's own style instead of the current computed style.\n\n* Source/WebCore/inspector/agents/InspectorAnimationAgent.cpp:\n(WebCore::buildObjectForKeyframes):\n\n* LayoutTests/inspector/animation/keyframes-custom-property.html: Added.\n* LayoutTests/inspector/animation/keyframes-custom-property-expected.txt: Added.\n\nCanonical link: https://commits.webkit.org/316540@main",
      "email": "hi@devinrousso.com",
      "hash": "401e156fe3e88acc612597a6c68358b534c7ccd2",
      "subject": "Web Inspector: Crash when opened with CSS Variable @keyframes Animation"
    },
    "316541@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "316541@main",
      "clUrl": "https://commits.webkit.org/316541@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318619\nrdar://181413407\n\nReviewed by Jean-Yves Avenard.\n\nPannerNode::invalidateCachedPropertiesIfNecessary() stored position()\ninto m_lastOrientation instead of orientation(), so hasOrientationChanged\nwas computed as an alias of hasPositionChanged. As a result, rotating a\npanner in place (changing orientation while leaving position unchanged)\nnever invalidated m_cachedConeGain, and the directional cone attenuation\nstayed stale until some other property forced a recompute.\n\nThis only affects the cached (non sample-accurate) cone-gain path; the\nsample-accurate path recomputes the cone gain every render quantum, so\nthe bug was masked whenever any panner or listener position/orientation\nAudioParam was a-rate.\n\nFix the typo so orientation-only changes correctly drop the cached cone\ngain.\n\nTest: imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-orientation-cone-gain-changes.html\n\n* LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-orientation-cone-gain-changes-expected.txt: Added.\n* LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-orientation-cone-gain-changes.html: Added.\n* Source/WebCore/Modules/webaudio/PannerNode.cpp:\n(WebCore::PannerNode::invalidateCachedPropertiesIfNecessary):\n\nCanonical link: https://commits.webkit.org/316541@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "74a12b6a1be8da6d70333bc4f407e49127205edf",
      "subject": "PannerNode orientation-only changes don't update the directional cone gain"
    },
    "316542@main": {
      "author": "Rob Buis",
      "avatar": "https://www.gravatar.com/avatar/74fb5af173895d2a7814b0aed1238a39?d=identicon\u0026s=64",
      "cl": "316542@main",
      "clUrl": "https://commits.webkit.org/316542@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318106\n\nReviewed by Nikolas Zimmermann.\n\nAdjust test expectations after 315946@main, this is a progression.\n\n* LayoutTests/platform/mac-tahoe-wk2-lbse-text/imported/w3c/web-platform-tests/svg/geometry/parsing/height-computed-expected.txt:\n* LayoutTests/platform/mac-tahoe-wk2-lbse-text/imported/w3c/web-platform-tests/svg/geometry/parsing/width-computed-expected.txt:\n\nCanonical link: https://commits.webkit.org/316542@main",
      "email": "rbuis@igalia.com",
      "hash": "8be3ba5c9f04cadf8636e69450309fa1c6eeedb1",
      "subject": "[LBSE] Adjust test expectations after 315946@main"
    },
    "316543@main": {
      "author": "Nikolas Zimmermann",
      "avatar": "https://www.gravatar.com/avatar/83cbd636495835720e369cd589e3ca5e?d=identicon\u0026s=64",
      "cl": "316543@main",
      "clUrl": "https://commits.webkit.org/316543@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318661\n\nReviewed by Rob Buis.\n\nSVGTransformList::concatenate() walks the transform list and multiplies every\nitem on each read ~ 3 times per animation frame: updateHasSVGTransformFlags -\u003e\nhasTransformRelatedAttributes, updateLocalTransform via applySVGTransform,\nand computeRendererTransformForSVG. The result only changes when the transform\nlist mutates, which always routes through SVGGraphicsElement::svgAttributeChanged.\n\nCache it on SVGGraphicsElement and flush it in svgAttributeChanged, to fix that.\nCovered by existing tests.\n\n* Source/WebCore/rendering/RenderLayerModelObject.cpp:\n(WebCore::RenderLayerModelObject::applySVGTransform const):\n* Source/WebCore/svg/SVGGraphicsElement.cpp:\n(WebCore::SVGGraphicsElement::animatedLocalTransform const):\n(WebCore::SVGGraphicsElement::svgAttributeChanged):\n* Source/WebCore/svg/SVGGraphicsElement.h:\n(WebCore::SVGGraphicsElement::concatenatedTransform const):\n(WebCore::SVGGraphicsElement::invalidateConcatenatedTransformCache const):\n(WebCore::SVGGraphicsElement::hasTransformRelatedAttributes const):\n\nCanonical link: https://commits.webkit.org/316543@main",
      "email": "nzimmermann@igalia.com",
      "hash": "8b35ecea6411bb80f91177f032958dcd174302ff",
      "subject": "[LBSE] Cache the concatenated SVG transform attribute matrix"
    },
    "316544@main": {
      "author": "Nikolas Zimmermann",
      "avatar": "https://www.gravatar.com/avatar/83cbd636495835720e369cd589e3ca5e?d=identicon\u0026s=64",
      "cl": "316544@main",
      "clUrl": "https://commits.webkit.org/316544@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318662\n\nReviewed by Rob Buis.\n\ncomputeRendererTransformForSVG() re-resolved the SVG transform from style on every\npaint (applyTransform: concatenate + transform-origin + matrix multiplies), even\nthough a non-layer SVG renderer already caches that transform in m_localTransform,\njust with a different transform-origin, aligned for the nominal layer paint code\npath. We can easily compute the desired paint transform: translate(nominal) *\nm_localTransform * translate(-nominal), to save the recomputation.\n\nCovered by existing tests.\n\n* Source/WebCore/rendering/RenderLayerSVGAdditions.cpp:\n(WebCore::RenderLayer::computeRendererTransformForSVG const):\n\nCanonical link: https://commits.webkit.org/316544@main",
      "email": "nzimmermann@igalia.com",
      "hash": "74a7d27a4cc3b9285e775856a3e642ed966df371",
      "subject": "[LBSE] Reuse cached m_localTransform at paint instead of re-resolving from style"
    },
    "316545@main": {
      "author": "Nikolas Zimmermann",
      "avatar": "https://www.gravatar.com/avatar/83cbd636495835720e369cd589e3ca5e?d=identicon\u0026s=64",
      "cl": "316545@main",
      "clUrl": "https://commits.webkit.org/316545@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318546\n\nReviewed by Rob Buis.\n\ncurrentViewportSizeExcludingZoom() resolves to the SVG root's content box on\nevery call, but the viewport is constant after layout. The default SVG\ntransform-box is view-box, so every transformed shape's reference box re-queried\nit per frame -- from both updateLocalTransform() and during paint in\ncomputeRendererTransformForSVG().\n\nCache it on SVGSVGElement - flush in RenderSVGRoot::layout() and\nRenderSVGViewportContainer::updateLayoutSizeIfNeeded(), which run on\nresize/zoom/viewBox changes.\n\nCovered by existing tests.\n\n* Source/WebCore/rendering/svg/RenderSVGRoot.cpp:\n(WebCore::RenderSVGRoot::layout):\n* Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp:\n(WebCore::RenderSVGViewportContainer::updateLayoutSizeIfNeeded):\n* Source/WebCore/svg/SVGSVGElement.cpp:\n(WebCore::SVGSVGElement::currentViewportSizeExcludingZoom const):\n(WebCore::SVGSVGElement::computeCurrentViewportSizeExcludingZoom const):\n* Source/WebCore/svg/SVGSVGElement.h:\n\nCanonical link: https://commits.webkit.org/316545@main",
      "email": "nzimmermann@igalia.com",
      "hash": "8c0c37ea12f307d85187524b5d7266b02a4f7b1b",
      "subject": "[LBSE] Cache the SVG viewport size used for the transform reference box"
    },
    "316546@main": {
      "author": "Youenn Fablet",
      "avatar": "https://www.gravatar.com/avatar/0a9886e582a7aee1eb908eb59af36da4?d=identicon\u0026s=64",
      "cl": "316546@main",
      "clUrl": "https://commits.webkit.org/316546@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318667\nrdar://179017690\n\nReviewed by Yusuke Suzuki.\n\nWhen the dispatcher runs, GC can happen, which could destroy the JS microtask dispatcher and its internal dispatcher.\nTo prevent this, we keep the JS micro task dispatcher alive with EnsureStillAliveScope.\n\nTest: streams/tee-byob-microtask-gc-crash.html\n\n* LayoutTests/streams/tee-byob-microtask-gc-crash-expected.txt: Added.\n* LayoutTests/streams/tee-byob-microtask-gc-crash.html: Added.\n* Source/JavaScriptCore/runtime/MicrotaskQueue.cpp:\n(JSC::MicrotaskQueue::drainImpl):\n\nCanonical link: https://commits.webkit.org/316546@main",
      "email": "youenn@apple.com",
      "hash": "a48d2303546c4bb4cce553fc3d8158d1d8e6a4d0",
      "subject": "Make sure that MicrotaskQueue::drainImpl cannot have its micro task dispatcher being GCed while running"
    },
    "316547@main": {
      "author": "Marcos Caceres",
      "avatar": "https://www.gravatar.com/avatar/d31c9c6a3b0af558a2945682020e5b90?d=identicon\u0026s=64",
      "cl": "316547@main",
      "clUrl": "https://commits.webkit.org/316547@main",
      "description": "rdar://181218068\nhttps://bugs.webkit.org/show_bug.cgi?id=318432\n\nReviewed by Anne van Kesteren.\n\nVerifying ISO 18013 conformance is out of scope for the Digital Credentials\nAPI specification, so these mdoc-format tests were removed upstream from\nweb-platform-tests in https://github.com/web-platform-tests/wpt/pull/61038 and\nshould no longer be imported into WebKit. Rather than lose the coverage, they\nare moved out of the imported web-platform-tests digital-credentials suite and\nmaintained as WebKit-internal tests under http/wpt/identity/formats/ISO18013/,\nwhere a future WPT re-import will not duplicate them. Their shared helper.js\nand iframe.html support files are copied alongside, and the module and iframe\npaths are updated for the new location. The three tests that require the\nWebDriver BiDi virtual-wallet testdriver extension remain skipped\n(webkit.org/b/306292).\n\nCanonical link: https://commits.webkit.org/316547@main",
      "email": "marcosc@apple.com",
      "hash": "c4630c75c34ce74a2fcb8d788d78fc4afbd8c422",
      "subject": "Relocate ISO 18013 mdoc tests to internal identity tests"
    },
    "316548@main": {
      "author": "Wenson Hsieh",
      "avatar": "https://www.gravatar.com/avatar/c8fba82556fd4988c78bd3a0aee2a44e?d=identicon\u0026s=64",
      "cl": "316548@main",
      "clUrl": "https://commits.webkit.org/316548@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318646\nrdar://181448617\n\nReviewed by Abrar Rahman Protyasha and Richard Robinson.\n\nCache the latest `replacementStrings` upon extracting text, and use it to sanitize interaction\ndescription strings retrieved using `-debugDescriptionInWebView:completionHandler:`.\n\nTest: TextExtractionTests.ReplacementStringsAppliedToInteractionDescription\n\n* Source/WebKit/Shared/TextExtractionToStringConversion.cpp:\n(WebKit::foldForReplacement):\n(WebKit::applyReplacements):\n(WebKit::TextExtractionAggregator::applyReplacements):\n* Source/WebKit/Shared/TextExtractionToStringConversion.h:\n* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:\n(-[WKWebView _extractDebugTextWithConfigurationWithoutUpdatingFilterRules:assertionScope:completionHandler:]):\n(-[WKWebView _describeInteraction:inFrame:nodeIdentifier:staleNodeNote:shouldResolveStaleNodeIdentifier:completionHandler:]):\n* Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h:\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/TextExtractionTests.mm:\n(TestWebKitAPI::TEST(TextExtractionTests, ReplacementStringsAppliedToInteractionDescription)):\n\nCanonical link: https://commits.webkit.org/316548@main",
      "email": "wenson_hsieh@apple.com",
      "hash": "363d0afe5c5de177b384d85a2e72caa18030d544",
      "subject": "[Text Extraction] Apply the latest set of `replacementStrings` to interaction descriptions"
    },
    "316549@main": {
      "author": "Sam Sneddon",
      "avatar": "https://www.gravatar.com/avatar/99f6b56d9db9d32920dfcc56deae86fc?d=identicon\u0026s=64",
      "cl": "316549@main",
      "clUrl": "https://commits.webkit.org/316549@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318274\nrdar://181066799\n\nReviewed by Elliott Williams.\n\nThen, with the AutoInstaller available, we can register webkitbugspy\nas a local package.\n\n* Tools/Scripts/libraries/resultsdbpy/run-tests:\n(_maybe_add_webkitcorepy_path):\n\nCanonical link: https://commits.webkit.org/316549@main",
      "email": "gsnedders@apple.com",
      "hash": "3f489e1231c6100cba425d7828e3cc211b30047b",
      "subject": "resultsdbpy: run-tests must add webkitcorepy to sys.path"
    },
    "316550@main": {
      "author": "Sam Sneddon",
      "avatar": "https://www.gravatar.com/avatar/99f6b56d9db9d32920dfcc56deae86fc?d=identicon\u0026s=64",
      "cl": "316550@main",
      "clUrl": "https://commits.webkit.org/316550@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=277452\nrdar://133417147\n\nReviewed by Elliott Williams.\n\nUse the same protocol (SSH or HTTPS) as the WebKit repository instead of\nalways HTTPS. This avoids authentication friction when exporting W3C tests\nand matches how webkitscmpy handles fork remotes.\n\n* Tools/Scripts/webkitpy/w3c/test_downloader.py:\n(TestDownloader.__init__):\n(TestDownloader._get_webkit_remote_url):\n(TestDownloader):\n(TestDownloader._protocol_from_url):\n(TestDownloader._normalize_url_protocol):\n(TestDownloader.checkout_test_repository):\n* Tools/Scripts/webkitpy/w3c/test_downloader_unittest.py: Added.\n(TestDownloaderProtocolTest):\n(TestDownloaderProtocolTest.test_protocol_from_url_https):\n(TestDownloaderProtocolTest.test_protocol_from_url_http):\n(TestDownloaderProtocolTest.test_protocol_from_url_git):\n(TestDownloaderProtocolTest.test_protocol_from_url_ssh_scheme):\n(TestDownloaderProtocolTest.test_protocol_from_url_scp_like):\n(TestDownloaderProtocolTest.test_protocol_from_url_scp_like_with_user):\n(TestDownloaderProtocolTest.test_protocol_from_url_ftp):\n(TestDownloaderProtocolTest.test_protocol_from_url_ftps):\n(TestDownloaderProtocolTest.test_protocol_from_url_file):\n(TestDownloaderProtocolTest.test_protocol_from_url_local_path):\n(TestDownloaderProtocolTest.test_normalize_url_protocol_https_to_https):\n(TestDownloaderProtocolTest.test_normalize_url_protocol_ssh_to_ssh):\n(TestDownloaderProtocolTest.test_normalize_url_protocol_https_to_ssh):\n(TestDownloaderProtocolTest.test_normalize_url_protocol_ssh_to_https):\n(TestDownloaderProtocolTest.test_normalize_url_protocol_git_to_https):\n(TestDownloaderProtocolTest.test_normalize_url_protocol_ssh_scheme_to_https):\n(TestDownloaderProtocolTest.test_normalize_url_protocol_preserves_path):\n(TestDownloaderProtocolTest.test_normalize_url_protocol_no_change_needed):\n\nCanonical link: https://commits.webkit.org/316550@main",
      "email": "gsnedders@apple.com",
      "hash": "32e492d4320ee92b65bd4e056b4eb5d8fe6d1839",
      "subject": "WPT clone should use same protocol as WebKit"
    },
    "316551@main": {
      "author": "Antti Koivisto",
      "avatar": "https://www.gravatar.com/avatar/07965eed55d4b41ea2b394599b17f7cd?d=identicon\u0026s=64",
      "cl": "316551@main",
      "clUrl": "https://commits.webkit.org/316551@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318668\nrdar://181471414\n\nReviewed by Alan Baradlay.\n\n* LayoutTests/imported/w3c/web-platform-tests/css/css-mixins/function-conditionals-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-mixins/function-container-dynamic-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-mixins/function-container-self-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-mixins/function-shadow-container-expected.txt:\n* Source/WebCore/style/CustomFunctionRegistry.cpp:\n(WebCore::Style::CustomFunction::CustomFunction):\n(WebCore::Style::CustomFunctionRegistry::registerFunction):\n\nInstead of smashing all StyleRuleFunctionDeclarations together eagerly during registration\nwe now pair them with their associated container queries so we can resolve them at\ncomputed style time.\n\n* Source/WebCore/style/CustomFunctionRegistry.h:\n* Source/WebCore/style/RuleSetBuilder.cpp:\n(WebCore::Style::RuleSetBuilder::addChildRule):\n(WebCore::Style::RuleSetBuilder::addMutatingRulesToResolver):\n* Source/WebCore/style/RuleSetBuilder.h:\n* Source/WebCore/style/StyleSubstitutionResolver.cpp:\n(WebCore::Style::SubstitutionResolver::substituteDashedFunction):\n\nEvaluate any container queries to determine which properties to apply in function body.\n\n* Source/WebCore/style/RuleSet.h:\n(WebCore::Style::RuleSet::containerQueryForIdentifier):\n(WebCore::Style::RuleSet::containerQueryChainFor):\n(WebCore::Style::RuleSet::containerQueriesFor):\n* Source/WebCore/style/ElementRuleCollector.cpp:\n(WebCore::Style::ElementRuleCollector::containerQueriesMatch):\n\nAdd helpers for resolving a container query identifier to its wrapping rule chain.\ncontainerQueriesFor now returns the container rules rather than the queries.\n\nCanonical link: https://commits.webkit.org/316551@main",
      "email": "antti@apple.com",
      "hash": "5732b008eeaebce67a602a047966d8339b101c20",
      "subject": "[css-mixins-1] Evaluate container queries inside @function"
    },
    "316552@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "316552@main",
      "clUrl": "https://commits.webkit.org/316552@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318202\nrdar://181005869\n\nReviewed by Jean-Yves Avenard.\n\nInside the `if (!m_explicitlyMuted \u0026\u0026 !implicitlyMuted())` branch, the\nassignment `m_explicitlyMuted = !m_explicitlyMuted \u0026\u0026 !implicitlyMuted();`\nre-evaluates a condition that is necessarily true, so it always assigns\ntrue. Replace it with a direct assignment to make the intent clear.\n\n* Source/WebCore/html/HTMLMediaElement.cpp:\n(WebCore::HTMLMediaElement::setMutedInternal):\n\nCanonical link: https://commits.webkit.org/316552@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "9979b0bec00592fa0ce4c217ec9c7326ddf460c9",
      "subject": "Tautological self-assignment in HTMLMediaElement::setMutedInternal"
    },
    "316553@main": {
      "author": "Nikolas Zimmermann",
      "avatar": "https://www.gravatar.com/avatar/83cbd636495835720e369cd589e3ca5e?d=identicon\u0026s=64",
      "cl": "316553@main",
      "clUrl": "https://commits.webkit.org/316553@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318683\n\nUnreviewed.\n\nUpdate two baselines, that are passing in LBSE just have a different dump (omitting text nodes\nin dump, and a render tree dump that shows an additional layer).\n\n* LayoutTests/imported/w3c/web-platform-tests/svg/types/SameObject-identity-expected.txt:\n* LayoutTests/platform/mac-tahoe-wk2-lbse-text/svg/filters/feImage-remove-target-expected.txt: Added.\n\nCanonical link: https://commits.webkit.org/316553@main",
      "email": "nzimmermann@igalia.com",
      "hash": "445fc56126c968d0560904ebcb5c9f56b841ff89",
      "subject": "[LBSE] Update two LBSE baselines"
    },
    "316554@main": {
      "author": "Anuj Panta",
      "avatar": "https://www.gravatar.com/avatar/f795b7daddea5f93c9cbb5a4a8f0db14?d=identicon\u0026s=64",
      "cl": "316554@main",
      "clUrl": "https://commits.webkit.org/316554@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318471\nrdar://181254900\n\nReviewed by Sihui Liu.\n\nUnder Site Isolation, user scripts (e.g. AutoFill) run in isolated worlds but\nFrameDebugger only attached to the frame's main world, so their sources were\nnever reported. Attach to every world, matching FrameRuntimeAgent.\n\n* Source/WebCore/inspector/FrameDebugger.cpp:\n(WebCore::FrameDebugger::attachDebugger):\n* Source/WebCore/inspector/agents/frame/FrameDebuggerAgent.cpp:\n(WebCore::FrameDebuggerAgent::didClearWindowObjectInWorld):\n\nCanonical link: https://commits.webkit.org/316554@main",
      "email": "a_panta@apple.com",
      "hash": "eb7c162108e248d2a63d561d3c3ccbb7aaa71407",
      "subject": "Web Inspector: [SI] AutoFill / user-script sources missing in Sources tab"
    },
    "316555@main": {
      "author": "Yusuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/3455d9081295e3e740c1ffa901217d9b?d=identicon\u0026s=64",
      "cl": "316555@main",
      "clUrl": "https://commits.webkit.org/316555@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318671\nrdar://181480616\n\nReviewed by Tadeu Zagallo.\n\nSince valid FPImm128 is always u64x2[0] == u64x2[1], only uint64_t is\nenough to hold to represent. This patch drops m_additional and shrinking\nthe size from 32 to 24.\n\n* Source/JavaScriptCore/b3/air/AirArg.cpp:\n(JSC::B3::Air::Arg::jsHash const):\n* Source/JavaScriptCore/b3/air/AirArg.h:\n(JSC::B3::Air::Arg::fpImm128):\n(JSC::B3::Air::Arg::isValidFPImm128Form):\n(JSC::B3::Air::Arg::asV128 const):\n\nCanonical link: https://commits.webkit.org/316555@main",
      "email": "ysuzuki@apple.com",
      "hash": "674917cb5f4d588c52ba90f416b2388af80b237b",
      "subject": "[JSC] Compact Air::Arg size"
    },
    "316556@main": {
      "author": "Youenn Fablet",
      "avatar": "https://www.gravatar.com/avatar/0a9886e582a7aee1eb908eb59af36da4?d=identicon\u0026s=64",
      "cl": "316556@main",
      "clUrl": "https://commits.webkit.org/316556@main",
      "description": "rdar://180389539\nhttps://bugs.webkit.org/show_bug.cgi?id=317641\n\nReviewed by Jean-Yves Avenard.\n\nThe implementation is out of sync with the spec and was never enabled.\nWe can remove it and we will restart from scratch using the updated specification.\n\n* LayoutTests/http/tests/webrtc/sframe-transform-write-expected.txt: Removed.\n* LayoutTests/http/tests/webrtc/sframe-transform-write.html: Removed.\n* LayoutTests/http/wpt/webrtc/sframe-transform-error-expected.txt: Removed.\n* LayoutTests/http/wpt/webrtc/sframe-transform-error-worker.js: Removed.\n* LayoutTests/http/wpt/webrtc/sframe-transform-error.html: Removed.\n* LayoutTests/http/wpt/webrtc/sframe-transform-expected.txt: Removed.\n* LayoutTests/http/wpt/webrtc/sframe-transform-in-worker-expected.txt: Removed.\n* LayoutTests/http/wpt/webrtc/sframe-transform-readable-crash-expected.txt: Removed.\n* LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/RTCEncodedFrame-copy-construction.https-expected.txt:\n* LayoutTests/platform/glib/TestExpectations:\n* LayoutTests/platform/mac-wk2/TestExpectations:\n* LayoutTests/platform/win/TestExpectations:\n* LayoutTests/streams/writable-stream-create-within-multiple-workers-crash-expected.txt: Removed.\n* LayoutTests/streams/writable-stream-create-within-multiple-workers-crash.html: Removed.\n* LayoutTests/webrtc/audio-sframe-expected.txt: Removed.\n* LayoutTests/webrtc/audio-sframe.html: Removed.\n* LayoutTests/webrtc/sframe-keys-expected.txt: Removed.\n* LayoutTests/webrtc/sframe-keys.html: Removed.\n* LayoutTests/webrtc/sframe-test-vectors-expected.txt: Removed.\n* LayoutTests/webrtc/sframe-test-vectors.html: Removed.\n* LayoutTests/webrtc/sframe-transform-buffer-source-expected.txt: Removed.\n* LayoutTests/webrtc/sframe-transform-buffer-source.html: Removed.\n* LayoutTests/webrtc/video-sframe-expected.txt: Removed.\n* LayoutTests/webrtc/video-sframe.html: Removed.\n* Source/WebCore/CMakeLists.txt:\n* Source/WebCore/DerivedSources-input.xcfilelist:\n* Source/WebCore/DerivedSources-output.xcfilelist:\n* Source/WebCore/DerivedSources.make:\n* Source/WebCore/Headers.cmake:\n* Source/WebCore/Modules/mediastream/RTCRtpReceiver+Transform.idl:\n* Source/WebCore/Modules/mediastream/RTCRtpReceiver.cpp:\n(WebCore::RTCRtpReceiver::transform):\n* Source/WebCore/Modules/mediastream/RTCRtpReceiver.h:\n* Source/WebCore/Modules/mediastream/RTCRtpReceiverWithTransform.h:\n(WebCore::RTCRtpReceiverWithTransform::transform):\n(WebCore::RTCRtpReceiverWithTransform::setTransform):\n* Source/WebCore/Modules/mediastream/RTCRtpSFrameTransform.cpp: Removed.\n* Source/WebCore/Modules/mediastream/RTCRtpSFrameTransform.h: Removed.\n* Source/WebCore/Modules/mediastream/RTCRtpSFrameTransform.idl: Removed.\n* Source/WebCore/Modules/mediastream/RTCRtpSFrameTransformer.cpp: Removed.\n* Source/WebCore/Modules/mediastream/RTCRtpSFrameTransformer.h: Removed.\n* Source/WebCore/Modules/mediastream/RTCRtpSFrameTransformerCocoa.cpp: Removed.\n* Source/WebCore/Modules/mediastream/RTCRtpSFrameTransformerOpenSSL.cpp: Removed.\n* Source/WebCore/Modules/mediastream/RTCRtpSender+Transform.idl:\n* Source/WebCore/Modules/mediastream/RTCRtpSender.cpp:\n(WebCore::RTCRtpSender::transform):\n* Source/WebCore/Modules/mediastream/RTCRtpSender.h:\n* Source/WebCore/Modules/mediastream/RTCRtpSenderWithTransform.h:\n(WebCore::RTCRtpSenderWithTransform::transform):\n(WebCore::RTCRtpSenderWithTransform::setTransform):\n* Source/WebCore/Modules/mediastream/RTCRtpTransform.cpp:\n(WebCore::RTCRtpTransform::from):\n(WebCore::RTCRtpTransform::isAttached const):\n(WebCore::RTCRtpTransform::attachToReceiver):\n(WebCore::RTCRtpTransform::attachToSender):\n(WebCore::RTCRtpTransform::backendTransferedToNewTransform):\n(WebCore::RTCRtpTransform::clearBackend):\n(WebCore::operator==):\n* Source/WebCore/Modules/mediastream/RTCRtpTransform.h:\n* Source/WebCore/SaferCPPExpectations/UncountedCallArgsCheckerExpectations:\n* Source/WebCore/Sources.txt:\n* Source/WebCore/SourcesCocoa.txt:\n* Source/WebCore/WebCore.xcodeproj/project.pbxproj:\n* Source/WebCore/bindings/js/JSRTCRtpSFrameTransformCustom.cpp: Removed.\n* Source/WebCore/bindings/js/WebCoreBuiltinNames.h:\n* Source/WebCore/crypto/cocoa/CryptoUtilitiesCocoa.h:\n* Source/WebCore/dom/EventTargetFactory.in:\n* Source/WebCore/platform/SourcesGStreamer.txt:\n* Source/WebCore/testing/Internals.cpp:\n(WebCore::Internals::setSFrameCounter): Deleted.\n(WebCore::Internals::sframeCounter): Deleted.\n(WebCore::Internals::sframeKeyId): Deleted.\n* Source/WebCore/testing/Internals.h:\n* Source/WebCore/testing/Internals.idl:\n* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:\n* Tools/TestWebKitAPI/Tests/WebCore/RTCRtpSFrameTransformerTests.cpp: Removed.\n\nCanonical link: https://commits.webkit.org/316556@main",
      "email": "youenn@apple.com",
      "hash": "66f5f999eb8546baa1c80ca28ed7b00427dc2f26",
      "subject": "Remove SFrame transform current implementation"
    },
    "316557@main": {
      "author": "Taher Ali",
      "avatar": "https://www.gravatar.com/avatar/e104800647d8c98b8c9dbe736b5e1751?d=identicon\u0026s=64",
      "cl": "316557@main",
      "clUrl": "https://commits.webkit.org/316557@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318365\nrdar://177599904\n\nReviewed by Simon Fraser.\n\nSVGAnimatedValueProperty\u003cT\u003e::ensureAnimVal() creates the animVal SVGProperty\nwith |this| as the raw SVGProperty::m_owner back-pointer. The destructor clears\nit via detach(), but stopAnimation() and instanceStopAnimationImpl() set\nm_animVal = nullptr without detaching first. Since the animVal is exposed to script via\nSVGAnimatedLength.animVal and the JS wrapper holds an independent Ref, it can\noutlive the SVGAnimatedValueProperty, leaving m_owner dangling. A later\nlen.value read reaches SVGProperty::contextElement() through freed memory.\n\nSVGAnimatedPropertyList\u003cT\u003e has the identical pattern and is fixed the same way.\n\nDetach m_animVal before releasing or overwriting it, via a detachAnimVal()\nhelper that mirrors the destructor.\n\nTest: svg/animations/animVal-detach-after-stopAnimation-crash.html\n\n* LayoutTests/svg/animations/animVal-detach-after-stopAnimation-crash-expected.txt: Added.\n* LayoutTests/svg/animations/animVal-detach-after-stopAnimation-crash.html: Added.\n* Source/WebCore/svg/properties/SVGAnimatedPropertyList.h:\n(WebCore::SVGAnimatedPropertyList::detachAnimVal):\n* Source/WebCore/svg/properties/SVGAnimatedValueProperty.h:\n(WebCore::SVGAnimatedValueProperty::detachAnimVal):\n\nCanonical link: https://commits.webkit.org/316557@main",
      "email": "taher_ali@apple.com",
      "hash": "eb617fc2899ad5c540d73f03d27f00963203b843",
      "subject": "SVGProperty::contextElement after stopAnimation drops m_animVal without detach()"
    },
    "316558@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "316558@main",
      "clUrl": "https://commits.webkit.org/316558@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318609\nrdar://181403209\n\nReviewed by Simon Fraser.\n\nRenderLayerBacking::updateConfigurationAfterStyleChange() and\nRenderLayerBacking::updateConfiguration() each contained an identical six-line\nblock that wires up (or clears) the replica GraphicsLayer for a reflection.\nFactor it into a single updateReflectionLayer() helper and call it from both\nsites. No behavior change.\n\n* Source/WebCore/rendering/RenderLayerBacking.cpp:\n(WebCore::RenderLayerBacking::updateReflectionLayer):\n(WebCore::RenderLayerBacking::updateConfigurationAfterStyleChange):\n(WebCore::RenderLayerBacking::updateConfiguration):\n* Source/WebCore/rendering/RenderLayerBacking.h:\n\nCanonical link: https://commits.webkit.org/316558@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "6cda38154aafc2d06ab324d18ae19610c4330053",
      "subject": "Extract duplicated reflection/replica layer update into RenderLayerBacking::updateReflectionLayer()"
    },
    "316559@main": {
      "author": "Charlie Wolfe",
      "avatar": "https://www.gravatar.com/avatar/857b3b5ff3394c31fa2689310a93dbab?d=identicon\u0026s=64",
      "cl": "316559@main",
      "clUrl": "https://commits.webkit.org/316559@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318371\nrdar://181161362\n\nReviewed by Ryan Reno.\n\nSpeculative preloads and the subsequent parser-driven load both run CSP checks, causing blocked\nresources to emit duplicate violation reports and events.\n\nDisable all CSP reporting during speculative preloads, while preserving normal reporting for\n`\u003clink rel=preload\u003e`. The parser-driven load still performs the authoritative CSP check and reports\neach violation once.\n\n* LayoutTests/imported/w3c/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-to-only-sends-reports-to-first-endpoint.https.sub-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/content-security-policy/reporting/report-multiple-violations-01-expected.txt:\n* Source/WebCore/loader/cache/CachedResourceLoader.cpp:\n(WebCore::CachedResourceLoader::allowedByContentSecurityPolicy const):\n* Source/WebCore/page/csp/ContentSecurityPolicy.h:\n\nCanonical link: https://commits.webkit.org/316559@main",
      "email": "charliew@apple.com",
      "hash": "b88fdb90af4d3363fb018f3e9140bfdc57ce5afb",
      "subject": "Suppress duplicate CSP reports for speculative preloads"
    },
    "316560@main": {
      "author": "Aakash Jain",
      "avatar": "https://www.gravatar.com/avatar/e82e0cafeeac3a35b7e74206ebe4c536?d=identicon\u0026s=64",
      "cl": "316560@main",
      "clUrl": "https://commits.webkit.org/316560@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318580\nrdar://problem/180322016\n\nReviewed by Ryan Haddad.\n\nReplace the wildcard allowed_origins with an explicit list.\n\n* Tools/CISupport/build-webkit-org-webserver/master.cfg:\n* Tools/CISupport/ews-build-webserver/master.cfg:\n* Tools/CISupport/ews-build/master.cfg:\n\nCanonical link: https://commits.webkit.org/316560@main",
      "email": "aakash_jain@apple.com",
      "hash": "e91c6d086e046c43736bb61a471e214a19b3a4ee",
      "subject": "Set explicit allowed_origins for Buildbot www configuration"
    },
    "316561@main": {
      "author": "Mike Wyrzykowski",
      "avatar": "https://www.gravatar.com/avatar/4b1bc9e238714f95e22d5d2454c07066?d=identicon\u0026s=64",
      "cl": "316561@main",
      "clUrl": "https://commits.webkit.org/316561@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318576\nrdar://181343044\n\nReviewed by Dan Glastonbury.\n\nSite works in Chrome but was failing in Safari since it assumed enabling\nall features also enabled texture-formaters-tier2, which is supported on all\nApple hardware, but we didn't report it as supported.\n\nAdding support fixes the site error.\n\n* Source/WebCore/Modules/WebGPU/GPUAdapter.cpp:\n(WebCore::convertFeatureNameToEnum):\n* Source/WebCore/Modules/WebGPU/GPUFeatureName.h:\n(WebCore::convertToBacking):\n* Source/WebCore/Modules/WebGPU/GPUFeatureName.idl:\n* Source/WebCore/Modules/WebGPU/Implementation/WebGPUAdapterImpl.cpp:\n(WebCore::WebGPU::AdapterImpl::requestDevice):\n* Source/WebCore/Modules/WebGPU/Implementation/WebGPUConvertToBackingContext.cpp:\n(WebCore::WebGPU::ConvertToBackingContext::convertToBacking):\n* Source/WebCore/Modules/WebGPU/InternalAPI/WebGPUFeatureName.h:\n* Source/WebGPU/WebGPU/HardwareCapabilities.mm:\n(WebGPU::baseFeatures):\n* Source/WebGPU/WebGPU/ShaderModule.mm:\n(wgpuAdapterFeatureName):\n* Source/WebGPU/WebGPU/Texture.mm:\n(WebGPU::Texture::hasStorageBindingCapability):\n* Source/WebGPU/WebGPU/WebGPU.h:\n* Source/WebKit/Shared/WebGPU/WebGPUFeatureName.serialization.in:\n\nCanonical link: https://commits.webkit.org/316561@main",
      "email": "mwyrzykowski@apple.com",
      "hash": "7acb7e51d3a86bbbf7bebcf52abf3f3d28a59e93",
      "subject": "\"Pipeline layout is invalid\" opening grenzwert.net/wasm-modules/MedicalViewer/MedicalViewe"
    },
    "316562@main": {
      "author": "Alex Christensen",
      "avatar": "https://www.gravatar.com/avatar/b087c5dfcb1233e80cad9105fd5a1ac6?d=identicon\u0026s=64",
      "cl": "316562@main",
      "clUrl": "https://commits.webkit.org/316562@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318504\nrdar://181285283\n\nReviewed by Alexey Proskuryakov.\n\nWhen receiving an integer over IPC that is supposed to be an enum,\nif it isn't a valid enum value from a serialization.in file, we assume\nthe process is compromised and terminate it.  That means we need to have\nall valid values in serialization.in files.\n\nThis adds the missing values, and removes the default from the generated\nswitch statement so we see a warning if we have missed any.\n\n* Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.serialization.in:\n* Source/WebKit/Scripts/generate-serializers.py:\n(generate_impl):\n* Source/WebKit/Scripts/webkit/tests/GeneratedSerializers.cpp:\n(WTF::isValidEnum\u003cEnumNamespace::BoolEnumType\u003e):\n(WTF::isValidEnum\u003cEnumWithoutNamespace\u003e):\n(WTF::isValidEnum\u003cEnumNamespace::EnumType\u003e):\n(WTF::isValidEnum\u003cEnumNamespace::InnerEnumType\u003e):\n(WTF::isValidEnum\u003cEnumNamespace::InnerBoolType\u003e):\n* Source/WebKit/Shared/JavaScriptCore.serialization.in:\n* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:\n* Source/WebKit/Shared/WebCoreArgumentCodersMedia.serialization.in:\n* Source/WebKit/Shared/WebCoreArgumentCodersPlatform.serialization.in:\n\nCanonical link: https://commits.webkit.org/316562@main",
      "email": "achristensen@apple.com",
      "hash": "ed59e5db11a87df7a4b2718067a42b657e32850f",
      "subject": "Add missing serialization.in enum values"
    },
    "316563@main": {
      "author": "Jetzel Espinal",
      "avatar": "https://www.gravatar.com/avatar/2edd78d5d9f2f2e2e695465277634921?d=identicon\u0026s=64",
      "cl": "316563@main",
      "clUrl": "https://commits.webkit.org/316563@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318586\nrdar://181355011\n\nUnreviewed test gardening.\n\n* TestExpectations/apitests:\n\nCanonical link: https://commits.webkit.org/316563@main",
      "email": "jespinal23@apple.com",
      "hash": "e6c2d2e32f7e69667ab8a17ddfa1a52939a40ec8",
      "subject": "[GARDENING] TestIPC.IPCSerialization.SecTrustRef (api-test) is constant fail on Tahoe x86_64."
    },
    "316564@main": {
      "author": "Andy Estes",
      "avatar": "https://www.gravatar.com/avatar/643f10f01b26fd94d03482a2013b2ea0?d=identicon\u0026s=64",
      "cl": "316564@main",
      "clUrl": "https://commits.webkit.org/316564@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318694\nrdar://181509401\n\nUnreviewed build fix. Silenced deprecation warnings.\n\n* Source/WebKit/UIProcess/Cocoa/ExtensionCapabilityGranter.mm:\n(WebKit::ExtensionCapabilityGranter::setMediaCapabilityActive):\n\nCanonical link: https://commits.webkit.org/316564@main",
      "email": "aestes@apple.com",
      "hash": "957798604e6f9a4a4b4948dda7e29773f00a72f1",
      "subject": "[iOS] -activateWithError: and -suspendWithError: are deprecated"
    },
    "316565@main": {
      "author": "Ryan Haddad",
      "avatar": "https://www.gravatar.com/avatar/b7d8cd2dec546cac2524e4b58181f9d5?d=identicon\u0026s=64",
      "cl": "316565@main",
      "clUrl": "https://commits.webkit.org/316565@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318275\nrdar://181067423\n\nReviewed by Aakash Jain.\n\nCredit goes to Brianna Fan for the first draft of these changes.\n\nThe most important changes are adding support for the --issue flag (so a\nrevert can reuse an existing Bugzilla bug) and handling git-webkit errors\nand merge conflicts. There are also a handful of smaller fixes. All of the\ngit-webkit revert behavior remains gated behind the USE_GIT_WEBKIT_REVERT\nenvironment variable.\n\n* Tools/WebKitBot/src/WebKitBot.mjs:\n- buildGitWebkitRevertCommand: New shared helper for building git-webkit revert args.\n- extractTextIfMentioned: Strip Slack auto-linked URLs.\n- postMessage: New wrapper to disable link unfurling on all messages.\n- revertCommand / revertWithPRCommand: Support bug URLs as the --issue argument; handle\n  merge conflicts (list files, mention the created bug) and already-reverted errors.\n- dryRevertCommand: Support bug URLs as the --issue argument; preview the git-webkit\n  command when the feature flag is enabled.\n- generateRevertingPatchWithGitWebkit: Switch from execFileAsync to spawn for real-time output.\n- execInWebKitDirectorySimple: Fix locale warnings by passing PATH, HOME, LC_ALL, LANG.\n- cleanUpWorkingCopy: Clean up leftover branches.\n\nCanonical link: https://commits.webkit.org/316565@main",
      "email": "ryanhaddad@apple.com",
      "hash": "d0e78ef619435010cd969e67eee1655e992bb3f7",
      "subject": "[webkit-bot] Support the --issue flag and handle errors when reverting with git-webkit"
    },
    "316566@main": {
      "author": "Ryan Haddad",
      "avatar": "https://www.gravatar.com/avatar/b7d8cd2dec546cac2524e4b58181f9d5?d=identicon\u0026s=64",
      "cl": "316566@main",
      "clUrl": "https://commits.webkit.org/316566@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=317963\nrdar://180755064\n\nReviewed by Aakash Jain.\n\nThe iOS WPT EWS builders scope themselves to running the tests in `imported/w3c/web-platform-tests`\nby passing along that path via  `additionalArguments` in config.json. For the\n`run-layout-tests-without-change` step we append `--skipped=always` plus the subset of tests\nthat failed in the prior runs in order to only re-run those on the clean tree. However, the\ndirectory path contributed by `additionalArguments` was left on the command line, so run-webkit-tests\nran the union of the whole directory and the subset, defeating the optimization and running the full suite.\n\n* Tools/CISupport/ews-build/steps.py:\n(RunWebKitTestsWithoutChange.setLayoutTestCommand):\n(RunWebKitTestsWithoutChange.positional_test_paths_from_additional_arguments): Strip the\npositional test paths that came from `additionalArguments` before appending the failing subset,\nwhile preserving flags such as `--child-processes` and `--site-isolation-enabled-by-default`\nas well as the value passed to `--exclude-tests`.\n* Tools/CISupport/ews-build/steps_unittest.py: Add unit tests.\n(TestRunWebKitTestsWithoutChange.test_run_subtest_tests_success):\n(TestRunWebKitTestsWithoutChange):\n(TestRunWebKitTestsWithoutChange.test_run_subtest_tests_strips_wpt_directory_from_additional_arguments):\n(TestRunWebKitTestsWithoutChange.test_run_subtest_tests_preserves_flags_and_exclude_value):\n\nCanonical link: https://commits.webkit.org/316566@main",
      "email": "ryanhaddad@apple.com",
      "hash": "842b183cf9826a4df6246e83e0ede733f03de195",
      "subject": "[EWS] iOS-26-Simulator-WPT-WK2-Tests-EWS `run-layout-tests-without-change` step ran all tests instead of only the failing ones"
    },
    "316567@main": {
      "author": "Said Abou-Hallawa",
      "avatar": "https://www.gravatar.com/avatar/ae80a929a378a055822829ae63903296?d=identicon\u0026s=64",
      "cl": "316567@main",
      "clUrl": "https://commits.webkit.org/316567@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318560\nrdar://181335254\n\nReviewed by Alex Christensen.\n\nFastAndLowQuality was added to the enum FilterRenderingOption In 313563@main. The\nmain purpose of adding it was to make snapshot for page color sampling fast. This snapshotting happens in WebContent process right now so it does not need to be\nserialized to GPUProcess.\n\nBut in the future we may move this snapshotting to GPUProcess, like for site-\nisolation for example. Or other uses for FastAndLowQuality are discovered.\n\n* Source/WebKit/Shared/WebCoreArgumentCodersPlatform.serialization.in:\n\nCanonical link: https://commits.webkit.org/316567@main",
      "email": "said@apple.com",
      "hash": "aa5d33136b6fe84d175361947adbd3c8d9dec6df",
      "subject": "FilterRenderingOption::FastAndLowQuality should be added to serialization.in"
    },
    "316568@main": {
      "author": "Ruthvik Konda",
      "avatar": "https://www.gravatar.com/avatar/bca33cefcce93017251a8fbc1204cdc4?d=identicon\u0026s=64",
      "cl": "316568@main",
      "clUrl": "https://commits.webkit.org/316568@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=313571\nrdar://175035393\n\nReviewed by Eric Carlson.\n\nA well-behaved WebContent process sends CreateAudioSourceProvider at most once per\nRemoteMediaPlayerProxy. A second message reaches AudioSourceProviderAVFObjC's\nsetConfigureAudioStorageCallback / setAudioCallback, which overwrite the callbacks\nwithout taking tapStorage-\u003elock while a MediaToolbox thread may be invoking them\nunder that lock, freeing the captured RemoteAudioSourceProviderProxy mid-use.\nReject the duplicate message with a MESSAGE_CHECK.\n\n* LayoutTests/ipc/create-audio-source-provider-twice-expected.txt: Added.\n* LayoutTests/ipc/create-audio-source-provider-twice.html: Added.\n* Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp:\n(WebKit::RemoteMediaPlayerProxy::createAudioSourceProvider):\n\nOriginally-landed-as: 305413.810@safari-7624-branch (c5c267219314). rdar://180429279\nCanonical link: https://commits.webkit.org/316568@main",
      "email": "rkonda2@apple.com",
      "hash": "0181991daacad1d59eb2207a50070c8f487772bb",
      "subject": "RemoteMediaPlayerProxy::createAudioSourceProvider should reject duplicate IPC"
    },
    "316569@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "316569@main",
      "clUrl": "https://commits.webkit.org/316569@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318204\nrdar://181007466\n\nReviewed by Brent Fulgham.\n\nMediaElementSession::updateMediaUsageIfChanged() computes the\noutsideOfFullscreen flag as `element-\u003eisDescendantOf(*fullscreenElement)`,\nwhich is true when the media element is *inside* the fullscreen element --\nthe opposite of what the flag name and its consumer mean. The value flows\nthrough MediaUsageInfo::outsideOfFullscreen to the USVideoMetadataKeyOutsideOfFullscreen\nkey consumed by the UsageTracking (ScreenTime) framework, so ScreenTime was\nfed inverted fullscreen metadata.\n\nThe negation was present when the flag was introduced (210518) and matches\nthe sibling idiom in canShowControlsManager() (\"Elements which are not\ndescendants of the current fullscreen element cannot be main content\"), but\nthe `!` was dropped in 273330@main during the mechanical refactor that\nwrapped the access in fullscreenManagerIfExists().\n\nRestore the negation so the flag is true exactly when the media element is\nnot nested within the current fullscreen element. Added test case so we don't\nregress this in future.\n\nTest: media/media-usage-outside-fullscreen.html\n\n* LayoutTests/media/media-usage-outside-fullscreen-expected.txt: Added.\n* LayoutTests/media/media-usage-outside-fullscreen.html: Added.\n* Source/WebCore/html/MediaElementSession.cpp:\n(WebCore::MediaElementSession::updateMediaUsageIfChanged):\n\nCanonical link: https://commits.webkit.org/316569@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "7e532f6ae20014b45fc62f2c3b246878236d9e3f",
      "subject": "MediaUsageInfo::outsideOfFullscreen is inverted, reporting media inside fullscreen as outside (and vice versa)"
    },
    "316570@main": {
      "author": "Sam Sneddon",
      "avatar": "https://www.gravatar.com/avatar/99f6b56d9db9d32920dfcc56deae86fc?d=identicon\u0026s=64",
      "cl": "316570@main",
      "clUrl": "https://commits.webkit.org/316570@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318242\nrdar://181048883\n\nReviewed by Elliott Williams.\n\n`TestShard.pack` reconstructed each `TestInput` while substituting the\nshard name prefix into every string field via shorten/expand. The\ndump+load round-trip for the full layout-tests suite takes ~2.1s\nlocally with pack and ~0.46s without (pickling within a single\nprocess). This dwarfs the cost of a few MB of IPC it saves.\n\nAdditionally, the `TestShard` `__getstate__`/`__setstate__` requires\nupdates for every new field added to the underlying model classes, but\nwe cannot declare `__getstate__`/`__setstate__` on `TestInput` and\n`Test` because it requires the context of the `TestShard`'s name, thus\nmaking it easy to forget, and easy to lose data as a result of this.\n\nWith that downside, and with the lack of a performance upside, we\nsimply drop this \"optimisation\" generally.\n\n* Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:\n(TestShard.shorten): Deleted.\n(TestShard.expand): Deleted.\n(TestShard.pack): Deleted.\n(TestShard.__getstate__): Deleted.\n(TestShard.__setstate__): Deleted.\n* Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:\n(ShardTests): Deleted.\n(ShardTests.test_pickle): Deleted.\n\nCanonical link: https://commits.webkit.org/316570@main",
      "email": "gsnedders@apple.com",
      "hash": "d2cf4fa3541de9571c70aee9c67fedbb6a90b0e2",
      "subject": "Remove `TestShard` `pack`/`unpack` path-prefix compression"
    },
    "316571@main": {
      "author": "Tim Nguyen",
      "avatar": "https://www.gravatar.com/avatar/208c05ac2decdf818a4a08ada568328e?d=identicon\u0026s=64",
      "cl": "316571@main",
      "clUrl": "https://commits.webkit.org/316571@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=313835\nrdar://176061974\n\nReviewed by Megan Gardner and Wenson Hsieh.\n\n288559@main changed Editor::canCopy to return true for carets in non-editable\npositions so that document.execCommand(\"copy\") would fire copy events even\nwithout a range selection. This regressed the Copy menu item, which is now\nenabled whenever the caret was anywhere on a non-editable page.\n\nFix by reverting canCopy to require a range selection (restoring the correct\nmenu item state), and instead preserving 288559@main's execCommand behavior\nvia allowExecutionWhenDisabledCopyCut: when the copy/cut command is disabled\nfrom a DOM source, allow execution anyway if clipboard access is currently\npermitted (i.e. there is a user gesture or JavaScriptCanAccessClipboard is\ntrue). This lets oncopy handlers fire from user-gesture-driven execCommand\ncalls on pages without a selection, while keeping programmatic calls without\na user gesture fully blocked (including suppressing the copy event).\n\nAlso, return the actual copy/cut success from executeCopy/executeCut instead\nof always returning true, and only beep on failed copy/cut when the call\noriginates from the menu or a key binding.\n\n* LayoutTests/editing/execCommand/enabling-and-selection-2-expected.txt:\n* LayoutTests/editing/execCommand/enabling-and-selection-2.html:\n* LayoutTests/editing/execCommand/enabling-and-selection-expected.txt:\n* LayoutTests/editing/execCommand/enabling-and-selection.html:\n* LayoutTests/imported/w3c/web-platform-tests/editing/other/exec-command-without-editable-element.tentative-expected.txt:\n* LayoutTests/platform/glib/imported/w3c/web-platform-tests/editing/other/paste-clipboard-change.tentative_id=contenteditable-expected.txt:\n* LayoutTests/platform/glib/imported/w3c/web-platform-tests/editing/other/paste-clipboard-change.tentative_id=text-expected.txt:\n* LayoutTests/platform/gtk/imported/w3c/web-platform-tests/editing/other/exec-command-without-editable-element.tentative-expected.txt:\n* LayoutTests/platform/wpe/imported/w3c/web-platform-tests/editing/other/paste-in-list-with-inline-style.tentative-expected.txt:\n* LayoutTests/platform/wpe/imported/w3c/web-platform-tests/editing/other/paste-text-after-collapsible-white-space-whose-container-remove-non-first-children-expected.txt:\n* Source/WTF/wtf/MainThread.h:\n* Source/WTF/wtf/ThreadAssertions.h:\n* Source/WTF/wtf/cocoa/MainThreadCocoa.mm:\n(WTF::isMainThread):\n* Source/WebCore/dom/UserGestureIndicator.h:\n* Source/WebCore/editing/Editor.cpp:\n(WebCore::Editor::canCopy const):\n(WebCore::Editor::cut):\n(WebCore::Editor::copy):\n* Source/WebCore/editing/EditorCommand.cpp:\n(WebCore::executeCopy):\n(WebCore::executeCut):\n(WebCore::allowCopyCutFromDOM):\n(WebCore::allowExecutionWhenDisabledCopyCut):\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebViewEditActions.mm:\n(TestWebKitAPI::TEST(WKWebViewEditActions, CopyMenuItemDisabledWithNoSelection)):\n\nCanonical link: https://commits.webkit.org/316571@main",
      "email": "ntim@apple.com",
      "hash": "0b85f13185f5720036900ad6ae7ffe726c47a98c",
      "subject": "REGRESSION (Safari 18.x): Copy main menu item is enabled with no selection in the web page"
    },
    "316572@main": {
      "author": "Michael Catanzaro",
      "avatar": "https://www.gravatar.com/avatar/213b4484d2078dbdd03dcd3256564c2c?d=identicon\u0026s=64",
      "cl": "316572@main",
      "clUrl": "https://commits.webkit.org/316572@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=273435\n\nReviewed by Tim Nguyen.\n\nThis update notably fixes CVE-2024-4367.\n\nI've added new instructions for deleting prebuilt wasm content, so we\ncan resolve bug 273435.\n\n* Source/ThirdParty/pdfjs/PdfJSFiles.cmake:\n* Source/ThirdParty/pdfjs/README.webkit:\n* Source/ThirdParty/pdfjs/build/pdf.mjs:\n* Source/ThirdParty/pdfjs/build/pdf.sandbox.mjs:\n* Source/ThirdParty/pdfjs/build/pdf.worker.mjs:\n* Source/ThirdParty/pdfjs/web/debugger.css:\n(#PDFBug):\n(.pdfBugGroupsLayer):\n(.showDebugBoxes \u0026):\n(.showDebugBoxes):\n* Source/ThirdParty/pdfjs/web/debugger.mjs:\n* Source/ThirdParty/pdfjs/web/iccs/CGATS001Compat-v2-micro.icc: Added.\n* Source/ThirdParty/pdfjs/web/iccs/LICENSE: Added.\n* Source/ThirdParty/pdfjs/web/images/altText_disclaimer.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/altText_spinner.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/altText_warning.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/checkmark.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/comment-actionsButton.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/comment-closeButton.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/comment-editButton.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/comment-popup-editButton.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/editor-toolbar-edit.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/messageBar_closingButton.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/messageBar_info.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/messageBar_warning.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/pages_closeButton.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/pages_selected.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/pages_viewArrow.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/pages_viewButton.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/toolbarButton-editorSignature.svg: Added.\n* Source/ThirdParty/pdfjs/web/images/toolbarButton-viewsManagerToggle.svg: Renamed from Source/ThirdParty/pdfjs/web/images/toolbarButton-sidebarToggle.svg.\n* Source/ThirdParty/pdfjs/web/locale/ach/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/af/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/an/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ar/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ast/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/az/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/be/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/bg/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/bn/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/bo/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/bqi/viewer.ftl: Added.\n* Source/ThirdParty/pdfjs/web/locale/br/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/brx/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/bs/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ca/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/cak/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ckb/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/cs/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/cy/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/da/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/de/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/dsb/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/el/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/en-CA/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/en-GB/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/en-US/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/eo/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/es-AR/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/es-CL/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/es-ES/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/es-MX/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/et/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/eu/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/fa/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ff/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/fi/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/fr/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/fur/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/fy-NL/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ga-IE/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/gd/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/gl/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/gn/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/gu-IN/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/he/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/hi-IN/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/hr/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/hsb/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/hu/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/hy-AM/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/hye/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ia/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/id/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/is/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/it/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ja/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ka/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/kab/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/kk/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/km/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/kn/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ko/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/lij/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/lo/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/locale.json:\n* Source/ThirdParty/pdfjs/web/locale/lt/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ltg/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/lv/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/meh/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/mk/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ml/viewer.ftl: Added.\n* Source/ThirdParty/pdfjs/web/locale/mr/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ms/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/my/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/nb-NO/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ne-NP/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/nl/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/nn-NO/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/oc/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/pa-IN/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/pl/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/pt-BR/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/pt-PT/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/rm/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ro/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ru/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/sat/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/sc/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/scn/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/sco/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/si/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/sk/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/skr/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/sl/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/son/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/sq/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/sr/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/sv-SE/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/szl/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ta/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/te/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/tg/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/th/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/tl/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/tr/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/trs/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/uk/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/ur/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/uz/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/vi/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/wo/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/xh/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/zh-CN/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/locale/zh-TW/viewer.ftl:\n* Source/ThirdParty/pdfjs/web/viewer.css:\n(.messageBar):\n(display:flex;):\n(button):\n(.closeButton):\n(\u0026:is(:hover, :active, :focus)::before):\n(\u0026:hover):\n(\u0026:active):\n(\u0026:focus):\n(\u003e span):\n(#editorUndoBar):\n(position:fixed;):\n(#editorUndoBarUndoButton):\n(\u003e div):\n(.dialog):\n(@media screen and (forced-colors: active) --dialog-bg-color:Canvas;):\n(@media screen and (forced-colors: active) font:message-box;):\n(@media screen and (forced-colors: active) .title):\n(.dialogSeparator):\n(.dialogButtonsGroup):\n(.radio):\n(\u0026:checked):\n(\u003e .radioLabel):\n(button:not(:is(.toggle-button, .closeButton, .clearInputButton))):\n(\u0026.secondaryButton):\n(\u0026:disabled):\n(\u0026.primaryButton):\n(a):\n(textarea):\n(input[type=\"text\"]):\n(align-self:stretch;):\n(.description):\n(.toggler):\n(.textLayer):\n(:is(span, br)):\n(--min-font-size:1;):\n(.markedContent):\n(span[role=\"img\"]):\n(.highlight):\n(margin:-1px;):\n(\u0026.begin):\n(\u0026.end):\n(\u0026.middle):\n(\u0026.selected):\n(::-moz-selection):\n(::selection):\n(\u0026.selectionRendering):\n(br::-moz-selection):\n(br::selection):\n(.endOfContent):\n(\u0026.selecting .endOfContent):\n(.textLayerImages):\n(.annotationLayer):\n(.linkAnnotation):\n(\u0026 \u003e a:hover):\n(.popupAnnotation .popup):\n(.highlightArea:hover::after):\n(.popupAnnotation.focused .popup):\n(position:absolute;):\n(\u0026[data-main-rotation=\"180\"] .norotate):\n(\u0026[data-main-rotation=\"270\"] .norotate):\n(\u0026.disabled):\n(.annotationContent):\n(section):\n(.overlaidText):\n(.hasOwnCanvas:not(.sandboxModified) :is(input, textarea)):\n(.hasOwnCanvas.sandboxModified canvas.annotationContent):\n(.textLayer.selecting ~ \u0026 section):\n(:is(.linkAnnotation, .buttonWidgetAnnotation.pushButton) \u003e a):\n(:is(.linkAnnotation, .buttonWidgetAnnotation.pushButton):not(.hasBorder)):\n(.linkAnnotation.hasBorder:hover):\n(.hasBorder):\n(.textAnnotation img):\n(.textWidgetAnnotation :is(input, textarea),):\n(.textWidgetAnnotation :is(input, textarea):required,):\n(.choiceWidgetAnnotation select option):\n(.textWidgetAnnotation textarea):\n(.textWidgetAnnotation :is(input, textarea)[disabled],):\n(.textWidgetAnnotation :is(input, textarea):hover,):\n(.textWidgetAnnotation :is(input, textarea):focus,):\n(.buttonWidgetAnnotation:is(.checkBox, .radioButton) :focus):\n(.buttonWidgetAnnotation.checkBox :focus):\n(.buttonWidgetAnnotation.radioButton :focus):\n(.buttonWidgetAnnotation:is(.checkBox, .radioButton)):\n(\u0026:focus-within [data-canvas-name]):\n([data-canvas-name=\"checked\"]):\n(\u0026:has(~ input:not(:checked))):\n([data-canvas-name=\"unchecked\"]):\n(.textWidgetAnnotation input.comb):\n(.textWidgetAnnotation input.comb:focus):\n(.buttonWidgetAnnotation:is(.checkBox, .radioButton) input):\n(.buttonWidgetAnnotation:is(.checkBox, .radioButton):has():\n(.fileAttachmentAnnotation .popupTriggerArea):\n(.mediaAnnotation):\n(video.mediaContent):\n(audio.mediaContent):\n(.mediaPlayButton):\n(.popupAnnotation):\n(.popup):\n(.popup *):\n(.popup \u003e .header):\n(.popup \u003e .header \u003e .title):\n(.popup \u003e .header .popupDate):\n(.popupContent):\n(.richText \u003e *):\n(.popupTriggerArea):\n(section svg):\n(.annotationTextContent):\n(svg.quadrilateralsContainer):\n(:root):\n(@media screen and (forced-colors: active) :root):\n(@media screen and (forced-colors: active) .xfaLayer *:required):\n(.xfaLayer):\n(.xfaLayer .highlight):\n(.xfaLayer .highlight.appended):\n(.xfaLayer .highlight.begin):\n(.xfaLayer .highlight.end):\n(.xfaLayer .highlight.middle):\n(.xfaLayer .highlight.selected):\n(.xfaPage):\n(.xfaContentarea):\n(.xfaPrintOnly):\n(.xfaLayer *):\n(.xfaLayer *:required):\n(.xfaLayer div,):\n(.xfaLayer a):\n(.xfaRich li):\n(.xfaFont):\n(.xfaCaption):\n(.xfaCaptionForCheckButton):\n(.xfaLabel):\n(.xfaLeft):\n(.xfaRight):\n(:is(.xfaLeft, .xfaRight) \u003e :is(.xfaCaption, .xfaCaptionForCheckButton)):\n(.xfaTop):\n(.xfaBottom):\n(:is(.xfaTop, .xfaBottom) \u003e :is(.xfaCaption, .xfaCaptionForCheckButton)):\n(.xfaBorder):\n(.xfaWrapped):\n(:is(.xfaTextfield, .xfaSelect):focus):\n(:is(.xfaCheckbox, .xfaRadio):focus):\n(.xfaTextfield,):\n(.xfaSelect):\n(:is(.xfaTop, .xfaBottom) \u003e :is(.xfaTextfield, .xfaSelect)):\n(.xfaButton):\n(.xfaLink):\n(.xfaCheckbox,):\n(.xfaRich):\n(.xfaImage):\n(.xfaLrTb,):\n(.xfaLr):\n(.xfaRl):\n(.xfaTb \u003e div):\n(.xfaPosition):\n(.xfaArea):\n(.xfaValignMiddle):\n(.xfaTable):\n(.xfaTable .xfaRow):\n(.xfaTable .xfaRlRow):\n(.xfaTable .xfaRlRow \u003e div):\n(:is(.xfaNonInteractive, .xfaDisabled, .xfaReadOnly) :is(input, textarea)):\n(@media print .xfaTextfield,):\n(@media print .xfaSelect):\n(.canvasWrapper):\n(\u0026.highlight,):\n(\u0026[data-main-rotation=\"180\"]):\n(\u0026[data-main-rotation=\"270\"]):\n(\u0026.draw):\n(\u0026[data-draw-rotation=\"180\"]):\n(\u0026[data-draw-rotation=\"270\"]):\n(\u0026.highlight):\n(\u0026.highlightOutline):\n(.secondaryOutline):\n(\u0026.free):\n(.toggle-button):\n(\u0026:enabled:hover):\n(\u0026:enabled:hover:active):\n(\u0026::before):\n(.toggle-button[aria-pressed=\"true\"]):\n(\u0026:enabled:hover::before,):\n(\u0026:-moz-locale-dir(rtl)::before,):\n(@media (prefers-reduced-motion: no-preference) .toggle-button::before):\n(@media (prefers-contrast) .toggle-button:enabled:hover):\n(@media (prefers-contrast) .toggle-button:enabled:hover:active):\n(@media (prefers-contrast) .toggle-button[aria-pressed=\"true\"]:enabled):\n(.toggle-button:enabled:hover::before,):\n(@media (forced-colors) .toggle-button):\n(@media (forced-colors) .toggle-button[aria-pressed=\"true\"]:enabled::after):\n(@media (forced-colors) .toggle-button[aria-pressed=\"true\"]:enabled:hover:active::after):\n(.signatureDialog):\n(width:570px;):\n(.title):\n(.inputWithClearButton):\n(.clearInputButton):\n(#addSignatureDialog):\n(@media screen and (forced-colors: active) --secondary-color:ButtonText;):\n(@media screen and (forced-colors: active) #addSignatureDialogLabel):\n(@media screen and (forced-colors: active) \u0026.waiting::after):\n(@media screen and (forced-colors: active) .mainContainer):\n(@media screen and (forced-colors: active) \u0026:focus-visible):\n(@media screen and (forced-colors: active) \u0026[aria-selected=\"true\"]):\n(#addSignatureActionContainer):\n(\u0026#addSignatureTypeContainer):\n(\u0026::placeholder):\n(\u0026#addSignatureDrawContainer):\n(\u003e svg):\n(#thickness):\n(\u003e input):\n(\u0026::-webkit-slider-thumb,):\n(border-radius:4.5px;):\n(\u0026#addSignatureImageContainer):\n(#addSignatureImagePlaceholder):\n(#addSignatureFilePicker):\n(\u0026[data-selected=\"type\"] \u003e #addSignatureTypeContainer,):\n(#addSignatureControls):\n(\u003e label):\n(#clearSignatureButton):\n(\u0026:focus-visible):\n(#addSignatureSaveContainer):\n(\u0026:not(.fullStorage) #addSignatureSaveWarning):\n(\u0026.fullStorage #addSignatureSaveWarning):\n(#editSignatureDescriptionDialog):\n(#editSignatureDescriptionAndView):\n(#editorSignatureParamsToolbar):\n(.deleteButton):\n(.toolbarAddSignatureButton):\n(\u0026:is(:hover, :active) \u003e svg):\n(\u0026:is([disabled=\"disabled\"], [disabled])):\n(.editDescription.altText):\n(.commentPopup,):\n(#commentManagerDialog):\n(#commentManagerTextInput):\n(.annotationLayer.disabled :is(.annotationCommentButton)):\n(:is(.annotationLayer, .annotationEditorLayer)):\n(#editorCommentsSidebar,):\n(#editorCommentsSidebar):\n(#editorCommentsSidebarCount):\n(#editorCommentsSidebarCloseButton):\n(#editorCommentsSidebarListContainer):\n(filter:var(--comment-hover-filter);):\n(filter:var(--comment-active-filter);):\n(\u0026:is(:focus, :focus-visible) time::after):\n(time::after):\n(.sidebarCommentText):\n(\u0026.noComments):\n(time):\n(.commentPopup):\n(\u0026.dragging):\n(\u0026:not(.selected) .commentPopupButtons):\n(hr):\n(.commentPopupTop):\n(.commentPopupButtons):\n(\u0026.commentPopupEdit::before):\n(\u0026.commentPopupDelete::before):\n(.commentPopupText):\n(.commentPopupText,):\n(\u003e *):\n(span):\n(\u0026.free span):\n(.page:has(.annotationEditorLayer.nonEditing)):\n(#viewerContainer.pdfPresentationMode:fullscreen,):\n(@media (min-resolution: 1.1dppx) :root):\n([data-editor-rotation=\"90\"]):\n([data-editor-rotation=\"180\"]):\n([data-editor-rotation=\"270\"]):\n(.annotationEditorLayer):\n(\u0026.drawing *):\n(\u0026.getElements):\n(.annotationEditorLayer.waiting):\n(.annotationEditorLayer.disabled):\n(.annotationEditorLayer.freetextEditing):\n(.annotationEditorLayer.inkEditing):\n(.annotationEditorLayer .draw):\n(\u0026.selectedEditor):\n(\u0026:hover:not(.selectedEditor)):\n(\u0026:has(:focus-visible)):\n(\u0026:dir(ltr)):\n(\u0026:dir(rtl)):\n(.buttons):\n(.divider):\n(.basic):\n(\u0026:hover::before):\n(\u0026.highlightButton::before):\n(\u0026.commentButton::before):\n(\u0026.deleteButton::before):\n(\u003e :not(.divider)):\n(.altText):\n(\u0026.done::before):\n(\u0026.new):\n(\u0026.done):\n(.tooltip):\n(display:inline-flex;):\n(.comment):\n(.annotationEditorLayer .freeTextEditor):\n(.annotationEditorLayer .freeTextEditor .internal):\n(.annotationEditorLayer .freeTextEditor .overlay):\n(.annotationEditorLayer freeTextEditor .overlay.enabled):\n(.annotationEditorLayer .freeTextEditor .internal:empty::before):\n(.annotationEditorLayer .freeTextEditor .internal:focus):\n(.annotationEditorLayer .inkEditor):\n(.annotationEditorLayer .inkEditor.editing):\n(.annotationEditorLayer .inkEditor .inkEditorCanvas):\n(.annotationEditorLayer .stampEditor):\n(.noAltTextBadge):\n(\u0026 \u003e .resizer):\n(\u0026.topMiddle):\n(\u0026.topRight):\n(\u0026.middleRight):\n(\u0026.bottomRight):\n(\u0026.bottomMiddle):\n(\u0026.bottomLeft):\n(\u0026.middleLeft):\n(\u0026[data-main-rotation=\"0\"]):\n(\u0026.topMiddle,):\n(\u0026.topRight,):\n(\u0026.middleRight,):\n(\u0026):\n(.dialog.altText):\n(\u0026.positioned):\n(\u0026 #altTextContainer):\n(\u0026 .title):\n(\u0026 #addDescription):\n(\u0026 #buttons):\n(.dialog.newAltText):\n(width:80%;):\n(\u0026.aiInstalling):\n(#newAltTextDownloadModel):\n(\u0026.error):\n(#newAltTextCancel):\n(\u0026:not(.error) #newAltTextError):\n(#newAltTextContainer):\n(#descriptionInstruction):\n(.altTextSpinner):\n(\u0026.loading):\n(textarea::placeholder):\n(#newAltTextDescription):\n(#newAltTextDisclaimer):\n(#newAltTextImagePreview):\n(.colorPicker):\n(.swatch):\n(button:is(:hover, .selected) \u003e .swatch):\n(.basicColorPicker):\n(\u0026::-webkit-color-swatch):\n(\u0026[data-main-rotation=\"90\"]):\n(.highlightEditor):\n(.internal):\n(\u0026.disabled .internal):\n(.editToolbar):\n(\u0026:hover::after):\n(\u0026:has(.dropdown:not(.hidden))):\n(.dropdown):\n(\u003e .swatch):\n(\u0026[aria-selected=\"true\"] \u003e .swatch):\n(\u0026:is(:hover, :active, :focus-visible) \u003e .swatch):\n(.editorParamsToolbar:has(#highlightParamsToolbarContainer)):\n(#highlightParamsToolbarContainer):\n(\u0026:is(:active, :focus-visible)):\n(#editorHighlightThickness):\n(.thicknessPicker):\n(:is(\u0026 \u003e .editorParamsSlider[disabled])):\n(\u0026::before,):\n(\u0026::after):\n(.editorParamsSlider):\n(#editorHighlightVisibility):\n(margin-block:4px;):\n(#altTextSettingsDialog):\n(#aiModelSettings):\n(#automaticAltText,):\n(#createModelDescription,):\n(#automaticSettings):\n(button.hasPopupMenu):\n(\u0026[aria-expanded=\"false\"] + menu):\n(.popupMenu):\n(\u003e button):\n(\u0026:not(.noIcon)::before):\n(\u0026:not(:disabled)):\n(\u0026.selected::after):\n(.treeView):\n(position:relative;):\n(~ .treeItems):\n(\u0026:hover + a,):\n(\u003e .treeItem,):\n(\u0026#layersView .treeItem \u003e a):\n(.treeItem):\n(\u0026.selected \u003e a):\n(#outerContainer):\n(\u0026.viewsManagerOpen):\n(#viewerContainer:not(.pdfPresentationMode)):\n(\u0026.viewsManagerResizing :is(#sidebarContainer, #viewerContainer, #loadingBar)):\n(#viewsManager):\n(.viewsManagerButton):\n(\u0026.viewsCloseButton):\n(#viewsManagerHeader):\n(#viewsManagerTitle):\n(#viewsManagerSelector):\n(\u003e .popupMenu):\n(\u0026#outlinesViewMenu::before):\n(\u0026#attachmentsViewMenu::before):\n(\u0026#layersViewMenu::before):\n(#viewsManagerAddFileButton):\n(#viewsManagerCurrentOutlineButton):\n(#viewsManagerStatus):\n(.viewsManagerStatusLabel):\n(#viewsManagerStatusAction):\n(@media screen and (forced-colors: active) border-radius:2px;):\n(@media screen and (forced-colors: active) \u0026:hover):\n(\u0026#viewsManagerStatusActionDeselectButton:focus-visible):\n(#actionSelector):\n(\u0026:active::after):\n(#viewsManagerStatusUndo):\n(#viewsManagerStatusWarning):\n(#viewsManagerStatusWaiting):\n(#viewsManagerContent):\n(#thumbnailsView):\n(\u0026.isDragging \u003e .dragMarker,):\n(\u0026.pasteMode):\n(\u003e .thumbnailPasteButton):\n(\u0026:not(.pasteMode) \u003e .thumbnail \u003e .thumbnailPasteButton):\n(\u003e .thumbnail):\n(\u0026:not(.isDragging) \u003e .thumbnailImageContainer::after):\n(\u0026:has([aria-current=\"page\"]):not(.isDragging)):\n(\u0026.isDragging \u003e input):\n(\u003e .thumbnailImageContainer):\n(\u0026.missingThumbnailImage):\n(@media screen and (forced-colors: active) box-shadow:none;):\n(\u0026[aria-current=\"page\"]):\n(\u0026.placeholder):\n(\u0026.draggingThumbnail):\n(#attachmentsView):\n(.sidebar):\n(border-radius:var(--sidebar-border-radius);):\n(\u0026.resizing):\n(.sidebarResizer):\n(.newBadge):\n(.pdfViewer):\n(\u0026.copyAll):\n(\u0026.detailView):\n(.selection):\n(.pdfViewer .page):\n(:root:dir(rtl)):\n(@keyframes progressIndeterminate):\n(100%):\n(html):\n(\u0026[data-toolbar-density=\"touch\"]):\n(body):\n(.visuallyHidden):\n(.hidden,):\n(.pdfPresentationMode:fullscreen):\n(#mainContainer):\n(#sidebarContent):\n(#viewerContainer):\n(#sidebarContainer :is(input, button, select)):\n(.toolbar):\n(#toolbarSidebar):\n(#viewOutline::before):\n(#viewAttachments::before):\n(#viewLayers::before):\n(#toolbarSidebarRight):\n(.doorHanger,):\n(.doorHangerRight):\n(.doorHanger):\n(.dialogButton):\n(.dialogButton:is(:hover, :focus-visible)):\n(.dialogButton:is(:hover, :focus-visible) \u003e span):\n(.splitToolbarButtonSeparator):\n(#viewsManagerToggleButton::before):\n(#secondaryToolbarToggleButton::before):\n(#previous::before):\n(#next::before):\n(#zoomOutButton::before):\n(#zoomInButton::before):\n(#editorCommentButton::before):\n(#editorFreeTextButton::before):\n(#editorHighlightButton::before):\n(#editorInkButton::before):\n(#editorStampButton::before):\n(#editorSignatureButton::before):\n(#printButton::before):\n(#downloadButton::before):\n(#currentOutlineItem::before):\n(#viewFindButton::before):\n(.pdfSidebarNotification::after):\n(.verticalToolbarSeparator):\n(.horizontalToolbarSeparator):\n(.toggleButton):\n(\u0026:is(:hover, :has(\u003e input:focus-visible))):\n(\u0026 \u003e input):\n(.toolbarField):\n(#pageNumber):\n(.loadingInput:has(\u003e \u0026.loading)::after):\n(.loadingInput):\n(\u0026.start::after):\n(\u0026.end::after):\n(#outlineOptionsContainer):\n(dialog):\n(dialog::backdrop):\n(dialog \u003e .row):\n(dialog \u003e .row \u003e *):\n(dialog .toolbarField):\n(dialog .separator):\n(dialog .buttonRow):\n(dialog :link):\n(#passwordDialog):\n(#passwordDialog .toolbarField):\n(#documentPropertiesDialog):\n(#documentPropertiesDialog .row \u003e *):\n(#documentPropertiesDialog .row \u003e span):\n(#documentPropertiesDialog .row \u003e p):\n(#documentPropertiesDialog .buttonRow):\n(#printServiceDialog):\n(.grab-to-pan-grab):\n(.grab-to-pan-grab:active,):\n(.grab-to-pan-grabbing):\n(.toolbarButton):\n(\u0026.toggled):\n(\u0026:is(:hover, :focus-visible)):\n(\u0026.labeled):\n(.toolbarButtonWithContainer):\n(.menu):\n(.menuContainer):\n(.editorParamsToolbar):\n(.editorParamsLabel):\n(button:is(:hover, :focus-visible) .editorParamsLabel):\n(.editorParamsToolbarContainer):\n(.editorParamsColor):\n(\u0026::-webkit-slider-runnable-track,):\n(#secondaryToolbar):\n(#secondaryPrint::before):\n(#secondaryDownload::before):\n(#presentationMode::before):\n(#viewBookmark::before):\n(#firstPage::before):\n(#lastPage::before):\n(#pageRotateCcw::before):\n(#pageRotateCw::before):\n(#cursorSelectTool::before):\n(#cursorHandTool::before):\n(#scrollPage::before):\n(#scrollVertical::before):\n(#scrollHorizontal::before):\n(#scrollWrapped::before):\n(#spreadNone::before):\n(#spreadOdd::before):\n(#spreadEven::before):\n(#imageAltTextSettings::before):\n(#documentProperties::before):\n(#findbar):\n(#findInputContainer):\n(#findNextButton::before):\n(#findInput):\n(.loadingInput:has(\u003e \u0026[data-status=\"pending\"])::after):\n(\u0026[data-status=\"notFound\"]):\n(#findbarMessageContainer):\n(#findResultsCount):\n(#findMsg):\n(\u0026:empty):\n(\u0026.wrapContainers):\n(.visibleMediumView):\n(.toolbarLabel):\n(.toolbarHorizontalGroup):\n(.dropdownToolbarButton):\n(\u003e select):\n(\u0026:is(:hover, :focus-visible, :active)::after):\n(#toolbarContainer):\n(input):\n(.toolbarButtonSpacer):\n(#toolbarViewerLeft):\n(#loadingBar):\n(\u0026.indeterminate .progress):\n(@media all and (max-width: 840px) #outerContainer.viewsManagerOpen #viewerContainer):\n(@media all and (max-width: 750px) #outerContainer .hiddenMediumView):\n(@media all and (max-width: 750px) #outerContainer .visibleMediumView:not(.hidden, [hidden])):\n(@media all and (max-width: 690px) .hiddenSmallView,):\n(@media all and (max-width: 690px) #toolbarContainer #toolbarViewer .toolbarButtonSpacer):\n(.textLayer.highlighting): Deleted.\n(.textLayer :is(span, br)): Deleted.\n(.textLayer span.markedContent): Deleted.\n(.textLayer .highlight): Deleted.\n(@media screen and (forced-colors: active) .textLayer .highlight): Deleted.\n(.textLayer .highlight.appended): Deleted.\n(.textLayer .highlight.begin): Deleted.\n(.textLayer .highlight.end): Deleted.\n(.textLayer .highlight.middle): Deleted.\n(.textLayer .highlight.selected): Deleted.\n(.textLayer ::-moz-selection): Deleted.\n(.textLayer ::selection): Deleted.\n(.textLayer br::-moz-selection): Deleted.\n(.textLayer br::selection): Deleted.\n(.textLayer .endOfContent): Deleted.\n(.textLayer .endOfContent.active): Deleted.\n(@media screen and (forced-colors: active) .annotationLayer): Deleted.\n(@media screen and (forced-colors: active) .annotationLayer .textWidgetAnnotation :is(input, textarea):required, .annotationLayer .choiceWidgetAnnotation select:required, .annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) input:required): Deleted.\n(@media screen and (forced-colors: active) .annotationLayer .linkAnnotation): Deleted.\n(@media screen and (forced-colors: active) .annotationLayer .linkAnnotation:hover): Deleted.\n(@media screen and (forced-colors: active) .annotationLayer .linkAnnotation \u003e a:hover): Deleted.\n(@media screen and (forced-colors: active) .annotationLayer .popupAnnotation .popup): Deleted.\n(@media screen and (forced-colors: active) .annotationLayer .highlightArea:hover::after): Deleted.\n(@media screen and (forced-colors: active) .annotationLayer .popupAnnotation.focused .popup): Deleted.\n(.annotationLayer[data-main-rotation=\"90\"] .norotate): Deleted.\n(.annotationLayer[data-main-rotation=\"180\"] .norotate): Deleted.\n(.annotationLayer[data-main-rotation=\"270\"] .norotate): Deleted.\n(.annotationLayer.disabled section,): Deleted.\n(.annotationLayer canvas): Deleted.\n(.annotationLayer section): Deleted.\n(.annotationLayer :is(.linkAnnotation, .buttonWidgetAnnotation.pushButton) \u003e a): Deleted.\n(.annotationLayer :is(.linkAnnotation, .buttonWidgetAnnotation.pushButton):not(.hasBorder)): Deleted.\n(.annotationLayer .linkAnnotation.hasBorder:hover): Deleted.\n(.annotationLayer .hasBorder): Deleted.\n(.annotationLayer .textAnnotation img): Deleted.\n(.annotationLayer .textWidgetAnnotation :is(input, textarea), .annotationLayer .choiceWidgetAnnotation select, .annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) input): Deleted.\n(.annotationLayer .textWidgetAnnotation :is(input, textarea):required, .annotationLayer .choiceWidgetAnnotation select:required, .annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) input:required): Deleted.\n(.annotationLayer .choiceWidgetAnnotation select option): Deleted.\n(.annotationLayer .buttonWidgetAnnotation.radioButton input): Deleted.\n(.annotationLayer .textWidgetAnnotation textarea): Deleted.\n(.annotationLayer .textWidgetAnnotation [disabled]:is(input, textarea), .annotationLayer .choiceWidgetAnnotation select[disabled], .annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) input[disabled]): Deleted.\n(.annotationLayer .textWidgetAnnotation :is(input, textarea):hover, .annotationLayer .choiceWidgetAnnotation select:hover, .annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) input:hover): Deleted.\n(.annotationLayer .textWidgetAnnotation :is(input, textarea):hover, .annotationLayer .choiceWidgetAnnotation select:hover, .annotationLayer .buttonWidgetAnnotation.checkBox input:hover): Deleted.\n(.annotationLayer .textWidgetAnnotation :is(input, textarea):focus, .annotationLayer .choiceWidgetAnnotation select:focus): Deleted.\n(.annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) :focus): Deleted.\n(.annotationLayer .buttonWidgetAnnotation.checkBox :focus): Deleted.\n(.annotationLayer .buttonWidgetAnnotation.radioButton :focus): Deleted.\n(.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before,): Deleted.\n(.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before): Deleted.\n(.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after): Deleted.\n(.annotationLayer .buttonWidgetAnnotation.radioButton input:checked::before): Deleted.\n(.annotationLayer .textWidgetAnnotation input.comb): Deleted.\n(.annotationLayer .textWidgetAnnotation input.comb:focus): Deleted.\n(.annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) input): Deleted.\n(.annotationLayer .fileAttachmentAnnotation .popupTriggerArea): Deleted.\n(.annotationLayer .popupAnnotation): Deleted.\n(.annotationLayer .popup): Deleted.\n(.annotationLayer .popupAnnotation.focused .popup): Deleted.\n(.annotationLayer .popup *): Deleted.\n(.annotationLayer .popup \u003e .header): Deleted.\n(.annotationLayer .popup \u003e .header h1): Deleted.\n(.annotationLayer .popup \u003e .header .popupDate): Deleted.\n(.annotationLayer .popupContent): Deleted.\n(.annotationLayer .richText \u003e *): Deleted.\n(.annotationLayer .popupTriggerArea): Deleted.\n(.annotationLayer section svg): Deleted.\n(.annotationLayer .annotationTextContent): Deleted.\n(.annotationLayer .annotationTextContent span): Deleted.\n(.annotationLayer svg.quadrilateralsContainer): Deleted.\n(.canvasWrapper svg): Deleted.\n(.canvasWrapper svg[data-main-rotation=\"90\"] mask,): Deleted.\n(.canvasWrapper svg[data-main-rotation=\"180\"] mask,): Deleted.\n(.canvasWrapper svg[data-main-rotation=\"270\"] mask,): Deleted.\n(.canvasWrapper svg.highlight): Deleted.\n(@media screen and (forced-colors: active) .canvasWrapper svg.highlight): Deleted.\n(.canvasWrapper svg.highlight:not(.free)): Deleted.\n(.canvasWrapper svg.highlightOutline): Deleted.\n(.canvasWrapper svg.highlightOutline.hovered:not(.free):not(.selected)): Deleted.\n(.canvasWrapper svg.highlightOutline.selected:not(.free) .mainOutline): Deleted.\n(.canvasWrapper svg.highlightOutline.selected:not(.free) .secondaryOutline): Deleted.\n(.canvasWrapper svg.highlightOutline.free.hovered:not(.selected)): Deleted.\n(.canvasWrapper svg.highlightOutline.free.selected .mainOutline): Deleted.\n(.canvasWrapper svg.highlightOutline.free.selected .secondaryOutline): Deleted.\n(@media (prefers-color-scheme: dark) :where(html:not(.is-light)) .toggle-button): Deleted.\n(:where(html.is-dark) .toggle-button): Deleted.\n(@media (forced-colors: active) .toggle-button): Deleted.\n(.toggle-button:focus-visible): Deleted.\n(.toggle-button:enabled:hover): Deleted.\n(.toggle-button:enabled:active): Deleted.\n(.toggle-button[aria-pressed=\"true\"]:enabled:hover): Deleted.\n(.toggle-button[aria-pressed=\"true\"]:enabled:active): Deleted.\n(.toggle-button::before): Deleted.\n(.toggle-button[aria-pressed=\"true\"]::before): Deleted.\n(.toggle-button[aria-pressed=\"true\"]:enabled:hover::before,): Deleted.\n([dir=\"rtl\"] .toggle-button[aria-pressed=\"true\"]::before): Deleted.\n(@media (prefers-contrast) .toggle-button:enabled:active): Deleted.\n(@media (prefers-contrast) .toggle-button[aria-pressed=\"true\"]:enabled:hover,): Deleted.\n(@media (prefers-contrast) .toggle-button[aria-pressed=\"true\"]:enabled:active): Deleted.\n(@media (prefers-contrast) .toggle-button:hover::before,): Deleted.\n(@media (forced-colors) .toggle-button[aria-pressed=\"true\"]:enabled:active::after): Deleted.\n(.textLayer.highlighting:not(.free) span): Deleted.\n(.textLayer.highlighting.free span): Deleted.\n(@media (-webkit-min-device-pixel-ratio: 1.1), (min-resolution: 1.1dppx) :root): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor)): Deleted.\n(.annotationEditorLayer .draggable.selectedEditor:is(.freeTextEditor, .inkEditor, .stampEditor)): Deleted.\n(.annotationEditorLayer .moving:is(.freeTextEditor, .inkEditor, .stampEditor)): Deleted.\n(.annotationEditorLayer .selectedEditor:is(.freeTextEditor, .inkEditor, .stampEditor)): Deleted.\n(.annotationEditorLayer .selectedEditor:is(.freeTextEditor, .inkEditor, .stampEditor)::before): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor):hover:not(.selectedEditor)): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor):hover:not(.selectedEditor)::before): Deleted.\n(:is(.annotationEditorLayer): Deleted.\n(@media (prefers-color-scheme: dark) :where(html:not(.is-light)) :is(.annotationEditorLayer): Deleted.\n(:where(html.is-dark) :is(.annotationEditorLayer): Deleted.\n(@media screen and (forced-colors: active) :is(.annotationEditorLayer): Deleted.\n([dir=\"ltr\"] :is(.annotationEditorLayer): Deleted.\n([dir=\"rtl\"] :is(.annotationEditorLayer): Deleted.\n(.annotationEditorLayer .stampEditor canvas): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) \u003e .resizers): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) \u003e .resizers.hidden): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) \u003e .resizers \u003e .resizer): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) \u003e .resizers \u003e .resizer.topLeft): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) \u003e .resizers \u003e .resizer.topMiddle): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) \u003e .resizers \u003e .resizer.topRight): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) \u003e .resizers \u003e .resizer.middleRight): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) \u003e .resizers \u003e .resizer.bottomRight): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) \u003e .resizers \u003e .resizer.bottomMiddle): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) \u003e .resizers \u003e .resizer.bottomLeft): Deleted.\n(.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) \u003e .resizers \u003e .resizer.middleLeft): Deleted.\n(.annotationEditorLayer[data-main-rotation=\"0\"]): Deleted.\n([dir=\"ltr\"] .annotationEditorLayer): Deleted.\n([dir=\"rtl\"] .annotationEditorLayer): Deleted.\n(#altTextDialog): Deleted.\n(@media (prefers-color-scheme: dark) :where(html:not(.is-light)) #altTextDialog): Deleted.\n(:where(html.is-dark) #altTextDialog): Deleted.\n(@media screen and (forced-colors: active) #altTextDialog): Deleted.\n(#altTextDialog::backdrop): Deleted.\n(#altTextDialog.positioned): Deleted.\n(#altTextDialog #altTextContainer): Deleted.\n(#altTextDialog #altTextContainer *:focus-visible): Deleted.\n(#altTextDialog #altTextContainer .radio): Deleted.\n(#altTextDialog #altTextContainer .radio .radioButton): Deleted.\n(#altTextDialog #altTextContainer .radio .radioButton input): Deleted.\n(#altTextDialog #altTextContainer .radio .radioButton input:hover): Deleted.\n(#altTextDialog #altTextContainer .radio .radioButton input:checked): Deleted.\n(#altTextDialog #altTextContainer .radio .radioLabel): Deleted.\n(#altTextDialog #altTextContainer .radio .radioLabel span): Deleted.\n(#altTextDialog #altTextContainer #overallDescription): Deleted.\n(#altTextDialog #altTextContainer #overallDescription span): Deleted.\n(#altTextDialog #altTextContainer #overallDescription .title): Deleted.\n(#altTextDialog #altTextContainer #addDescription): Deleted.\n(#altTextDialog #altTextContainer #addDescription .descriptionArea): Deleted.\n(#altTextDialog #altTextContainer #addDescription .descriptionArea textarea): Deleted.\n(#altTextDialog #altTextContainer #addDescription .descriptionArea textarea:focus): Deleted.\n(#altTextDialog #altTextContainer #addDescription .descriptionArea textarea:disabled): Deleted.\n(#altTextDialog #altTextContainer #buttons): Deleted.\n(#altTextDialog #altTextContainer #buttons button): Deleted.\n(#altTextDialog #altTextContainer #buttons button:hover): Deleted.\n(#altTextDialog #altTextContainer #buttons button#altTextCancel): Deleted.\n(#altTextDialog #altTextContainer #buttons button#altTextCancel:hover): Deleted.\n(#altTextDialog #altTextContainer #buttons button#altTextSave): Deleted.\n(#altTextDialog #altTextContainer #buttons button#altTextSave:hover): Deleted.\n(@media (prefers-color-scheme: dark) :where(html:not(.is-light)) .colorPicker): Deleted.\n(:where(html.is-dark) .colorPicker): Deleted.\n(@media screen and (forced-colors: active) .colorPicker): Deleted.\n(.colorPicker .swatch): Deleted.\n(.colorPicker button:is(:hover, .selected) \u003e .swatch): Deleted.\n(.annotationEditorLayer[data-main-rotation=\"0\"] .highlightEditor:not(.free) \u003e .editToolbar): Deleted.\n(.annotationEditorLayer[data-main-rotation=\"90\"] .highlightEditor:not(.free) \u003e .editToolbar): Deleted.\n(.annotationEditorLayer[data-main-rotation=\"180\"] .highlightEditor:not(.free) \u003e .editToolbar): Deleted.\n(.annotationEditorLayer[data-main-rotation=\"270\"] .highlightEditor:not(.free) \u003e .editToolbar): Deleted.\n(.annotationEditorLayer .highlightEditor): Deleted.\n(.annotationEditorLayer .highlightEditor:not(.free)): Deleted.\n(.annotationEditorLayer .highlightEditor .internal): Deleted.\n(.annotationEditorLayer .highlightEditor.disabled .internal): Deleted.\n(.annotationEditorLayer .highlightEditor.selectedEditor .internal): Deleted.\n(.annotationEditorLayer .highlightEditor .editToolbar): Deleted.\n(.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker): Deleted.\n(.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker::after): Deleted.\n(.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker:hover::after): Deleted.\n(.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker:has(.dropdown:not(.hidden))): Deleted.\n(.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker:has(.dropdown:not(.hidden))::after): Deleted.\n(.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker .dropdown): Deleted.\n(.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker .dropdown button): Deleted.\n(.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker .dropdown button:is(:active, :focus-visible)): Deleted.\n(.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker .dropdown button \u003e .swatch): Deleted.\n(.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker .dropdown button[aria-selected=\"true\"] \u003e .swatch): Deleted.\n(.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker .dropdown button:is(:hover, :active, :focus-visible) \u003e .swatch): Deleted.\n(#highlightParamsToolbarContainer .editorParamsLabel): Deleted.\n(#highlightParamsToolbarContainer .colorPicker): Deleted.\n(#highlightParamsToolbarContainer .colorPicker .dropdown): Deleted.\n(#highlightParamsToolbarContainer .colorPicker .dropdown button): Deleted.\n(#highlightParamsToolbarContainer .colorPicker .dropdown button .swatch): Deleted.\n(#highlightParamsToolbarContainer .colorPicker .dropdown button:is(:active, :focus-visible)): Deleted.\n(#highlightParamsToolbarContainer .colorPicker .dropdown button[aria-selected=\"true\"] \u003e .swatch): Deleted.\n(#highlightParamsToolbarContainer .colorPicker .dropdown button:is(:hover, :active, :focus-visible) \u003e .swatch): Deleted.\n(#highlightParamsToolbarContainer #editorHighlightThickness): Deleted.\n(#highlightParamsToolbarContainer #editorHighlightThickness .editorParamsLabel): Deleted.\n(#highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker): Deleted.\n(@media (prefers-color-scheme: dark) :where(html:not(.is-light)) #highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker): Deleted.\n(:where(html.is-dark) #highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker): Deleted.\n(@media screen and (forced-colors: active) #highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker): Deleted.\n(:is(#highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker \u003e .editorParamsSlider[disabled])): Deleted.\n(#highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker::before,): Deleted.\n(#highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker::after): Deleted.\n(#highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker .editorParamsSlider): Deleted.\n(#highlightParamsToolbarContainer #editorHighlightVisibility): Deleted.\n(#highlightParamsToolbarContainer #editorHighlightVisibility .divider): Deleted.\n(@media (prefers-color-scheme: dark) :where(html:not(.is-light)) #highlightParamsToolbarContainer #editorHighlightVisibility .divider): Deleted.\n(:where(html.is-dark) #highlightParamsToolbarContainer #editorHighlightVisibility .divider): Deleted.\n(@media screen and (forced-colors: active) #highlightParamsToolbarContainer #editorHighlightVisibility .divider): Deleted.\n(#highlightParamsToolbarContainer #editorHighlightVisibility .toggler): Deleted.\n(#hiddenCopyElement,): Deleted.\n(@media screen and (forced-colors: active) .pdfViewer): Deleted.\n(.pdfViewer .canvasWrapper): Deleted.\n(.pdfViewer .page canvas): Deleted.\n(.pdfViewer .page canvas .structTree): Deleted.\n(.pdfViewer .page canvas[hidden]): Deleted.\n(.pdfViewer .page canvas[zooming]): Deleted.\n([dir=\"rtl\"]:root): Deleted.\n(@media (prefers-color-scheme: dark) :root:where(:not(.is-light))): Deleted.\n(:root:where(.is-dark)): Deleted.\n(*): Deleted.\n(#viewerContainer.pdfPresentationMode:-webkit-full-screen): Deleted.\n(.pdfPresentationMode:-webkit-full-screen section:not([data-internal-link])): Deleted.\n(.pdfPresentationMode:fullscreen section:not([data-internal-link])): Deleted.\n(.pdfPresentationMode:-webkit-full-screen .textLayer span): Deleted.\n(#sidebarContainer): Deleted.\n(#outerContainer:is(.sidebarMoving, .sidebarOpen) #sidebarContainer): Deleted.\n(#outerContainer.sidebarOpen #sidebarContainer): Deleted.\n(#outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode)): Deleted.\n(:is(.toolbar, .editorParamsToolbar, .findbar, #sidebarContainer)): Deleted.\n(#sidebarResizer): Deleted.\n(#toolbarContainer,): Deleted.\n(#toolbarViewer): Deleted.\n(#outerContainer.sidebarOpen #loadingBar): Deleted.\n(#loadingBar .progress): Deleted.\n(#loadingBar.indeterminate .progress): Deleted.\n(#loadingBar.indeterminate .progress .glimmer): Deleted.\n(#outerContainer.sidebarResizing): Deleted.\n(.findbar,): Deleted.\n(.findbar): Deleted.\n(.findbar \u003e div): Deleted.\n(.findbar \u003e div#findbarInputContainer): Deleted.\n(.findbar.wrapContainers \u003e div,): Deleted.\n(.findbar.wrapContainers \u003e div#findbarMessageContainer): Deleted.\n(.findbar input[type=\"checkbox\"]): Deleted.\n(.findbar label): Deleted.\n(.findbar label:hover,): Deleted.\n(.findbar .toolbarField[type=\"checkbox\"]:checked + .toolbarLabel): Deleted.\n(#findInput::-moz-placeholder): Deleted.\n(#findInput::placeholder): Deleted.\n(.loadingInput:has(\u003e #findInput[data-status=\"pending\"])::after): Deleted.\n(#findInput[data-status=\"notFound\"]): Deleted.\n(.secondaryToolbar,): Deleted.\n(.editorParamsToolbarContainer \u003e .editorParamsSetter): Deleted.\n(.editorParamsToolbarContainer .editorParamsLabel): Deleted.\n(.editorParamsToolbarContainer .editorParamsColor): Deleted.\n(.editorParamsToolbarContainer .editorParamsSlider): Deleted.\n(.editorParamsToolbarContainer .editorParamsSlider::-moz-range-progress): Deleted.\n(.editorParamsToolbarContainer .editorParamsSlider::-webkit-slider-runnable-track,): Deleted.\n(.editorParamsToolbarContainer .editorParamsSlider::-webkit-slider-thumb,): Deleted.\n(#secondaryToolbarButtonContainer): Deleted.\n(#editorStampParamsToolbar): Deleted.\n(#editorInkParamsToolbar): Deleted.\n(#editorFreeTextParamsToolbar): Deleted.\n(#editorHighlightParamsToolbar): Deleted.\n(#editorStampAddImage::before): Deleted.\n(:is(.doorHanger, .doorHangerRight)::after,): Deleted.\n(.doorHanger::after): Deleted.\n(.doorHangerRight::after): Deleted.\n(:is(.doorHanger, .doorHangerRight)::before): Deleted.\n(.doorHanger::before): Deleted.\n(.doorHangerRight::before): Deleted.\n(#findMsg[data-status=\"notFound\"]): Deleted.\n(:is(#findResultsCount, #findMsg):empty): Deleted.\n(#toolbarViewerMiddle): Deleted.\n(#toolbarViewerLeft,): Deleted.\n(#toolbarViewerRight,): Deleted.\n(#toolbarViewerLeft \u003e *,): Deleted.\n(#toolbarViewerRight): Deleted.\n(.splitToolbarButton): Deleted.\n(.splitToolbarButton \u003e .toolbarButton): Deleted.\n(.toolbarButton,): Deleted.\n(.toolbarButton \u003e span): Deleted.\n(:is(.toolbarButton, .secondaryToolbarButton, .dialogButton)[disabled]): Deleted.\n(.splitToolbarButton \u003e .toolbarButton:is(:hover, :focus-visible),): Deleted.\n(#toolbarSidebar .splitToolbarButton \u003e .toolbarButton): Deleted.\n(.toolbarButton:is(:hover, :focus-visible)): Deleted.\n(.secondaryToolbarButton:is(:hover, :focus-visible)): Deleted.\n(:is(.toolbarButton, .secondaryToolbarButton).toggled,): Deleted.\n(:is(.toolbarButton, .secondaryToolbarButton).toggled:hover,): Deleted.\n(:is(.toolbarButton, .secondaryToolbarButton).toggled::before): Deleted.\n(:is(.toolbarButton, .secondaryToolbarButton).toggled:hover:active,): Deleted.\n(.dropdownToolbarButton::after): Deleted.\n(.dropdownToolbarButton \u003e select): Deleted.\n(.dropdownToolbarButton \u003e select:is(:hover, :focus-visible)): Deleted.\n(.dropdownToolbarButton \u003e select \u003e option): Deleted.\n(:is(.toolbarButton, .secondaryToolbarButton, .treeItemToggler)::before,): Deleted.\n(.dropdownToolbarButton:is(:hover, :focus-visible, :active)::after): Deleted.\n(.toolbarButton::before): Deleted.\n(.toolbarButton:is(:hover, :focus-visible)::before,): Deleted.\n(.secondaryToolbarButton::before): Deleted.\n(#sidebarToggle::before): Deleted.\n(#secondaryToolbarToggle::before): Deleted.\n(#findPrevious::before): Deleted.\n(#findNext::before): Deleted.\n(#zoomOut::before): Deleted.\n(#zoomIn::before): Deleted.\n(#editorFreeText::before): Deleted.\n(#editorHighlight::before): Deleted.\n(#editorInk::before): Deleted.\n(#editorStamp::before): Deleted.\n(:is(#print, #secondaryPrint)::before): Deleted.\n(#secondaryOpenFile::before): Deleted.\n(:is(#download, #secondaryDownload)::before): Deleted.\n(a.secondaryToolbarButton): Deleted.\n(a:is(.toolbarButton, .secondaryToolbarButton)[href=\"#\"]): Deleted.\n(#viewThumbnail::before): Deleted.\n(#viewFind::before): Deleted.\n(.secondaryToolbarButton): Deleted.\n(.secondaryToolbarButton \u003e span): Deleted.\n(.toolbarField[type=\"checkbox\"]): Deleted.\n(#pageNumber::-webkit-inner-spin-button): Deleted.\n(.loadingInput:has(\u003e #pageNumber.loading)::after): Deleted.\n(.loadingInput::after): Deleted.\n(.loadingInput.start::after): Deleted.\n(.loadingInput.end::after): Deleted.\n(.toolbarField:focus): Deleted.\n(#numPages.toolbarLabel): Deleted.\n(#thumbnailView,): Deleted.\n(#thumbnailView): Deleted.\n(#thumbnailView \u003e a:is(:active, :focus)): Deleted.\n(.thumbnail): Deleted.\n(#thumbnailView \u003e a:last-of-type \u003e .thumbnail): Deleted.\n(a:focus \u003e .thumbnail,): Deleted.\n(.thumbnail.selected): Deleted.\n(.thumbnailImage): Deleted.\n(a:focus \u003e .thumbnail \u003e .thumbnailImage,): Deleted.\n(.thumbnail.selected \u003e .thumbnailImage): Deleted.\n(.thumbnail:not([data-loaded]) \u003e .thumbnailImage): Deleted.\n(.treeWithDeepNesting \u003e .treeItem,): Deleted.\n(.treeItem \u003e a): Deleted.\n(#layersView .treeItem \u003e a *): Deleted.\n(#layersView .treeItem \u003e a \u003e label): Deleted.\n(#layersView .treeItem \u003e a \u003e label \u003e input): Deleted.\n(.treeItemToggler): Deleted.\n(.treeItemToggler::before): Deleted.\n(.treeItemToggler.treeItemsHidden::before): Deleted.\n(.treeItemToggler.treeItemsHidden ~ .treeItems): Deleted.\n(.treeItem.selected \u003e a): Deleted.\n(.treeItemToggler:hover,): Deleted.\n(#sidebarContainer:has(#outlineView:not(.hidden)) #outlineOptionsContainer): Deleted.\n(@media all and (max-width: 900px) #toolbarViewerMiddle): Deleted.\n(@media all and (max-width: 840px) #outerContainer.sidebarOpen #viewerContainer): Deleted.\n(@media all and (max-width: 750px) :root): Deleted.\n(@media all and (max-width: 750px) #outerContainer .visibleMediumView): Deleted.\n(@media all and (max-width: 690px) .toolbarButtonSpacer): Deleted.\n(@media all and (max-width: 690px) .findbar): Deleted.\n* Source/ThirdParty/pdfjs/web/viewer.html:\n* Source/ThirdParty/pdfjs/web/viewer.mjs:\n* Source/ThirdParty/pdfjs/web/wasm/LICENSE_JBIG2: Added.\n* Source/ThirdParty/pdfjs/web/wasm/LICENSE_OPENJPEG: Added.\n* Source/ThirdParty/pdfjs/web/wasm/LICENSE_PDFJS_JBIG2: Added.\n* Source/ThirdParty/pdfjs/web/wasm/LICENSE_PDFJS_OPENJPEG: Added.\n* Source/ThirdParty/pdfjs/web/wasm/LICENSE_PDFJS_QCMS: Added.\n* Source/ThirdParty/pdfjs/web/wasm/LICENSE_QCMS: Added.\n* Source/ThirdParty/pdfjs/web/wasm/jbig2_nowasm_fallback.js: Added.\n(async JBig2):\n(async JBig2.):\n* Source/ThirdParty/pdfjs/web/wasm/openjpeg_nowasm_fallback.js: Added.\n(async OpenJPEG):\n(async OpenJPEG.):\n* Source/ThirdParty/pdfjs/web/wasm/quickjs-eval.js: Added.\n(async QuickJS):\n(async QuickJS.):\n* Tools/glib/generate-pdfjs-resource-manifest.py:\n\nCanonical link: https://commits.webkit.org/316572@main",
      "email": "mcatanzaro@gnome.org",
      "hash": "e284f1e3e8e49d65a150675ec79b1dd8fca9cd75",
      "subject": "Update to PDF.js v6.1.200"
    },
    "316573@main": {
      "author": "Nikolas Zimmermann",
      "avatar": "https://www.gravatar.com/avatar/83cbd636495835720e369cd589e3ca5e?d=identicon\u0026s=64",
      "cl": "316573@main",
      "clUrl": "https://commits.webkit.org/316573@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=311013\n\nReviewed by Michael Catanzaro.\n\nThe CSSParserToken union (8 bytes) was left partially or fully uninitialized\nby several constructors. When tokens were copied into a CSSVariableData Vector\nbuffer, the uninitialized bytes propagated. During style resolution, inlined\nsubstitution resolution code in resolveSubstitutionFunctions() read from these\ntoken bytes, triggering a valgrind \"Conditional jump or move depends on\nuninitialised value(s)\" error.\n\nValgrind trace:\n  ==1187609== Conditional jump or move depends on uninitialised value(s)\n  ==1187609==    at 0x9B8181E: WebCore::Style::Builder::resolveSubstitutionFunctions(...)\n  ==1187609==    by 0x9B80CDF: WebCore::Style::Builder::applyProperty(...)\n  ==1187609==    by 0x9B7F63B: WebCore::Style::Builder::applyCascadeProperty(...)\n  ==1187609==    by 0x9B7F0FC: WebCore::Style::Builder::applyHighPriorityProperties()\n  ==1187609==  Uninitialised value was created by a heap allocation\n  ==1187609==    at 0x4846828: malloc\n  ==1187609==    at ...: bmalloc_allocate_auxiliary_impl_casual_case(...)\n  ==1187609==    at 0x8841600: WebCore::CSSVariableReferenceValue::create(...)\n  ==1187609==    at 0x88D6DE7: WebCore::consumeStyleProperty(...)\n\nTo fix, add a { 0 } default initializer to double m_numericValue (the largest\nunion member, 8 bytes), ensuring all union bytes are zero-initialized for\nconstructors that don't explicitly set a different member.\n\nCovered by existing tests.\n\n* Source/WebCore/css/parser/CSSParserToken.cpp:\n(WebCore::CSSParserToken::CSSParserToken):\n* Source/WebCore/css/parser/CSSParserToken.h:\n\nCanonical link: https://commits.webkit.org/316573@main",
      "email": "nzimmermann@igalia.com",
      "hash": "ed517e412084a29ec14c7952131f6d3462ca381c",
      "subject": "Zero-initialize CSSParserToken union to fix valgrind uninitialised value error"
    },
    "316574@main": {
      "author": "Jetzel Espinal",
      "avatar": "https://www.gravatar.com/avatar/2edd78d5d9f2f2e2e695465277634921?d=identicon\u0026s=64",
      "cl": "316574@main",
      "clUrl": "https://commits.webkit.org/316574@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318697\nrdar://181513166\n\nUnreviewed test gardening.\n\n* LayoutTests/platform/mac-wk2/TestExpectations:\n\nCanonical link: https://commits.webkit.org/316574@main",
      "email": "jespinal23@apple.com",
      "hash": "224e18252c85499c71ee5f09d49c778a00cb1237",
      "subject": "[GARDENING]REGRESSION(316540@main) inspector/animation/lifecycle-web-animation.html (layout-tests) is a constant text failure on macOS."
    },
    "316575@main": {
      "author": "Jer Noble",
      "avatar": "https://www.gravatar.com/avatar/6d2cde9be23b98223ca964cb3b7813a0?d=identicon\u0026s=64",
      "cl": "316575@main",
      "clUrl": "https://commits.webkit.org/316575@main",
      "description": "rdar://180962053\nhttps://bugs.webkit.org/show_bug.cgi?id=318490\n\nReviewed by Eric Carlson.\n\nWhen PiP is exited, we immediately call setVideoFullscreenMode() with VideoFullscreenModeNone,\nand when computeAcceleratedRenderingStateAndUpdateMediaPlayer() is subsequently called, it\nbelieves the element is not visible, even though the exit pip animation has only just started.\n\nMark the element as visible if the fullscreen mode is changing, which requires a recalculation\nwhen that state changes. Since many things can now contribute to the visibility state changing,\ndo so in the next run loop to coalesce requests that all occur at once.\n\n* Source/WebCore/html/HTMLMediaElement.cpp:\n(WebCore::HTMLMediaElement::didDetachRenderers):\n(WebCore::HTMLMediaElement::scheduleUpdateAcceleratedRenderingState):\n(WebCore::HTMLMediaElement::cancelPendingTasks):\n(WebCore::HTMLMediaElement::enterFullscreen):\n(WebCore::HTMLMediaElement::exitFullscreen):\n(WebCore::HTMLMediaElement::didBecomeFullscreenElement):\n(WebCore::HTMLMediaElement::didStopBeingFullscreenElement):\n(WebCore::HTMLMediaElement::setFullscreenMode):\n(WebCore::HTMLMediaElement::setChangingVideoFullscreenMode):\n* Source/WebCore/html/HTMLMediaElement.h:\n(WebCore::HTMLMediaElement::setChangingVideoFullscreenMode): Deleted.\n* Source/WebCore/html/HTMLVideoElement.cpp:\n(WebCore::HTMLVideoElement::acceleratedRenderingStateChanged):\n(WebCore::HTMLVideoElement::mediaPlayerRenderingModeChanged):\n(WebCore::HTMLVideoElement::computeAcceleratedRenderingStateAndUpdateMediaPlayer):\n(WebCore::HTMLVideoElement::viewportIntersectionChanged):\n\nCanonical link: https://commits.webkit.org/316575@main",
      "email": "jer.noble@apple.com",
      "hash": "10b3e30fc7f7d57ab315b5c0017e86b3bfaa4d0f",
      "subject": "[iOS] Restoring Fullscreen from PiP on YouTube results in wrongly sized video"
    },
    "316576@main": {
      "author": "Andres Gonzalez",
      "avatar": "https://www.gravatar.com/avatar/4e49c1280c6711bf7da7c7c121e013f6?d=identicon\u0026s=64",
      "cl": "316576@main",
      "clUrl": "https://commits.webkit.org/316576@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318529\n\u003crdar://problem/181299126\u003e\n\nReviewed by Dominic Mazzoni.\n\nWhen accessibility text stitching merges adjacent text runs into a single static-text\nrepresentative, the representative's value spans all of its members, but its text marker\nrange did not. On the isolated tree, AXIsolatedObject::textMarkerRange() used the stitch\ngroup only to pick a stop boundary and then derived the range endpoints by walking the\naccessibility tree, a walk that stops at the representative's own run. As a result\nAXTextMarkerRangeForUIElement, and the string, attributed-string, and length APIs derived\nfrom that range, returned only the first run (e.g. \"By\" of a stitched \"By JOHN GRUBER\")\nrather than the full stitched text, so a client that reads an element's text through its\nmarker range got truncated content that disagreed with the element's value.\n\nBuild the representative's range directly from its stitch-group members, from the first\nthrough the last member that has text runs, mirroring the main-thread\nAccessibilityObject::simpleRange(). This spans the full stitched text and is consistent\nwith stringValue() and relativeFrame(), which already iterate the members.\n\nTest: accessibility/mac/stitched-text-marker-range-for-ui-element.html\n\n* LayoutTests/accessibility/mac/stitched-text-marker-range-for-ui-element-expected.txt: Added.\n* LayoutTests/accessibility/mac/stitched-text-marker-range-for-ui-element.html: Added.\n* Source/WebCore/accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm:\n(WebCore::AXIsolatedObject::textMarkerRange const): Build a stitch-group representative's\nrange from its members instead of a tree walk that stops at the first run.\n\nCanonical link: https://commits.webkit.org/316576@main",
      "email": "andresg_22@apple.com",
      "hash": "5fd9a4304b881e29883ec2d31858386440f7e39a",
      "subject": "AX: A text-stitch-group representative's text marker range is truncated to its first run"
    },
    "316577@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "316577@main",
      "clUrl": "https://commits.webkit.org/316577@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318198\nrdar://181003146\n\nReviewed by Brent Fulgham.\n\ninvalidateTrackIndexesAfterTrack() is meant to clear the cached index of\nthe given track and every track following it, since inserting or removing\na track shifts all subsequent positions. The loop advanced its counter\nfrom the found index to the end of the vector, but the body indexed with\nthe loop-invariant `index` instead of the loop variable, so it repeatedly\ninvalidated only the first track and left every following track with a\nstale cached index.\n\nFix the indexing, and while here rewrite the loop as a range-for over\nVector::subspan(index) to remove the manual counter.\n\n* Source/WebCore/html/track/TextTrackList.cpp:\n(WebCore::TextTrackList::invalidateTrackIndexesAfterTrack):\n\nCanonical link: https://commits.webkit.org/316577@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "0cfd238e978672f45c8c2070725693aa01a5041f",
      "subject": "TextTrackList::invalidateTrackIndexesAfterTrack only invalidates the first track's index"
    },
    "316578@main": {
      "author": "Eric Carlson",
      "avatar": "https://www.gravatar.com/avatar/e227ff07cc6d645fc1c69fd56c2c8cb8?d=identicon\u0026s=64",
      "cl": "316578@main",
      "clUrl": "https://commits.webkit.org/316578@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318127\nrdar://180728516\n\nReviewed by Andy Estes.\n\nThe MediaCapture-Main specification defines OverconstrainedError as\n`interface OverconstrainedError : DOMException`, with the `name`\n\"OverconstrainedError\" and `code` of 0 (no legacy DOMException code\nmapping). WebKit's implementation was a standalone RefCounted interface\nthat did not inherit from DOMException and exposed no `code` attribute,\nwhich caused several spec-compliance failures, including\n`new OverconstrainedError(\"x\") instanceof DOMException` returning false\nand `OverconstrainedError.length` being 0 instead of 1.\n\nThis patch makes OverconstrainedError inherit from DOMException, the\nsame pattern already used by RTCError, WebTransportError, and\nGPUPipelineError. The two constructors now delegate to DOMException\nwith legacyCode = 0 and name \"OverconstrainedError\", giving instances\nthe expected `.code`, `.name`, and DOMException prototype chain for\nfree. The IDL constructor signature is also tightened to match the\nspec: `constructor(DOMString constraint, optional DOMString message = \"\")`.\n\nA new OverconstrainedError.cpp is added to host the constructors and\nthe lazy constraint() conversion (previously inline in the header),\nand is wired into the unified-sources build and the Xcode project.\n\nLayout test baselines are updated where the new behavior changes\nPASS/FAIL state, and fast/events/constructors/overconstrained-error-event-constructor.html\nis adjusted to pass the now-required `constraint` argument.\n\nNo new tests, existing tests updated.\n\n* LayoutTests/fast/events/constructors/overconstrained-error-event-constructor-expected.txt:\n* LayoutTests/fast/events/constructors/overconstrained-error-event-constructor.html:\n* LayoutTests/fast/mediastream/mediastream-onaddtrack-and-overconstrainederror-code-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/mediacapture-streams/idlharness.https.window-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/mediacapture-streams/overconstrained_error.https-expected.txt:\n* Source/WebCore/Modules/mediastream/OverconstrainedError.cpp: Copied from Source/WebCore/Modules/mediastream/OverconstrainedError.idl.\n(WebCore::OverconstrainedError::OverconstrainedError):\n(WebCore::OverconstrainedError::constraint const):\n* Source/WebCore/Modules/mediastream/OverconstrainedError.h:\n(isType):\n(WebCore::OverconstrainedError::create): Deleted.\n(WebCore::OverconstrainedError::message const): Deleted.\n(WebCore::OverconstrainedError::name const): Deleted.\n(WebCore::OverconstrainedError::OverconstrainedError): Deleted.\n(WebCore::OverconstrainedError::constraint const): Deleted.\n* Source/WebCore/Modules/mediastream/OverconstrainedError.idl:\n* Source/WebCore/Sources.txt:\n* Source/WebCore/WebCore.xcodeproj/project.pbxproj:\n* Source/WebCore/dom/DOMException.h:\n\nCanonical link: https://commits.webkit.org/316578@main",
      "email": "eric.carlson@apple.com",
      "hash": "525dd980ce78d4d809d726478919965cb2cd05f2",
      "subject": "[MediaStream] OverconstrainedError does not inherit from DOMException and has no code attribute"
    },
    "316579@main": {
      "author": "Jetzel Espinal",
      "avatar": "https://www.gravatar.com/avatar/2edd78d5d9f2f2e2e695465277634921?d=identicon\u0026s=64",
      "cl": "316579@main",
      "clUrl": "https://commits.webkit.org/316579@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318713\nrdar://181524436\n\nUnreviewed test gardening.\n\n* TestExpectations/apitests:\n\nCanonical link: https://commits.webkit.org/316579@main",
      "email": "jespinal23@apple.com",
      "hash": "0c3a0a165f1454f8a3615e350b4e298f1b8178cc",
      "subject": "[GARDENING][ macOS DEBUG x86_64 ] TestWebKitAPI.EvaluateJavaScript.Serialization (api-test) is a flaky timeout."
    },
    "316580@main": {
      "author": "Richard Robinson",
      "avatar": "https://www.gravatar.com/avatar/a0d2f862985ed0fd47887be66f5a3e4f?d=identicon\u0026s=64",
      "cl": "316580@main",
      "clUrl": "https://commits.webkit.org/316580@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318593\nrdar://181377652\n\nReviewed by Tim Horton.\n\n* Source/WebKit/Configurations/WebKit.xcconfig:\n* Source/WebKit/UIProcess/API/Cocoa/WebKitSwiftOverlay.swift:\n\nCanonical link: https://commits.webkit.org/316580@main",
      "email": "richard_robinson2@apple.com",
      "hash": "e4ab9e83a9991a18367c3c7317d6fed8c42f1fd1",
      "subject": "[Swift in WebKit] Build Swift on watchOS and tvOS public builds"
    },
    "316581@main": {
      "author": "Richard Robinson",
      "avatar": "https://www.gravatar.com/avatar/a0d2f862985ed0fd47887be66f5a3e4f?d=identicon\u0026s=64",
      "cl": "316581@main",
      "clUrl": "https://commits.webkit.org/316581@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318666\nrdar://181469935\n\nReviewed by Abrar Rahman Protyasha.\n\nMore verbose than previously, but less verbose than the default logging output.\n\n* Source/WebKit/UIProcess/mac/WKAppKitGestureController.h:\n* Source/WebKit/UIProcess/mac/WKAppKitGestureController.mm:\n(gestureLogName):\n(-[WKAppKitGestureController panGestureRecognized:]):\n(-[WKAppKitGestureController singleClickGestureRecognized:]):\n(-[WKAppKitGestureController doubleClickGestureRecognized:]):\n(-[WKAppKitGestureController secondaryClickGestureRecognized:]):\n(-[WKAppKitGestureController mouseTrackingGestureRecognized:]):\n(-[WKAppKitGestureController dragPressGestureRecognized:]):\n* Source/WebKit/UIProcess/mac/WKAppKitGestureController.swift:\n(WKAppKitGestureController.loggingDescription(for:)):\n(NSGestureRecognizer.name):\n\nCanonical link: https://commits.webkit.org/316581@main",
      "email": "richard_robinson2@apple.com",
      "hash": "414dedf1e400764bc4fe8fc5de266c5dac0f5c37",
      "subject": "[AppKit Gestures] Improve logging output for gestures"
    },
    "316582@main": {
      "author": "Marta Darbinyan",
      "avatar": "https://www.gravatar.com/avatar/6143b3673258642a8b75585c768ccf10?d=identicon\u0026s=64",
      "cl": "316582@main",
      "clUrl": "https://commits.webkit.org/316582@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=318382\nrdar://181170547\n\nUnreviewed test gardening\n\n* LayoutTests/platform/ios/TestExpectations:\n* LayoutTests/platform/mac-wk2/TestExpectations:\n\nCanonical link: https://commits.webkit.org/316582@main",
      "email": "darbinyan@apple.com",
      "hash": "80e4aa1b557b7782517dca6205c8176b93d3d894",
      "subject": "[Gardening]: [DEBUG] REGRESSION(315848@main): ipc/networksessioncocoa-empty-resource-request.html is constant text failure"
    }
  },
  "date": "2026-07-06",
  "days": 1,
  "generatedAt": "2026-07-06T22:05:55Z",
  "markdown": "## Highlights\n\n- **Web Platform** MediaStream's `OverconstrainedError` now correctly inherits from `DOMException`, fixing web observable shape and compatibility for constraint failures. [commit 316578@main](https://commits.webkit.org/316578@main)\n- **DevTools** Web Inspector no longer crashes when opened on pages using CSS variable `@keyframes` animations, removing a sharp edge in animation debugging. [commit 316540@main](https://commits.webkit.org/316540@main)\n- **GPU** A WebGPU pipeline layout validation failure on a real-world Wasm medical viewer is fixed, unblocking a concrete app workload. [commit 316561@main](https://commits.webkit.org/316561@main)\n- **A11y** Accessibility text marker ranges for stitched text groups now cover the full representative text instead of truncating to the first run. [commit 316576@main](https://commits.webkit.org/316576@main)\n- **Privacy** CSP now suppresses duplicate reports from speculative preloads, reducing noisy reporting without weakening policy enforcement. [commit 316559@main](https://commits.webkit.org/316559@main)\n- **Security** Buildbot's web UI now uses explicit `allowed_origins`, tightening cross-origin exposure in the build infrastructure. [commit 316560@main](https://commits.webkit.org/316560@main)\n- **Perf** A cluster of LBSE SVG work caches viewport size and transform data instead of recomputing it at paint time, shaving repeated work in SVG rendering paths. [commit 316545@main](https://commits.webkit.org/316545@main) [commit 316544@main](https://commits.webkit.org/316544@main) [commit 316543@main](https://commits.webkit.org/316543@main)\n- **V8** JSC landed several optimizer and bytecode profiling changes, including skipping unnecessary CFG passes and improving string-heavy loop handling in DFG and FTL. [commit 316535@main](https://commits.webkit.org/316535@main) [commit 316534@main](https://commits.webkit.org/316534@main) [commit 316536@main](https://commits.webkit.org/316536@main)\n- **Media** iOS fullscreen restore from PiP on YouTube now preserves the right video sizing, fixing a very visible playback regression. [commit 316575@main](https://commits.webkit.org/316575@main)\n\n## What landed by area\n\n### Media, WebRTC, and audio\n\n- **Media** Text track index invalidation now updates correctly after a changed track instead of stopping at the first entry. [commit 316577@main](https://commits.webkit.org/316577@main)\n- **Media** Fullscreen state reporting in `MediaUsageInfo` is corrected so media inside fullscreen is no longer reported as outside it. [commit 316569@main](https://commits.webkit.org/316569@main)\n- **Media** `RemoteMediaPlayerProxy::createAudioSourceProvider` now rejects duplicate IPC, hardening a remote media control path. [commit 316568@main](https://commits.webkit.org/316568@main)\n- **Media** `HTMLMediaElement::setMutedInternal` drops a tautological self-assignment cleanup in muted state handling. [commit 316552@main](https://commits.webkit.org/316552@main)\n- **Media** `PannerNode` now updates directional cone gain when only orientation changes, fixing spatial audio behavior. [commit 316541@main](https://commits.webkit.org/316541@main)\n- **Media** The current SFrame transform implementation was removed, simplifying an unfinished encrypted media transport path. [commit 316556@main](https://commits.webkit.org/316556@main)\n\n### Rendering, CSS, and SVG\n\n- **Rendering** CSS parser tokens are now zero-initialized, fixing an uninitialized value report under valgrind. [commit 316573@main](https://commits.webkit.org/316573@main)\n- **Rendering** `FilterRenderingOption::FastAndLowQuality` was added to `serialization.in`, aligning generated serialization with the enum surface. [commit 316567@main](https://commits.webkit.org/316567@main)\n- **Rendering** Reflection and replica layer update logic was deduplicated into `RenderLayerBacking::updateReflectionLayer()`. [commit 316558@main](https://commits.webkit.org/316558@main)\n- **Rendering** `SVGProperty::contextElement` now detaches correctly before dropping `m_animVal` after `stopAnimation`, fixing SVG animation state cleanup. [commit 316557@main](https://commits.webkit.org/316557@main)\n- **Web Platform** CSS mixins work now evaluates container queries inside `@function`, moving implementation closer to expected model behavior. [commit 316551@main](https://commits.webkit.org/316551@main)\n- **Perf** LBSE now caches the SVG viewport size used for the transform reference box. [commit 316545@main](https://commits.webkit.org/316545@main)\n- **Perf** LBSE reuses cached `m_localTransform` during paint instead of re-resolving from style. [commit 316544@main](https://commits.webkit.org/316544@main)\n- **Perf** LBSE now caches the concatenated SVG transform attribute matrix. [commit 316543@main](https://commits.webkit.org/316543@main)\n- **Rendering** LBSE expectations were adjusted after earlier SVG changes, keeping the test signal aligned with current behavior. [commit 316542@main](https://commits.webkit.org/316542@main)\n- **Web Platform** `anchor-center` in vertical writing modes now scroll-adjusts correctly along the block axis. [commit 316537@main](https://commits.webkit.org/316537@main)\n- **Web Platform** DOMMatrix and IntersectionObserver handling of absolute length units was tightened to meet spec requirements. [commit 316532@main](https://commits.webkit.org/316532@main)\n\n### JavaScriptCore\n\n- **Perf** JSC compacts `Air::Arg`, reducing backend structure size in the compiler pipeline. [commit 316555@main](https://commits.webkit.org/316555@main)\n- **Refactor** JSC removed the DFG `TryGetById` node, simplifying optimizer surface area. [commit 316539@main](https://commits.webkit.org/316539@main)\n- **Perf** `HasOwnProperty` on the current `for-in` property name now lowers to `EnumeratorHasOwnProperty`, specializing a hot pattern. [commit 316538@main](https://commits.webkit.org/316538@main)\n- **DevTools** JSC added `dumpBytecodeProfile`, giving engine hackers a new way to inspect bytecode profiling state. [commit 316536@main](https://commits.webkit.org/316536@main)\n- **Perf** JSC now skips `LowerEntrySwitch` and `SimplifyCFG` when they are unnecessary, cutting wasted optimization work. [commit 316535@main](https://commits.webkit.org/316535@main)\n- **Perf** DFG and FTL gained an AtomString array loop path, targeting string-heavy loop performance. [commit 316534@main](https://commits.webkit.org/316534@main)\n- **Security** `MicrotaskQueue::drainImpl` now ensures its dispatcher cannot be garbage collected mid-run, closing a dangerous lifetime hole. [commit 316546@main](https://commits.webkit.org/316546@main)\n\n### Inspector, UI, and accessibility\n\n- **DevTools** AutoFill and user-script sources now appear in the Sources tab in Web Inspector. [commit 316554@main](https://commits.webkit.org/316554@main)\n- **UI** Safari's Copy main menu item is no longer enabled when there is no page selection, fixing a user-visible menu state regression. [commit 316571@main](https://commits.webkit.org/316571@main)\n- **A11y** Text Extraction now applies the latest `replacementStrings` to interaction descriptions, improving downstream text output quality. [commit 316548@main](https://commits.webkit.org/316548@main)\n- **UI** AppKit gesture logging output was improved, which should make gesture debugging less painful. [commit 316581@main](https://commits.webkit.org/316581@main)\n\n### GPU, graphics stack, and PDF\n\n- **GPU** ANGLE was rolled to 2026-06-29, pulling in upstream graphics stack fixes and behavior changes. [commit 316533@main](https://commits.webkit.org/316533@main)\n- **Media** PDF.js was updated to v6.1.200, refreshing the embedded PDF viewer. [commit 316572@main](https://commits.webkit.org/316572@main)\n\n### Build, tools, and infrastructure\n\n- **Build** Swift in WebKit now builds on watchOS and tvOS public builds, extending Apple platform build coverage. [commit 316580@main](https://commits.webkit.org/316580@main)\n- **Build** iOS activation and suspension code was updated away from deprecated `-activateWithError:` and `-suspendWithError:` APIs. [commit 316564@main](https://commits.webkit.org/316564@main)\n- **Build** `serialization.in` got additional missing enum values, fixing generated serialization coverage. [commit 316562@main](https://commits.webkit.org/316562@main)\n- **Build** SwiftBrowser's Xcode project now uses modern Xcode Folders. [commit 316531@main](https://commits.webkit.org/316531@main)\n- **Refactor** `TestShard` no longer uses `pack` and `unpack` path-prefix compression, simplifying shard path handling. [commit 316570@main](https://commits.webkit.org/316570@main)\n- **Build** EWS now limits `run-layout-tests-without-change` to failing tests on the iOS 26 simulator WK2 WPT bot instead of rerunning everything. [commit 316566@main](https://commits.webkit.org/316566@main)\n- **Build** `git-webkit` gained `--issue` support and better error handling for revert flows in `webkit-bot`. [commit 316565@main](https://commits.webkit.org/316565@main)\n- **Build** WPT clone now uses the same protocol as the main WebKit checkout, cleaning up source sync behavior. [commit 316550@main](https://commits.webkit.org/316550@main)\n- **Build** `resultsdbpy` now adds `webkitcorepy` to `sys.path` in `run-tests`, fixing a tooling import issue. [commit 316549@main](https://commits.webkit.org/316549@main)\n- **Security** ISO 18013 mdoc tests were relocated into internal identity tests, tightening where identity-related coverage lives. [commit 316547@main](https://commits.webkit.org/316547@main)\n\n### Test gardening and stability\n\n- **Build** A constant text failure in `ipc/networksessioncocoa-empty-resource-request.html` was gardened after regression [commit 315848@main](https://commits.webkit.org/315848@main). [bug 318382](https://bugs.webkit.org/show_bug.cgi?id=318382) [commit 316582@main](https://commits.webkit.org/316582@main)\n- **Build** A flaky timeout in `TestWebKitAPI.EvaluateJavaScript.Serialization` on macOS DEBUG x86_64 was addressed. [commit 316579@main](https://commits.webkit.org/316579@main)\n- **Build** A constant text failure in `inspector/animation/lifecycle-web-animation.html` on macOS was gardened after regression [commit 316540@main](https://commits.webkit.org/316540@main). [bug 318697](https://bugs.webkit.org/show_bug.cgi?id=318697) [commit 316574@main](https://commits.webkit.org/316574@main)\n- **Build** `TestIPC.IPCSerialization.SecTrustRef` constant failures on Tahoe x86_64 were gardened. [commit 316563@main](https://commits.webkit.org/316563@main)\n- **Build** Two LBSE baselines were updated to match current rendering output. [commit 316553@main](https://commits.webkit.org/316553@main)\n\n## Reverts \u0026 Reapplies\n\n- **Refactor** No revert, reapply, or backed out changes landed in this slice.",
  "repo": "webkit",
  "repoDisplay": "WebKit",
  "rollGroups": [],
  "since": "2026-07-06",
  "totals": {
    "commits": 52,
    "features": 52,
    "rolls": 0
  },
  "until": "2026-07-06"
}