)]}'
{
  "commit": "440598309f6d34f0b5cde3e5ef519df58fc97e5c",
  "tree": "e7cb7e3582f863265490b88edbb2a149c0d93615",
  "parents": [
    "c6bd8acdac1fdbc4f3836f5841a207e24cb2bc46"
  ],
  "author": {
    "name": "Sihui Liu",
    "email": "sihui_liu@apple.com",
    "time": "Fri Aug 07 03:35:21 2026"
  },
  "committer": {
    "name": "Sihui Liu",
    "email": "sihui_liu@apple.com",
    "time": "Fri Aug 07 03:35:21 2026"
  },
  "message": "[Site Isolation] First-party sites should not enter shared process\nhttps://bugs.webkit.org/show_bug.cgi?id\u003d321033\nrdar://184066679\n\nReviewed by Ryosuke Niwa.\n\nSite Isolation\u0027s shared process mode puts multiple cross-site frames into one WebProcess for performance, trading away\nsome of the process-boundary protection between the co-located sites. 318135@main introduced IsolatedSiteStore to hold\nthe sites that must be kept out of that process, with autofill as the first signal. This patch adds two more signals for\nbetter coverage:\n- Signal::FirstPartyVisit is recorded in WebPageProxy::didCommitLoadForFrame when the commit is for the main frame, from\nthe committed request\u0027s URL, skipping about: and file: URLs. This is deliberately broad: it flags every site the user\nnavigated to at the top level, which might create first-party cookies.\n- Signal::FirstPartyUserGesture is recorded similar to where ITP records hadUserInteraction: in UserGestureIndicator\u0027s\nconstructor, and in EventHandler::keyEvent for a handled key event. Both recording sites are gated on\nProcessInteractionStyle::Immediate. Delayed defers recording to the caller, which records once it knows the event was\nhandled, and Never marks a gesture asserted programmatically rather than made by the user.\n\nRecording the two separately lets a future eviction policy drop the visited-only sites first, and lets us measure what\nnarrowing to gestures would cost before deciding to narrow.\n\nAPI tests: WKWebsiteDataStore.FirstPartyVisitMarksSiteAsIsolated\n           WKWebsiteDataStore.FirstPartyUserGestureInSubframeDoesNotMarkSubframeSite\n\n* Source/WebCore/dom/UserGestureIndicator.cpp:\n(WebCore::UserGestureIndicator::UserGestureIndicator):\n* Source/WebCore/page/ChromeClient.h:\n(WebCore::ChromeClient::didObserveFirstPartyUserGesture):\n* Source/WebCore/page/EventHandler.cpp:\n(WebCore::EventHandler::keyEvent):\n* Source/WebCore/page/Page.cpp:\n(WebCore::Page::didObserveFirstPartyUserGesture):\n* Source/WebCore/page/Page.h:\n* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm:\n(-[WKWebsiteDataStore _isolatedSiteSignalsForTesting:]):\n(-[WKWebsiteDataStore _isIsolatedSiteForTesting:]): Deleted.\n* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:\n* Source/WebKit/UIProcess/WebPageProxy.cpp:\n(WebKit::WebPageProxy::recordFirstPartyVisit):\n(WebKit::WebPageProxy::didCommitLoadForFrame):\n* Source/WebKit/UIProcess/WebPageProxy.h:\n* Source/WebKit/UIProcess/WebProcessProxy.cpp:\n(WebKit::WebProcessProxy::didObserveFirstPartyUserGesture):\n* Source/WebKit/UIProcess/WebProcessProxy.h:\n* Source/WebKit/UIProcess/WebProcessProxy.messages.in:\n* Source/WebKit/UIProcess/WebsiteData/IsolatedSiteStore.h:\n* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:\n(WebKit::WebsiteDataStore::isolatedSiteSignalsForTesting const):\n(WebKit::WebsiteDataStore::isIsolatedSiteForTesting const): Deleted.\n* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:\n* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp:\n(WebKit::WebChromeClient::didObserveFirstPartyUserGesture):\n* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h:\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm:\n(TestWebKitAPI::(SiteIsolation, SharedProcessAfterKeyDown)):\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/UserContentController.mm:\n(TEST(WKUserContentController, AutofillScriptingMarksSiteAsIsolated)):\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebsiteDatastore.mm:\n(TestWebKitAPI::(WKWebsiteDataStore, FirstPartyVisitMarksSiteAsIsolated)):\n(TestWebKitAPI::(WKWebsiteDataStore, FirstPartyUserGestureMarksSiteAsIsolated)):\n(TestWebKitAPI::(WKWebsiteDataStore, FirstPartyUserGestureInSubframeDoesNotMarkSubframeSite)):\n* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/ios/WKWebViewAutofillTests.mm:\n(TestWebKitAPI::TEST(WKWebViewAutoFillTests, AutofillMarksSiteAsIsolated)):\n\nCanonical link: https://commits.webkit.org/318763@main\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3729a850c737e51befbdb8f7c2c9a119da8c0e42",
      "old_mode": 33188,
      "old_path": "Source/WebCore/dom/UserGestureIndicator.cpp",
      "new_id": "238054df0356f68632edec995ef4d257f1648aaa",
      "new_mode": 33188,
      "new_path": "Source/WebCore/dom/UserGestureIndicator.cpp"
    },
    {
      "type": "modify",
      "old_id": "962019d9bb9a7ba78c1d83e67aa41d0ffb08a5eb",
      "old_mode": 33188,
      "old_path": "Source/WebCore/page/ChromeClient.h",
      "new_id": "96414e9e28f6e91cb55b698acc0b880f68e0531b",
      "new_mode": 33188,
      "new_path": "Source/WebCore/page/ChromeClient.h"
    },
    {
      "type": "modify",
      "old_id": "223680b43c21433d90488619eddf959fb796051b",
      "old_mode": 33188,
      "old_path": "Source/WebCore/page/EventHandler.cpp",
      "new_id": "2c01c5807eb596bc9846069afe0de94adbac0070",
      "new_mode": 33188,
      "new_path": "Source/WebCore/page/EventHandler.cpp"
    },
    {
      "type": "modify",
      "old_id": "2c5fa3a0aa632e1e1c8353a10d18ae24659a61ce",
      "old_mode": 33188,
      "old_path": "Source/WebCore/page/Page.cpp",
      "new_id": "5431106b92cf734a08f75c317cf0ad8bbaf25800",
      "new_mode": 33188,
      "new_path": "Source/WebCore/page/Page.cpp"
    },
    {
      "type": "modify",
      "old_id": "eecf59998b735ed7f2296373069ad51443b34e5c",
      "old_mode": 33188,
      "old_path": "Source/WebCore/page/Page.h",
      "new_id": "216e354cff1eb1d8e83697a2c1d2542e83ff1f6e",
      "new_mode": 33188,
      "new_path": "Source/WebCore/page/Page.h"
    },
    {
      "type": "modify",
      "old_id": "9c16dd2d586544d3b65baa84e94c31a09a345971",
      "old_mode": 33188,
      "old_path": "Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm",
      "new_id": "078f9a2df4edbef890cb881a9311186e8a351616",
      "new_mode": 33188,
      "new_path": "Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm"
    },
    {
      "type": "modify",
      "old_id": "a145065bbd67e0766b383c7d587362ec77129fe7",
      "old_mode": 33188,
      "old_path": "Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h",
      "new_id": "f2250e16e44f12e0d02a23e2296ef10780b5c4bb",
      "new_mode": 33188,
      "new_path": "Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h"
    },
    {
      "type": "modify",
      "old_id": "15257e67545f0589f68d7d35bb119b05b11d8040",
      "old_mode": 33188,
      "old_path": "Source/WebKit/UIProcess/WebPageProxy.cpp",
      "new_id": "f08f84b6d66c1614ec09f7db38eeb5d8aac0e7d1",
      "new_mode": 33188,
      "new_path": "Source/WebKit/UIProcess/WebPageProxy.cpp"
    },
    {
      "type": "modify",
      "old_id": "8b6d5133e09b417fd10c1d858c85845a0a4ca6bb",
      "old_mode": 33188,
      "old_path": "Source/WebKit/UIProcess/WebPageProxy.h",
      "new_id": "56d6e618312b91a50378594f6e8530e02d9dfc0c",
      "new_mode": 33188,
      "new_path": "Source/WebKit/UIProcess/WebPageProxy.h"
    },
    {
      "type": "modify",
      "old_id": "68aaa92130f3d0dcb4963c22859866c8b7360276",
      "old_mode": 33188,
      "old_path": "Source/WebKit/UIProcess/WebProcessProxy.cpp",
      "new_id": "2d8052e6a3eacfa45ed2cc3038ff51a21faabbf6",
      "new_mode": 33188,
      "new_path": "Source/WebKit/UIProcess/WebProcessProxy.cpp"
    },
    {
      "type": "modify",
      "old_id": "a5f670086e31c76d9a9b4af6725f65a65f0a0b27",
      "old_mode": 33188,
      "old_path": "Source/WebKit/UIProcess/WebProcessProxy.h",
      "new_id": "fe8916cd04189e44f3cd6352fc733f9bdbd80d08",
      "new_mode": 33188,
      "new_path": "Source/WebKit/UIProcess/WebProcessProxy.h"
    },
    {
      "type": "modify",
      "old_id": "8e314324fcf735335e86fe58a83e5c5b22c950e1",
      "old_mode": 33188,
      "old_path": "Source/WebKit/UIProcess/WebProcessProxy.messages.in",
      "new_id": "1a015d849ea36a1db987783555db9637793f6c82",
      "new_mode": 33188,
      "new_path": "Source/WebKit/UIProcess/WebProcessProxy.messages.in"
    },
    {
      "type": "modify",
      "old_id": "7e31ff50e0cdfdf3786fdb0944e53c738c4a89fe",
      "old_mode": 33188,
      "old_path": "Source/WebKit/UIProcess/WebsiteData/IsolatedSiteStore.h",
      "new_id": "69b04d43bd1024d5e20935a880df52375b8247c0",
      "new_mode": 33188,
      "new_path": "Source/WebKit/UIProcess/WebsiteData/IsolatedSiteStore.h"
    },
    {
      "type": "modify",
      "old_id": "450def2b51b9299466568322664115e58b08d6a7",
      "old_mode": 33188,
      "old_path": "Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp",
      "new_id": "47c1c571c92f3e6d694f54b653901550e84e0d9a",
      "new_mode": 33188,
      "new_path": "Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp"
    },
    {
      "type": "modify",
      "old_id": "775008f20a27965c7d59a1ed202969931b6cb61c",
      "old_mode": 33188,
      "old_path": "Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h",
      "new_id": "474fdc8bb13b84bf2fb5081c721cf732f4363a8f",
      "new_mode": 33188,
      "new_path": "Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h"
    },
    {
      "type": "modify",
      "old_id": "a184e0cdecd3d6d0973f0cba141d0d92b9720d9c",
      "old_mode": 33188,
      "old_path": "Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp",
      "new_id": "a3c4d10818a41c187bc261919e5e28208040d9c0",
      "new_mode": 33188,
      "new_path": "Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp"
    },
    {
      "type": "modify",
      "old_id": "c15e59f79581b4155997108effaabb15175c08e2",
      "old_mode": 33188,
      "old_path": "Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h",
      "new_id": "406c3f251a5669870e17f9f1a775148eae81d11a",
      "new_mode": 33188,
      "new_path": "Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h"
    },
    {
      "type": "modify",
      "old_id": "0e17ffc214cc683036674007c7a396aebd589391",
      "old_mode": 33188,
      "old_path": "Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm",
      "new_id": "ff2107da314ac98764a8b5339398f073ca680f45",
      "new_mode": 33188,
      "new_path": "Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm"
    },
    {
      "type": "modify",
      "old_id": "0a6228a4556cc5f3451e11e27e5b0fc6df4b918d",
      "old_mode": 33188,
      "old_path": "Tools/TestWebKitAPI/Tests/WebKit/WKWebView/UserContentController.mm",
      "new_id": "0a2ae92a598f9963af0f01df69d89c939ec99415",
      "new_mode": 33188,
      "new_path": "Tools/TestWebKitAPI/Tests/WebKit/WKWebView/UserContentController.mm"
    },
    {
      "type": "modify",
      "old_id": "07a250c60aa8b6433eca7eab8cfc1917c2960f9a",
      "old_mode": 33188,
      "old_path": "Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebsiteDatastore.mm",
      "new_id": "82b783555d7efa8934fb7fdfe9de22b070d8c60c",
      "new_mode": 33188,
      "new_path": "Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebsiteDatastore.mm"
    },
    {
      "type": "modify",
      "old_id": "0cc688976eae89cd84614aebfd9498d6ea41ff3f",
      "old_mode": 33188,
      "old_path": "Tools/TestWebKitAPI/Tests/WebKit/WKWebView/ios/WKWebViewAutofillTests.mm",
      "new_id": "8d1314974de95c1a67ac91a94e17b77a4c6d68de",
      "new_mode": 33188,
      "new_path": "Tools/TestWebKitAPI/Tests/WebKit/WKWebView/ios/WKWebViewAutofillTests.mm"
    }
  ]
}
