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