Changeset 279079 in webkit
- Timestamp:
- Jun 21, 2021, 1:47:29 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm (modified) (1 diff)
-
Source/WebKit/UIProcess/WebProcessPool.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/WebProcessProxy.cpp (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm (modified) (2 diffs)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm (modified) (3 diffs)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r279078 r279079 1 2021-06-21 Chris Dumez <cdumez@apple.com> 2 3 [WK2] Don't process-swap on navigations within the same non-HTTP(s) protocol 4 https://bugs.webkit.org/show_bug.cgi?id=227220 5 6 Reviewed by Tim Horton. 7 8 Don't process-swap on navigations within the same non-HTTP(s) protocol. Trying to extract registrable domains 9 from non-HTTP(s) URLs does not make much sense and leads to unexpected process swaps. 10 11 * UIProcess/API/APIProcessPoolConfiguration.cpp: 12 (API::ProcessPoolConfiguration::copy): 13 * UIProcess/API/APIProcessPoolConfiguration.h: 14 * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h: 15 * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm: 16 (-[_WKProcessPoolConfiguration setProcessSwapsOnNavigationWithinSameNonHTTPFamilyProtocol:]): 17 (-[_WKProcessPoolConfiguration processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol]): 18 * UIProcess/WebProcessPool.cpp: 19 (WebKit::WebProcessPool::processForNavigationInternal): 20 * UIProcess/WebProcessProxy.cpp: 21 (WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame): 22 1 23 2021-06-21 Megan Gardner <megan_gardner@apple.com> 2 24 -
trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp
r275013 r279079 65 65 copy->m_alwaysKeepAndReuseSwappedProcesses = this->m_alwaysKeepAndReuseSwappedProcesses; 66 66 copy->m_processSwapsOnWindowOpenWithOpener = this->m_processSwapsOnWindowOpenWithOpener; 67 copy->m_processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol = this->m_processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol; 67 68 copy->m_isAutomaticProcessWarmingEnabledByClient = this->m_isAutomaticProcessWarmingEnabledByClient; 68 69 copy->m_usesWebProcessCache = this->m_usesWebProcessCache; -
trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h
r278253 r279079 129 129 void setAlwaysKeepAndReuseSwappedProcesses(bool keepAndReuse) { m_alwaysKeepAndReuseSwappedProcesses = keepAndReuse; } 130 130 131 bool processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol() const { return m_processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol; } 132 void setProcessSwapsOnNavigationWithinSameNonHTTPFamilyProtocol(bool swaps) { m_processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol = swaps; } 133 131 134 bool processSwapsOnWindowOpenWithOpener() const { return m_processSwapsOnWindowOpenWithOpener; } 132 135 void setProcessSwapsOnWindowOpenWithOpener(bool swaps) { m_processSwapsOnWindowOpenWithOpener = swaps; } … … 170 173 bool m_alwaysKeepAndReuseSwappedProcesses { false }; 171 174 bool m_processSwapsOnWindowOpenWithOpener { false }; 175 bool m_processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol { false }; 172 176 std::optional<bool> m_isAutomaticProcessWarmingEnabledByClient; 173 177 bool m_usesWebProcessCache { false }; -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h
r275013 r279079 68 68 @property (nonatomic) BOOL alwaysKeepAndReuseSwappedProcesses WK_API_AVAILABLE(macos(10.14), ios(12.0)); 69 69 @property (nonatomic) BOOL processSwapsOnWindowOpenWithOpener WK_API_AVAILABLE(macos(10.14), ios(12.0)); 70 @property (nonatomic) BOOL processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 70 71 @property (nonatomic) BOOL prewarmsProcessesAutomatically WK_API_AVAILABLE(macos(10.14.4), ios(12.2)); 71 72 @property (nonatomic) BOOL usesWebProcessCache WK_API_AVAILABLE(macos(10.14.4), ios(12.2)); -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm
r275013 r279079 286 286 } 287 287 288 - (void)setProcessSwapsOnNavigationWithinSameNonHTTPFamilyProtocol:(BOOL)swaps 289 { 290 _processPoolConfiguration->setProcessSwapsOnNavigationWithinSameNonHTTPFamilyProtocol(swaps); 291 } 292 293 - (BOOL)processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol 294 { 295 return _processPoolConfiguration->processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol(); 296 } 297 288 298 - (BOOL)pageCacheEnabled 289 299 { -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r278934 r279079 1845 1845 } 1846 1846 1847 // For non-HTTP(s) URLs, we only swap when navigating to a new scheme, unless processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol is set. 1848 if (!m_configuration->processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol() && !sourceURL.protocolIsInHTTPFamily() && sourceURL.protocol() == targetURL.protocol()) 1849 return completionHandler(WTFMove(sourceProcess), nullptr, "Navigation within the same non-HTTP(s) protocol"_s); 1850 1847 1851 if (!sourceURL.isValid() || !targetURL.isValid() || sourceURL.isEmpty() || sourceURL.protocolIsAbout() || targetRegistrableDomain.matches(sourceURL)) 1848 1852 return completionHandler(WTFMove(sourceProcess), nullptr, "Navigation is same-site"_s); -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r279014 r279079 1627 1627 return; 1628 1628 1629 if (!url.protocolIsInHTTPFamily() && !processPool().configuration().processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol()) { 1630 // Unless the processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol flag is set, we don't process swap on navigations withing the same 1631 // non HTTP(s) protocol. For this reason, we ignore the registrable domain and processes are not eligible for the process cache. 1632 m_registrableDomain = WebCore::RegistrableDomain { }; 1633 return; 1634 } 1635 1629 1636 auto registrableDomain = WebCore::RegistrableDomain { url }; 1630 1637 if (m_registrableDomain && *m_registrableDomain != registrableDomain) { -
trunk/Tools/ChangeLog
r279074 r279079 1 2021-06-21 Chris Dumez <cdumez@apple.com> 2 3 [WK2] Don't process-swap on navigations within the same non-HTTP(s) protocol 4 https://bugs.webkit.org/show_bug.cgi?id=227220 5 6 Reviewed by Tim Horton. 7 8 Add API test coverage. 9 10 * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: 11 1 12 2021-06-21 Alex Christensen <achristensen@webkit.org> 2 13 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm
r278318 r279079 507 507 processPoolConfiguration.get().usesWebProcessCache = YES; 508 508 processPoolConfiguration.get().prewarmsProcessesAutomatically = YES; 509 processPoolConfiguration.get().processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol = YES; 509 510 return processPoolConfiguration; 510 511 } … … 565 566 { 566 567 runBasicTest(SchemeHandlerShouldBeAsync::Yes); 568 } 569 570 TEST(ProcessSwap, NoProcessSwappingWithinSameNonHTTPFamilyProtocol) 571 { 572 auto processPoolConfiguration = psonProcessPoolConfiguration(); 573 processPoolConfiguration.get().processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol = NO; 574 auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]); 575 576 auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]); 577 [webViewConfiguration setProcessPool:processPool.get()]; 578 auto handler = adoptNS([[PSONScheme alloc] init]); 579 [webViewConfiguration setURLSchemeHandler:handler.get() forURLScheme:@"CUSTOM"]; 580 581 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]); 582 auto delegate = adoptNS([[PSONNavigationDelegate alloc] init]); 583 [webView setNavigationDelegate:delegate.get()]; 584 585 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"custom://abc/main1.html"]]; 586 [webView loadRequest:request]; 587 TestWebKitAPI::Util::run(&done); 588 done = false; 589 590 auto pid1 = [webView _webProcessIdentifier]; 591 592 request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"custom://def/main2.html"]]; 593 [webView loadRequest:request]; 594 TestWebKitAPI::Util::run(&done); 595 done = false; 596 597 EXPECT_EQ(pid1, [webView _webProcessIdentifier]); 598 599 request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"custom://ghi/main3.html"]]; 600 [webView loadRequest:request]; 601 TestWebKitAPI::Util::run(&done); 602 done = false; 603 604 EXPECT_EQ(pid1, [webView _webProcessIdentifier]); 605 606 // Switch to the file protocol. 607 [webView loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"simple" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]]; 608 TestWebKitAPI::Util::run(&done); 609 done = false; 610 611 auto pid2 = [webView _webProcessIdentifier]; 612 EXPECT_NE(pid1, pid2); 613 614 [webView loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"simple2" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]]; 615 TestWebKitAPI::Util::run(&done); 616 done = false; 617 618 EXPECT_EQ(pid2, [webView _webProcessIdentifier]); 567 619 } 568 620 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm
r276620 r279079 36 36 #import <WebKit/WKWebsiteDataRecordPrivate.h> 37 37 #import <WebKit/WKWebsiteDataStorePrivate.h> 38 #import <WebKit/_WKProcessPoolConfiguration.h> 38 39 #import <WebKit/_WKWebsiteDataStoreConfiguration.h> 39 40 #import <wtf/RetainPtr.h> … … 1339 1340 TEST(ResourceLoadStatistics, BackForwardPerPageData) 1340 1341 { 1342 auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 1343 processPoolConfiguration.get().processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol = YES; 1344 auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]); 1345 1341 1346 auto *dataStore = [WKWebsiteDataStore defaultDataStore]; 1342 1347 auto delegate = adoptNS([TestNavigationDelegate new]); … … 1344 1349 auto schemeHandler = adoptNS([[ResourceLoadStatisticsSchemeHandler alloc] init]); 1345 1350 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 1351 [configuration setProcessPool:processPool.get()]; 1346 1352 [configuration setURLSchemeHandler:schemeHandler.get() forURLScheme:@"resource-load-statistics"]; 1347 1353 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm
r277713 r279079 39 39 #import <WebKit/WKPreferencesPrivate.h> 40 40 #import <WebKit/WKPreferencesRef.h> 41 #import <WebKit/WKProcessPoolPrivate.h> 41 42 #import <WebKit/WKUserContentControllerPrivate.h> 42 43 #import <WebKit/WKWebViewConfigurationPrivate.h> 43 44 #import <WebKit/WKWebViewPrivate.h> 44 45 #import <WebKit/_WKFrameTreeNode.h> 46 #import <WebKit/_WKProcessPoolConfiguration.h> 45 47 #import <wtf/RetainPtr.h> 46 48 … … 751 753 TEST(EvaluateJavaScript, JavaScriptInMissingFrameAfterNavigationError) 752 754 { 755 auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 756 processPoolConfiguration.get().processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol = YES; 757 auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]); 758 753 759 allFrames = adoptNS([[NSMutableSet<WKFrameInfo *> alloc] init]); 754 760 … … 775 781 776 782 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 783 [configuration setProcessPool:processPool.get()]; 777 784 [configuration setURLSchemeHandler:handler.get() forURLScheme:@"framestest"]; 778 785 [configuration setURLSchemeHandler:handler.get() forURLScheme:@"otherprotocol"];
Note:
See TracChangeset
for help on using the changeset viewer.