Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 440598309f6d34f0b5cde3e5ef519df58fc97e5c
      
https://github.com/WebKit/WebKit/commit/440598309f6d34f0b5cde3e5ef519df58fc97e5c
  Author: Sihui Liu <[email protected]>
  Date:   2026-08-06 (Thu, 06 Aug 2026)

  Changed paths:
    M Source/WebCore/dom/UserGestureIndicator.cpp
    M Source/WebCore/page/ChromeClient.h
    M Source/WebCore/page/EventHandler.cpp
    M Source/WebCore/page/Page.cpp
    M Source/WebCore/page/Page.h
    M Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm
    M Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/WebProcessProxy.cpp
    M Source/WebKit/UIProcess/WebProcessProxy.h
    M Source/WebKit/UIProcess/WebProcessProxy.messages.in
    M Source/WebKit/UIProcess/WebsiteData/IsolatedSiteStore.h
    M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
    M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
    M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
    M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h
    M Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm
    M Tools/TestWebKitAPI/Tests/WebKit/WKWebView/UserContentController.mm
    M Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebsiteDatastore.mm
    M Tools/TestWebKitAPI/Tests/WebKit/WKWebView/ios/WKWebViewAutofillTests.mm

  Log Message:
  -----------
  [Site Isolation] First-party sites should not enter shared process
https://bugs.webkit.org/show_bug.cgi?id=321033
rdar://184066679

Reviewed by Ryosuke Niwa.

Site Isolation's shared process mode puts multiple cross-site frames into one 
WebProcess for performance, trading away
some of the process-boundary protection between the co-located sites. 
318135@main introduced IsolatedSiteStore to hold
the sites that must be kept out of that process, with autofill as the first 
signal. This patch adds two more signals for
better coverage:
- Signal::FirstPartyVisit is recorded in WebPageProxy::didCommitLoadForFrame 
when the commit is for the main frame, from
the committed request's URL, skipping about: and file: URLs. This is 
deliberately broad: it flags every site the user
navigated to at the top level, which might create first-party cookies.
- Signal::FirstPartyUserGesture is recorded similar to where ITP records 
hadUserInteraction: in UserGestureIndicator's
constructor, and in EventHandler::keyEvent for a handled key event. Both 
recording sites are gated on
ProcessInteractionStyle::Immediate. Delayed defers recording to the caller, 
which records once it knows the event was
handled, and Never marks a gesture asserted programmatically rather than made 
by the user.

Recording the two separately lets a future eviction policy drop the 
visited-only sites first, and lets us measure what
narrowing to gestures would cost before deciding to narrow.

API tests: WKWebsiteDataStore.FirstPartyVisitMarksSiteAsIsolated
           
WKWebsiteDataStore.FirstPartyUserGestureInSubframeDoesNotMarkSubframeSite

* Source/WebCore/dom/UserGestureIndicator.cpp:
(WebCore::UserGestureIndicator::UserGestureIndicator):
* Source/WebCore/page/ChromeClient.h:
(WebCore::ChromeClient::didObserveFirstPartyUserGesture):
* Source/WebCore/page/EventHandler.cpp:
(WebCore::EventHandler::keyEvent):
* Source/WebCore/page/Page.cpp:
(WebCore::Page::didObserveFirstPartyUserGesture):
* Source/WebCore/page/Page.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(-[WKWebsiteDataStore _isolatedSiteSignalsForTesting:]):
(-[WKWebsiteDataStore _isIsolatedSiteForTesting:]): Deleted.
* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::recordFirstPartyVisit):
(WebKit::WebPageProxy::didCommitLoadForFrame):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::didObserveFirstPartyUserGesture):
* Source/WebKit/UIProcess/WebProcessProxy.h:
* Source/WebKit/UIProcess/WebProcessProxy.messages.in:
* Source/WebKit/UIProcess/WebsiteData/IsolatedSiteStore.h:
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::isolatedSiteSignalsForTesting const):
(WebKit::WebsiteDataStore::isIsolatedSiteForTesting const): Deleted.
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::didObserveFirstPartyUserGesture):
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h:
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation.mm:
(TestWebKitAPI::(SiteIsolation, SharedProcessAfterKeyDown)):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/UserContentController.mm:
(TEST(WKUserContentController, AutofillScriptingMarksSiteAsIsolated)):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebsiteDatastore.mm:
(TestWebKitAPI::(WKWebsiteDataStore, FirstPartyVisitMarksSiteAsIsolated)):
(TestWebKitAPI::(WKWebsiteDataStore, FirstPartyUserGestureMarksSiteAsIsolated)):
(TestWebKitAPI::(WKWebsiteDataStore, 
FirstPartyUserGestureInSubframeDoesNotMarkSubframeSite)):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/ios/WKWebViewAutofillTests.mm:
(TestWebKitAPI::TEST(WKWebViewAutoFillTests, AutofillMarksSiteAsIsolated)):

Canonical link: https://commits.webkit.org/318763@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to