Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 0885d2d33b76ff339fc9d1987cc54b28bd838feb
      
https://github.com/WebKit/WebKit/commit/0885d2d33b76ff339fc9d1987cc54b28bd838feb
  Author: Ryosuke Niwa <[email protected]>
  Date:   2025-07-22 (Tue, 22 Jul 2025)

  Changed paths:
    M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
    M Source/WebKit/UIProcess/BrowsingContextGroup.cpp
    M Source/WebKit/UIProcess/BrowsingContextGroup.h
    M Source/WebKit/UIProcess/FrameProcess.cpp
    M Source/WebKit/UIProcess/FrameProcess.h
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebProcessProxy.cpp
    M Source/WebKit/UIProcess/WebProcessProxy.h
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm

  Log Message:
  -----------
  [Site Isolation] Add the most basic support for sharing a web process across 
sites
https://bugs.webkit.org/show_bug.cgi?id=296260

Reviewed by Alex Christensen.

For performance reasons, it's desirable to be able to bundle websites in 
cross-site iframes into
a single Web process shared across sites even when site isolation is enabled. 
This PR introduces
a new runtime flag and implements the support for the most basic version of 
this concept. We create
at most one shared process for each BrowsingContextGroup.

* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml: Added a new 
runtime flag.
* Source/WebKit/UIProcess/BrowsingContextGroup.cpp:
(WebKit::BrowsingContextGroup::sharedBucketProcessForSite): Added. Returns the 
shared Web process
if it's applicable to this site and frame kind.
(WebKit::BrowsingContextGroup::ensureProcessForSite): Return the shared 
process's FrameProcess
if this is called with the shared process.
(WebKit::BrowsingContextGroup::processForSite):
(WebKit::BrowsingContextGroup::addFrameProcessAndInjectPageContextIf): Added 
the support for the
shared process.
(WebKit::BrowsingContextGroup::removeFrameProcess): Ditto.
* Source/WebKit/UIProcess/BrowsingContextGroup.h:
* Source/WebKit/UIProcess/FrameProcess.cpp:
(WebKit::FrameProcess::FrameProcess): Now takes const std::optional<Site>& 
instead of const Site&.
* Source/WebKit/UIProcess/FrameProcess.h:
(WebKit::FrameProcess::isSharedProcess const): Added.
(WebKit::FrameProcess::create): Reformatted.
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::receivedNavigationActionPolicyDecision): Use the shared 
process returned by
BrowsingContextGroup::sharedProcessForSite.
(WebKit::WebPageProxy::createNewPage): Fixed the code for the shared process.
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame): Set m_site to 
an unexpected value
when there are multiple sites loaded in the process for one reason or another.
(WebKit::WebProcessProxy::didStartUsingProcessForSiteIsolation): Set m_site to
SiteState::SharedProcess if site is std::nullopt.
* Source/WebKit/UIProcess/WebProcessProxy.h:
(WebKit::WebProcessProxy::site):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm:
(TestWebKitAPI::enableFeature):
(TestWebKitAPI::enableSiteIsolation):
(TestWebKitAPI::siteIsolatedViewAndDelegate):
(TestWebKitAPI::siteIsolatedViewWithSharedProcess): Added.
(TestWebKitAPI::(SiteIsolation, SharedProcessMostBasic)):

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to