{
  "commits": {
    "319482@main": {
      "author": "Jetzel Espinal",
      "avatar": "https://www.gravatar.com/avatar/2edd78d5d9f2f2e2e695465277634921?d=identicon\u0026s=64",
      "cl": "319482@main",
      "clUrl": "https://commits.webkit.org/319482@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322125\nrdar://185354635\n\nUnreviewed test gardening.\n\n* TestExpectations/apitests:\n\nCanonical link: https://commits.webkit.org/319482@main",
      "email": "jespinal23@apple.com",
      "hash": "f1532b1fb3991944e44a01ac09cadb4eba26d848",
      "subject": "[GARDENING][iOS]NEW TEST(319178@main): 3x TestWebKitAPI.HTTP2Server.* (api-tests) is a constant timeout."
    },
    "319483@main": {
      "author": "Carlos Alberto Lopez Perez",
      "avatar": "https://www.gravatar.com/avatar/05326c1dbe06f486e884975e73f25179?d=identicon\u0026s=64",
      "cl": "319483@main",
      "clUrl": "https://commits.webkit.org/319483@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=321783\n\nReviewed by Nikolas Zimmermann.\n\nGDB can spend days generating a Linux layout-test crash log on the Debug bots.\nWe are not sure what causes that. A hypothesis is related to the DEBUGINFOD\nservers which on Ubuntu are kind of unstable, and when those don't reply on time\nthey can stall GDB waiting for a reply. However, if this was the issue we should\nsee the problem in Release build as well. A possible problem is that we currently\ncheck if those servers are online at the moment of starting the test run, but we\nno longer check if the servers are still online in the middle of the run. And a\nDebug build is slower by nature (several hours), so it has more chances of hitting\nthe corner case of a DEBUGINFOD going offline in the middle of the run.\n\nThis patch addresses that hypothetical corner case. The DEBUGINFOD servers are now\nchecked immediately before each GDB process starts instead of once per run. Because\nprobing an offline server is slow, the result is cached for five minutes and shared\nbetween workers through a file keyed by an MD5 of the server list, so concurrent runs\nwith different DEBUGINFOD_URLS do not share a cache entry. The check no longer rewrites\nDEBUGINFOD_URLS in os.environ: each GDB invocation gets its own environment.\n\nSince we are not certain that stalled DEBUGINFOD servers are the cause, the patch\nadds a second, independent layer of protection against long-lived GDB processes.\nA new TaskPooledProcessRunner class bounds any process by two limits: an execution\ntimeout, and a request from the TaskPool for the worker to end. Once either fires,\nthe target is sent SIGTERM, given a grace period, then sent SIGKILL, and only as a\nlast resort is the whole process group killed. This guarantees GDB cannot run beyond\nits timeout, and that a run interrupted with SIGTERM or SIGINT terminates GDB and\nreturns control to the worker in time for the TaskPool coordinator.\n\nThe GDB execution timeout defaults to 30 minutes and can be changed with env var\nWEBKIT_CRASHLOG_GDB_EXECUTION_TIMEOUT. When it expires, the generated crash log\nstarts with the reason it was truncated, the DEBUGINFOD_URLS that were in use, and\nthe name of that variable, so a truncated backtrace on a bot explains itself. While\nGDB runs, a debug line is logged every 60 seconds naming the process and how much\nof its budget remains.\n\nOn top of that, several improvements are made to make the code more robust, like the\nhandling of the GNU \"time\" wrapper: SIGKILL is first sent to GDB rather than to the\nwrapper, so \"time\" survives to write its resource statistics even when GDB had to\nbe killed, and its output file is created inside the crash-log temporary directory\nand removed afterwards.\n\n* Tools/Scripts/webkitpy/port/linux_get_crash_log.py:\n(CrashLogEnvVars):\n(CrashLogUtils):\n(CrashLogUtils.get_gdb_execution_timeout):\n(CrashLogUtils.is_taskpool_worker_terminating):\n(CrashLogUtils._get_gdb_lock_configuration):\n(CrashLogUtils.get_crashlog_temp_dir):\n(CrashLogUtils.get_thread_data_dir):\n(CrashLogUtils.get_debuginfod_cache_dir):\n(CrashLogUtils.core_pattern_has_pid_format_string):\n(TaskPooledProcessRunner):\n(TaskPooledProcessRunner.__init__):\n(TaskPooledProcessRunner._communicate):\n(TaskPooledProcessRunner._signal_process_group):\n(TaskPooledProcessRunner._get_target_pid_and_name):\n(TaskPooledProcessRunner._get_child_pids):\n(TaskPooledProcessRunner._signal_target):\n(TaskPooledProcessRunner._force_kill_and_reap):\n(TaskPooledProcessRunner._terminate_after_interruption):\n(TaskPooledProcessRunner.run):\n(DebuginfodServerCache):\n(DebuginfodServerCache._cache_path):\n(DebuginfodServerCache._is_server_available):\n(DebuginfodServerCache._probe):\n(DebuginfodServerCache._read):\n(DebuginfodServerCache._write):\n(DebuginfodServerCache._get_working_servers):\n(DebuginfodServerCache.environment_for_gdb):\n(ThreadNamesCrashLogCapturer.handle_coredump):\n(GDBCrashLogStartupHandler.__init__):\n(GDBCrashLogStartupHandler._maybe_remove_file_if_old):\n(GDBCrashLogStartupHandler.clean_old_debuginfod_server_caches):\n(GDBCrashLogGenerator._get_gdb_output):\n(GDBCrashLogStartupHandler._is_debuginfod_server_available): Deleted.\n(GDBCrashLogStartupHandler._check_debuginfod_servers): Deleted.\n* Tools/Scripts/webkitpy/port/linux_get_crash_log_unittest.py:\n(CrashLogTemporaryDirectoriesTest):\n(CrashLogTemporaryDirectoriesTest.test_thread_and_debuginfod_directories_share_crashlog_root):\n(CleanOldCrashLogFilesTest):\n(CleanOldCrashLogFilesTest.setUp):\n(CleanOldCrashLogFilesTest.test_removes_only_old_cache_and_temporary_files):\n(CleanOldCrashLogFilesTest.test_keeps_cache_directory_when_last_cache_is_removed):\n(CleanOldCrashLogFilesTest.test_list_failure_does_not_abort_cleanup):\n(DebuginfodServerCacheTest):\n(DebuginfodServerCacheTest.setUp):\n(DebuginfodServerCacheTest._age_cache):\n(DebuginfodServerCacheTest.test_recent_result_is_shared_without_reprobing):\n(DebuginfodServerCacheTest.test_environment_canonicalizes_reordered_and_duplicate_servers):\n(DebuginfodServerCacheTest.test_probe_keeps_file_urls_and_drops_unsupported_urls):\n(DebuginfodServerCacheTest.test_http_availability_probe):\n(DebuginfodServerCacheTest.test_concurrent_refresh_is_coalesced_by_file_lock):\n(DebuginfodServerCacheTest.test_concurrent_refresh_is_coalesced_by_file_lock.slow_probe):\n(DebuginfodServerCacheTest.test_concurrent_refresh_is_coalesced_by_file_lock.worker):\n(DebuginfodServerCacheTest.test_environment_for_gdb_filters_copy_without_changing_process_environment):\n(DebuginfodServerCacheTest.test_environment_for_gdb_filters_copy_without_changing_process_environment.only_first_server_works):\n(DebuginfodServerCacheTest.test_server_offline_during_first_crash_can_recover):\n(DebuginfodServerCacheTest.test_cache_path_failure_falls_back_to_uncached_probe):\n(DebuginfodServerCacheTest.test_cache_write_failure_does_not_repeat_probe_or_raise):\n(DebuginfodServerCacheTest.test_corrupted_cache_is_ignored):\n(DebuginfodServerCacheTest.test_different_server_lists_use_independent_cached_results):\n(DebuginfodServerCacheTest.test_no_configured_servers_does_not_probe_or_set_gdb_environment):\n(GDBExecutionTimeoutConfigurationTest):\n(GDBExecutionTimeoutConfigurationTest._timeout_with_value):\n(GDBExecutionTimeoutConfigurationTest.test_timeout_configuration):\n(FakeGDBProcess):\n(FakeGDBProcess.__init__):\n(FakeGDBProcess.communicate):\n(FakeGDBProcess.send_signal):\n(FakeGDBProcess.wait):\n(FakeGDBExecutive):\n(FakeGDBExecutive.__init__):\n(FakeGDBExecutive.popen):\n(SubprocessExecutive):\n(SubprocessExecutive.popen):\n(_run_process):\n(TaskPooledProcessRunnerCommunicateTest):\n(TaskPooledProcessRunnerCommunicateTest._runner):\n(TaskPooledProcessRunnerCommunicateTest.test_retries_with_bounded_timeouts_until_process_exits):\n(TaskPooledProcessRunnerCommunicateTest.test_raises_when_overall_deadline_expires):\n(TaskPooledProcessRunnerCommunicateTest.test_termination_request_stops_communicating):\n(TaskPooledProcessRunnerTest):\n(TaskPooledProcessRunnerTest.setUp):\n(TaskPooledProcessRunnerTest.setUp.communicate):\n(TaskPooledProcessRunnerTest.test_success_uses_timeout_environment_and_new_session):\n(TaskPooledProcessRunnerTest.test_termination_requested_before_run_prevents_process_start):\n(TaskPooledProcessRunnerTest.test_timeout_escalates_to_sigkill_and_preserves_partial_output):\n(TaskPooledProcessRunnerTest.test_sigterm_grace_period_collects_additional_output_without_sigkill):\n(TaskPooledProcessRunnerTest.test_gdb_sigkill_allows_time_wrapper_to_return_output):\n(TaskPooledProcessRunnerTest.test_gdb_sigkill_allows_time_wrapper_to_return_output.fake_open):\n(TaskPooledProcessRunnerTest.test_unreapable_process_does_not_make_cleanup_unbounded):\n(TaskPooledProcessRunnerTest.test_killpg_failure_uses_direct_process_fallback):\n(TaskPooledProcessRunnerTest.test_reap_failure_does_not_mask_grace_period_keyboard_interrupt):\n(TaskPooledProcessRunnerTest.test_termination_request_terminates_process):\n(TaskPooledProcessRunnerTest.test_termination_request_terminates_process.request_termination):\n(TaskPooledProcessRunnerTest.test_interrupted_process_ignoring_sigterm_is_force_killed):\n(TaskPooledProcessRunnerTest.test_interrupted_process_ignoring_sigterm_is_force_killed.interrupt_then_timeout):\n(TaskPooledProcessRunnerTest.test_real_wrapper_and_child_are_both_killed_after_grace_period):\n(TaskPooledProcessRunnerTest.test_real_wrapper_and_child_are_both_killed_after_grace_period.child_is_running):\n(TaskPooledProcessRunnerTest.test_gdb_sigkill_allows_real_wrapper_to_write_output):\n(TaskPooledProcessRunnerTest.test_taskpool_sigint_handler_interrupts_gdb):\n(GDBTimeoutCrashLogTest):\n(GDBTimeoutCrashLogTest.test_worker_termination_after_lock_prevents_gdb_start):\n(GDBTimeoutCrashLogTest.test_worker_termination_after_lock_prevents_gdb_start.gdb_lock):\n(GDBTimeoutCrashLogTest.test_worker_termination_while_gdb_runs_discards_output):\n(GDBTimeoutCrashLogTest.test_worker_termination_while_gdb_runs_discards_output.run_process):\n(GDBTimeoutCrashLogTest.test_time_output_setup_failure_does_not_abort_gdb):\n(GDBTimeoutCrashLogTest.test_time_output_uses_crashlog_directory_and_is_removed_on_failure):\n(GDBTimeoutCrashLogTest.test_time_output_uses_crashlog_directory_and_is_removed_on_failure.fail_after_checking_time_output):\n(GDBTimeoutCrashLogTest.test_timeout_is_reported_and_filtered_environment_reaches_process):\n(GDBTimeoutCrashLogTest.test_timeout_is_reported_and_filtered_environment_reaches_process.gdb_lock):\n(GDBTimeoutCrashLogTest.test_timeout_is_reported_and_filtered_environment_reaches_process.environment_for_gdb):\n(GDBTimeoutCrashLogTest.test_timeout_is_reported_and_filtered_environment_reaches_process.run_process):\n(CleanOldCoredumpsTest): Deleted.\n(CleanOldCoredumpsTest.setUp): Deleted.\n(CleanOldCoredumpsTest._touch): Deleted.\n(CleanOldCoredumpsTest.test_reaps_old_pattern_and_claimed_keeps_fresh_and_unrelated): Deleted.\n\nCanonical link: https://commits.webkit.org/319483@main",
      "email": "clopez@igalia.com",
      "hash": "6131f147456111c0c430607b0c94c11fdb53eaf6",
      "subject": "[Tools] linux_get_crash_log: run GDB with a maximum timeout of 30 minutes and improve checking of DEBUGINFOD_URLS"
    },
    "319484@main": {
      "author": "Jetzel Espinal",
      "avatar": "https://www.gravatar.com/avatar/2edd78d5d9f2f2e2e695465277634921?d=identicon\u0026s=64",
      "cl": "319484@main",
      "clUrl": "https://commits.webkit.org/319484@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322126\nrdar://185354719\n\nUnreviewed test gardening.\n\n* TestExpectations/apitests:\n\nCanonical link: https://commits.webkit.org/319484@main",
      "email": "jespinal23@apple.com",
      "hash": "cacdeb3a9a0c29f23010241093e78aaf6d823c56",
      "subject": "[GARDENING][iOS]NEW TEST(319204@main): 3x TestWebKitAPI.HTTP3Server.* (api-tests) is a constant timeout."
    },
    "319485@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "319485@main",
      "clUrl": "https://commits.webkit.org/319485@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=320657\nrdar://184231090\n\nReviewed by Youenn Fablet.\n\nNetworkCORSPreflightChecker only validated the preflight in didCompleteWithError, so\nthe outcome was gated on the response body finishing. A server that answers OPTIONS\nwith valid Access-Control-Allow-* headers followed by a body that never terminates\nstalled the preflight, and with it the actual request, forever: fetch() never settled\nand the bytes were streamed and discarded until the page aborted. Chrome and Firefox\nconclude the preflight from the headers, so this was a WebKit-only hang.\n\nThe body must not control the result. Every step of CORS-preflight fetch [1] after the\nresponse is obtained reads only its status and header list -- \"response's status is an\nok status\", then Access-Control-Allow-Methods, Access-Control-Allow-Headers and\nAccess-Control-Max-Age -- and the response it returns is inspected by HTTP fetch only\nfor being a network error. validatePreflightResponse already touches nothing else.\n\nSo conclude the preflight from the status and headers as soon as they arrive, via a new\ncompletePreflight() that didCompleteWithError also routes through. Answer\nPolicyAction::Ignore, which cancels the load rather than draining it, then clear the\ntask's client and cancel it, so didCompleteWithError cannot follow and report a second\nresult.\n\nDo this for every preflight response rather than only for ones that declare a body.\nexpectedContentLength() is not comparable across ports -- CFNetwork reports -1 for an\nundeclared length while soup_message_headers_get_content_length() reports 0 -- so\ntreating a zero length as an empty body would leave the GLib ports on the old path and\nstill hanging.\n\nm_loadInformation.metrics, the Inspector's extra metrics for the preflight transaction,\nis no longer populated, as it came only from didCompleteWithError. Now that the body is\ndeliberately not read, final metrics are not meaningful for a preflight.\n\n[1] https://fetch.spec.whatwg.org/#cors-preflight-fetch\n\nTests: imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-unterminated-body.any.html\n       imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-unterminated-body.any.worker.html\n\n* LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-unterminated-body.any-expected.txt: Added.\n* LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-unterminated-body.any.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-unterminated-body.any.js: Added.\n* LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-unterminated-body.any.worker-expected.txt: Added.\n* LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-unterminated-body.any.worker.html: Added.\n* LayoutTests/imported/w3c/web-platform-tests/fetch/api/resources/preflight-unterminated-body.py: Added.\n(main):\n* Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp:\n(WebKit::NetworkCORSPreflightChecker::didReceiveResponse):\n(WebKit::NetworkCORSPreflightChecker::didCompleteWithError):\n(WebKit::NetworkCORSPreflightChecker::completePreflight):\n* Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h:\n\nCanonical link: https://commits.webkit.org/319485@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "a6b87573f6bfc30bb841afe4c9e5c74ac91fa4e1",
      "subject": "CORS preflight fetch hangs indefinitely when the OPTIONS response body never terminates"
    },
    "319486@main": {
      "author": "Carlos Alberto Lopez Perez",
      "avatar": "https://www.gravatar.com/avatar/05326c1dbe06f486e884975e73f25179?d=identicon\u0026s=64",
      "cl": "319486@main",
      "clUrl": "https://commits.webkit.org/319486@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322134\n\nUnreviewed gardening.\n\nUpdate the list of flaky tests, those have been failing randomly on the bots\nwith a percentage of ~5% for the progressive-html5-test ones, and ~15% for\nthe dash-dashjs-tests one.\n\n* Tools/gtk/MVT_TestExpectations_Release.json:\n* Tools/wpe/MVT_TestExpectations_Release.json:\n\nCanonical link: https://commits.webkit.org/319486@main",
      "email": "clopez@igalia.com",
      "hash": "9c107ef83c534fded478154284fd9a34c1ac5622",
      "subject": "[WPE][GTK][MVT] Update list of MVT flaky tests"
    },
    "319487@main": {
      "author": "Timothy Hatcher",
      "avatar": "https://www.gravatar.com/avatar/d0f8f949749d89ed152fa835ede38c5b?d=identicon\u0026s=64",
      "cl": "319487@main",
      "clUrl": "https://commits.webkit.org/319487@main",
      "description": "https://webkit.org/b/309516\nrdar://171724038\n\nReviewed by Brian Weinstein.\n\nDuring Objective-C++ to C++ conversion, NSMutableSet's unionSet: (modifies in place) was incorrectly\ntranslated to HashSet::unionWith() (returns new set). Changed to addAll() to match original semantics.\n\nTest: Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIScripting.mm\n* Source/WebKit/UIProcess/Extensions/WebExtensionContext.cpp:\n(WebKit::WebExtensionContext::addInjectedContent): Use addAll() instead of unionWith().\n* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIScripting.mm:\n(TestWebKitAPI::TEST(WKWebExtensionAPIScripting, ContentScriptsRespectDeniedMatchPatterns)): Added.\n\nOriginally-landed-as: 305413.426@safari-7624-branch (7f6a77dee81b). rdar://176067024\nCanonical link: https://commits.webkit.org/319487@main",
      "email": "timothy@apple.com",
      "hash": "15fa22b107d107d2c48bb99373ac9767dcf1bf62",
      "subject": "Extension scripts/style sheets are injected into denied domains if Other Websites are set to allow."
    },
    "319488@main": {
      "author": "Adrian Taylor",
      "avatar": "https://www.gravatar.com/avatar/d2acb8ad2e2670ff74ae0d65fb27014c?d=identicon\u0026s=64",
      "cl": "319488@main",
      "clUrl": "https://commits.webkit.org/319488@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=321509\nrdar://184620319\n\nReviewed by Geoffrey Garen.\n\nThis makes significant changes to WTF::BorrowedBytes based on review\nsuggestions. It makes the minimum corresponding changes to the use of this type\nwithin PAL crypto; future PRs will make more substantive changes to use these\nnew facilities both in PAL and WebGPU.\n\nThe changes are:\n\n- BorrowedSpanScope renamed to EscapableByteSpan\n- BorrowedVectorScope removed; we compose other primitives for it\n- These types no longer \"vend\" a Swift-compatible EscapableByteSpan object.\n  Instead, they _are_ the Swift-compatible EscapableByteSpan object. Swift\n  can use these objects directly, and they continue to confirm to the\n  same protocols that EscapableByteSpan itself conformed to, allowing their\n  use within various pre-existing Swift APIs.\n- This type is no longer a refcounted WebKit type. It always lives on\n  the stack; copies made on the Swift side update a reference count\n  in the original object. This is used to check whether it's still in\n  scope somewhere within Swift when it falls out of the original C++\n  scope, resulting in a safe panic. It no longer has any heap\n  allocation.\n- Now that Vector fully impplements the CanBorrow protocol, this adds\n  death tests to ensure it works.\n\nTest: Tools/TestWebKitAPI/Tests/WTF/EscapableByteSpan.cpp\n\n* Source/WTF/wtf/EscapableByteSpan.h:\n(WTF::BorrowedBase::size const):\n(WTF::BorrowedBase::create):\n(WTF::BorrowedBase::span const):\n(WTF::BorrowedBase::BorrowedBase):\n(WTF:: const):\n(WTF::EscapableEscapableByteSpan::EscapableEscapableByteSpan):\n(WTF::EscapableEscapableByteSpan::~EscapableEscapableByteSpan):\n(WTF::EscapableEscapableByteSpan::size const):\n(WTF::EscapableEscapableByteSpan::swiftRef const):\n(WTF::EscapableEscapableByteSpan::swiftDeref const):\n(WTF::EscapableByteSpan::size const): Deleted.\n(WTF::EscapableByteSpan::ref const): Deleted.\n(WTF::EscapableByteSpan::deref const): Deleted.\n(WTF::EscapableByteSpan::create): Deleted.\n(WTF::EscapableByteSpan::EscapableByteSpan): Deleted.\n(WTF::EscapableByteSpan::revoke): Deleted.\n(WTF::EscapableByteSpanScopeBase::EscapableByteSpanScopeBase): Deleted.\n(WTF::EscapableByteSpanScopeBase::~EscapableByteSpanScopeBase): Deleted.\n(WTF::escapableSpan):\n* Source/WebCore/PAL/pal/crypto/CryptoAlgorithmAESGCMCocoa.cpp:\n(PAL::Crypto::encryptCryptoKitAESGCM):\n* Source/WebCore/PAL/pal/crypto/CryptoAlgorithmAESKWCocoaBridging.cpp:\n(PAL::Crypto::wrapKeyAESKWCryptoKit):\n(PAL::Crypto::unwrapKeyAESKWCryptoKit):\n* Source/WebCore/PAL/pal/crypto/CryptoAlgorithmEd25519CocoaBridging.cpp:\n(PAL::Crypto::signEd25519CryptoKit):\n(PAL::Crypto::verifyEd25519CryptoKit):\n* Source/WebCore/PAL/pal/crypto/CryptoAlgorithmHKDFCocoaBridging.cpp:\n(PAL::Crypto::deriveBitsHKDFCryptoKit):\n* Source/WebCore/PAL/pal/crypto/CryptoAlgorithmHMACCocoaBridging.cpp:\n(PAL::Crypto::signHMACCryptoKit):\n(PAL::Crypto::verifyHMACCryptoKit):\n* Source/WebCore/PAL/pal/crypto/CryptoAlgorithmX25519CocoaBridging.cpp:\n(PAL::Crypto::deriveBitsX25519CryptoKit):\n* Source/WebCore/PAL/pal/crypto/CryptoEDKeyBridging.cpp:\n(PAL::Crypto::EdKey::privateToPublic):\n(PAL::Crypto::EdKey::privateToPublicKeyAgreement):\n(PAL::Crypto::EdKey::validateKeyPair):\n(PAL::Crypto::EdKey::validateKeyPairKeyAgreement):\n* Source/WebCore/PAL/pal/crypto/CryptoKitShim.swift:\n(Digest.update(_:)):\n(Digest.sha1(_:)):\n(Digest.sha256(_:)):\n(Digest.sha384(_:)):\n(Digest.sha512(_:)):\n(ECKey.importX963Pub(_:curve:)):\n(ECKey.importCompressedPub(_:curve:)):\n(ECKey.importX963Private(_:curve:)):\n(WTF.requireNonEmpty):\n(Curve25519.signature(_:)):\n(Curve25519.isValidSignature(_:data:)):\n(Curve25519.sharedSecretFromKeyAgreement(_:)):\n* Source/WebCore/PAL/pal/crypto/PlatformECKey.cpp:\n(PAL::Crypto::PlatformECKey::sign const):\n(PAL::Crypto::PlatformECKey::doVerify const):\n(PAL::Crypto::PlatformECKey::importX963Pub):\n(PAL::Crypto::PlatformECKey::importX963Private):\n(PAL::Crypto::PlatformECKey::importCompressedPub):\n* Source/WebCore/PAL/pal/crypto/WTFExtras.swift:\n(WTF.regions):\n* Source/WebCore/PAL/pal/crypto/commoncrypto/CryptoDigestCommonCrypto.cpp:\n(PAL::Crypto::CryptoDigest::addBytes):\n* Tools/TestWebKitAPI/Tests/WTF/EscapableByteSpan.cpp:\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableByteSpanWrapsASpan)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, DefaultConstructedEscapableByteSpanIsEmpty)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableByteSpanSubspan)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, EscapableByteSpanSubspanPastTheEndCrashes)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, EscapableByteSpanSubspanWithWrappedOffsetCrashes)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableExposesBytes)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableOverSubspan)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableVectorBytesExposesBytes)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableEmptySpan)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableEmptyVector)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableTransientReferenceIsFine)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableNestedVectorBorrows)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableViewIdentityIsPerBorrow)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, EscapableStashedViewCrashesWhenTheBorrowEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, EscapableStashedViewOverASpanCrashesWhenTheBorrowEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, EscapableViewEscapedToTheHeapCrashesWhenTheBorrowEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableViewEscapedToTheHeapAndReleasedInTimeIsFine)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, MAYBE_ASSERT_ENABLED_DEATH_TEST(EscapableVectorBytesReallocationWhileBorrowedCrashes)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, MAYBE_ASSERT_ENABLED_DEATH_TEST(EscapableVectorBytesDestroyedVectorWhileBorrowedCrashes)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableVectorBytesNonReallocatingMutationIsFine)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, MAYBE_ASSERT_ENABLED_DEATH_TEST(EscapableHeapAllocatedBytesCrashes)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, BorrowedMutableBytesWrapsASpan)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, DefaultConstructedBorrowedMutableBytesIsEmpty)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, BorrowedMutableBytesSubspan)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, BorrowedMutableBytesSubspanPastTheEndCrashes)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, BorrowedMutableBytesSubspanWithWrappedOffsetCrashes)):\n(TestWebKitAPI:: const):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, BorrowedBaseOverANonByteElement)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, BorrowedBaseOverANonByteElementRangeChecks)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, SpanScopeExposesBytes)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, SpanScopeOverSubspan)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, VectorScopeExposesBytes)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EmptySpan)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EmptyVector)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, ScopeHoldsSoleReference)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, NestedVectorScopes)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, ViewIdentityIsPerScope)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, StashedViewCrashesAtScopeEnd)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, StashedViewOverASpanCrashesAtScopeEnd)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, ViewEscapedToTheHeapCrashesAtScopeEnd)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, ViewEscapedToTheHeapAndReleasedInTimeIsFine)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, MAYBE_ASSERT_ENABLED_DEATH_TEST(HeapAllocatedScopeCrashes)): Deleted.\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableTransientCopyIsFine)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, EscapableStashedCopyCrashesWhenTheBorrowEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, EscapableStashedCopyOfACopyCrashesWhenTheBorrowEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, EscapableStashedCopyOverASpanCrashesWhenTheBorrowEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, EscapableCopyEscapedToTheHeapCrashesWhenTheBorrowEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableCopyEscapedToTheHeapAndReleasedInTimeIsFine)):\n(TestWebKitAPI::takesBaseAsSwiftWould):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableVectorBytesReleasesItsBorrowWhenTheScopeEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, EscapableVectorBytesReleasesItsBorrowAfterRepeatedBaseCopies)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, ExposesBytes)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, OverSubspan)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, VectorBytesExposesBytes)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, TransientCopyIsFine)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, NestedVectorBorrows)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, ViewIdentityIsPerBorrow)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, StashedCopyCrashesWhenTheBorrowEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, StashedCopyOfACopyCrashesWhenTheBorrowEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, StashedCopyOverASpanCrashesWhenTheBorrowEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, CopyEscapedToTheHeapCrashesWhenTheBorrowEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, CopyEscapedToTheHeapAndReleasedInTimeIsFine)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, MAYBE_ASSERT_ENABLED_DEATH_TEST(VectorBytesReallocationWhileBorrowedCrashes)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, MAYBE_ASSERT_ENABLED_DEATH_TEST(VectorBytesDestroyedVectorWhileBorrowedCrashes)):\n(TestWebKitAPI::takesByReferenceAsSwiftWould):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, VectorBytesReleasesItsBorrowWhenTheScopeEnds)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, VectorBytesReleasesItsBorrowAfterRepeatedCopies)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpan, VectorBytesNonReallocatingMutationIsFine)):\n(TestWebKitAPI::TEST(WTF_EscapableByteSpanDeathTest, MAYBE_ASSERT_ENABLED_DEATH_TEST(HeapAllocatedBytesCrashes)):\n* Source/WebCore/PAL/Configurations/PAL.xcconfig:\n* Source/WebCore/PAL/pal/CMakeLists.txt:\n* Source/WTF/WTF.xcodeproj/project.pbxproj:\n* Source/WTF/wtf/BorrowedBytes.h: Removed.\n* Source/WTF/wtf/CMakeLists.txt:\n* Source/WebCore/PAL/pal/crypto/CryptoTypes.h:\n* Tools/TestWebKitAPI/CMakeLists.txt:\n* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:\n* Tools/TestWebKitAPI/Tests/WTF/BorrowedBytes.cpp: Removed.\n\nCanonical link: https://commits.webkit.org/319488@main",
      "email": "adrian_taylor@apple.com",
      "hash": "88b46e6bc7af5f00aaa938f3b0ec3d16edcb9477",
      "subject": "Rename and simplify BorrowedBytes"
    },
    "319489@main": {
      "author": "Jetzel Espinal",
      "avatar": "https://www.gravatar.com/avatar/2edd78d5d9f2f2e2e695465277634921?d=identicon\u0026s=64",
      "cl": "319489@main",
      "clUrl": "https://commits.webkit.org/319489@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=321947\nrdar://185124281\n\nUnreviewed test gardening.\n\n* TestExpectations/apitests:\n\nCanonical link: https://commits.webkit.org/319489@main",
      "email": "jespinal23@apple.com",
      "hash": "723f4846cd3c78b1bd1560a6aa86469258ad1b7e",
      "subject": "[GARDENING][ DEBUG ]REGRESSION(318650@main): TestWebKitAPI.ResourceLoadStatistics.BlockUnpartitionedThirdPartyCookies (api-test) is a constant crash."
    },
    "319490@main": {
      "author": "Yijia Huang",
      "avatar": "https://www.gravatar.com/avatar/5bc95a5f0a5fdfc107bbdec6979dae89?d=identicon\u0026s=64",
      "cl": "319490@main",
      "clUrl": "https://commits.webkit.org/319490@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322140\nrdar://185364443\n\nReviewed by Yusuke Suzuki.\n\nCanonical link: https://commits.webkit.org/319490@main",
      "email": "yijia_huang@apple.com",
      "hash": "a8095e14e62b5e292c580e7c14ff57873e0ce8ab",
      "subject": "[JSC] Remove prints in stress tests"
    },
    "319491@main": {
      "author": "Carlos Alberto Lopez Perez",
      "avatar": "https://www.gravatar.com/avatar/05326c1dbe06f486e884975e73f25179?d=identicon\u0026s=64",
      "cl": "319491@main",
      "clUrl": "https://commits.webkit.org/319491@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322138\n\nReviewed by Nikolas Zimmermann.\n\nSince 318622@main rewrote the test262 runner script from perl to python,\nthe env var NUMBER_OF_PROCESSORS is not longer honored.\n\nWe use this env var on the CI extensively to tell the WebKit tooling\nhow much parellelism it can use on each bot container.\n\nFix that by calling cpu_count() from the webkitpy executive class.\n\n* Tools/Scripts/test262/runner.py:\n(main):\n* Tools/Scripts/test262/runner_unittest.py:\n(TestEndToEnd._run):\n(TestEndToEnd._child_processes):\n(TestEndToEnd):\n(TestEndToEnd.test_number_of_processors_is_honored):\n(TestEndToEnd.test_child_processes_option_overrides_number_of_processors):\n\nCanonical link: https://commits.webkit.org/319491@main",
      "email": "clopez@igalia.com",
      "hash": "1a924f4dcb18e148f2a73b9816e06c9b39f27b2b",
      "subject": "REGRESSION(318622@main)[Tools][JSC]: test262 runner not longer honors the env var NUMBER_OF_PROCESSORS"
    },
    "319492@main": {
      "author": "Carlos Alberto Lopez Perez",
      "avatar": "https://www.gravatar.com/avatar/05326c1dbe06f486e884975e73f25179?d=identicon\u0026s=64",
      "cl": "319492@main",
      "clUrl": "https://commits.webkit.org/319492@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322143\n\nUnreviewed gardening.\n\nLinux JSC has extra failures vs Mac JSC on the Chinese calendar\nleap-month tests because of the ICU version.\n\nUpdate the Linux JSC expectations after 318774@main\n\n* JSTests/test262/expectations-linux.yaml:\n\nCanonical link: https://commits.webkit.org/319492@main",
      "email": "clopez@igalia.com",
      "hash": "f331c3135012e4343dc4d14ac4fa83d93e422393",
      "subject": "[Tools][JSC][Test262] Update expectations for Linux after 318774@main"
    },
    "319493@main": {
      "author": "Jetzel Espinal",
      "avatar": "https://www.gravatar.com/avatar/2edd78d5d9f2f2e2e695465277634921?d=identicon\u0026s=64",
      "cl": "319493@main",
      "clUrl": "https://commits.webkit.org/319493@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=321940\nrdar://185119465\n\nUnreviewed test gardening.\n* TestExpectations/apitests:\n\nCanonical link: https://commits.webkit.org/319493@main",
      "email": "jespinal23@apple.com",
      "hash": "69f181a94772eecbec79ea8418c89a771a318bff",
      "subject": "[GARDENING][macOS DEBUG]REGRESSION(318650@main): 2x TestWebKitAPI.EnhancedSecurityPolicies.MultiHopThenBackToSecure* (api-tests) are constant timeouts."
    },
    "319494@main": {
      "author": "Sosuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/e63b87350fe19bdd9a30c7234eda45af?d=identicon\u0026s=64",
      "cl": "319494@main",
      "clUrl": "https://commits.webkit.org/319494@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322096\n\nReviewed by Yusuke Suzuki.\n\nm_slowPathCount is only incremented by the virtual call thunks, and the only\nway for a call site to reach those thunks is setVirtualCall(), which also sets\nm_clearedByVirtual. CallLinkStatus::computeFromCallLinkInfo bails out with\ntakesSlowPath() for any CallLinkInfo with that bit set before it ever looks at\nthe count, so the two remaining reads always observe zero. The other user of\nthe thunks, op_call_direct_eval's fallback call, is never consulted through\nCallLinkStatus at all.\n\nDrop the field and the increments in the LLInt and JIT virtual thunks, and\nfold the two reads in CallLinkStatus into the zero they always produced.\n\n* Source/JavaScriptCore/bytecode/CallLinkInfo.h:\n(JSC::CallLinkInfo::offsetOfSlowPathCount): Deleted.\n(JSC::CallLinkInfo::slowPathCount): Deleted.\n* Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:\n(JSC::CallLinkStatus::computeFromCallLinkInfo):\n* Source/JavaScriptCore/jit/ThunkGenerators.cpp:\n(JSC::virtualThunkFor):\n* Source/JavaScriptCore/llint/LowLevelInterpreter.asm:\n\nCanonical link: https://commits.webkit.org/319494@main",
      "email": "sosuke@bun.sh",
      "hash": "9d03f483401c594b5e54d32a80dd1993f4346100",
      "subject": "[JSC] Remove `CallLinkInfo::m_slowPathCount`"
    },
    "319495@main": {
      "author": "Sosuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/e63b87350fe19bdd9a30c7234eda45af?d=identicon\u0026s=64",
      "cl": "319495@main",
      "clUrl": "https://commits.webkit.org/319495@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322090\n\nReviewed by Yusuke Suzuki.\n\nBoth vectors are sized once in RegExp::finishCreation and never grow, so\nVector's capacity field is wasted. Worse, Vector::resize honors the default\nminCapacity of 16, so every RegExp allocated 64 bytes of ovector storage even\nthough most patterns need 2-8 ints.\n\nSwitching to FixedVector shrinks RegExp from 88 to 80 bytes (96 -\u003e 80 byte GC\ncell) and allocates exactly offsetVectorSize ints. Per RegExp this is 160 -\u003e 96\nbytes of cell + ovector storage as reported by generateHeapSnapshot(), and\nmaximum RSS with 200,000 live RegExps drops from 137.5 MB to 115.0 MB.\n\nRareData::m_captureGroupNames gets the same treatment, shrinking RareData from\n48 to 32 bytes for patterns with named groups.\n\nestimatedSize now reports the exact ovector allocation via byteSize().\n\n* Source/JavaScriptCore/runtime/RegExp.cpp:\n(JSC::RegExp::finishCreation):\n(JSC::RegExp::estimatedSize):\n* Source/JavaScriptCore/runtime/RegExp.h:\n\nCanonical link: https://commits.webkit.org/319495@main",
      "email": "sosuke@bun.sh",
      "hash": "de9231d86e640102a22bc9a6091eb6dbf94bb4d4",
      "subject": "[JSC] Use `FixedVector` for `RegExp::m_ovector` and `RareData::m_captureGroupNames`"
    },
    "319496@main": {
      "author": "Fady Farag",
      "avatar": "https://www.gravatar.com/avatar/0ac5127c69f90d0c57054173ae4c3108?d=identicon\u0026s=64",
      "cl": "319496@main",
      "clUrl": "https://commits.webkit.org/319496@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322153\nrdar://185374718\n\nReviewed by Yusuke Suzuki.\n\nISO C++ does not guarantee the evaluation order of function arguments.\nThe constructor call here both moved `sourceURL` and read it via\n`sourceURL.string()`, so the use and the move were unsequenced.\n\n* Source/WebCore/bindings/js/WebAssemblyScriptBufferSourceProvider.h:\n\nCanonical link: https://commits.webkit.org/319496@main",
      "email": "com.webkit.iidmsa@gmail.com",
      "hash": "a1306c500f0bfe6c5b5b7a5b209b6286bef54977",
      "subject": "Use-after-move in `WebAssemblyScriptBufferSourceProvider::create()`"
    },
    "319497@main": {
      "author": "Andy Estes",
      "avatar": "https://www.gravatar.com/avatar/643f10f01b26fd94d03482a2013b2ea0?d=identicon\u0026s=64",
      "cl": "319497@main",
      "clUrl": "https://commits.webkit.org/319497@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322133\nrdar://185358878\n\nReviewed by Jer Noble.\n\nMoved WebKit's adoption of AVSystemRouting from WebKitAdditions to open source.\n\n* Source/WTF/wtf/PlatformHave.h:\n* Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj:\n* Source/WebCore/PAL/pal/PlatformCocoa.cmake:\n* Source/WebCore/PAL/pal/ios/AVSystemRoutingSoftLink.h: Copied from Source/WebCore/PAL/pal/ios/AVRoutingSoftLink.h.\n* Source/WebCore/PAL/pal/ios/AVSystemRoutingSoftLink.mm: Renamed from Source/WebCore/PAL/pal/ios/AVRoutingSoftLink.mm.\n* Source/WebCore/WebCore.xcodeproj/project.pbxproj:\n* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm:\n(WebCore::MediaSessionManagerCocoa::updateSessionState):\n* Source/WebCore/platform/audio/ios/MediaDeviceRoute.h:\n* Source/WebCore/platform/audio/ios/MediaDeviceRoute.mm:\n(-[WebPlaybackControlObserver playbackControl]):\n(-[WebPlaybackControlObserver setPlaybackControl:]):\n(WebCore::MediaDeviceRoute::loadURL):\n(WebCore::MediaDeviceRoute::disconnectFromSession):\n* Source/WebCore/platform/audio/ios/MediaDeviceRouteController.h:\n* Source/WebCore/platform/audio/ios/MediaDeviceRouteController.mm:\n(-[WebMediaDeviceRouteObserver systemRouteController:handleEvent:completionHandler:]):\n(WebCore::MediaDeviceRouteController::MediaDeviceRouteController):\n* Source/WebCore/platform/audio/ios/WebMediaDevicePlatformRoute.h: Renamed from Source/WebCore/PAL/pal/ios/AVRoutingSoftLink.h.\n* Source/WebCore/testing/MockMediaDeviceRoute.h:\n* Source/WebCore/testing/cocoa/WebMockMediaDeviceRoute.h:\n* Source/WebCore/testing/cocoa/WebMockMediaDeviceRoute.mm:\n(-[WebMockMediaDeviceRoute startWithURL:completionHandler:]):\n\nCanonical link: https://commits.webkit.org/319497@main",
      "email": "aestes@apple.com",
      "hash": "86a8860a425a5af82262e7b3db323e30d2cbafc1",
      "subject": "[iOS] Upstream adoption of AVSystemRouting"
    },
    "319498@main": {
      "author": "Lauro Moura",
      "avatar": "https://www.gravatar.com/avatar/6157f52d61e04c2c63fe7ff668ba69b3?d=identicon\u0026s=64",
      "cl": "319498@main",
      "clUrl": "https://commits.webkit.org/319498@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322131\n\nUnreviewed test gardening.\n\nMostly new passes and outdated files.\n\n* WebDriverTests/TestExpectations.json:\n\nCanonical link: https://commits.webkit.org/319498@main",
      "email": "lmoura@igalia.com",
      "hash": "a9a5dc2ffd6c4a65532c46070e6a45ce6b183312",
      "subject": "[WebDriver][GLIB] Gardening misc W34 2026"
    },
    "319499@main": {
      "author": "Morne Veldsman",
      "avatar": "https://www.gravatar.com/avatar/7fd5d2d947856098f50cc45905c33063?d=identicon\u0026s=64",
      "cl": "319499@main",
      "clUrl": "https://commits.webkit.org/319499@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322136\nrdar://185361153\n\nReviewed by Tim Nguyen.\n\nTwo declarations with no definition and no callers.\n\nscheduleInvalidationTaskIfNeeded() lost its definition and both of its callers in\n205875@main, along with the m_invalidationTaskQueue it drove.\ninternalUpdateAnimationsAndSendEvents() lost its definition and its only caller in\n223759@main.\n\nNo change in behavior.\n\n* Source/WebCore/animation/DocumentTimeline.h:\n\nCanonical link: https://commits.webkit.org/319499@main",
      "email": "morne@apple.com",
      "hash": "aeccb6e8be0e9a0fe71d2c40588ef38bcb331d95",
      "subject": "Remove dead declarations from the DocumentTimeline header"
    },
    "319500@main": {
      "author": "Sam Weinig",
      "avatar": "https://www.gravatar.com/avatar/354b409240f9fb3357f498c547423d96?d=identicon\u0026s=64",
      "cl": "319500@main",
      "clUrl": "https://commits.webkit.org/319500@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322066\n\nReviewed by Darin Adler.\n\nGet's rid of most of the interface of CSSCalc::Value, moving things\nto CSS::UnevaluatedCalcBase. Most callers should be using the typed\nparent, CSS::UnevaluatedCalc\u003c\u003e, so making CSSCalc::Value just be the\nboxing type helps to make that clear.\n\nAlso finished the set overload sets on CSS::UnevaluatedCalcBase to\nall have Style::BuilderState variants. This, along with an overload\nof Style::resolveLength that takes a Style::BuilderState allows us\nto simplify the numeric conversion code to the point where it no\nlonger needs to ever reference a specific conversion data type.\n\n* Source/WebCore/css/CSSFontFace.cpp:\n* Source/WebCore/css/CSSPrimitiveValue.cpp:\n* Source/WebCore/css/calc/CSSCalcTree.h:\n* Source/WebCore/css/calc/CSSCalcValue.cpp:\n* Source/WebCore/css/calc/CSSCalcValue.h:\n* Source/WebCore/css/values/primitives/CSSUnevaluatedCalc.cpp:\n* Source/WebCore/css/values/primitives/CSSUnevaluatedCalc.h:\n* Source/WebCore/style/values/primitives/StyleLengthResolution.cpp:\n* Source/WebCore/style/values/primitives/StyleLengthResolution.h:\n* Source/WebCore/style/values/primitives/StylePrimitiveNumericTypes+Conversions.h:\n* Source/WebCore/style/values/primitives/StylePrimitiveNumericTypes+TypedCSSOMConversions.h:\n\nCanonical link: https://commits.webkit.org/319500@main",
      "email": "sam@webkit.org",
      "hash": "c8f6b5dd3c606881b439608695a0bf620e285d2e",
      "subject": "[Cleanup] Move logic from CSSCalc::Value to CSS::UnevaluatedCalcBase"
    },
    "319501@main": {
      "author": "Yusuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/3455d9081295e3e740c1ffa901217d9b?d=identicon\u0026s=64",
      "cl": "319501@main",
      "clUrl": "https://commits.webkit.org/319501@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322144\nrdar://185366501\n\nReviewed by Yijia Huang.\n\nFTL StringSwitch is really efficient for non atom strings, so let's use\nit even for resolved rope strings. When we encounter a rope string, we\ncall a function and resolve them. If it is 8bit string, then returning a\ndata pointer so that we can use FTL StringSwitch with it.\n\n* Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:\n(JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):\n* Source/JavaScriptCore/ftl/FTLOperations.cpp:\n(JSC::FTL::JSC_DEFINE_NOEXCEPT_JIT_OPERATION):\n* Source/JavaScriptCore/ftl/FTLOperations.h:\n\nCanonical link: https://commits.webkit.org/319501@main",
      "email": "ysuzuki@apple.com",
      "hash": "6fbae40455e736badcdd2f44b6062460668866cb",
      "subject": "[JSC] Use StringSwitch with resolved rope strings in FTL"
    },
    "319502@main": {
      "author": "Yusuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/3455d9081295e3e740c1ffa901217d9b?d=identicon\u0026s=64",
      "cl": "319502@main",
      "clUrl": "https://commits.webkit.org/319502@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=174763\nrdar://185360182\n\nReviewed by Keith Miller.\n\nThis patch extends B3's LICM to handle trapping loads. Currently we were\nreally conservative: we gave up when the value traps. But we can handle\nthese control-dependent trapping loads,\n\n1. Since we are already ensuring that pre-header is backward-dominated\n   by the current block, this ensures that when value is executed,\n   pre-header must be executed before as well.\n2. If we do not find any different traps between the pre-header and this\n   value in the current block, then this trap is the first one. Hoisting\n   it to the pre-header and trapping early is totally fine since there\n   is no other traps we may observe first.\n\nTest: JSTests/wasm/stress/licm-trapping-load-in-try.js\n\n* JSTests/wasm/stress/licm-trapping-load-in-try.js: Added.\n(async test):\n* Source/JavaScriptCore/b3/B3Effects.h:\n(JSC::B3::Effects::isWrite const):\n(JSC::B3::Effects::isTrapBarrier const):\n(JSC::B3::Effects::mustExecute const):\n* Source/JavaScriptCore/b3/B3HoistLoopInvariantValues.cpp:\n(JSC::B3::isTrappingLoad):\n(JSC::B3::isReachedWithoutTrapBarrier):\n(JSC::B3::hoistLoopInvariantValues):\n* Source/JavaScriptCore/b3/testb3.h:\n* Source/JavaScriptCore/b3/testb3_1.cpp:\n(run):\n* Source/JavaScriptCore/b3/testb3_7.cpp:\n(testLICMControlDependentSideExitInPredecessor):\n(testLICMControlDependentSideExitInEarlierIteration):\n\nCanonical link: https://commits.webkit.org/319502@main",
      "email": "ysuzuki@apple.com",
      "hash": "a5fa580c849f0d81096e8650be79392ae1517f59",
      "subject": "[JSC] B3::hoistLoopInvariantValues should be better at handling interference between control dependence and side exits"
    },
    "319503@main": {
      "author": "Claudio Saavedra",
      "avatar": "https://www.gravatar.com/avatar/376a6edb56b8e52de407ea171c869bcf?d=identicon\u0026s=64",
      "cl": "319503@main",
      "clUrl": "https://commits.webkit.org/319503@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322107\n\nReviewed by Patrick Griffis.\n\nNow that 319460@main added the GRefPtrWrapped attribute, use it for the\nGTK printing classes and drop the temporary GRefPtr special-case that\n319454@main added to generate_forward_declarations.\n\nUnlike the previous Wrapper coder, GRefPtrWrapped serializes a null\nGRefPtr as null instead of substituting a default, so default the print\nsettings and page setup in WebPrintOperationGtk, which requires them.\n\n* Source/WebKit/Scripts/generate-serializers.py:\n(generate_forward_declarations):\n* Source/WebKit/Shared/gtk/ArgumentCodersGtk.serialization.in:\n* Source/WebKit/Shared/gtk/CoreIPCGtkPrint.cpp:\n(WebKit::CoreIPCGtkPrintSettings::CoreIPCGtkPrintSettings):\n(WebKit::CoreIPCGtkPageSetup::CoreIPCGtkPageSetup):\n* Source/WebKit/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:\n(WebKit::WebPrintOperationGtk::WebPrintOperationGtk):\n\nCanonical link: https://commits.webkit.org/319503@main",
      "email": "csaavedra@igalia.com",
      "hash": "f37beb01c024669cd3ea581afd13d0e77a03a215",
      "subject": "[GLIB] Use GRefPtrWrapped for printing serializers and remove the GRefPtr forward-declaration special-case"
    },
    "319504@main": {
      "author": "Richard Robinson",
      "avatar": "https://www.gravatar.com/avatar/a0d2f862985ed0fd47887be66f5a3e4f?d=identicon\u0026s=64",
      "cl": "319504@main",
      "clUrl": "https://commits.webkit.org/319504@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322088\nrdar://181260984\n\nReviewed by Abrar Rahman Protyasha.\n\nWhen clicking over an empty area in editable content, a hit-test receives the focusable editable\nroot. Consequently, `shouldDeferGesturesForEventThatWillBeginAction` considered it to be non selectable\nand therefore prevented the text selection manager from handling the selection.\n\nFix by relaxing the deferral requirement such that this case is allowed and selection proceeds.\n\nTest: Tools/TestWebKitAPI/Tests/WebKit/WebPage/AppKit Gesture Tests/BasicAppKitGesturesTests.swift\n\n* Source/WebKit/UIProcess/mac/AppKitGestures/WKAppKitGestureController.mm:\n(-[WKAppKitGestureController deferringGestureRecognizer:shouldDeferGesturesForEventThatWillBeginAction:]):\n* Tools/TestWebKitAPI/Helpers/cocoa/JavaScriptMessages.swift:\n(GetSelection.expression):\n* Tools/TestWebKitAPI/Tests/WebKit/WebPage/AppKit Gesture Tests/BasicAppKitGesturesTests.swift:\n\nCanonical link: https://commits.webkit.org/319504@main",
      "email": "richard_robinson2@apple.com",
      "hash": "4f1afd534daedeb4615793a827556a4b699a077b",
      "subject": "[AppKit Gestures] Unable to position caret after \u003cimg\u003e element"
    },
    "319505@main": {
      "author": "Zak Ridouh",
      "avatar": "https://www.gravatar.com/avatar/d9b65ef530b9cbbfc6dff1ca158faace?d=identicon\u0026s=64",
      "cl": "319505@main",
      "clUrl": "https://commits.webkit.org/319505@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322130\nrdar://185356757\n\nReviewed by Elliott Williams.\n\nEvery failure was a place where the CMake build disagreed with Xcode:\n\n  - ENABLE_WEBDRIVER_TOUCH_INTERACTIONS was never enabled for the iOS family,\n    so cmakeconfig.h set it to 0 and overrode PlatformEnableCocoa.h. Mirror\n    the Platform.h value for now; the follow-up that derives the generators'\n    feature defines from Platform.h will make this unnecessary.\n\n  - Headers.cmake exported StyleComputedStyleProperties+ConstructionInlines.h,\n    whose own include is not exported, so the WebCore_Private module failed to\n    build. Xcode does not export it either.\n\n  - The stripped WebKit_Internal modulemap was missing\n    WKBackForwardListItemInternal, which WebPage+BackForwardList.swift imports.\n    Gate that header's C++ section on WK_SUPPORTS_SWIFT_OBJCXX_INTEROP so Swift\n    sees only the Objective-C part, as the other headers in that modulemap do.\n\n  - WebPage+SPI.swift and WebView+ViewportConfiguration.swift were missing from\n    the Swift source lists.\n\n  - WebKitSwift and _WebKit_SwiftUI never got WebKit's platform-swift-args.resp,\n    so WTF_PLATFORM_IOS_FAMILY was undefined and both compiled their AppKit\n    branch. Xcode passes the equivalent file to every target in the project\n    from Base.xcconfig.\n\n  - PowerLog.framework is not in the iOS SDKs; link it on macOS only, matching\n    WK_POWERLOG_LDFLAGS_macosx in WebKit.xcconfig.\n\nAlso wrap a deprecated NSDistributedNotificationCenter call in\nALLOW_DEPRECATED_DECLARATIONS. The replacement needs an audience and an\nentitlement, so that is left as a FIXME.\n\n* Source/WebCore/Headers.cmake:\n* Source/WebKit/PlatformCocoa.cmake:\n* Source/WebKit/UIProcess/API/Cocoa/WKBackForwardListItemInternal.h:\n* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionControllerCocoa.mm:\n(WebKit::WebExtensionController::removeData):\n* Source/cmake/OptionsCocoa.cmake:\n\nCanonical link: https://commits.webkit.org/319505@main",
      "email": "zakr@apple.com",
      "hash": "a38bcdb6196c9e935c905d19b4a9c323bf296eae",
      "subject": "[CMake] Fix the iOS simulator build"
    },
    "319506@main": {
      "author": "Abrar Rahman Protyasha",
      "avatar": "https://www.gravatar.com/avatar/fce5b3c4e9f3c59a4873e08c9f03c3b1?d=identicon\u0026s=64",
      "cl": "319506@main",
      "clUrl": "https://commits.webkit.org/319506@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322154\nrdar://185377037\n\nReviewed by Richard Robinson.\n\nCertain pan recognitions should not activate NSRefreshController\ntracking, such as the app exposé gesture. In this patch, we wire up this\nsignal from the gesture controller over to WebViewImpl, where we\nmaintain refresh controller state.\n\nAlso, we take the opportunity to introduce a basic test suite for\ngesture driven refresh control. For this specific bug, the relevant test\ncase is RefreshControl.trackpadAppExposeGestureDoesNotTriggerRefresh().\n\nTest: AppKitGesturesTests.RefreshControl\n\n* Source/WebKit/UIProcess/mac/AppKitGestures/WKAppKitGestureController.mm:\n(-[WKAppKitGestureController panGestureRecognized:]):\n* Source/WebKit/UIProcess/mac/WebViewImpl.h:\n* Source/WebKit/UIProcess/mac/WebViewImpl.mm:\n(WebKit::WebViewImpl::topScrollStretchDidChange):\n(WebKit::WebViewImpl::updateRefreshControllerForWheelEvent):\n* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:\n* Tools/TestWebKitAPI/Tests/WebKit/WebPage/AppKit Gesture Tests/RefreshControlGesturesTests.swift: Added.\n(AppKitGesturesTests.trackpadSwipeDownTriggersRefresh):\n(AppKitGesturesTests.trackpadAppExposeGestureDoesNotTriggerRefresh(_:)):\n(AppKitGesturesTests.loadTallPage):\n(AppKitGesturesTests.verticalDrag() throws -\u003e (start: CGPoint:end:)):\n\nCanonical link: https://commits.webkit.org/319506@main",
      "email": "a_protyasha@apple.com",
      "hash": "2481e6a653a3885055890d1f52edc83ba0138538",
      "subject": "[AppKit Gestures] App exposé gesture should not trigger pull to refresh"
    },
    "319507@main": {
      "author": "Kimmo Kinnunen",
      "avatar": "https://www.gravatar.com/avatar/7f063a2c9e40666bfe998109608180b7?d=identicon\u0026s=64",
      "cl": "319507@main",
      "clUrl": "https://commits.webkit.org/319507@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=321918\nrdar://185092232\n\nReviewed by Mike Wyrzykowski and Nikolas Zimmermann.\n\nRecorder held a GraphicsContextState per level in its own state stack\nwhile GraphicsContext::m_state held the same values as a shadow copy.\nEvery setter wrote both: setProperty() compared and assigned on m_state,\nthen didUpdateSingleState() dispatched through a 16-way switch in\nmergeSingleChange() to compare and assign again on the authoritative\ncopy. Every save() copied both, 312 bytes plus 696, and every state\nflush assigned a whole 312-byte state to lastDrawingState for\nbookkeeping.\n\nMake GraphicsContext::m_state the single current state.\nRecorder::ContextState now holds only the data GraphicsContext does not\ntrack: the CTM, the clip bounds and lastDrawingState.\n\nThis reduces save() / restore() overhead.\n\nThe redundancy filtering that mergeSingleChange() did per setter moves\nto the flush: changes() is now conservative, and\nappendStateChangeItemIfNecessary() calls removeChangesAlreadyIn() once\nbefore deciding which items to record.\n\n* Source/WebCore/platform/graphics/GraphicsContext.cpp:\n(WebCore::GraphicsContext::mergeLastChanges):\n* Source/WebCore/platform/graphics/GraphicsContext.h:\n(WebCore::GraphicsContext::didUpdateSingleState):\n(WebCore::GraphicsContext::state const): Deleted.\n* Source/WebCore/platform/graphics/GraphicsContextState.cpp:\n(WebCore::GraphicsContextState::mergeLastChanges):\n(WebCore::GraphicsContextState::mergeSingleChange):\n(WebCore::GraphicsContextState::mergeAllChanges):\n(WebCore::GraphicsContextState::propertyEquals const):\n(WebCore::GraphicsContextState::copyProperty const):\n(WebCore::GraphicsContextState::changesDifferingFrom const):\n(WebCore::GraphicsContextState::removeChangesAlreadyIn):\n(WebCore::GraphicsContextState::copyChangesTo const):\n(WebCore::GraphicsContextState::dump const):\n* Source/WebCore/platform/graphics/GraphicsContextState.h:\n* Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp:\n(WebCore::DisplayList::Recorder::Recorder):\n(WebCore::DisplayList::Recorder::didUpdateState):\n(WebCore::DisplayList::Recorder::state const): Deleted.\n(WebCore::DisplayList::Recorder::didUpdateSingleState): Deleted.\n* Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h:\n(WebCore::DisplayList::Recorder::ContextState::cloneForTransparencyLayer const):\n* Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.cpp:\n(WebCore::DisplayList::RecorderImpl::appendStateChangeItemIfNecessary):\n* Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:\n(WebCore::GraphicsContextSkia::didUpdateSingleState): Deleted.\n* Source/WebCore/platform/graphics/skia/GraphicsContextSkia.h:\n* Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextProxy.cpp:\n(WebKit::RemoteGraphicsContextProxy::appendStateChangeItemIfNecessary):\n(WebKit::RemoteGraphicsContextProxy::inlineStrokeStateIfBatchable):\n\nCanonical link: https://commits.webkit.org/319507@main",
      "email": "kkinnunen@apple.com",
      "hash": "6c4ecf631b202a0278763bd5aba21b04651f2b51",
      "subject": "DisplayList::Recorder has a copy of GraphicsContext state"
    },
    "319508@main": {
      "author": "Sergey Rubanov",
      "avatar": "https://www.gravatar.com/avatar/d04164fa4e06ce85533085f24c766e17?d=identicon\u0026s=64",
      "cl": "319508@main",
      "clUrl": "https://commits.webkit.org/319508@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=289686\n\nReviewed by Yusuke Suzuki.\n\nAfter https://bugs.webkit.org/show_bug.cgi?id=305440, notifyNeedTermination()\nonly fires the NeedTermination trap bit and no longer sets\nhasTerminationRequest() immediately. waitSync still only checked\nhasTerminationRequest(), so a worker blocked in Atomics.wait or Wasm\nmemory.atomic.wait was woken by the stop-request condition notify but\nnever returned Terminated.\n\nTeach waitSync to observe the pending NeedTermination trap, prefer\nTerminated when shutdown races with notify or timeout, and materialize the\nTerminationException via throwTerminationExceptionIfNeeded(). When Wasm\ntiers take the OutOfBounds path for wait's -1 return with termination\nalready pending, throwWasmToJSException keeps the TerminationException.\n\nTests handshake that the worker is inside the wait, then terminate and GC\nuntil workerThreadCount hits zero.\n\n* Source/JavaScriptCore/runtime/AtomicsObject.cpp:\n(JSC::atomicsWaitImpl):\n* Source/JavaScriptCore/runtime/VM.cpp:\n(JSC::VM::throwTerminationExceptionIfNeeded):\n* Source/JavaScriptCore/runtime/VM.h:\n* Source/JavaScriptCore/runtime/WaiterListManager.cpp:\n(JSC::WaiterListManager::waitSyncImpl):\n* Source/JavaScriptCore/wasm/WasmOperationsInlines.h:\n(JSC::Wasm::waitImpl):\n(JSC::Wasm::throwWasmToJSException):\n* LayoutTests/fast/workers/worker-terminate-atomics-wait.html: Added.\n* LayoutTests/fast/workers/worker-terminate-atomics-wait-expected.txt: Added.\n* LayoutTests/fast/workers/worker-terminate-wasm-atomic-wait.html: Added.\n* LayoutTests/fast/workers/worker-terminate-wasm-atomic-wait-expected.txt: Added.\n* LayoutTests/fast/workers/resources/worker-atomics-wait-forever.js: Added.\n* LayoutTests/fast/workers/resources/worker-wasm-atomic-wait-forever.js: Added.\n\nCanonical link: https://commits.webkit.org/319508@main",
      "email": "chi187@gmail.com",
      "hash": "03e836de2f7bd5627a95f60357633d59fb6bb18d",
      "subject": "[JSC] Terminate Atomics.wait / Wasm atomic.wait on worker.terminate()"
    },
    "319509@main": {
      "author": "Abrar Rahman Protyasha",
      "avatar": "https://www.gravatar.com/avatar/fce5b3c4e9f3c59a4873e08c9f03c3b1?d=identicon\u0026s=64",
      "cl": "319509@main",
      "clUrl": "https://commits.webkit.org/319509@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322127\nrdar://185354832\n\nReviewed by Richard Robinson.\n\nThis is a follow up from 317071@main.\n\nUseAppKitGesturesForGestureEvents enablement produces unwanted wheel\nevent forwarding to ViewGestureController, so let's curb that.\n\nTest: AppKitGesturesTests/Basic/swipingBetweenSpacesShouldNotTriggerBackNavigation(gesturesForGestureEvents:)\n\n* Source/WebKit/UIProcess/mac/AppKitGestures/WKAppKitGestureController.mm:\n(-[WKAppKitGestureController sendWheelEventForGesture:]):\n* Tools/TestWebKitAPI/Tests/WebKit/WebPage/AppKit Gesture Tests/BasicAppKitGesturesTests.swift:\n\nAugment the existing test case from 317071@main to also toggle\nUseAppKitGesturesForGestureEvents, adding coverage for this scenario.\n\nCanonical link: https://commits.webkit.org/319509@main",
      "email": "a_protyasha@apple.com",
      "hash": "dceda81b08d8e1e0bc50a546dbb3d9a61278c484",
      "subject": "[AppKit Gestures] Trackpad swiping between spaces should not trigger back navigation when UseAppKitGesturesForGestureEvents is enabled"
    },
    "319510@main": {
      "author": "Carlos Garcia Campos",
      "avatar": "https://www.gravatar.com/avatar/8393f7e76d83c8a147cb852d8fb1a959?d=identicon\u0026s=64",
      "cl": "319510@main",
      "clUrl": "https://commits.webkit.org/319510@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322102\n\nReviewed by Adrian Perez de Castro.\n\nWe need to check the texture mapper flags and rotate the current\ntransformation when rotation flags are present.\n\n* Source/WebCore/platform/graphics/skia/SkiaCompositingLayer.cpp:\n(WebCore::rotateContentsIfNeeded):\n(WebCore::SkiaCompositingLayer::paintContents):\n* Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedPlatformLayerBufferYUV.cpp:\n(WebCore::CoordinatedPlatformLayerBufferYUV::skiaImage):\n\nCanonical link: https://commits.webkit.org/319510@main",
      "email": "cgarcia@igalia.com",
      "hash": "fc8bf507185eae7b45fac5851066ddba4ccb0e72",
      "subject": "[GTK][WPE] Skia compositor: handle video orientation"
    },
    "319511@main": {
      "author": "Matt Woodrow",
      "avatar": "https://www.gravatar.com/avatar/cc2397f5735802900c7bd10e44601cc1?d=identicon\u0026s=64",
      "cl": "319511@main",
      "clUrl": "https://commits.webkit.org/319511@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322077\n\u003crdar://182930024\u003e\n\nReviewed by Aditya Keerthi.\n\nHold the frame ID that was used to start printing, and route endPrinting to the right process.\n\n* Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:\n* Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm:\n(-[WKWebView _computePagesForPrinting:completionHandler:]):\n(-[WKWebView _endPrintingForTesting:]):\n* Source/WebKit/UIProcess/WebPageProxy.cpp:\n(WebKit::WebPageProxy::beginPrinting):\n(WebKit::WebPageProxy::endPrinting):\n(WebKit::WebPageProxy::computePagesForPrinting):\n(WebKit::WebPageProxy::drawPagesForPrinting):\n* Source/WebKit/UIProcess/WebPageProxy.h:\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm:\n(TestWebKitAPI::(SiteIsolation, EndPrintingIsRoutedToTheFrameThatStartedPrinting)):\n\nCanonical link: https://commits.webkit.org/319511@main",
      "email": "mattwoodrow@apple.com",
      "hash": "273837bcb9abb0793a8d7a7002c27572eb37f850",
      "subject": "[Site Isolation] endPrinting is routed to the main-frame process, leaking print state in cross-site subframe processes."
    },
    "319512@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "319512@main",
      "clUrl": "https://commits.webkit.org/319512@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322159\nrdar://185385917\n\nReviewed by Chris Dumez.\n\nCanvasBase::cssParserContext() returns a const reference, but parseColor()\nbound it to `auto` and deep-copied it. Bind a reference instead.\nm_cssParserContext is only assigned by the lazy getter and never reset,\nso it stays valid for the rest of the function.\n\nNo change in behavior, so no new tests.\n\n* Source/WebCore/html/canvas/CanvasStyle.cpp:\n(WebCore::parseColor):\n\nCanonical link: https://commits.webkit.org/319512@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "f7089414675bf668a0d6f8b2dd2e6a01f74a328b",
      "subject": "Avoid copying CSSParserContext on every canvas fillStyle/strokeStyle assignment"
    },
    "319513@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "319513@main",
      "clUrl": "https://commits.webkit.org/319513@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322158\nrdar://185384284\n\nReviewed by Chris Dumez.\n\nState is copied by value on every save() (realizeSavesLoop) and stored in a\nVector\u003cState, 1\u003e, but its fields interleave 1-byte enums with doubles and leave\n18 bytes of padding: 6 bytes after lineCap/lineJoin, 4 after shadowBlur, 6\nafter globalComposite/globalBlend, and 2 after imageSmoothingQuality.\n\nGroup the sub-word fields into a single trailing block and give TextAlign,\nTextBaseline and CanvasDirection an explicit uint8_t underlying type, matching\nthe rest of the canvas enums. TextAlign and TextBaseline are unscoped enums\nused only by canvas 2D, so they were 4 bytes each for five and six enumerators.\n\nsizeof(State) goes from 824 to 800 bytes, verified identical for both ABIs --\narm64-apple-macos and x86_64-pc-windows-msvc -- with -Xclang\n-fdump-record-layouts-complete. Every field in the padded regions is a double,\nfloat, bool, Color, FloatSize or fixed-underlying-type enum, and State has no\nbase classes or bitfields, so the Itanium and MSVC layouts agree field for\nfield. The inline capacity of m_stateStack means every 2D context object\nshrinks by the same 24 bytes, and a save() at maximum depth (MaxSaveCount is\n16384) allocates 384 KB less (extreme case).\n\nNo change in behavior.\n\n* Source/WebCore/html/canvas/CanvasDirection.h:\n* Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:\n(WebCore::CanvasRenderingContext2DBase::State::State):\n* Source/WebCore/html/canvas/CanvasRenderingContext2DBase.h:\n* Source/WebCore/platform/graphics/GraphicsTypes.h:\n\nCanonical link: https://commits.webkit.org/319513@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "03a3ba478957e0cf3ab13cbc0e031be092ce32fc",
      "subject": "[Canvas] Reorder CanvasRenderingContext2DBase::State to remove 24 bytes of padding"
    },
    "319514@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "319514@main",
      "clUrl": "https://commits.webkit.org/319514@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=271125\nrdar://125315707\n\nReviewed by Chris Dumez.\n\nThis patch removes unused code, I tried to find any call sites\nbut couldn't.\n\n* Source/WTF/wtf/Vector.h:\n(WTF::VectorBufferBase::allocateBuffer):\n(WTF::VectorBuffer::allocateBuffer):\n(WTF::VectorBufferBase::tryAllocateBuffer): Deleted.\n(WTF::VectorBuffer::tryAllocateBuffer): Deleted.\n\nCanonical link: https://commits.webkit.org/319514@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "f2d69489c66bb72533d44612fff3fd09e68a632e",
      "subject": "Remove unused `tryAllocateBuffer` from `Vector.h`"
    },
    "319515@main": {
      "author": "Diego Pino Garcia",
      "avatar": "https://www.gravatar.com/avatar/e8cce88637f1a6e79155e8371e24b2e8?d=identicon\u0026s=64",
      "cl": "319515@main",
      "clUrl": "https://commits.webkit.org/319515@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=180931\n\nUnreviewed.\n\nThe only test guarded under this bug is W3C test:\n\nhtml/semantics/forms/textfieldselection/selection-after-content-change.html\n\nThe result for GLIB ports is better than the general baseline,\ntherefore emit specific baseline for GLIB.\n\n* LayoutTests/platform/glib/TestExpectations:\n* LayoutTests/platform/glib/imported/w3c/web-platform-tests/html/semantics/forms/textfieldselection/selection-after-content-change-expected.txt: Added.\n\nCanonical link: https://commits.webkit.org/319515@main",
      "email": "dpino@igalia.com",
      "hash": "fc43dbf0c3accd0ff0ba1c0113b87a963788645a",
      "subject": "[WPE][GTK] layout test gardening"
    },
    "319516@main": {
      "author": "Pawel Lampe",
      "avatar": "https://www.gravatar.com/avatar/3c9bf19417c230eff7ade252118deb7a?d=identicon\u0026s=64",
      "cl": "319516@main",
      "clUrl": "https://commits.webkit.org/319516@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=321922\n\nReviewed by Carlos Alberto Lopez Perez.\n\nThis change hooks webkit-sysprof tests to test-webkitpy script\n\nCanonical link: https://commits.webkit.org/319516@main",
      "email": "plampe@igalia.com",
      "hash": "0144456ec858379f71aaa0f3d0edeba1ffa28391",
      "subject": "Integrate webkit-sysprof tests with test-webkitpy script"
    },
    "319517@main": {
      "author": "Abrar Rahman Protyasha",
      "avatar": "https://www.gravatar.com/avatar/fce5b3c4e9f3c59a4873e08c9f03c3b1?d=identicon\u0026s=64",
      "cl": "319517@main",
      "clUrl": "https://commits.webkit.org/319517@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322169\nrdar://185399358\n\nUnreviewed build fix.\n\nThis patch addresses the following build error:\n\n```\n/Tools/TestWebKitAPI/Tests/WebKit/WebPage/AppKit Gesture Tests/RefreshControlGesturesTests.swift:38:17: error: type 'AppKitGesturesTests.RefreshControl' does not conform to protocol 'AppKitGestureTestSuite'\n    final class RefreshControl: AppKitGestureTestSuite {\n/Tools/TestWebKitAPI/Tests/WebKit/WebPage/AppKit Gesture Tests/RefreshControlGesturesTests.swift:38:17: note: add stubs for conformance\n    final class RefreshControl: AppKitGestureTestSuite {\n/Tools/TestWebKitAPI/Tests/WebKit/WebPage/AppKit Gesture Tests/AppKitGesturesTestsSupport.swift:78:16: note: protocol requires property 'text' with type 'String'\n    static var text: String { get }\n```\n\nI regrettably dropped the `static var text` value from the RefreshControl\nclass, which meant it no longer conformed to the AppKitGestureTestSuite\nprotocol. We fix the issue in this patch.\n\n* Tools/TestWebKitAPI/Tests/WebKit/WebPage/AppKit Gesture Tests/RefreshControlGesturesTests.swift:\n\nCanonical link: https://commits.webkit.org/319517@main",
      "email": "a_protyasha@apple.com",
      "hash": "dd6bb17e781c65e0d85d219905c7c59f14ebea83",
      "subject": "REGRESSION(319506@main): HAVE(APPKIT_GESTURES_SUPPORT) build is broken ('AppKitGesturesTests.RefreshControl' does not conform to protocol 'AppKitGestureTestSuite')"
    },
    "319518@main": {
      "author": "Carlos Alberto Lopez Perez",
      "avatar": "https://www.gravatar.com/avatar/05326c1dbe06f486e884975e73f25179?d=identicon\u0026s=64",
      "cl": "319518@main",
      "clUrl": "https://commits.webkit.org/319518@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322146\n\nReviewed by Nikolas Zimmermann.\n\n318622@main rewrote the test262 runner from perl to python, so the webkitpy bot should now run on PRs\nmodifying files on that directory.\n\nAnd webkit-sysprof is also a new python tooling covered by test-webkitpy, so the bot should also run\non any change on that directory. See: 319516@main\n\n* Tools/CISupport/ews-build/steps.py:\n(CheckChangeRelevance):\n\nCanonical link: https://commits.webkit.org/319518@main",
      "email": "clopez@igalia.com",
      "hash": "00b3f7e072f6511c9a699e0a610e3428b7a7d4ce",
      "subject": "[WKCI][ews-build.webkit.org] webkitpy bot should be triggered for changes in test262 and webkit-sysprof dirs"
    },
    "319519@main": {
      "author": "Carlos Garcia Campos",
      "avatar": "https://www.gravatar.com/avatar/8393f7e76d83c8a147cb852d8fb1a959?d=identicon\u0026s=64",
      "cl": "319519@main",
      "clUrl": "https://commits.webkit.org/319519@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=321923\n\nReviewed by Nikolas Zimmermann.\n\nCreate a promise image that imports the DMABuf from the compositing thread when needed.\n\n* Source/WebCore/platform/graphics/gbm/GraphicsContextGLTextureMapperGBM.cpp:\n(WebCore::GraphicsContextGLTextureMapperGBM::prepareForDisplay):\n* Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedPlatformLayerBufferDMABuf.cpp:\n(WebCore::CoordinatedPlatformLayerBufferDMABuf::create):\n(WebCore::CoordinatedPlatformLayerBufferDMABuf::CoordinatedPlatformLayerBufferDMABuf):\n(WebCore::PromiseDMABufImageContext::PromiseDMABufImageContext):\n(WebCore::PromiseDMABufImageContext::promiseImageTexture):\n(WebCore::CoordinatedPlatformLayerBufferDMABuf::createSkiaImageIfNeeded):\n(WebCore::CoordinatedPlatformLayerBufferDMABuf::skiaImage):\n* Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedPlatformLayerBufferDMABuf.h:\n* Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedPlatformLayerBufferRGB.cpp:\n(WebCore::CoordinatedPlatformLayerBufferRGB::textureID const):\n(WebCore::CoordinatedPlatformLayerBufferRGB::skiaImage):\n* Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedPlatformLayerBufferRGB.h:\n* Source/WebKit/WebProcess/GPU/graphics/gbm/RemoteGraphicsContextGLProxyGBM.cpp:\n(WebKit::RemoteGraphicsContextGLProxyGBM::prepareForDisplay):\n\nCanonical link: https://commits.webkit.org/319519@main",
      "email": "cgarcia@igalia.com",
      "hash": "29b0c50957f19a3849848a7d08f46b888000ff9d",
      "subject": "[GTK][WPE] Skia compositor: use promise images for WebGL DMABuf buffers"
    },
    "319520@main": {
      "author": "Adrian Taylor",
      "avatar": "https://www.gravatar.com/avatar/d2acb8ad2e2670ff74ae0d65fb27014c?d=identicon\u0026s=64",
      "cl": "319520@main",
      "clUrl": "https://commits.webkit.org/319520@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322103\nrdar://185318503\n\nReviewed by Elliott Williams.\n\nThis fixes Swift build errors on Windows by ensuring spans of incomplete types\nare never instantiated by the Swift C++ importer.\n\nCanonical link: https://commits.webkit.org/319520@main",
      "email": "adrian_taylor@apple.com",
      "hash": "00e34918efe467efce2bda5138f51cb8dbf072fe",
      "subject": "Inclusions required for Windows Swift forward declarations"
    },
    "319521@main": {
      "author": "Patrick Griffis",
      "avatar": "https://www.gravatar.com/avatar/2233c3a857004b126158572af9fe36f7?d=identicon\u0026s=64",
      "cl": "319521@main",
      "clUrl": "https://commits.webkit.org/319521@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322012\n\nReviewed by Carlos Garcia Campos.\n\nhandleKeyboardEvent() gave up on anything that could not be edited, so the\nbindings that do not modify text never ran at all: Ctrl+C and Ctrl+A did\nnothing on an ordinary page. The guard belongs in handleKeyPress(), which is\nthe only path that inserts text.\n\nThat leaves handleKeyDown() executing commands the selection is free to\nrefuse, so it now claims the event only when the command actually ran. Without\nthat the arrow and paging keys would stop scrolling non-editable content,\nwhere the movement command fails but the event was still marked handled.\n\nTests: Tools/TestWebKitAPI/Tests/WebKit/WKWebView/wpe/TestWebViewEditor.cpp\n\n* LayoutTests/platform/wpe/editing/selection/caret-mode-paragraph-keys-navigation-expected.txt: Removed.\n* LayoutTests/platform/wpe/imported/w3c/web-platform-tests/editing/other/paste-in-list-with-inline-style.tentative-expected.txt: Removed.\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: Removed.\n* LayoutTests/platform/wpe/imported/w3c/web-platform-tests/editing/other/plain-text-copy-paste-of-paragraph-ending-with-non-layed-out-content-expected.txt: Removed.\n* Source/WebKit/WebProcess/WebCoreSupport/wpe/WebEditorClientWPE.cpp:\n(WebKit::handleKeyPress):\n(WebKit::handleKeyDown):\n(WebKit::WebEditorClient::handleKeyboardEvent):\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/wpe/TestWebViewEditor.cpp: Added.\n(EditorKeyBindingTest::loadContentsAndWait):\n(EditorKeyBindingTest::evaluateString):\n(EditorKeyBindingTest::clipboard const):\n(EditorKeyBindingTest::copyWithKeyStroke):\n(testEditorCopyKeyBindingNonEditable):\n(testEditorCopyKeyBindingEditable):\n(testEditorSelectAllKeyBindingNonEditable):\n(testEditorArrowKeysStillScroll):\n(beforeAll):\n(afterAll):\n* Tools/TestWebKitAPI/glib/PlatformWPE.cmake:\n\nCanonical link: https://commits.webkit.org/319521@main",
      "email": "pgriffis@igalia.com",
      "hash": "e6fb0fd49c8ef4ebc3c0fd3c9079f73a0df2740c",
      "subject": "[WPE] Ctrl+C does not copy on non-editable content"
    },
    "319522@main": {
      "author": "Adrian Taylor",
      "avatar": "https://www.gravatar.com/avatar/d2acb8ad2e2670ff74ae0d65fb27014c?d=identicon\u0026s=64",
      "cl": "319522@main",
      "clUrl": "https://commits.webkit.org/319522@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322105\nrdar://185322054\n\nReviewed by Elliott Williams.\n\nThe Swift C++ importer eagerly instantiates class-template members that C++\nTUs never instantiate, and MSVC's STL is stricter than libc++ and\nlibstdc++: std::reverse_iterator value-initializes its stored\niterator, so Deque iterators gain default constructors (which the\nC++20 bidirectional_iterator concept requires anyway).\n\nCanonical link: https://commits.webkit.org/319522@main",
      "email": "adrian_taylor@apple.com",
      "hash": "1450e695220fcad3ff8a47205c5f05a0caaa4d94",
      "subject": "Provide DequeIterator default constructor"
    },
    "319523@main": {
      "author": "Sabith Saheb",
      "avatar": "https://www.gravatar.com/avatar/797f235ab64c002e72b2bb8012bec6c1?d=identicon\u0026s=64",
      "cl": "319523@main",
      "clUrl": "https://commits.webkit.org/319523@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=321680\n\nReviewed by Michael Catanzaro.\n\nprocessNonRLEData() reuses readCurrentPixel() to decode RLE24 absolute-mode\nruns, but readCurrentPixel() derives its byte offset from the absolute column\n(m_coord.x() * bytesPerPixel), assuming m_decodedOffset points at the start of\nthe row. That holds for non-RLE rows, which always begin at column 0, but an\nRLE absolute run can begin mid-row after an encoded run advanced the column\nthrough fillRGBA(). There m_decodedOffset points at the run's pixel bytes, so\neach read lands startX * 3 bytes too far. The InsufficientData check only\nreserves paddedNumBytes for the run length, so a truncated RLE24 bitmap whose\nabsolute run starts at a non-zero column reads past the end of the\nSharedBuffer.\n\nRead run-relative instead, matching the paletted RLE8/RLE4 branch which already\nindexes from the start of the run. Since readCurrentPixel() has a single caller\nand its offset now depends on where the block being decoded started, move it\nout of the header and into processNonRLEData() as a local lambda. The non-RLE\npath is unaffected because its rows start at column 0.\n\nAdded a regression test that decodes a truncated OS/2 RLE24 BMP whose\nabsolute-mode run begins at a non-zero column. Because the reads are backed by\nstd::span, the old code took a guaranteed out-of-bounds read (and crash) on\nthis input; with the fix the reads stay inside the run and decoding fails\ncleanly instead.\n\n* Source/WebCore/platform/image-decoders/bmp/BMPImageReader.cpp:\n(WebCore::BMPImageReader::processNonRLEData):\n* Source/WebCore/platform/image-decoders/bmp/BMPImageReader.h:\n(WebCore::BMPImageReader::readCurrentPixel): Deleted.\n* LayoutTests/fast/images/bmp-rle24-absolute-run-crash.html: Added.\n* LayoutTests/fast/images/bmp-rle24-absolute-run-crash-expected.txt: Added.\n* LayoutTests/fast/images/resources/bmp-rle24-absolute-run-crash.bmp: Added.\n\nCanonical link: https://commits.webkit.org/319523@main",
      "email": "shabi7204192361@gmail.com",
      "hash": "e269e1967d8d2dd0d4b1ba8bedd38900a46b6102",
      "subject": "Out-of-bounds read in BMP RLE24 absolute-mode decoding"
    },
    "319524@main": {
      "author": "Sabith Saheb",
      "avatar": "https://www.gravatar.com/avatar/797f235ab64c002e72b2bb8012bec6c1?d=identicon\u0026s=64",
      "cl": "319524@main",
      "clUrl": "https://commits.webkit.org/319524@main",
      "description": "Reviewed by Michael Catanzaro.\n\n1. destinationRow starts at pixelsStartingAt(rect.x(), y) and the loop above\n   writes rect.width() pixels, but cmsDoTransform gets rect.maxX() as its pixel\n   count.\n2. With a TYPE_BGRA_8 transform that is a 4-byte-per-pixel read-modify-write, so\n   once 2*rect.x() + rect.width() passes the canvas width it runs off each row,\n   and on the last row (yOffset + height == height) past the pixel allocation.\n   The only fcTL guard is xOffset + width \u003c= width, which does not stop that;\n   reachable from an animated PNG with an RGB iCCP chunk on ports built with\n   USE(LCMS) (GTK, WPE).\nPass rect.width() so the count matches the row-relative span, like the\nfirst-frame path in rowAvailable().\n\n* Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:\n(WebCore::PNGImageDecoder::frameComplete):\n\nTest: fast/images/animated-png-icc-transform-crash.html\n\n* LayoutTests/fast/images/animated-png-icc-transform-crash.html: Added.\n* LayoutTests/fast/images/animated-png-icc-transform-crash-expected.txt: Added.\n* LayoutTests/fast/images/resources/animated-png-icc-transform-crash.png: Added.\n\nCanonical link: https://commits.webkit.org/319524@main",
      "email": "shabi7204192361@gmail.com",
      "hash": "5b391e6d3b14d549908dad2c6695999291313f30",
      "subject": "Out-of-bounds write in PNGImageDecoder::frameComplete() ICC transform"
    },
    "319525@main": {
      "author": "Basuke Suzuki",
      "avatar": "https://www.gravatar.com/avatar/5192a1151c7575317affb7a4633f8d63?d=identicon\u0026s=64",
      "cl": "319525@main",
      "clUrl": "https://commits.webkit.org/319525@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322074\nrdar://185262053\n\nReviewed by Chris Dumez.\n\nThere is no way to flip a security flag on a running build yet: the server-side list delivery\ndoes not exist, and the only entry point is a testing SPI that has to be called from code. Add a\nuser default the UIProcess reads at startup, so someone who has built WebKit can turn a flag off\nwithout recompiling:\n\n    defaults write -g WebKitDebugDisabledSecurityFlags -array radar184485266\n\nRead in the SecurityFlagsController constructor. Every path that launches a privileged child\nprocess reads the singleton, so the default always lands before the first creation parameters,\nand nothing has launched yet for the constructor to propagate to. Reading goes through\nNSUserDefaults like every other user default in the UIProcess; its search list covers the\napplication domain and the global domain, so one key serves per-app and device-wide testing. A\nbare string is accepted as well as an array, because writing the default without -array is the\neasiest mistake to make.\n\nThe names are sticky: flagsWithNamesDisabled() unions them into every value the controller\ncomputes, so a flag named by the default stays disabled whatever list arrives later, including\nthe future server list. setDisabledFlagsNamedForTesting() is the one exception. Without it a\ndeveloper with the default set could not run the existing API tests, which reset the flags\nthrough the SPI and then assert they are enforced, and the carve-out only ever leaves fewer\nflags disabled. The sticky names are logged at construction, since a flag that cannot be\nenforced again at runtime is something someone will have to explain from a log later.\n\nOnly read when ENGINEERING_BUILD is set, matching the SPI, so it does not exist on a customer\nbuild. QE reaches the same flags through the IDS Server Bag once that lands, so this only has to\nserve someone who has built WebKit.\n\nTests: SecurityFlagsUserDefaultTest.DisablesFlagAtStartup\n       SecurityFlagsUserDefaultTest.TestingSPIIgnoresTheUserDefault\n\nSecurityFlagsUserDefaultTest is separate because SecurityFlagsTest's SetUp calls the SPI, which\nwould clear the flag before the test body ran. Each API test runs in its own process, so writing\nthe default in SetUp happens before anything constructs the controller.\n\n* Source/WebKit/SourcesCocoa.txt:\n* Source/WebKit/UIProcess/Cocoa/SecurityFlagsControllerCocoa.mm: Added.\n(WebKit::SecurityFlagsController::platformPersistentlyDisabledFlagNames):\n* Source/WebKit/UIProcess/SecurityFlagsController.h:\n* Source/WebKit/UIProcess/SecurityFlagsController.cpp:\n(WebKit::SecurityFlagsController::SecurityFlagsController):\n(WebKit::SecurityFlagsController::flagsWithNamesDisabled):\n(WebKit::SecurityFlagsController::setDisabledFlagsNamed):\n(WebKit::SecurityFlagsController::setDisabledFlagsNamedForTesting):\n(WebKit::SecurityFlagsController::apply):\n(WebKit::SecurityFlagsController::platformPersistentlyDisabledFlagNames):\n* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm:\n(+[WKWebsiteDataStore _setDisabledSecurityFlagsForTesting:]):\n* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:\n* Source/WebKit/WebKit.xcodeproj/project.pbxproj:\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SecurityFlags.mm:\n(TestWebKitAPI::TEST_F(SecurityFlagsUserDefaultTest, DisablesFlagAtStartup)):\n(TestWebKitAPI::TEST_F(SecurityFlagsUserDefaultTest, TestingSPIIgnoresTheUserDefault)):\n\nCanonical link: https://commits.webkit.org/319525@main",
      "email": "basuke@apple.com",
      "hash": "9a2bcc01a9a8b84bf10d7d994562ced6343c596c",
      "subject": "[SecurityFlags] Allow disabling security flags locally through a user default"
    },
    "319526@main": {
      "author": "Said Abou-Hallawa",
      "avatar": "https://www.gravatar.com/avatar/ae80a929a378a055822829ae63903296?d=identicon\u0026s=64",
      "cl": "319526@main",
      "clUrl": "https://commits.webkit.org/319526@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322067\nrdar://185257570\n\nReviewed by Jean-Yves Avenard.\n\nAccording to the spec of VideoFrame[1], the duration of the VideoFrame should be\nin microseconds. WebCodecsImageDecoder creates VideoFrames with duration in\nseconds. When casting the Second values()to uint64_t, all of them become zeros.\n\n[1] https://www.w3.org/TR/webcodecs/#videoframe\n\n* Source/WebCore/Modules/webcodecs/WebCodecsImageDecoder.cpp:\n(WebCore::WebCodecsImageDecoder::fulfillPendingDecodePromises):\n\nCanonical link: https://commits.webkit.org/319526@main",
      "email": "said@apple.com",
      "hash": "7da23e6eff7f6411e94eb393d56eee818d372fca",
      "subject": "WebCodecsImageDecoder generates VideoFrames with zero durations"
    },
    "319527@main": {
      "author": "Said Abou-Hallawa",
      "avatar": "https://www.gravatar.com/avatar/ae80a929a378a055822829ae63903296?d=identicon\u0026s=64",
      "cl": "319527@main",
      "clUrl": "https://commits.webkit.org/319527@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=321707\nrdar://184850407\n\nReviewed by Jean-Yves Avenard.\n\nIf the image has rotation EXIF data, WebCodecsImageDecoder needs to physically\nrotate the image after it's decoded. For this purpose and for Apple ports,\nImageRotationSessionVT will be extended to apply ImageOrientation to a NativeImage\nusing the existing VTImageRotationSession member. For non Apple ports a naive\napproach is used for now. The image is drawn into an ImageBuffer with passing\nthe the desired ImageOrientation.\n\n* LayoutTests/imported/w3c/web-platform-tests/webcodecs/image-decoder-image-orientation-none.https-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/webcodecs/image-decoder-utils.js:\n(int32ToByteArray):\n(getColorName):\n(toByteArray):\n-- Add a tolerance of 1 for each channel when comparing two colors since the JPEG\ndecompression can be lossy.\n-- Always respect the orientation since the VideoFrame has a physically rotated\nimage. The orientation byte is already changed in the image encoded data. So the\ncolor matrix has to be rotated according to the value of the orientation byte.\n\n* LayoutTests/imported/w3c/web-platform-tests/webcodecs/image-decoder.https.any-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/webcodecs/image-decoder.https.any.worker-expected.txt:\n* LayoutTests/platform/glib/imported/w3c/web-platform-tests/webcodecs/image-decoder-image-orientation-none.https-expected.txt: Removed.\n* LayoutTests/platform/glib/imported/w3c/web-platform-tests/webcodecs/image-decoder.https.any-expected.txt:\n* LayoutTests/platform/glib/imported/w3c/web-platform-tests/webcodecs/image-decoder.https.any.worker-expected.txt:\n* Source/WebCore/Modules/webcodecs/WebCodecsImageDecoder.cpp:\n(WebCore::WebCodecsImageDecoder::fulfillPendingDecodePromises):\n* Source/WebCore/platform/graphics/NativeImage.h:\n* Source/WebCore/platform/graphics/cg/NativeImageCG.cpp:\n(WebCore::NativeImage::rotatedImage):\n* Source/WebCore/platform/graphics/cocoa/CVPixelBufferUtilities.cpp:\n(WebCore::createMetalCompatibleCVPixelBufferFromImage):\n(WebCore::createCVPixelBufferFromImage):\n* Source/WebCore/platform/graphics/cocoa/CVPixelBufferUtilities.h:\n* Source/WebCore/platform/graphics/cv/ImageRotationSessionVT.h:\n* Source/WebCore/platform/graphics/cv/ImageRotationSessionVT.mm:\n(WebCore::ImageRotationSessionVT::rotate):\n(WebCore::ImageRotationSessionVT::applyRotation):\n* Source/WebCore/platform/graphics/NativeImage.cpp:\n(WebCore::NativeImage::rotatedImage):\n\nCanonical link: https://commits.webkit.org/319527@main",
      "email": "said@apple.com",
      "hash": "122dbbb6374f22125de2153046396093bd658850",
      "subject": "WebCodecsImageDecoder should rotate the decoded image based on its ImageOrientation"
    },
    "319528@main": {
      "author": "Vassili Bykov",
      "avatar": "https://www.gravatar.com/avatar/73ac31c69ff9a621b733e47253103b8a?d=identicon\u0026s=64",
      "cl": "319528@main",
      "clUrl": "https://commits.webkit.org/319528@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322035\nrdar://185228426\n\nReviewed by Yijia Huang and Yusuke Suzuki.\n\nParser::newMemberExpression accumulates the positions of NEW tokens in a Vector held in\nnewTokenStartPositions. SyntaxChecker ignores these accumulated positions, so when it is\nthe TreeBuilder, instead of a real Vector we can use a cheaper placeholder that only\ncounts the tokens without accumulating them.\n\nCovered by existing tests.\n\nCanonical link: https://commits.webkit.org/319528@main",
      "email": "v_bykov@apple.com",
      "hash": "24a6944b57e48e3972f2a75f69e3727b527d081f",
      "subject": "[JSC] Do not accumulate new token positions in parseMemberExpression for SyntaxChecker"
    },
    "319529@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "319529@main",
      "clUrl": "https://commits.webkit.org/319529@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322163\nrdar://185391614\n\nReviewed by Ryosuke Niwa.\n\nBring the IDL for HTMLCanvasElement.toDataURL() and toBlob() in line with\nhttps://html.spec.whatwg.org/multipage/canvas.html#htmlcanvaselement:\n\n    USVString toDataURL(optional DOMString type = \"image/png\", optional any quality);\n    undefined toBlob(BlobCallback callback, optional DOMString type = \"image/png\", optional any quality);\n\nBoth changes are no-ops at the JS boundary, so there is nothing new to test:\n\n1. toDataURL()'s return type becomes USVString. The implementation returns an\n UncachedString, and JSConverter\u003cIDLUSVString\u003e::convert(const UncachedString\u0026)\n is identical to the IDLDOMString overload -- both are jsString(vm, value.string)\n -- so the generated binding is unchanged. USVString on a return type is a\n declarative claim that the value contains no unpaired surrogates, which is\n trivially true of a base64 data URL. The distinction only has teeth in the\n JS-to-native direction, where valueToUSVString() substitutes U+FFFD.\n\n2. Defaulting `type` to \"image/png\" changes convertOptionalWithDefault\u003cIDLDOMString\u003e\n to hand the implementation \"image/png\" instead of a null String when the\n argument is omitted or undefined. The parameter's only consumer in either\n function is toEncodingMimeType(), which already maps both inputs to the same\n result: a null String is rejected by MIMETypeRegistry::isSupportedImageMIMETypeForEncoding()\n on its isEmpty() check and falls back to \"image/png\", while \"image/png\" is\n supported and returns its own ASCII-lowercased self. This also makes\n HTMLCanvasElement consistent with ImageEncodeOptions.type in OffscreenCanvas.idl,\n which already carries the same default.\n\nAlso add the spec URL to the top of the file, matching the convention used by the\nother IDL files in this directory.\n\n* Source/WebCore/html/HTMLCanvasElement.idl:\n\nCanonical link: https://commits.webkit.org/319529@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "80df4def20e353fcac0db435bb69dcec20f8c4b3",
      "subject": "Align HTMLCanvasElement interface with HTML spec for toDataURL() and toBlob()"
    },
    "319530@main": {
      "author": "Vassili Bykov",
      "avatar": "https://www.gravatar.com/avatar/73ac31c69ff9a621b733e47253103b8a?d=identicon\u0026s=64",
      "cl": "319530@main",
      "clUrl": "https://commits.webkit.org/319530@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322038\nrdar://185230995\n\nReviewed by Yijia Huang, Mark Lam, and Yusuke Suzuki.\n\nLexer::shift is implemented so that m_current is first unconditionally zeroed, and then\nset to contain the current character if the current position is within the source bounds.\nA comment explains that \"At one point timing showed that setting m_current to 0\nunconditionally was faster than an if-else sequence.\" That comment is 14 years old and\nthe finding no longer holds on current hardware. The simple if-else now performs better.\n\nCovered by existing tests.\n\nCanonical link: https://commits.webkit.org/319530@main",
      "email": "v_bykov@apple.com",
      "hash": "0ca8f08b8936335761c02c8f24129340e257a502",
      "subject": "[JSC] Remove the obsolete optimization in Lexer::shift"
    },
    "319531@main": {
      "author": "Enrique Ocaña González",
      "avatar": "https://www.gravatar.com/avatar/7c82fa40774dd34b018c3361f990a045?d=identicon\u0026s=64",
      "cl": "319531@main",
      "clUrl": "https://commits.webkit.org/319531@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322180\n\nReviewed by Nikolas Zimmermann.\n\nA new OpenCDM API (optional at build time) is now available to query\nsupported robustness levels directly from the CDM, instead of having\nthem hardcoded. CDMPrivateThunder::supportedRobustnesses() should be\nupdate to use that new API when it's available, but ensuring backwards\ncompatibility when not.\n\nThis patch checks uses the new API (when available) to get a dynamically\nallocated array of strings with the different robustness levels\nsupported. That array must be freed by the callee. Unfortunately, the\nway in which the opencdm_system_supported_robustness() API call is\ndefined, it forces us to use unsafe pointer arithmetic, because the\ncompiler can't ensure that buffers actually have a length of count.\nWe do know the assumption about buffers' length is true, so we use an\nunsafe span as the less bad way to keep the unsafeness contained.\n\nFor a detailed explanation of how the safety restrictions work, see:\nhttps://clang.llvm.org/docs/SafeBuffers.html\n\nOriginal author: Krishna Priya Kanagaraj \u003ckrishnapriya_kanagaraj@comcast.com\u003e\n\n* Source/WebCore/platform/GStreamer.cmake: Detect if opencdm_system_supported_robustness() exists and set the THUNDER_HAS_OCDM_SUPPORTED_ROBUSTNESS preprocessor define to 1 or 0 accordingly.\n* Source/WebCore/platform/graphics/gstreamer/eme/CDMThunder.cpp:\n(WebCore::CDMPrivateThunder::supportedRobustnesses const): Query the OpenCDM robustness API when available, get the answer into a Vector and return it, freeing the underlying data structure returned by the API.\n\nCanonical link: https://commits.webkit.org/319531@main",
      "email": "eocanha@igalia.com",
      "hash": "616b4d83e35eb3e6bad52c0db85f6b9f28bf0144",
      "subject": "[EME][OpenCDM] Querying robustness level from CDM instead of hardcoding the levels"
    },
    "319532@main": {
      "author": "Vassili Bykov",
      "avatar": "https://www.gravatar.com/avatar/73ac31c69ff9a621b733e47253103b8a?d=identicon\u0026s=64",
      "cl": "319532@main",
      "clUrl": "https://commits.webkit.org/319532@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322139\nrdar://185362748\n\nReviewed by Yusuke Suzuki.\n\nSourceProviderCache includes a hash map (m_map) which currently starts out empty. This patch\nuses the source length to estimate and reserve some initial capacity and avoid repetitive\nreallocation and rehashing as the map is populated. The estimate is deliberately conservative\nand underestimates the final map size for the typical workload, to avoid unnecessarily\nincreasing memory usage while still eliminating most of the rehashing churn.\n\nCovered by existing tests.\n\nCanonical link: https://commits.webkit.org/319532@main",
      "email": "v_bykov@apple.com",
      "hash": "3302d7a4550490f246ee50dcd46fe4dd584a1c51",
      "subject": "[JSC] Preallocate SourceProviderCache::m_map"
    },
    "319533@main": {
      "author": "Cole Carley",
      "avatar": "https://www.gravatar.com/avatar/091dd5641909acc46e581355f491ed34?d=identicon\u0026s=64",
      "cl": "319533@main",
      "clUrl": "https://commits.webkit.org/319533@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322057\nrdar://185246801\n\nReviewed by Brent Fulgham.\n\nI added a log to the web inspector that shows the active quirks\non a website if they are present. The log is triggered after the\nframe loader recieves it's first data in the main frame, so the\nlog will look something like this:\n\n[Warning] https://www.example.com/ has active WebKit quirks: QuirkName\n\nThe log should be present on the first load and after each reload.\n\n* Source/WebCore/loader/FrameLoader.cpp:\n(WebCore::FrameLoader::receivedFirstData):\n* Source/WebCore/page/Quirks.cpp:\n* Source/WebCore/page/Quirks.h:\n\nCanonical link: https://commits.webkit.org/319533@main",
      "email": "ccarley2@apple.com",
      "hash": "1d508ef34a245890f462af1e12d62e8e61276458",
      "subject": "Log active quirks to inspector console"
    },
    "319534@main": {
      "author": "Kimmo Kinnunen",
      "avatar": "https://www.gravatar.com/avatar/7f063a2c9e40666bfe998109608180b7?d=identicon\u0026s=64",
      "cl": "319534@main",
      "clUrl": "https://commits.webkit.org/319534@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322175\nrdar://185405205\n\nReviewed by Mike Wyrzykowski.\n\nCG drop shadow and style depend on shadowsIgnoreTransforms.\n\n* Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:\n(WebCore::GraphicsContextCG::didUpdateState):\n\nCanonical link: https://commits.webkit.org/319534@main",
      "email": "kkinnunen@apple.com",
      "hash": "00ae68f09d41443303068e64f5f654a6c2979feb",
      "subject": "CG: Recompute context drop shadow, style if shadowsIgnoreTransforms changes"
    },
    "319535@main": {
      "author": "Vassili Bykov",
      "avatar": "https://www.gravatar.com/avatar/73ac31c69ff9a621b733e47253103b8a?d=identicon\u0026s=64",
      "cl": "319535@main",
      "clUrl": "https://commits.webkit.org/319535@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322157\nrdar://185383752\n\nReviewed by Yusuke Suzuki.\n\nWhen Parser::parseFunctionInfo creates a record for the function in source provider cache,\nthe fillParametersForSourceProviderCache function computes the list of the function's\nfree variables to save it in the cache. Then, when the function scope is popped,\npopScopeInternal calls collectFreeVariables, which effectively computes the same list\nagain by iterating over the used variables while skipping the declared and lexical ones.\n\nThis patch makes it so that if the list was computed for the source provider cache,\nthe list is given to popScope. collectFreeVariables then avoids repeating the same work.\n\nConceptually, the information fed to popScope and eventually to collectFreeVariables\nis a std::optional\u003cstd::span\u003e. However, it is passed down that call chain as two\nseparate parameters, a bool and a span. That is because a bool + span parameter\npair is passed in registers, unlike an optional\u003cspan\u003e, and this code is hot enough\nthat it makes a difference.\n\nAdditionally, collectFreeVariables is renamed to collectFreeVariablesFrom to\nbetter communicate which way the collecting goes.\n\nCovered by existing tests.\n\nCanonical link: https://commits.webkit.org/319535@main",
      "email": "v_bykov@apple.com",
      "hash": "7ef470855921ed52f4a67f07e1b89dd664d1d060",
      "subject": "[JSC] Stop computing free variables twice when popping a function scope"
    },
    "319536@main": {
      "author": "Ben Nham",
      "avatar": "https://www.gravatar.com/avatar/dc0914eabf69047ee3397794c2d17bf7?d=identicon\u0026s=64",
      "cl": "319536@main",
      "clUrl": "https://commits.webkit.org/319536@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=321885\nrdar://problem/185063323\n\nReviewed by Simon Fraser.\n\nLocalFrameView::windowClipRect doesn't work correctly when Site Isolation is enabled. It tries to\napply the clip rect from its ancestors by using ownerElement, which is null once reaching a root\nframe with SI enabled. When it doesn't find a clip rect to apply, it assumes the whole view is\nvisible.\n\nThis leads to a number of visibility-based heuristics being broken when Site Isolation is enabled,\ne.g. offscreen remote frames never throttle rAF or timer callbacks, animated images in offscreen\nframes never pause, find in page marker rects are incorrect, etc.\n\nTo fix this, we now send three extra pieces of state per rendering update for each child frame in\nRemoteFrameLayoutInfo:\n\na. visibleRectInParent and windowClipRectInParent: These are the visible rect of the child frame and\nthe parent frame's windowClipRect, both in the parent's content coordinate space.\n\nOn the receiving side, we intersect the rects, project it into the child's window space, and give\nthat to LocalFrameView::setVisibleRectFromParentFrameProcess. (The projection is necessary because\nwhen SI is enabled, each root frame has its own window coordinate space, whereas with SI disabled,\nall frames share the same window coordinate space.) LocalFrameView::windowClipRect then intersects\nagainst that visibleRectFromParentFrameProcess instead of bailing out, which is the main fix in this\npatch.\n\nNote there was already a visibleRectInParent member in RemoteFrameLayoutInfo which was actually carrying\nexposedContentRect info. I renamed that field exposedContentRectInParent.\n\nb. ownerHasRenderer: whether the frame's owning element has a renderer. The receiving frame process\nuses this to avoid throttling display:none frames, which is an existing heuristic.\n\nThis is in the same area as the previous tile coverage change (318269@main), but I purposely avoided\nchanging any of the tile-coverage related logic in this patch outside of renames.\n\n* LayoutTests/http/tests/site-isolation/animated-image-in-display-none-cross-origin-iframe-expected.txt: Added.\n* LayoutTests/http/tests/site-isolation/animated-image-in-display-none-cross-origin-iframe.html: Added.\n* LayoutTests/http/tests/site-isolation/animated-image-outside-viewport-in-cross-origin-iframe-expected.txt: Added.\n* LayoutTests/http/tests/site-isolation/animated-image-outside-viewport-in-cross-origin-iframe.html: Added.\n* LayoutTests/http/tests/site-isolation/find-in-page-marker-rects-in-cross-origin-iframe-expected.txt: Added.\n* LayoutTests/http/tests/site-isolation/find-in-page-marker-rects-in-cross-origin-iframe.html: Added.\n* LayoutTests/http/tests/site-isolation/request-animation-frame-throttling-clipped-out-cross-origin-iframe-expected.txt: Added.\n* LayoutTests/http/tests/site-isolation/request-animation-frame-throttling-clipped-out-cross-origin-iframe.html: Added.\n* LayoutTests/http/tests/site-isolation/request-animation-frame-throttling-display-none-cross-origin-iframe-expected.txt: Added.\n* LayoutTests/http/tests/site-isolation/request-animation-frame-throttling-display-none-cross-origin-iframe.html: Added.\n* LayoutTests/http/tests/site-isolation/request-animation-frame-throttling-display-none-while-outside-viewport-cross-origin-iframe-expected.txt: Added.\n* LayoutTests/http/tests/site-isolation/request-animation-frame-throttling-display-none-while-outside-viewport-cross-origin-iframe.html: Added.\n* LayoutTests/http/tests/site-isolation/request-animation-frame-throttling-outside-viewport-in-cross-origin-iframe-expected.txt: Added.\n* LayoutTests/http/tests/site-isolation/request-animation-frame-throttling-outside-viewport-in-cross-origin-iframe.html: Added.\n* LayoutTests/http/tests/site-isolation/resources/marker-rects-frame.html: Added.\n* LayoutTests/http/tests/site-isolation/resources/request-animation-frame-throttling-frame.html: Added.\n* Source/WebCore/page/LocalFrameView.cpp:\n(WebCore::LocalFrameView::updateScriptedAnimationsAndTimersThrottlingState):\n(WebCore::LocalFrameView::windowClipRect const):\n* Source/WebCore/page/LocalFrameView.h:\n* Source/WebCore/page/Page.cpp:\n(WebCore::Page::syncLocalFrameInfoToRemote):\n* Source/WebCore/page/RemoteFrameLayoutInfo.cpp:\n(WebCore::RemoteFrameLayoutInfo::RemoteFrameLayoutInfo):\n(WebCore::RemoteFrameLayoutInfo::mapParentContentsToChildWindow const):\n(WebCore::RemoteFrameLayoutInfo::create): Deleted.\n(WebCore::RemoteFrameLayoutInfo::projectVisibleRectToChildContent const): Deleted.\n* Source/WebCore/page/RemoteFrameLayoutInfo.h:\n(WebCore::RemoteFrameLayoutInfo::create):\n(WebCore::RemoteFrameLayoutInfo::windowClipRectInParent const):\n(WebCore::RemoteFrameLayoutInfo::exposedContentRectInParent const):\n(WebCore::RemoteFrameLayoutInfo::ownerHasRenderer const):\n* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:\n* Source/WebKit/WebProcess/WebPage/WebFrame.cpp:\n(WebKit::WebFrame::updateLocalFrameRect):\n* Source/WebKit/WebProcess/WebPage/WebPage.cpp:\n(WebKit::WebPage::frameTreeSyncDataChangedInAnotherProcess):\n(WebKit::WebPage::allFrameTreeSyncDataChangedInAnotherProcess):\n(WebKit::WebPage::updateChildFrameVisibleRectsFromParent):\n(WebKit::WebPage::updateExposedRectFromParent): Deleted.\n* Source/WebKit/WebProcess/WebPage/WebPage.h:\n\nCanonical link: https://commits.webkit.org/319536@main",
      "email": "nham@apple.com",
      "hash": "76bb85cfc990489e5e5faa2de158ee8243d021ce",
      "subject": "[Site Isolation] Fix offscreen frame throttling"
    },
    "319537@main": {
      "author": "Wenson Hsieh",
      "avatar": "https://www.gravatar.com/avatar/c8fba82556fd4988c78bd3a0aee2a44e?d=identicon\u0026s=64",
      "cl": "319537@main",
      "clUrl": "https://commits.webkit.org/319537@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322186\nrdar://185383012\n\nReviewed by Aditya Keerthi and Abrar Rahman Protyasha.\n\nWhen resizing an image in Mail, it's possible for the top obscured inset area to flash for a frame\nor two when resizing or changing an image, in such a way that the web view goes from being\nscrollable to non-scrollable. This happens because of a general optimization to avoid adding the\nscroll pocket when a web view is scrolled to the top — because various editing commands in Mail\ncompose (not just resizing an image, but deleting content, changing font size, etc.) can change the\nscrollability of the page in a way that's not synchronized with painting, the scroll pocket can pop\nin and out of the view hierarchy as the user edits.\n\nThis works around that issue in Mail by adding a carveout for this optimization in the case where\nthe web view is `_editable` (i.e. Mail compose, IMAP Notes). It would be ideal (for a future patch)\nto try and synchronize scroll pocket updates due to changes in scrollability with the compositing\n(rendering update) lifecycle.\n\nTest: ObscuredContentInsets.ScrollPocketRemainsWhenScrolledToTopInEditableWebView\n\n* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:\n(-[WKWebView _setEditable:]):\n* Source/WebKit/UIProcess/API/mac/WKWebViewMac.mm:\n(-[WKWebView _setUsesAutomaticContentInsetBackgroundFill:]):\n* Source/WebKit/UIProcess/mac/WebViewImpl.h:\n* Source/WebKit/UIProcess/mac/WebViewImpl.mm:\n(WebKit::WebViewImpl::pageDidScroll):\n(WebKit::WebViewImpl::updateScrollPocketVisibilityWhenScrolledToTopAndNonEditable):\n(WebKit::WebViewImpl::updateScrollPocket):\n(WebKit::WebViewImpl::updateScrollPocketVisibilityWhenScrolledToTop): Deleted.\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/ObscuredContentInsets.mm:\n(TestWebKitAPI::TEST(ObscuredContentInsets, ScrollPocketRemainsWhenScrolledToTopInEditableWebView)):\n\nCanonical link: https://commits.webkit.org/319537@main",
      "email": "wenson_hsieh@apple.com",
      "hash": "24356033c71e8e73c60bc99e751e0458937c04ac",
      "subject": "[Liquid Glass] Subject area in mail compose sometimes flashes when shrinking image down from original size"
    },
    "319538@main": {
      "author": "Issac Roy",
      "avatar": "https://www.gravatar.com/avatar/dad994528f617bf59fe005077d0fa8f3?d=identicon\u0026s=64",
      "cl": "319538@main",
      "clUrl": "https://commits.webkit.org/319538@main",
      "description": "rdar://185337989\nhttps://bugs.webkit.org/show_bug.cgi?id=322114\n\nReviewed by Aakash Jain.\n\n`results-ews` answers for one test, but a step filtering failures asks about\nall of them. Sixty failures cost sixty round trips per table, each re-expanding\nthe same configuration server-side, twice per build once the re-run repeats it.\n\n`find` now takes several tests. Repeated query parameters already arrive as a\ntuple, so it reads all of them rather than the first, and each response entry\nnames the test it answers for. The limit stays per test, since a shared one\nwould be spent on whichever test came first. Cassandra still reads once per\ntest because `test` is part of the partition key: round trips collapse, not\nreads.\n\nExpanding a partial configuration depends on the configurations and the branch,\nnot the test, so it moves out of the per-test loop.\n`select_from_table_with_configurations` splits into\n`complete_configurations_for` and\n`select_from_table_with_complete_configurations`, holding one session across\nboth so a caller outside a context manager still opens one connection rather\nthan two. EWS never sends a version or architecture, so that expansion always\nruns; a batch now pays its redis scan once.\n\n`select_from_table_with_complete_configurations` validates its configurations,\nbeing reachable without the expansion that used to. `find` dedupes and drops\nblank names before validating, so a repeated blank neither rejects a batch\nnaming a real test nor reaches Cassandra as an empty name, and a batch over\n`MAX_TESTS_PER_QUERY` is rejected.\n\nBoth parameters are plural now that they take several values: `find` takes\n`tests`, `list_tests` takes `prefixes`, which is what its repeated values\nalways were. Each renames a parameter on a landed endpoint whose only consumer\nis the unlanded EWS client. The empty-configurations fallback also stops\nappending into the caller's list.\n\n* Tools/Scripts/libraries/resultsdbpy/resultsdbpy/controller/ews_controller.py:\n(EWSController):\n(EWSController.find):\n(EWSController.list_tests):\n* Tools/Scripts/libraries/resultsdbpy/resultsdbpy/controller/ews_controller_unittest.py:\n(EWSControllerTest.find_ews_results):\n(EWSControllerTest.test_upload_and_find):\n(EWSControllerTest.test_flaky_upload_and_find):\n(EWSControllerTest):\n(EWSControllerTest.test_find_a_batch_names_the_test_each_entry_answers_for):\n(EWSControllerTest.test_find_rejects_a_commit_range):\n(EWSControllerTest.test_find_without_test):\n(EWSControllerTest.test_find_a_test_whose_name_needs_escaping):\n(EWSControllerTest.test_find_ignores_blank_and_repeated_names):\n(EWSControllerTest.test_find_rejects_an_oversized_batch):\n(EWSControllerTest.test_list_tests_prefix):\n(EWSControllerTest.test_list_tests_honours_the_limit_across_prefixes):\n(EWSControllerTest.test_list_tests_percent_encoded_name):\n* Tools/Scripts/libraries/resultsdbpy/resultsdbpy/model/configuration_context.py:\n(ConfigurationContext.complete_configurations_for):\n(ConfigurationContext.select_from_table_with_complete_configurations):\n(ConfigurationContext):\n(ConfigurationContext.select_from_table_with_configurations):\n* Tools/Scripts/libraries/resultsdbpy/resultsdbpy/model/configuration_context_unittest.py:\n(ConfigurationContextTest):\n(ConfigurationContextTest.test_complete_configurations_for_expands_a_partial_configuration):\n(ConfigurationContextTest.test_complete_configurations_for_passes_a_complete_configuration_through):\n(ConfigurationContextTest.test_complete_configurations_for_rejects_an_invalid_configuration):\n(ConfigurationContextTest.test_selecting_with_configurations_opens_one_connection):\n(ConfigurationContextTest.test_selecting_with_configurations_opens_one_connection.ExampleModel):\n(ConfigurationContextTest.test_selecting_with_configurations_opens_one_connection.counting_enter):\n* Tools/Scripts/libraries/resultsdbpy/resultsdbpy/model/ews_context.py:\n(EWSContext.find_for_tests):\n(EWSContext.find_for_test): Deleted.\n(EWSContext.find_for_test.get_time): Deleted.\n* Tools/Scripts/libraries/resultsdbpy/resultsdbpy/model/ews_context_unittest.py:\n(EWSContextTest._find):\n(EWSContextTest):\n(EWSContextTest.test_several_tests_are_answered_in_one_call):\n(EWSContextTest.test_the_limit_is_spent_per_test_rather_than_shared):\n(EWSContextTest.test_the_limit_is_spent_per_test_rather_than_shared.rows_per_configuration):\n(EWSContextTest.test_the_configurations_are_expanded_once_for_the_batch):\n(EWSContextTest.test_the_configurations_are_expanded_once_for_the_batch.record):\n(EWSContextTest.test_time_window_query.start_times_within):\n\nCanonical link: https://commits.webkit.org/319538@main",
      "email": "issacroy05@gmail.com",
      "hash": "a5a2fc6134cdf98953b605e6a01942bb3f4cc547",
      "subject": "[resultsdbpy] Allow results-ews to fetch multiple tests in one batch"
    },
    "319539@main": {
      "author": "Abrar Rahman Protyasha",
      "avatar": "https://www.gravatar.com/avatar/fce5b3c4e9f3c59a4873e08c9f03c3b1?d=identicon\u0026s=64",
      "cl": "319539@main",
      "clUrl": "https://commits.webkit.org/319539@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322198\nrdar://185351454\n\nUnreviewed build fix.\n\nWe fix a unified sources build break after 319421@main added some new\nsource files under WebCore.\n\n* Source/WebCore/Modules/model-element/SpatialPortalController.cpp:\n\nCanonical link: https://commits.webkit.org/319539@main",
      "email": "a_protyasha@apple.com",
      "hash": "97f15c38e8278cbd9c31b20be5939fcbecc32597",
      "subject": "REGRESSION(319421@main): Broke internal visionOS builds (SpatialPortalController.cpp:658:51: error: initialization of incomplete type 'ModelPlayerGraphicsLayerConfiguration')"
    },
    "319540@main": {
      "author": "Ahmad Saleem",
      "avatar": "https://www.gravatar.com/avatar/38445f84fe28aa19bfeb1f59f6559532?d=identicon\u0026s=64",
      "cl": "319540@main",
      "clUrl": "https://commits.webkit.org/319540@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=195846\nrdar://166940428\n\nReviewed by Wenson Hsieh.\n\nPicking a suggestion from the context menu for a misspelled word fired\n\"insertText\" rather than \"insertReplacementText\":\n\n      beforeinput: inputType=insertText data=null dataTransfer=\"welcome\"\n\nInput Events Level 2 [1] section 6.1.2 defines the row as:\n\n      inputType                 | User's expression of intention\n      \"insertReplacementText\"   | insert or replace existing content by means of\n                                | a spell checker, auto-correct, writing\n                                | suggestions or similar\n\nwith \"Part of IME composition: No\", \"beforeinput cancelable: Yes\" and \"State of\nselection: Any\". A context menu spelling suggestion is squarely a spell checker\nreplacement, so this is the correct inputType. The W3C Editing Task Force\nreached the same conclusion in [2]: \"seems like a bug. probably should be\ninsertReplacementText\".\n\nEditAction::InsertReplacement already maps to \"insertReplacementText\" in\ninputTypeNameForEditingAction(), and the automatic autocorrection popover\nalready used it by way of SpellingCorrectionCommand. The context menu handler\nsimply never passed it, so it took ReplaceSelectionCommand::create()'s default\nof EditAction::Insert.\n\nPass EditAction::InsertReplacement instead. The switch is otherwise inert:\nundoRedoLabel() returns the empty string for both, CompositeEditCommand::apply()\naccepts both in plain text, AlternativeTextController::respondToAppliedEditing()\ndoes not inspect the action, and the bidi-paste and accessibility paths in\nReplaceSelectionCommand only test for Paste and InsertFromDrop.\n\nWebPage::changeSpellingToWord() had the same defect from the Spelling and\nGrammar panel's Change button, so thread an EditAction through\nWebPage::replaceSelectionWithText(). Its only other caller,\napplyTextTransformation() (Make Upper Case, Capitalize, Chinese conversion),\nstays on EditAction::Insert since those are not \"a spell checker, auto-correct,\nwriting suggestions or similar\". That path is only reachable from the panel,\nwhich no layout test can drive, so it is covered by inspection rather than by\nthe new test.\n\nOnly the inputType was wrong; the attribute values already conformed. Per the\ndata table in [1], \"insertReplacementText\" carries \"the plain text string to be\ninserted\" only for an \"input or textarea\" editing host and otherwise falls to\n\"All remaining | Any | null\", while the dataTransfer table gives it \"a\nprepopulated DataTransfer object\" only for a \"contenteditable\" host and\notherwise \"null\". WebKit already matched both directions, and beforeinput is\ncancelable as the table requires. The new test asserts all of it.\n\nThe forward declaration added to WebPage.h is needed because the existing\nEditAction declared in that header is WebCore::WritingTools::EditAction.\n\n[1] https://www.w3.org/TR/input-events-2/#interface-InputEvent-Attributes\n[2] https://github.com/w3c/editing/issues/494\n\nTest: editing/mac/spelling/context-menu-spelling-guess-input-events.html\n\n* LayoutTests/editing/mac/spelling/context-menu-spelling-guess-input-events-expected.txt: Added.\n* LayoutTests/editing/mac/spelling/context-menu-spelling-guess-input-events.html: Added.\n* Source/WebCore/page/ContextMenuController.cpp:\n(WebCore::ContextMenuController::contextMenuItemSelected):\n* Source/WebKit/WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:\n(WebKit::applyTextTransformation):\n* Source/WebKit/WebProcess/WebPage/WebPage.cpp:\n(WebKit::WebPage::changeSpellingToWord):\n(WebKit::WebPage::replaceSelectionWithText):\n* Source/WebKit/WebProcess/WebPage/WebPage.h:\n\nCanonical link: https://commits.webkit.org/319540@main",
      "email": "ahmad.saleem792+github@gmail.com",
      "hash": "c093ebec8aa0c8f222e03be281957c5010edf6ed",
      "subject": "Choosing a spelling suggestion from the context menu fires inputType 'insertText' instead of 'insertReplacementText'"
    },
    "319541@main": {
      "author": "Elliott Williams",
      "avatar": "https://www.gravatar.com/avatar/4086acbe078d65242df929cb51298130?d=identicon\u0026s=64",
      "cl": "319541@main",
      "clUrl": "https://commits.webkit.org/319541@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322073\n\nReviewed by Adrian Taylor and Zak Ridouh.\n\nBatch mode spawns one compiler process per job lane, and reuses it to\ncompile multiple objects. Enabling it is about a 3 sec (1%) progression\non a M5 Max machine.\n\nNote that ninja only reserves one execution lane for swift, so (same as\nbefore) compiling swift may oversubscribe the machine.\n\n* Source/cmake/OptionsCocoa.cmake:\n\nCanonical link: https://commits.webkit.org/319541@main",
      "email": "emw@apple.com",
      "hash": "27839edf90c7417a6fb14d1339316e942bab4391",
      "subject": "[CMake] Use -enable-batch-mode to improve swift compile time"
    },
    "319542@main": {
      "author": "Eric Carlson",
      "avatar": "https://www.gravatar.com/avatar/e227ff07cc6d645fc1c69fd56c2c8cb8?d=identicon\u0026s=64",
      "cl": "319542@main",
      "clUrl": "https://commits.webkit.org/319542@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=321966\nrdar://171748880\n\nReviewed by Jean-Yves Avenard.\n\nThere is exactly one system NowPlaying session per app, but the GPU process's\nNowPlayingManager holds a single client slot: whichever web process pushes its\nNowPlaying info last becomes NowPlaying and receives remote-control commands.\nWhen a page has more than one element eligible to be the NowPlaying session,\nWebKit chooses the best candidate based on the session's characteristics: size,\nwhether or not it is playing, has audio, etc. With site isolation a top-level\npage's cross-origin subframes run in separate processes so the selection logic\ncan't run in the web process or an audible subframe could take over NowPlaying\nand its remote commands from a \"more eligible\" session in the same page but\nrunning in another process.\n\nEach web process already chooses its own best NowPlaying session in\nMediaSessionManagerCocoa::updateNowPlayingInfo and sends it to the GPU process. This\nchange updates the GPU process so it doesn't just choose the most recent session pushed\nto it, but instead chooses the most eligible session from the per-page winners:\n\n- A page's candidate and its NowPlaying info are reported separately.\n  SetNowPlayingCandidateState carries the winning session's page and session identifiers\n  plus the comparator inputs the election reads (presentationType,\n  isLargeEnoughForMainContent, isPlaying, and the most-recent user-interaction time as a\n  WallTime, since MonotonicTime is not comparable across processes); the GPU process\n  updates that page's candidate and re-runs the election. SetNowPlayingInfoForPage\n  carries the NowPlayingInfo and page identifier; the GPU process updates that page's\n  info and, when the page owns NowPlaying, pushes it straight to NowPlayingManager\n  without re-electing. ClearNowPlayingInfoForPage withdraws a page's candidate. Candidacy\n  is reported whenever it changes, independent of the info-update throttling, so resizing\n  a paused video (which changes its eligibility but not its info) still re-runs the\n  election.\n\n- GPUConnectionToWebProcess keeps its process's per-page candidates; on any change\n  GPUProcess::recomputeNowPlayingOwner picks the single winner using the same tiered\n  order as PlatformMediaSessionManager::bestEligibleSessionForRemoteControls and\n  HTMLMediaElement::selectBestMediaSession, preferring the current owner when candidates\n  are otherwise equal so the choice is stable.\n\n- The candidates are keyed by { process, page } so a process hosting several pages is\n  handled correctly.\n\n- The GPU process enables arbitration itself from shared preferences\n  (remoteMediaSessionManagerEnabled || siteIsolationEnabled); the flag is process-wide\n  and sticky so a non-isolated process cannot take the panel from the election. Without\n  it, each process self-designates on push, preserving the existing behavior.\n\nFor test observability, internals.elementIsActiveNowPlayingSessionInGPUProcess asks\nthe GPU process whether a given element's session is the elected system owner, so\na test can assert the session chosen by the GPU process rather than a value the content\nprocess set itself.\n\nCross-process playback interruption is unchanged; the layout tests exercise it together\nwith the NowPlaying takeover, and the re-election when a paused candidate is resized.\n\nTests: http/tests/site-isolation/now-playing-elected-across-frames.html\n       http/tests/site-isolation/now-playing-reelects-on-resize.html\n\n* LayoutTests/http/tests/site-isolation/now-playing-elected-across-frames-expected.txt: Added.\n* LayoutTests/http/tests/site-isolation/now-playing-elected-across-frames.html: Added.\n* LayoutTests/http/tests/site-isolation/now-playing-reelects-on-resize-expected.txt: Added.\n* LayoutTests/http/tests/site-isolation/now-playing-reelects-on-resize.html: Added.\n* LayoutTests/http/tests/site-isolation/resources/now-playing-frame.html: Added.\n* Source/WebCore/html/MediaElementSession.cpp:\n(WebCore::isElementLargeEnoughForMainContent):\n* Source/WebCore/html/MediaElementSession.h:\n* Source/WebCore/platform/MediaStrategy.cpp:\n(WebCore::MediaStrategy::isActiveNowPlayingSessionInGPUProcessForTesting):\n* Source/WebCore/platform/MediaStrategy.h:\n* Source/WebCore/platform/NowPlayingManager.cpp:\n(WebCore::NowPlayingManager::clearNowPlayingInfoForPage):\n(WebCore::NowPlayingManager::clearNowPlayingInfoPrivate):\n(WebCore::NowPlayingManager::setNowPlayingInfo):\n(WebCore::NowPlayingManager::updateNowPlayingCandidateState):\n(WebCore::NowPlayingManager::setNowPlayingInfoPrivate):\n* Source/WebCore/platform/NowPlayingManager.h:\n* Source/WebCore/platform/audio/NowPlayingInfo.h:\n* Source/WebCore/platform/audio/PlatformMediaSessionInterface.cpp:\n(WebCore::PlatformMediaSessionInterface::isLargeEnoughForMainContent const):\n(WebCore::PlatformMediaSessionInterface::mostRecentUserInteractionTime const):\n* Source/WebCore/platform/audio/PlatformMediaSessionInterface.h:\n* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.h:\n* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm:\n(WebCore::MediaSessionManagerCocoa::updateNowPlayingInfo):\n* Source/WebCore/platform/audio/glib/MediaSessionManagerGLib.cpp:\n(WebCore::MediaSessionManagerGLib::updateNowPlayingInfo):\n* Source/WebCore/testing/Internals.cpp:\n(WebCore::Internals::elementIsActiveNowPlayingSessionInGPUProcess):\n* Source/WebCore/testing/Internals.h:\n* Source/WebCore/testing/Internals.idl:\n* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:\n(WebKit::GPUConnectionToWebProcess::clearNowPlayingInfoForPage):\n(WebKit::GPUConnectionToWebProcess::setNowPlayingCandidateState):\n(WebKit::GPUConnectionToWebProcess::setNowPlayingInfoForPage):\n(WebKit::GPUConnectionToWebProcess::becomeNowPlayingOwner):\n(WebKit::GPUConnectionToWebProcess::resignNowPlayingOwner):\n(WebKit::GPUConnectionToWebProcess::isActiveNowPlayingSessionForTesting):\n* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h:\n* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in:\n* Source/WebKit/GPUProcess/GPUProcess.cpp:\n(WebKit::GPUProcess::createGPUConnectionToWebProcess):\n(WebKit::GPUProcess::updateNowPlayingArbiterActive):\n(WebKit::GPUProcess::sharedPreferencesForWebProcessDidChange):\n(WebKit::GPUProcess::removeGPUConnectionToWebProcess):\n(WebKit::GPUProcess::recomputeNowPlayingOwner):\n* Source/WebKit/GPUProcess/GPUProcess.h:\n* Source/WebKit/Scripts/webkit/messages.py:\n* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:\n* Source/WebKit/WebProcess/GPU/media/WebMediaStrategy.cpp:\n(WebKit::WebMediaStrategy::createNowPlayingManager):\n(WebKit::WebMediaStrategy::isActiveNowPlayingSessionInGPUProcessForTesting):\n* Source/WebKit/WebProcess/GPU/media/WebMediaStrategy.h:\n\nCanonical link: https://commits.webkit.org/319542@main",
      "email": "eric.carlson@apple.com",
      "hash": "041d3443858bb3cfa03f843a2fcd998ccbda223a",
      "subject": "[Site Isolation] Elect the NowPlaying session in the GPU process"
    },
    "319543@main": {
      "author": "Elliott Williams",
      "avatar": "https://www.gravatar.com/avatar/4086acbe078d65242df929cb51298130?d=identicon\u0026s=64",
      "cl": "319543@main",
      "clUrl": "https://commits.webkit.org/319543@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322075\n\nReviewed by Geoffrey Garen.\n\nRight now, the SwiftPrewarmMac target is part of the build's critical path,\nwhich also includes WebKit's swift target. So moving work from\nWebKit.swiftmodule's build to prewarming does not actually improve\nperformance.\n\nFix by removing some overspecified dependencies that blocked the\nprewarming target on waiting for WebCore to finish linking, and by\nartifically adding a chain of dependents to prewarm, to trick Ninja into\nscheduling it earlier (exploiting its critical-path scheduling algorithm\nadded in ninja-build/ninja#232).\n\nOn an M5 Max, this is worth about 6 sec (2%). Combined with #71911 it's\nabout 13 sec (4%).\n\n* Source/WebKitLegacy/PlatformCocoa.cmake:\n* Source/cmake/WebKitMacros.cmake:\n* Source/cmake/WebKitSwiftPrewarm.cmake:\n\nCanonical link: https://commits.webkit.org/319543@main",
      "email": "emw@apple.com",
      "hash": "082af0d00c982ba01fcbc0e131973c07163ff1e8",
      "subject": "[CMake] Build prewarm target early enough to benefit performance"
    },
    "319544@main": {
      "author": "Sergey Rubanov",
      "avatar": "https://www.gravatar.com/avatar/d04164fa4e06ce85533085f24c766e17?d=identicon\u0026s=64",
      "cl": "319544@main",
      "clUrl": "https://commits.webkit.org/319544@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322115\n\nReviewed by Yusuke Suzuki.\n\nESM import of a Wasm module should expose immutable globals as JS\nvalues, not WebAssembly.Global objects. Instance.exports is unchanged.\nv128 and exnref cannot be represented as JS values, so those namespace\nbindings stay TDZ. Wasm-to-wasm ESM imports still take the Global\nwrapper from Instance.exports.\n\nUpdate older webapi ESM tests that still expected Global wrappers to\nmatch the jsapi unwrap checks.\n\n* Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:\n* JSTests/wasm/modules/js-wasm-global.js:\n* JSTests/wasm/modules/js-wasm-global-namespace.js:\n* JSTests/wasm/modules/js-wasm-cycle.js:\n* JSTests/wasm/modules/js-wasm-v128-global.js: Added.\n* JSTests/wasm/modules/v128-global.wat: Added.\n* JSTests/wasm/modules/v128-global.wasm: Added.\n* JSTests/wasm/modules/js-wasm-v128-import.js: Added.\n* JSTests/wasm/modules/v128-import.wat: Added.\n* JSTests/wasm/modules/v128-import.wasm: Added.\n* LayoutTests/imported/w3c/web-platform-tests/wasm/jsapi/esm-integration/exports.tentative.any-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/jsapi/esm-integration/exports.tentative.any.worker-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/jsapi/esm-integration/global-exports.tentative.any-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/jsapi/esm-integration/global-exports.tentative.any.worker-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/jsapi/esm-integration/js-wasm-cycle.tentative.any-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/jsapi/esm-integration/js-wasm-cycle.tentative.any.worker-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/jsapi/esm-integration/v128-tdz.tentative.any-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/jsapi/esm-integration/v128-tdz.tentative.any.worker-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/webapi/esm-integration/exported-names.tentative.html:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/webapi/esm-integration/exported-names.tentative-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/webapi/esm-integration/resources/js-wasm-cycle.js:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/webapi/esm-integration/js-wasm-cycle.tentative-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/webapi/esm-integration/wasm-js-cycle.tentative.html:\n* LayoutTests/imported/w3c/web-platform-tests/wasm/webapi/esm-integration/wasm-js-cycle.tentative-expected.txt:\n\nCanonical link: https://commits.webkit.org/319544@main",
      "email": "chi187@gmail.com",
      "hash": "5cfff9fe44c6ff31639c0024dc286e909b971710",
      "subject": "[JSC][Wasm] Unwrap immutable globals in the ESM module namespace"
    },
    "319545@main": {
      "author": "Nikolas Zimmermann",
      "avatar": "https://www.gravatar.com/avatar/83cbd636495835720e369cd589e3ca5e?d=identicon\u0026s=64",
      "cl": "319545@main",
      "clUrl": "https://commits.webkit.org/319545@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322062\n\nReviewed by Kiet Ho.\n\nupdateAnchorPositioningState() runs for every styled element and\ndoes extra work that can be avoided in the common case, where\nthere is no anchor state present. Benchmarking MotionMark/Suits\nunder LBSE - which uses no anchor positioning - showed up\nunnecessary hash lookups under high complexity (8000+ shapes).\n\nOnly bother performing updates involving ::before/::after styles\nif they are present - saving two hash lookups per element.\nFurthermore only attempt to look up the element in the\nanchor-positioned state map, when the map is not empty, this\nis purely cosmetic.\n\nCovered by existing tests.\n\n* Source/WebCore/style/StyleTreeResolver.cpp:\n(WebCore::Style::TreeResolver::updateAnchorPositioningState):\n\nCanonical link: https://commits.webkit.org/319545@main",
      "email": "nzimmermann@igalia.com",
      "hash": "ecccac5a57413edab61015471eed14ba65dcb41f",
      "subject": "Skip anchor-positioning bookkeeping when there is no anchor state"
    },
    "319546@main": {
      "author": "Dawn Morningstar",
      "avatar": "https://www.gravatar.com/avatar/9b791f3f02553608941e76bb5eecd471?d=identicon\u0026s=64",
      "cl": "319546@main",
      "clUrl": "https://commits.webkit.org/319546@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322029\nrdar://185221304\n\nReviewed by Ryan Haddad.\n\nStandard migration of test expectations, breaking iOS and visionOS seperate from macOS\n\n* LayoutTests/platform/ios-26/TestExpectations: Added.\n* LayoutTests/platform/ios-26/editing/editable-region/iframe-expected.txt: Added.\n* LayoutTests/platform/ios-26/editing/editable-region/iframe-without-editable-region-expected.txt: Added.\n* LayoutTests/platform/ios-26/editing/editable-region/overflow-scroll-text-field-and-contenteditable-expected.txt: Copied from LayoutTests/platform/ios/editing/editable-region/overflow-scroll-text-field-and-contenteditable-expected.txt.\n* LayoutTests/platform/ios-26/fast/events/event-attribute-expected.txt: Added.\n* LayoutTests/platform/ios-26/fast/events/input-events-paste-rich-datatransfer-expected.txt: Added.\n* LayoutTests/platform/ios-26/fast/forms/range/slider-mouse-events-expected.txt: Added.\n* LayoutTests/platform/ios-26/fast/forms/select-element-focus-ring-expected.txt: Copied from LayoutTests/platform/ios/fast/forms/select-element-focus-ring-expected.txt.\n* LayoutTests/platform/ios-26/fast/mediastream/play-newly-added-audio-track-expected.txt: Added.\n* LayoutTests/platform/ios-26/fast/scrolling/ios/border-radius-event-region-expected.txt: Added.\n* LayoutTests/platform/ios-26/fast/scrolling/ios/event-region-float-expected.txt: Added.\n* LayoutTests/platform/ios-26/fast/scrolling/ios/event-region-pointer-events-expected.txt: Added.\n* LayoutTests/platform/ios-26/fast/scrolling/ios/event-region-scale-transform-shared-expected.txt: Added.\n* LayoutTests/platform/ios-26/fast/scrolling/ios/event-region-scrolled-contents-layer-expected.txt: Added.\n* LayoutTests/platform/ios-26/fast/scrolling/ios/event-region-translate-transform-shared-expected.txt: Added.\n* LayoutTests/platform/ios-26/fast/scrolling/ios/event-region-visibility-hidden-expected.txt: Added.\n* LayoutTests/platform/ios-26/http/tests/navigation/javascriptlink-frames-expected.txt: Copied from LayoutTests/platform/ios/http/tests/navigation/javascriptlink-frames-expected.txt.\n* LayoutTests/platform/ios-26/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt: Copied from LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt.\n* LayoutTests/platform/ios-26/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.https-expected.txt: Copied from LayoutTests/platform/ios/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.https-expected.txt.\n* LayoutTests/platform/ios-26/imported/w3c/web-platform-tests/editing/run/caret-navigation-around-line-break-expected.txt: Copied from LayoutTests/platform/ios/imported/w3c/web-platform-tests/editing/run/caret-navigation-around-line-break-expected.txt.\n* LayoutTests/platform/ios-26/imported/w3c/web-platform-tests/editing/run/inserttext_2001-last-expected.txt: Copied from LayoutTests/platform/ios/imported/w3c/web-platform-tests/editing/run/inserttext_2001-last-expected.txt.\n* LayoutTests/platform/ios-26/imported/w3c/web-platform-tests/html/semantics/popovers/popover-attribute-basic-expected.txt: Copied from LayoutTests/platform/ios/imported/w3c/web-platform-tests/html/semantics/popovers/popover-attribute-basic-expected.txt.\n* LayoutTests/platform/ios-26/imported/w3c/web-platform-tests/inert/inert-iframe-hittest-expected.txt: Copied from LayoutTests/platform/ios/imported/w3c/web-platform-tests/inert/inert-iframe-hittest-expected.txt.\n* LayoutTests/platform/ios-26/imported/w3c/web-platform-tests/pointerevents/pointerevent_touch-action-verification-expected.txt: Added.\n* LayoutTests/platform/ios-26/imported/w3c/web-platform-tests/uievents/mouse/mouseover-at-removing-mousedown-target_duration=16-expected.txt: Copied from LayoutTests/platform/ios/imported/w3c/web-platform-tests/uievents/mouse/mouseover-at-removing-mousedown-target_duration=16-expected.txt.\n* LayoutTests/platform/ios-26/imported/w3c/web-platform-tests/uievents/mouse/mouseover-at-removing-mousedown-target_duration=42-expected.txt: Copied from LayoutTests/platform/ios/imported/w3c/web-platform-tests/uievents/mouse/mouseover-at-removing-mousedown-target_duration=42-expected.txt.\n* LayoutTests/platform/ios-26/imported/w3c/web-platform-tests/uievents/mouse/synthetic-mouse-enter-leave-over-out-button-state-after-target-removed.tentative_buttonType=LEFT\u0026button=0\u0026buttons=1-expected.txt: Added.\n* LayoutTests/platform/ios-26/imported/w3c/web-platform-tests/uievents/mouse/synthetic-mouse-enter-leave-over-out-button-state-after-target-removed.tentative_buttonType=MIDDLE\u0026button=1\u0026buttons=4-expected.txt: Added.\n* LayoutTests/platform/ios-26/js/dom/navigator-maxtouchpoints-expected.txt: Added.\n* LayoutTests/platform/ios/TestExpectations:\n* LayoutTests/platform/ios/editing/editable-region/iframe-expected.txt: Added.\n* LayoutTests/platform/ios/editing/editable-region/iframe-without-editable-region-expected.txt: Added.\n* LayoutTests/platform/ios/editing/editable-region/overflow-scroll-text-field-and-contenteditable-expected.txt:\n* LayoutTests/platform/ios/fast/events/event-attribute-expected.txt: Added.\n* LayoutTests/platform/ios/fast/events/input-events-paste-rich-datatransfer-expected.txt: Added.\n* LayoutTests/platform/ios/fast/forms/range/slider-mouse-events-expected.txt: Added.\n* LayoutTests/platform/ios/fast/forms/select-element-focus-ring-expected.txt:\n* LayoutTests/platform/ios/fast/mediastream/play-newly-added-audio-track-expected.txt: Added.\n* LayoutTests/platform/ios/fast/scrolling/ios/border-radius-event-region-expected.txt: Added.\n* LayoutTests/platform/ios/fast/scrolling/ios/event-region-float-expected.txt: Added.\n* LayoutTests/platform/ios/fast/scrolling/ios/event-region-pointer-events-expected.txt: Added.\n* LayoutTests/platform/ios/fast/scrolling/ios/event-region-scale-transform-shared-expected.txt: Added.\n* LayoutTests/platform/ios/fast/scrolling/ios/event-region-scrolled-contents-layer-expected.txt: Added.\n* LayoutTests/platform/ios/fast/scrolling/ios/event-region-translate-transform-shared-expected.txt: Added.\n* LayoutTests/platform/ios/fast/scrolling/ios/event-region-visibility-hidden-expected.txt: Added.\n* LayoutTests/platform/ios/http/tests/navigation/javascriptlink-frames-expected.txt:\n* LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt:\n* LayoutTests/platform/ios/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.https-expected.txt:\n* LayoutTests/platform/ios/imported/w3c/web-platform-tests/editing/run/caret-navigation-around-line-break-expected.txt:\n* LayoutTests/platform/ios/imported/w3c/web-platform-tests/editing/run/inserttext_2001-last-expected.txt:\n* LayoutTests/platform/ios/imported/w3c/web-platform-tests/fetch/compression-dictionary/dictionary-compressed.tentative.https-expected.txt: Added.\n* LayoutTests/platform/ios/imported/w3c/web-platform-tests/html/semantics/popovers/popover-attribute-basic-expected.txt:\n* LayoutTests/platform/ios/imported/w3c/web-platform-tests/inert/inert-iframe-hittest-expected.txt:\n* LayoutTests/platform/ios/imported/w3c/web-platform-tests/pointerevents/pointerevent_touch-action-verification-expected.txt: Added.\n* LayoutTests/platform/ios/imported/w3c/web-platform-tests/uievents/mouse/mouseover-at-removing-mousedown-target_duration=16-expected.txt:\n* LayoutTests/platform/ios/imported/w3c/web-platform-tests/uievents/mouse/mouseover-at-removing-mousedown-target_duration=42-expected.txt:\n* LayoutTests/platform/ios/imported/w3c/web-platform-tests/uievents/mouse/synthetic-mouse-enter-leave-over-out-button-state-after-target-removed.tentative_buttonType=LEFT\u0026button=0\u0026buttons=1-expected.txt: Added.\n* LayoutTests/platform/ios/imported/w3c/web-platform-tests/uievents/mouse/synthetic-mouse-enter-leave-over-out-button-state-after-target-removed.tentative_buttonType=MIDDLE\u0026button=1\u0026buttons=4-expected.txt: Added.\n* LayoutTests/platform/ios/js/dom/navigator-maxtouchpoints-expected.txt: Added.\n* LayoutTests/platform/visionos-26/TestExpectations: Added.\n* LayoutTests/platform/visionos-26/overlay-region/clipping-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/fixed-node-updates-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/fixed-overlay-drawn-rect-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/full-page-dynamic-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/full-page-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/full-page-horizontal-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/full-page-overflow-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/full-page-overflow-scrolling-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/full-page-scrolling-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/many-candidates-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/multi-rects-fixed-node-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/no-merging-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/overlay-background-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/overlay-element-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/overlay-element-overflow-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/split-scrollers-expected.txt: Added.\n* LayoutTests/platform/visionos-26/overlay-region/sticky-expected.txt: Added.\n* LayoutTests/platform/visionos/TestExpectations:\n* LayoutTests/platform/visionos/overlay-region/clipping-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/fixed-node-updates-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/fixed-overlay-drawn-rect-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/full-page-dynamic-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/full-page-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/full-page-horizontal-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/full-page-overflow-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/full-page-overflow-scrolling-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/full-page-scrolling-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/many-candidates-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/multi-rects-fixed-node-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/no-merging-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/overlay-background-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/overlay-element-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/overlay-element-overflow-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/split-scrollers-expected.txt: Added.\n* LayoutTests/platform/visionos/overlay-region/sticky-expected.txt: Added.\n\nCanonical link: https://commits.webkit.org/319546@main",
      "email": "morningstar@apple.com",
      "hash": "3fdbaaa565019497ba69f2960d75c3ef7d0d78e3",
      "subject": "Migrate internal iOS 27 and visionOS 27 layout test expectations to OpenSource"
    },
    "319547@main": {
      "author": "Dawn Morningstar",
      "avatar": "https://www.gravatar.com/avatar/9b791f3f02553608941e76bb5eecd471?d=identicon\u0026s=64",
      "cl": "319547@main",
      "clUrl": "https://commits.webkit.org/319547@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322032\nrdar://185226180\n\nReviewed by Ryan Haddad.\n\nMigrating macOS 27 layout test baselines and expectations from Internal -\u003e\nOpenSource, and adding the macOS 26 down-level so the queues still running 26 keep\nthe results they have today.\n\nmacOS has no public directory for the current version -- bare platform/mac holds\nit -- so a macOS 27 baseline installed there would also change macOS 26 and 15.\nVersion specific internal baselines therefore get a preserving copy in mac-tahoe\nand mac-sequoia first. Expectations use version specifiers instead of\ndirectories, so internal [ Fizz ] entries became [ GoldenGate ] and [ Cheer ] /\n[ Cheer+ ] became [ Tahoe ] / [ Tahoe+ ].\n\nInternal entries were combined with the existing OpenSource entries by unioning\nfailure kinds, except that a bare [ Pass ] on either side loses to a side which\nnames failure kinds. Entries were left in Internal when either side is [ Skip ],\nwhen the test is skipped in OpenSource through a less specific file, and for\nexpectations which cannot be public: FairPlay and encrypted-media DRM, gesture\nevents, the local authenticator keychain entitlement, the CFNetwork HTTP stack\ndifferences, and model-element on macOS.\n\nAlso removing platform/mac-sonoma, platform/mac-sonoma-wk1 and\nplatform/mac-sonoma-wk2. Nothing in OpenSource tests macOS 14: only the\nmac-sonoma port itself reads those directories, no other port's baseline search\npath includes them, and support is being dropped for the next release.\n\n* LayoutTests/platform/mac/TestExpectations: Merged 3 internal entries, added 53,\n  and attached the internal radar to 29 entries OpenSource already covered.\n* LayoutTests/platform/mac/*: Added macOS 27 baselines.\n* LayoutTests/platform/mac-wk1/TestExpectations: Added 23 WebKit1 entries.\n* LayoutTests/platform/mac-wk2/TestExpectations: Merged 5 internal entries, added 8.\n  Replaced internal OS codenames in an existing comment with public names.\n* LayoutTests/platform/mac-tahoe/*: Added new folder for macOS 26-specific\n  baselines and expectations.\n* LayoutTests/platform/mac-sequoia/*: Added preserving copies of baselines\n  displaced from platform/mac.\n* LayoutTests/platform/mac-sonoma/*, LayoutTests/platform/mac-sonoma-wk1/*,\n  LayoutTests/platform/mac-sonoma-wk2/*: Removed.\n\nCanonical link: https://commits.webkit.org/319547@main",
      "email": "morningstar@apple.com",
      "hash": "5befeafb3debded58a42a30c13aca102703d1f6f",
      "subject": "Migrate internal macOS 27 layout test expectations to OpenSource"
    },
    "319548@main": {
      "author": "Zak Ridouh",
      "avatar": "https://www.gravatar.com/avatar/d9b65ef530b9cbbfc6dff1ca158faace?d=identicon\u0026s=64",
      "cl": "319548@main",
      "clUrl": "https://commits.webkit.org/319548@main",
      "description": "https://bugs.webkit.org/show_bug.cgi?id=322199\nrdar://185440265\n\nReviewed by David Kilzer.\n\ncmakeconfig.h is force-included, so any feature the Cocoa option list sets by\nhand suppresses the #if !defined(...) guard in PlatformEnableCocoa.h and wins.\nIt is force-included into the --defines-file derivation too, so the generators\nsee the hand-set value as well. Five of those values disagreed with what\nPlatform.h computes for iOS:\n\n  - ENABLE_CURSOR_VISIBILITY was OFF for iOS; Platform.h enables it for all of\n    PLATFORM(COCOA). It sat under a \"Mac-only features\" comment, which is wrong.\n  - ENABLE_PERIODIC_MEMORY_MONITOR was ON everywhere and never overridden for\n    iOS; Platform.h gates it on PLATFORM(MAC).\n  - ENABLE_UNIFIED_PDF and ENABLE_PDF_PLUGIN were OFF for iOS; Platform.h\n    enables both, so this was the only iOS build without the PDF plugin.\n  - ENABLE_PDF_HUD agreed, but it derives from ENABLE(PDF_PLUGIN) \u0026\u0026\n    PLATFORM(MAC), so hardcoding it would diverge once the chain changes.\n\nRetire all five. Retiring the two PDF options exposed a guard mismatch:\nPDFPluginBase::openWithPreview was declared outside the ENABLE(PDF_HUD) block\nbut defined inside it, leaving the symbol undefined with the plugin on and the\nHUD off. Move the declaration in and guard the two PluginView entry points to\nmatch; the only caller is mac-only and PDF_HUD is 1 on macOS.\n\nNo change on macOS, where all five already matched Platform.h. On iOS,\nCURSOR_VISIBILITY, UNIFIED_PDF and PDF_PLUGIN go 0 -\u003e 1 and\nPERIODIC_MEMORY_MONITOR goes 1 -\u003e 0.\n\nAlso reject unsupported Apple SDKs instead of falling through as macOS. An\nunrecognized WEBKIT_SDK_NAME left the platform booleans OFF and\nWEBKIT_PLATFORM_NAME unset, which evaluated Platform.h against\n-mmacosx-version-min and wrote an empty DTPlatformName into the XPC service\nInfo.plists.\n\n* Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.h:\n* Source/WebKit/WebProcess/Plugins/PluginView.cpp:\n* Source/WebKit/WebProcess/Plugins/PluginView.h:\n* Source/cmake/OptionsCocoa.cmake:\n* Source/cmake/WebKitXcodeSDK.cmake:\n\nCanonical link: https://commits.webkit.org/319548@main",
      "email": "zakr@apple.com",
      "hash": "b1d937d5f61d1d842df7c1b27cc187ce5c727182",
      "subject": "[CMake][iOS] Let Platform.h own the Cocoa features it already derives"
    }
  },
  "date": "2026-08-20",
  "days": 1,
  "generatedAt": "2026-08-20T22:06:57Z",
  "markdown": "## Highlights\n- **Security** Fixed an out-of-bounds write in PNG ICC transform handling, closing a decoder memory corruption bug in untrusted image input paths. [commit 319524@main](https://commits.webkit.org/319524@main)\n- **Security** Fixed an out-of-bounds read in BMP RLE24 absolute-mode decoding, hardening another image parser edge case. [commit 319523@main](https://commits.webkit.org/319523@main) [bug 321680](https://bugs.webkit.org/show_bug.cgi?id=321680)\n- **Networking** Fixed a CORS preflight hang when an OPTIONS response body never terminates, preventing fetches from stalling indefinitely. [commit 319485@main](https://commits.webkit.org/319485@main) [bug 320657](https://bugs.webkit.org/show_bug.cgi?id=320657)\n- **Media** WebCodecs ImageDecoder now applies image orientation during decode, so decoded frames match source metadata instead of arriving rotated wrong. [commit 319527@main](https://commits.webkit.org/319527@main) [bug 321707](https://bugs.webkit.org/show_bug.cgi?id=321707)\n- **Security** Fixed Site Isolation print-state leakage by routing endPrinting to the main-frame process instead of cross-site subframes. [commit 319511@main](https://commits.webkit.org/319511@main) [bug 322077](https://bugs.webkit.org/show_bug.cgi?id=322077)\n- **Perf** Canvas 2D got two cheap wins: smaller state objects and no CSSParserContext copy on fillStyle and strokeStyle assignment. [commit 319513@main](https://commits.webkit.org/319513@main) [bug 322158](https://bugs.webkit.org/show_bug.cgi?id=322158)\n- **V8** JSC tightened several parser and runtime hot paths, including scope popping, syntax checking, cache allocation, and FTL string switching. [commit 319535@main](https://commits.webkit.org/319535@main) [bug 322157](https://bugs.webkit.org/show_bug.cgi?id=322157)\n- **UI** AppKit gesture handling got safer on macOS with fixes for pull-to-refresh, back-swipe, and caret placement around images. [commit 319509@main](https://commits.webkit.org/319509@main) [bug 322127](https://bugs.webkit.org/show_bug.cgi?id=322127)\n- **Build** The CMake pipeline picked up faster Swift builds, earlier prewarm, and an iOS simulator fix, which should reduce friction across Apple platform builds. [commit 319541@main](https://commits.webkit.org/319541@main) [bug 322073](https://bugs.webkit.org/show_bug.cgi?id=322073)\n\n## What landed by area\n\n### JavaScriptCore and Wasm\n- **V8** Wasm ESM module namespaces now unwrap immutable globals instead of exposing the wrapper shape. [commit 319544@main](https://commits.webkit.org/319544@main) [bug 322115](https://bugs.webkit.org/show_bug.cgi?id=322115)\n- **Perf** JSC stops recomputing free variables when popping a function scope. [commit 319535@main](https://commits.webkit.org/319535@main) [bug 322157](https://bugs.webkit.org/show_bug.cgi?id=322157)\n- **Perf** SourceProviderCache now preallocates its map to trim allocation churn. [commit 319532@main](https://commits.webkit.org/319532@main) [bug 322139](https://bugs.webkit.org/show_bug.cgi?id=322139)\n- **Refactor** Removed an obsolete Lexer::shift optimization that no longer paid for its complexity. [commit 319530@main](https://commits.webkit.org/319530@main) [bug 322038](https://bugs.webkit.org/show_bug.cgi?id=322038)\n- **Perf** SyntaxChecker no longer accumulates token positions in parseMemberExpression. [commit 319528@main](https://commits.webkit.org/319528@main) [bug 322035](https://bugs.webkit.org/show_bug.cgi?id=322035)\n- **V8** worker.terminate() now wakes and terminates Atomics.wait and Wasm atomic.wait correctly. [commit 319508@main](https://commits.webkit.org/319508@main) [bug 289686](https://bugs.webkit.org/show_bug.cgi?id=289686)\n- **Perf** B3 hoistLoopInvariantValues got better at interference between control dependence and side exits. [commit 319502@main](https://commits.webkit.org/319502@main) [bug 174763](https://bugs.webkit.org/show_bug.cgi?id=174763)\n- **Perf** FTL now uses StringSwitch with resolved rope strings. [commit 319501@main](https://commits.webkit.org/319501@main) [bug 322144](https://bugs.webkit.org/show_bug.cgi?id=322144)\n- **Security** Fixed a use-after-move in WebAssemblyScriptBufferSourceProvider::create(). [commit 319496@main](https://commits.webkit.org/319496@main) [bug 322153](https://bugs.webkit.org/show_bug.cgi?id=322153)\n- **Perf** RegExp ovector and capture group names moved to FixedVector-backed storage. [commit 319495@main](https://commits.webkit.org/319495@main) [bug 322090](https://bugs.webkit.org/show_bug.cgi?id=322090)\n- **Refactor** Removed CallLinkInfo::m_slowPathCount from JSC. [commit 319494@main](https://commits.webkit.org/319494@main) [bug 322096](https://bugs.webkit.org/show_bug.cgi?id=322096)\n- **Build** Fixed the test262 runner regression so NUMBER_OF_PROCESSORS is honored again. [commit 319491@main](https://commits.webkit.org/319491@main) [bug 322138](https://bugs.webkit.org/show_bug.cgi?id=322138)\n- **Refactor** Removed stray prints from JSC stress tests. [commit 319490@main](https://commits.webkit.org/319490@main) [bug 322140](https://bugs.webkit.org/show_bug.cgi?id=322140)\n\n### Rendering, Canvas, and CSS\n- **Rendering** Anchor positioning now skips bookkeeping when there is no anchor state. [commit 319545@main](https://commits.webkit.org/319545@main) [bug 322062](https://bugs.webkit.org/show_bug.cgi?id=322062)\n- **Web Platform** HTMLCanvasElement toDataURL() and toBlob() were aligned with the HTML spec interface. [commit 319529@main](https://commits.webkit.org/319529@main) [bug 322163](https://bugs.webkit.org/show_bug.cgi?id=322163)\n- **Perf** CanvasRenderingContext2DBase::State was reordered to remove 24 bytes of padding. [commit 319513@main](https://commits.webkit.org/319513@main) [bug 322158](https://bugs.webkit.org/show_bug.cgi?id=322158)\n- **Perf** Canvas fillStyle and strokeStyle assignment no longer copies CSSParserContext every time. [commit 319512@main](https://commits.webkit.org/319512@main) [bug 322159](https://bugs.webkit.org/show_bug.cgi?id=322159)\n- **Rendering** DisplayList::Recorder now keeps a copy of GraphicsContext state. [commit 319507@main](https://commits.webkit.org/319507@main) [bug 321918](https://bugs.webkit.org/show_bug.cgi?id=321918)\n- **Refactor** CSS calc logic moved from CSSCalc::Value into CSS::UnevaluatedCalcBase. [commit 319500@main](https://commits.webkit.org/319500@main) [bug 322066](https://bugs.webkit.org/show_bug.cgi?id=322066)\n- **Refactor** Removed dead declarations from the DocumentTimeline header. [commit 319499@main](https://commits.webkit.org/319499@main) [bug 322136](https://bugs.webkit.org/show_bug.cgi?id=322136)\n\n### Media, Graphics, and GPU\n- **GPU** Site Isolation now elects the NowPlaying session in the GPU process. [commit 319542@main](https://commits.webkit.org/319542@main) [bug 321966](https://bugs.webkit.org/show_bug.cgi?id=321966)\n- **UI** Liquid Glass mail compose flicker while shrinking images was fixed. [commit 319537@main](https://commits.webkit.org/319537@main) [bug 322186](https://bugs.webkit.org/show_bug.cgi?id=322186)\n- **Rendering** CoreGraphics now recomputes drop shadow style when shadowsIgnoreTransforms changes. [commit 319534@main](https://commits.webkit.org/319534@main) [bug 322175](https://bugs.webkit.org/show_bug.cgi?id=322175)\n- **Media** OpenCDM robustness levels are now queried from the CDM instead of hardcoded. [commit 319531@main](https://commits.webkit.org/319531@main) [bug 322180](https://bugs.webkit.org/show_bug.cgi?id=322180)\n- **Media** WebCodecs ImageDecoder now rotates decoded images according to ImageOrientation. [commit 319527@main](https://commits.webkit.org/319527@main) [bug 321707](https://bugs.webkit.org/show_bug.cgi?id=321707)\n- **Media** WebCodecs ImageDecoder now produces VideoFrames with correct durations instead of zero. [commit 319526@main](https://commits.webkit.org/319526@main) [bug 322067](https://bugs.webkit.org/show_bug.cgi?id=322067)\n- **GPU** GTK and WPE Skia compositor now use promise images for WebGL DMABuf buffers. [commit 319519@main](https://commits.webkit.org/319519@main) [bug 321923](https://bugs.webkit.org/show_bug.cgi?id=321923)\n- **Media** GTK and WPE Skia compositor now handles video orientation. [commit 319510@main](https://commits.webkit.org/319510@main) [bug 322102](https://bugs.webkit.org/show_bug.cgi?id=322102)\n- **Mobile** iOS picked up upstream adoption of AVSystemRouting. [commit 319497@main](https://commits.webkit.org/319497@main) [bug 322133](https://bugs.webkit.org/show_bug.cgi?id=322133)\n\n### Security, Networking, and Extensions\n- **Security** Security flags can now be disabled locally via a user default, useful for local testing flows. [commit 319525@main](https://commits.webkit.org/319525@main) [bug 322074](https://bugs.webkit.org/show_bug.cgi?id=322074)\n- **Security** Fixed an out-of-bounds write in PNGImageDecoder::frameComplete() ICC transform. [commit 319524@main](https://commits.webkit.org/319524@main)\n- **Security** Fixed an out-of-bounds read in BMP RLE24 absolute-mode decoding. [commit 319523@main](https://commits.webkit.org/319523@main) [bug 321680](https://bugs.webkit.org/show_bug.cgi?id=321680)\n- **Security** Site Isolation print teardown no longer leaks print state into cross-site subframe processes. [commit 319511@main](https://commits.webkit.org/319511@main) [bug 322077](https://bugs.webkit.org/show_bug.cgi?id=322077)\n- **Security** Extension scripts and style sheets no longer inject into denied domains when \"Other Websites\" is allowed. [commit 319487@main](https://commits.webkit.org/319487@main)\n- **Networking** Fixed a CORS preflight hang on non-terminating OPTIONS response bodies. [commit 319485@main](https://commits.webkit.org/319485@main) [bug 320657](https://bugs.webkit.org/show_bug.cgi?id=320657)\n\n### UI, Editing, and Platform Behavior\n- **Web Platform** Choosing a spelling suggestion from the context menu now fires inputType \"insertText\" instead of \"insertReplacementText\". [commit 319540@main](https://commits.webkit.org/319540@main) [bug 195846](https://bugs.webkit.org/show_bug.cgi?id=195846)\n- **Perf** Site Isolation offscreen frame throttling was fixed. [commit 319536@main](https://commits.webkit.org/319536@main) [bug 321885](https://bugs.webkit.org/show_bug.cgi?id=321885)\n- **DevTools** Inspector console now logs active quirks. [commit 319533@main](https://commits.webkit.org/319533@main) [bug 322057](https://bugs.webkit.org/show_bug.cgi?id=322057)\n- **A11y** WPE now lets Ctrl+C copy from non-editable content. [commit 319521@main](https://commits.webkit.org/319521@main) [bug 322012](https://bugs.webkit.org/show_bug.cgi?id=322012)\n- **UI** Trackpad swipes between Spaces no longer trigger back navigation when AppKit gesture events are enabled. [commit 319509@main](https://commits.webkit.org/319509@main) [bug 322127](https://bugs.webkit.org/show_bug.cgi?id=322127)\n- **UI** App Expose no longer triggers pull to refresh under AppKit gestures. [commit 319506@main](https://commits.webkit.org/319506@main) [bug 322154](https://bugs.webkit.org/show_bug.cgi?id=322154)\n- **UI** Caret placement after an img element was fixed for AppKit gestures. [commit 319504@main](https://commits.webkit.org/319504@main) [bug 322088](https://bugs.webkit.org/show_bug.cgi?id=322088)\n\n### Build, Ports, and Infrastructure\n- **Build** Platform.h now owns Cocoa feature derivation it was already effectively controlling on iOS. [commit 319548@main](https://commits.webkit.org/319548@main) [bug 322199](https://bugs.webkit.org/show_bug.cgi?id=322199)\n- **Build** CMake now schedules the prewarm target early enough to actually help build performance. [commit 319543@main](https://commits.webkit.org/319543@main) [bug 322075](https://bugs.webkit.org/show_bug.cgi?id=322075)\n- **Build** CMake now uses -enable-batch-mode to speed up Swift compilation. [commit 319541@main](https://commits.webkit.org/319541@main) [bug 322073](https://bugs.webkit.org/show_bug.cgi?id=322073)\n- **Build** Fixed a regression that broke internal visionOS builds. [commit 319539@main](https://commits.webkit.org/319539@main) [bug 322198](https://bugs.webkit.org/show_bug.cgi?id=322198)\n- **Build** resultsdbpy can now fetch multiple tests in one batch for results-ews. [commit 319538@main](https://commits.webkit.org/319538@main) [bug 322114](https://bugs.webkit.org/show_bug.cgi?id=322114)\n- **Build** Fixed an AppKit gestures build regression around HAVE(APPKIT_GESTURES_SUPPORT). [commit 319517@main](https://commits.webkit.org/319517@main) [bug 322169](https://bugs.webkit.org/show_bug.cgi?id=322169)\n- **Build** webkit-sysprof tests are now integrated with test-webkitpy. [commit 319516@main](https://commits.webkit.org/319516@main) [bug 321922](https://bugs.webkit.org/show_bug.cgi?id=321922)\n- **Build** Fixed the iOS simulator build. [commit 319505@main](https://commits.webkit.org/319505@main) [bug 322130](https://bugs.webkit.org/show_bug.cgi?id=322130)\n- **Build** Windows Swift forward declarations got the missing inclusions they needed. [commit 319520@main](https://commits.webkit.org/319520@main) [bug 322103](https://bugs.webkit.org/show_bug.cgi?id=322103)\n- **Refactor** GLIB printing serializers now use GRefPtrWrapped and drop a GRefPtr forward-declaration special case. [commit 319503@main](https://commits.webkit.org/319503@main) [bug 322107](https://bugs.webkit.org/show_bug.cgi?id=322107)\n- **Build** webkitpy bot triggering now includes test262 and webkit-sysprof directory changes. [commit 319518@main](https://commits.webkit.org/319518@main) [bug 322146](https://bugs.webkit.org/show_bug.cgi?id=322146)\n- **Refactor** DequeIterator now has a default constructor. [commit 319522@main](https://commits.webkit.org/319522@main) [bug 322105](https://bugs.webkit.org/show_bug.cgi?id=322105)\n- **Refactor** Removed unused tryAllocateBuffer from Vector.h. [commit 319514@main](https://commits.webkit.org/319514@main) [bug 271125](https://bugs.webkit.org/show_bug.cgi?id=271125)\n- **Refactor** BorrowedBytes was renamed and simplified. [commit 319488@main](https://commits.webkit.org/319488@main) [bug 321509](https://bugs.webkit.org/show_bug.cgi?id=321509)\n\n### Testing and Gardening\n- **Build** macOS 27 internal layout test expectations were migrated to OpenSource. [commit 319547@main](https://commits.webkit.org/319547@main) [bug 322032](https://bugs.webkit.org/show_bug.cgi?id=322032)\n- **Build** iOS 27 and visionOS 27 internal layout test expectations were migrated to OpenSource. [commit 319546@main](https://commits.webkit.org/319546@main) [bug 322029](https://bugs.webkit.org/show_bug.cgi?id=322029)\n- **Build** GTK and WPE layout test gardening landed for current failures. [commit 319515@main](https://commits.webkit.org/319515@main) [bug 180931](https://bugs.webkit.org/show_bug.cgi?id=180931)\n- **Build** WebDriver GLIB gardening updated misc W34 2026 expectations. [commit 319498@main](https://commits.webkit.org/319498@main) [bug 322131](https://bugs.webkit.org/show_bug.cgi?id=322131)\n- **Build** Fixed constant macOS DEBUG timeouts in EnhancedSecurityPolicies MultiHopThenBackToSecure tests. [commit 319493@main](https://commits.webkit.org/319493@main) [bug 321940](https://bugs.webkit.org/show_bug.cgi?id=321940)\n- **Build** Updated Linux JSC Test262 expectations after 318774@main. [commit 319492@main](https://commits.webkit.org/319492@main) [bug 322143](https://bugs.webkit.org/show_bug.cgi?id=322143)\n- **Build** Fixed a constant DEBUG crash in ResourceLoadStatistics.BlockUnpartitionedThirdPartyCookies. [commit 319489@main](https://commits.webkit.org/319489@main) [bug 321947](https://bugs.webkit.org/show_bug.cgi?id=321947)\n- **Build** Updated WPE, GTK, and MVT flaky-test lists. [commit 319486@main](https://commits.webkit.org/319486@main) [bug 322134](https://bugs.webkit.org/show_bug.cgi?id=322134)\n- **Build** linux_get_crash_log now caps GDB runtime at 30 minutes and checks DEBUGINFOD_URLS more carefully. [commit 319483@main](https://commits.webkit.org/319483@main) [bug 321783](https://bugs.webkit.org/show_bug.cgi?id=321783)\n- **Build** iOS HTTP3Server api-tests were marked out after constant timeouts on the new test. [commit 319484@main](https://commits.webkit.org/319484@main) [bug 322126](https://bugs.webkit.org/show_bug.cgi?id=322126)\n- **Build** iOS HTTP2Server api-tests were marked out after constant timeouts on the new test. [commit 319482@main](https://commits.webkit.org/319482@main) [bug 322125](https://bugs.webkit.org/show_bug.cgi?id=322125)",
  "repo": "webkit",
  "repoDisplay": "WebKit",
  "rollGroups": [],
  "since": "2026-08-20",
  "totals": {
    "commits": 67,
    "features": 67,
    "rolls": 0
  },
  "until": "2026-08-20"
}