WebKit Bugzilla
Attachment 359956 Details for
Bug 193725
: Deprecate API to limit the maximum number of WebProcesses
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-193725-20190123152818.patch (text/plain), 28.65 KB, created by
Chris Dumez
on 2019-01-23 15:28:19 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Chris Dumez
Created:
2019-01-23 15:28:19 PST
Size:
28.65 KB
patch
obsolete
>Subversion Revision: 240343 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 1a3609b95c462a1fe2179065cd13a68971d2f10e..52d68efabf027e2f65555684a71fd77fa08883c4 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,45 @@ >+2019-01-23 Chris Dumez <cdumez@apple.com> >+ >+ Deprecate API to limit the maximum number of WebProcesses >+ https://bugs.webkit.org/show_bug.cgi?id=193725 >+ <rdar://problem/47464879> >+ >+ Reviewed by Geoff Garen. >+ >+ Deprecate API to limit the maximum number of WebProcesses and make it a no-op. It adds >+ complexity and is not safe (conflicts with PSON). >+ >+ Add a new usesSingleWebProcess SPI to _WKProcessPoolConfiguration to be used by >+ Minibrowser / Safari in order to disable process per tab (can be useful for debugging). >+ Note that enabling the single WebProcess mode will disable PSON and process prewarming. >+ >+ * UIProcess/API/APIProcessPoolConfiguration.cpp: >+ (API::ProcessPoolConfiguration::createWithLegacyOptions): >+ (API::ProcessPoolConfiguration::copy): >+ * UIProcess/API/APIProcessPoolConfiguration.h: >+ * UIProcess/API/C/WKContext.cpp: >+ (WKContextSetMaximumNumberOfProcesses): >+ (WKContextGetMaximumNumberOfProcesses): >+ * UIProcess/API/C/WKContext.h: >+ * UIProcess/API/Cocoa/WKProcessPool.mm: >+ * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: >+ * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h: >+ * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm: >+ (-[_WKProcessPoolConfiguration maximumProcessCount]): >+ (-[_WKProcessPoolConfiguration setMaximumProcessCount:]): >+ (-[_WKProcessPoolConfiguration usesSingleWebProcess]): >+ (-[_WKProcessPoolConfiguration setUsesSingleWebProcess:]): >+ (-[_WKProcessPoolConfiguration description]): >+ * UIProcess/API/glib/WebKitWebContext.cpp: >+ (webkitWebContextConstructed): >+ (webkit_web_context_set_process_model): >+ (webkit_web_context_set_web_process_count_limit): >+ * UIProcess/WebProcessPool.cpp: >+ (WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit): >+ (WebKit::WebProcessPool::didReachGoodTimeToPrewarm): >+ (WebKit::WebProcessPool::processForNavigationInternal): >+ * UIProcess/WebProcessPool.h: >+ > 2019-01-23 Antti Koivisto <antti@apple.com> > > [PSON] Flash on back navigation on Mac >diff --git a/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp b/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp >index 8e13c1d970535f2cc795f87568a4861410443587..d17978e5e64110108f8f120f6df0ddcc12b78483 100644 >--- a/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp >+++ b/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp >@@ -41,7 +41,6 @@ Ref<ProcessPoolConfiguration> ProcessPoolConfiguration::createWithLegacyOptions( > auto configuration = ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration(WebsiteDataStore::legacyDefaultDataStoreConfiguration()); > > configuration->m_shouldHaveLegacyDataStore = true; >- configuration->m_maximumProcessCount = 1; > configuration->m_cacheModel = WebKit::CacheModel::DocumentViewer; > > return configuration; >@@ -90,7 +89,6 @@ Ref<ProcessPoolConfiguration> ProcessPoolConfiguration::copy() > auto copy = this->create(); > > copy->m_shouldHaveLegacyDataStore = this->m_shouldHaveLegacyDataStore; >- copy->m_maximumProcessCount = this->m_maximumProcessCount; > copy->m_cacheModel = this->m_cacheModel; > copy->m_diskCacheDirectory = this->m_diskCacheDirectory; > copy->m_diskCacheSpeculativeValidationEnabled = this->m_diskCacheSpeculativeValidationEnabled; >@@ -133,6 +131,7 @@ Ref<ProcessPoolConfiguration> ProcessPoolConfiguration::copy() > copy->m_suppressesConnectionTerminationOnSystemChange = this->m_suppressesConnectionTerminationOnSystemChange; > #endif > copy->m_customWebContentServiceBundleIdentifier = this->m_customWebContentServiceBundleIdentifier; >+ copy->m_usesSingleWebProcess = m_usesSingleWebProcess; > > return copy; > } >diff --git a/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h b/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h >index 65021b6b3c840c96ca3d31f89e84f2b413a96dc5..ec73ebd0a455f2c90e210015392fb7044e3ec77b 100644 >--- a/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h >+++ b/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h >@@ -56,8 +56,8 @@ public: > bool shouldHaveLegacyDataStore() const { return m_shouldHaveLegacyDataStore; } > void setShouldHaveLegacyDataStore(bool shouldHaveLegacyDataStore) { m_shouldHaveLegacyDataStore = shouldHaveLegacyDataStore; } > >- unsigned maximumProcessCount() const { return m_maximumProcessCount; } >- void setMaximumProcessCount(unsigned maximumProcessCount) { m_maximumProcessCount = maximumProcessCount; } >+ bool usesSingleWebProcess() const { return m_usesSingleWebProcess; } >+ void setUsesSingleWebProcess(bool enabled) { m_usesSingleWebProcess = enabled; } > > bool isAutomaticProcessWarmingEnabled() const > { >@@ -187,7 +187,6 @@ public: > private: > bool m_shouldHaveLegacyDataStore { false }; > >- unsigned m_maximumProcessCount { 0 }; > bool m_diskCacheSpeculativeValidationEnabled { false }; > WebKit::CacheModel m_cacheModel { WebKit::CacheModel::PrimaryWebBrowser }; > >@@ -224,6 +223,7 @@ private: > bool m_clientWouldBenefitFromAutomaticProcessPrewarming { false }; > WTF::String m_customWebContentServiceBundleIdentifier; > bool m_isJITEnabled { true }; >+ bool m_usesSingleWebProcess { false }; > > #if PLATFORM(IOS_FAMILY) > WTF::String m_ctDataConnectionServiceType; >diff --git a/Source/WebKit/UIProcess/API/C/WKContext.cpp b/Source/WebKit/UIProcess/API/C/WKContext.cpp >index 9fb695a03d55adb9cf4ff44fc770aa9136c34711..77f4ba2c91696b37dcee0225b9ec1ee1ebdab54c 100644 >--- a/Source/WebKit/UIProcess/API/C/WKContext.cpp >+++ b/Source/WebKit/UIProcess/API/C/WKContext.cpp >@@ -326,14 +326,15 @@ WKCacheModel WKContextGetCacheModel(WKContextRef contextRef) > return WebKit::toAPI(WebKit::toImpl(contextRef)->cacheModel()); > } > >-void WKContextSetMaximumNumberOfProcesses(WKContextRef contextRef, unsigned numberOfProcesses) >+void WKContextSetMaximumNumberOfProcesses(WKContextRef, unsigned) > { >- WebKit::toImpl(contextRef)->setMaximumNumberOfProcesses(numberOfProcesses); >+ // Deprecated. > } > >-unsigned WKContextGetMaximumNumberOfProcesses(WKContextRef contextRef) >+unsigned WKContextGetMaximumNumberOfProcesses(WKContextRef) > { >- return WebKit::toImpl(contextRef)->maximumNumberOfProcesses(); >+ // Deprecated. >+ return std::numeric_limits<unsigned>::max(); > } > > void WKContextSetAlwaysUsesComplexTextCodePath(WKContextRef contextRef, bool alwaysUseComplexTextCodePath) >@@ -405,6 +406,16 @@ void WKContextSetPrewarmsProcessesAutomatically(WKContextRef contextRef, bool va > WebKit::toImpl(contextRef)->configuration().setIsAutomaticProcessWarmingEnabled(value); > } > >+void WKContextSetUsesSingleWebProcess(WKContextRef contextRef, bool value) >+{ >+ WebKit::toImpl(contextRef)->configuration().setUsesSingleWebProcess(value); >+} >+ >+bool WKContextGetUsesSingleWebProcess(WKContextRef contextRef) >+{ >+ return WebKit::toImpl(contextRef)->configuration().usesSingleWebProcess(); >+} >+ > void WKContextSetCustomWebContentServiceBundleIdentifier(WKContextRef contextRef, WKStringRef name) > { > WebKit::toImpl(contextRef)->setCustomWebContentServiceBundleIdentifier(WebKit::toImpl(name)->string()); >diff --git a/Source/WebKit/UIProcess/API/C/WKContext.h b/Source/WebKit/UIProcess/API/C/WKContext.h >index a840a32967d2cfa1cfe3817a8d6277cf0e1d7245..3166e379678faaa56fa8d77309a9bfa599881754 100644 >--- a/Source/WebKit/UIProcess/API/C/WKContext.h >+++ b/Source/WebKit/UIProcess/API/C/WKContext.h >@@ -131,8 +131,11 @@ WK_EXPORT WKCacheModel WKContextGetCacheModel(WKContextRef context); > // FIXME: Move these to WKDeprecatedFunctions.cpp once support for Mavericks has been dropped. > WK_EXPORT void WKContextSetProcessModel(WKContextRef, WKProcessModel); > >-WK_EXPORT void WKContextSetMaximumNumberOfProcesses(WKContextRef context, unsigned numberOfProcesses); >-WK_EXPORT unsigned WKContextGetMaximumNumberOfProcesses(WKContextRef context); >+WK_EXPORT void WKContextSetMaximumNumberOfProcesses(WKContextRef context, unsigned numberOfProcesses) WK_C_API_DEPRECATED; >+WK_EXPORT unsigned WKContextGetMaximumNumberOfProcesses(WKContextRef context) WK_C_API_DEPRECATED; >+ >+WK_EXPORT void WKContextSetUsesSingleWebProcess(WKContextRef, bool); >+WK_EXPORT bool WKContextGetUsesSingleWebProcess(WKContextRef); > > WK_EXPORT void WKContextStartMemorySampler(WKContextRef context, WKDoubleRef interval); > WK_EXPORT void WKContextStopMemorySampler(WKContextRef context); >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm b/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm >index a18381ab35a97dba2fc3fab67320b4322764d785..298b44e2f18f868d7941894d2da793abddd16261 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm >@@ -199,11 +199,6 @@ - (void)_registerURLSchemeAsCanDisplayOnlyIfCanRequest:(NSString *)scheme > _processPool->registerURLSchemeAsCanDisplayOnlyIfCanRequest(scheme); > } > >-- (void)_setMaximumNumberOfProcesses:(NSUInteger)value >-{ >- _processPool->setMaximumNumberOfProcesses(value); >-} >- > - (void)_setCanHandleHTTPSServerTrustEvaluation:(BOOL)value > { > _processPool->setCanHandleHTTPSServerTrustEvaluation(value); >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h b/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h >index 3de2c0362bf35e67b0434c1ef8bc83d606a14c36..470dd5394a21407046ae2bae5387b6658eb2cb6e 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h >@@ -114,7 +114,6 @@ > // Test only. > - (void)_setAllowsAnySSLCertificateForServiceWorker:(BOOL)allows WK_API_AVAILABLE(macosx(10.13.4), ios(11.3)); > - (void)_registerURLSchemeServiceWorkersCanHandle:(NSString *)scheme WK_API_AVAILABLE(macosx(10.13.4), ios(11.3)); >-- (void)_setMaximumNumberOfProcesses:(NSUInteger)value WK_API_AVAILABLE(macosx(10.13.4), ios(11.3)); > - (void)_getActivePagesOriginsInWebProcessForTesting:(pid_t)pid completionHandler:(void(^)(NSArray<NSString *> *))completionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); > - (BOOL)_networkProcessHasEntitlementForTesting:(NSString *)entitlement WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); > >diff --git a/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h b/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h >index 71021fe3188588fe3d844a748ed8e838634ff6f3..54a56e97f90205e45f93ac21b8a0a864abbd1fbc 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h >+++ b/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h >@@ -34,7 +34,8 @@ WK_CLASS_AVAILABLE(macosx(10.10), ios(8.0)) > @interface _WKProcessPoolConfiguration : NSObject <NSCopying> > > @property (nonatomic, copy) NSURL *injectedBundleURL; >-@property (nonatomic) NSUInteger maximumProcessCount; >+@property (nonatomic) NSUInteger maximumProcessCount WK_API_DEPRECATED("It is no longer possible to limit the number of processes", macosx(WK_MAC_TBA, WK_MAC_TBA), ios(WK_IOS_TBA, WK_IOS_TBA)); >+@property (nonatomic) BOOL usesSingleWebProcess WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); > @property (nonatomic, nullable, copy) NSString *customWebContentServiceBundleIdentifier WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); > > @property (nonatomic) BOOL ignoreSynchronousMessagingTimeoutsForTesting WK_API_AVAILABLE(macosx(10.12), ios(10.0)); >diff --git a/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm b/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm >index 68737d0c6dd7c6789f16cc05beda1ca0146ccc3e..07b13ebffbf5246856347f48205c4c1f0fd11f48 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm >+++ b/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm >@@ -64,12 +64,13 @@ - (void)setInjectedBundleURL:(NSURL *)injectedBundleURL > > - (NSUInteger)maximumProcessCount > { >- return _processPoolConfiguration->maximumProcessCount(); >+ // Deprecated. >+ return NSUIntegerMax; > } > > - (void)setMaximumProcessCount:(NSUInteger)maximumProcessCount > { >- _processPoolConfiguration->setMaximumProcessCount(maximumProcessCount); >+ // Deprecated. > } > > - (NSInteger)diskCacheSizeOverride >@@ -290,6 +291,16 @@ - (void)setPageCacheEnabled:(BOOL)enabled > _processPoolConfiguration->setCacheModel(WebKit::CacheModel::PrimaryWebBrowser); > } > >+- (BOOL)usesSingleWebProcess >+{ >+ return _processPoolConfiguration->usesSingleWebProcess(); >+} >+ >+- (void)setUsesSingleWebProcess:(BOOL)enabled >+{ >+ _processPoolConfiguration->setUsesSingleWebProcess(enabled); >+} >+ > - (BOOL)suppressesConnectionTerminationOnSystemChange > { > return _processPoolConfiguration->suppressesConnectionTerminationOnSystemChange(); >@@ -344,7 +355,7 @@ - (void)setShouldTakeUIBackgroundAssertion:(BOOL)shouldTakeUIBackgroundAssertion > > - (NSString *)description > { >- NSString *description = [NSString stringWithFormat:@"<%@: %p; maximumProcessCount = %lu", NSStringFromClass(self.class), self, static_cast<unsigned long>([self maximumProcessCount])]; >+ NSString *description = [NSString stringWithFormat:@"<%@: %p", NSStringFromClass(self.class), self]; > > if (!_processPoolConfiguration->injectedBundlePath().isEmpty()) > return [description stringByAppendingFormat:@"; injectedBundleURL: \"%@\">", [self injectedBundleURL]]; >diff --git a/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp b/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp >index 0f39e125f3da6c48396a40c9cdfe8f4c41d969ae..9bc7f673eb55d8deb11ffe56987bd51360980a6f 100644 >--- a/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp >+++ b/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp >@@ -334,7 +334,6 @@ static void webkitWebContextConstructed(GObject* object) > > API::ProcessPoolConfiguration configuration; > configuration.setInjectedBundlePath(WebCore::FileSystem::stringFromFileSystemRepresentation(bundleFilename.get())); >- configuration.setMaximumProcessCount(1); > configuration.setDiskCacheSpeculativeValidationEnabled(true); > > WebKitWebContext* webContext = WEBKIT_WEB_CONTEXT(object); >@@ -1495,14 +1494,6 @@ void webkit_web_context_set_process_model(WebKitWebContext* context, WebKitProce > return; > > context->priv->processModel = processModel; >- switch (context->priv->processModel) { >- case WEBKIT_PROCESS_MODEL_SHARED_SECONDARY_PROCESS: >- context->priv->processPool->setMaximumNumberOfProcesses(1); >- break; >- case WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES: >- context->priv->processPool->setMaximumNumberOfProcesses(context->priv->processCountLimit); >- break; >- } > } > > /** >@@ -1545,8 +1536,6 @@ void webkit_web_context_set_web_process_count_limit(WebKitWebContext* context, g > return; > > context->priv->processCountLimit = limit; >- if (context->priv->processModel != WEBKIT_PROCESS_MODEL_SHARED_SECONDARY_PROCESS) >- context->priv->processPool->setMaximumNumberOfProcesses(limit); > } > > /** >diff --git a/Source/WebKit/UIProcess/WebProcessPool.cpp b/Source/WebKit/UIProcess/WebProcessPool.cpp >index e0d5bb14f2c84ca592c51e3eb5f0af998385f92f..a5b09103c349c8a00c9987a0166290b522bf1537 100644 >--- a/Source/WebKit/UIProcess/WebProcessPool.cpp >+++ b/Source/WebKit/UIProcess/WebProcessPool.cpp >@@ -404,11 +404,6 @@ void WebProcessPool::setLegacyCustomProtocolManagerClient(std::unique_ptr<API::C > #endif > } > >-void WebProcessPool::setMaximumNumberOfProcesses(unsigned maximumNumberOfProcesses) >-{ >- m_configuration->setMaximumProcessCount(maximumNumberOfProcesses); >-} >- > void WebProcessPool::setCustomWebContentServiceBundleIdentifier(const String& customWebContentServiceBundleIdentifier) > { > // Guard against API misuse. >@@ -1086,8 +1081,8 @@ void WebProcessPool::disconnectProcess(WebProcessProxy* process) > > WebProcessProxy& WebProcessPool::createNewWebProcessRespectingProcessCountLimit(WebsiteDataStore& websiteDataStore) > { >- // FIXME: https://bugs.webkit.org/show_bug.cgi?id=168676 >- // Once WebsiteDataStores are truly per-view instead of per-process, remove this nonsense. >+ if (!usesSingleWebProcess()) >+ return createNewWebProcess(websiteDataStore); > > #if PLATFORM(COCOA) > bool mustMatchDataStore = API::WebsiteDataStore::defaultDataStoreExists() && &websiteDataStore != &API::WebsiteDataStore::defaultDataStore()->websiteDataStore(); >@@ -1095,10 +1090,6 @@ WebProcessProxy& WebProcessPool::createNewWebProcessRespectingProcessCountLimit( > bool mustMatchDataStore = false; > #endif > >- if (m_processes.size() < maximumNumberOfProcesses()) >- return createNewWebProcess(websiteDataStore); >- >- WebProcessProxy* processToReuse = nullptr; > for (auto& process : m_processes) { > if (mustMatchDataStore && &process->websiteDataStore() != &websiteDataStore) > continue; >@@ -1106,11 +1097,9 @@ WebProcessProxy& WebProcessPool::createNewWebProcessRespectingProcessCountLimit( > if (is<ServiceWorkerProcessProxy>(*process)) > continue; > #endif >- // Choose the process with fewest pages. >- if (!processToReuse || processToReuse->pageCount() > process->pageCount()) >- processToReuse = process.get(); >+ return *process; > } >- return processToReuse ? *processToReuse : createNewWebProcess(websiteDataStore); >+ return createNewWebProcess(websiteDataStore); > } > > Ref<WebPageProxy> WebProcessPool::createWebPage(PageClient& pageClient, Ref<API::PageConfiguration>&& pageConfiguration) >@@ -1296,7 +1285,7 @@ void WebProcessPool::postMessageToInjectedBundle(const String& messageName, API: > > void WebProcessPool::didReachGoodTimeToPrewarm() > { >- if (!configuration().isAutomaticProcessWarmingEnabled() || !configuration().processSwapsOnNavigation()) >+ if (!configuration().isAutomaticProcessWarmingEnabled() || !configuration().processSwapsOnNavigation() || usesSingleWebProcess()) > return; > > if (MemoryPressureHandler::singleton().isUnderMemoryPressure()) { >@@ -2157,6 +2146,9 @@ void WebProcessPool::processForNavigationInternal(WebPageProxy& page, const API: > return createNewWebProcess(page.websiteDataStore()); > }; > >+ if (usesSingleWebProcess()) >+ return completionHandler(page.process(), nullptr, "Single WebProcess mode is enabled"_s); >+ > if (processSwapRequestedByClient == ProcessSwapRequestedByClient::Yes) > return completionHandler(createNewProcess(), nullptr, "Process swap was requested by the client"_s); > >diff --git a/Source/WebKit/UIProcess/WebProcessPool.h b/Source/WebKit/UIProcess/WebProcessPool.h >index dfc0c04f500b0f39da5806fe914b07c5c5202747..d8f002f6126ef6ca93a5e08878971002f2e40064 100644 >--- a/Source/WebKit/UIProcess/WebProcessPool.h >+++ b/Source/WebKit/UIProcess/WebProcessPool.h >@@ -153,9 +153,6 @@ public: > void setAutomationClient(std::unique_ptr<API::AutomationClient>&&); > void setLegacyCustomProtocolManagerClient(std::unique_ptr<API::CustomProtocolManagerClient>&&); > >- void setMaximumNumberOfProcesses(unsigned); // Can only be called when there are no processes running. >- unsigned maximumNumberOfProcesses() const { return !m_configuration->maximumProcessCount() ? UINT_MAX : m_configuration->maximumProcessCount(); } >- > void setCustomWebContentServiceBundleIdentifier(const String&); > const String& customWebContentServiceBundleIdentifier() { return m_configuration->customWebContentServiceBundleIdentifier(); } > >@@ -516,6 +513,8 @@ private: > static void languageChanged(void* context); > void languageChanged(); > >+ bool usesSingleWebProcess() const { return m_configuration->usesSingleWebProcess(); } >+ > #if PLATFORM(IOS_FAMILY) > String cookieStorageDirectory() const; > #endif >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index a0c6b0d0ed5e1ef6b9060c7b98fda543985bdd6f..032f49fc5747370e5f81fe3695237691d879cf38 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,25 @@ >+2019-01-23 Chris Dumez <cdumez@apple.com> >+ >+ Deprecate API to limit the maximum number of WebProcesses >+ https://bugs.webkit.org/show_bug.cgi?id=193725 >+ <rdar://problem/47464879> >+ >+ Reviewed by Geoff Garen. >+ >+ Update existing API tests to stop using deprecated API. >+ >+ * MiniBrowser/mac/AppDelegate.m: >+ (defaultConfiguration): >+ * TestWebKitAPI/Tests/WebKit/UserMedia.cpp: >+ (TestWebKitAPI::TEST): >+ * TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimer.mm: >+ (TestWebKitAPI::TEST): >+ * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm: >+ * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm: >+ (TEST): >+ * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm: >+ (TEST): >+ > 2019-01-23 Jonathan Bedard <jbedard@apple.com> > > webkitpy: Use correct config for --iphone-simulator and --ipad-simulator >diff --git a/Tools/MiniBrowser/mac/AppDelegate.m b/Tools/MiniBrowser/mac/AppDelegate.m >index 618d248d2ae637e23d2b54615b8a22025cae5309..2d70d7892a3a653199b6045d7614b642ff1f436d 100644 >--- a/Tools/MiniBrowser/mac/AppDelegate.m >+++ b/Tools/MiniBrowser/mac/AppDelegate.m >@@ -100,7 +100,7 @@ - (void)awakeFromNib > _WKProcessPoolConfiguration *processConfiguration = [[[_WKProcessPoolConfiguration alloc] init] autorelease]; > processConfiguration.diskCacheSpeculativeValidationEnabled = ![SettingsController shared].networkCacheSpeculativeRevalidationDisabled; > if ([SettingsController shared].perWindowWebProcessesDisabled) >- processConfiguration.maximumProcessCount = 1; >+ processConfiguration.usesSingleWebProcess = YES; > if ([SettingsController shared].processSwapOnWindowOpenWithOpenerEnabled) > processConfiguration.processSwapsOnWindowOpenWithOpener = true; > >diff --git a/Tools/TestWebKitAPI/Tests/WebKit/UserMedia.cpp b/Tools/TestWebKitAPI/Tests/WebKit/UserMedia.cpp >index fdecb59c8867f1f809ff806aa885aa2bc914018f..2b06b0b8ad613ac4989b747a9a5fa4586e899001 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKit/UserMedia.cpp >+++ b/Tools/TestWebKitAPI/Tests/WebKit/UserMedia.cpp >@@ -106,7 +106,6 @@ static void didCrashCallback(WKPageRef, const void*) > TEST(WebKit, OnDeviceChangeCrash) > { > auto context = adoptWK(WKContextCreateWithConfiguration(nullptr)); >- WKContextSetMaximumNumberOfProcesses(context.get(), 1); > > WKRetainPtr<WKPageGroupRef> pageGroup(AdoptWK, WKPageGroupCreateWithIdentifier(Util::toWK("GetUserMedia").get())); > WKPreferencesRef preferences = WKPageGroupGetPreferences(pageGroup.get()); >@@ -131,7 +130,7 @@ TEST(WebKit, OnDeviceChangeCrash) > WKPageLoadURL(webView.page(), url.get()); > > // Load a second page in same process. >- PlatformWebView webView2(context.get(), pageGroup.get()); >+ PlatformWebView webView2(webView.page()); > WKPageSetPageUIClient(webView2.page(), &uiClient.base); > WKPageNavigationClientV0 navigationClient; > memset(&navigationClient, 0, sizeof(navigationClient)); >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimer.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimer.mm >index 15759b98c029763dfad5a01ce0ed458966b1355a..7e3dc3880e3834609ee38a5d96f48600ffef4693 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimer.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimer.mm >@@ -60,7 +60,6 @@ TEST(WebKit, ResponsivenessTimerShouldNotFireAfterTearDown) > { > auto processPoolConfiguration = adoptNS([_WKProcessPoolConfiguration new]); > auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]); >- [processPool _setMaximumNumberOfProcesses:1]; > auto delegate = adoptNS([ResponsivenessTimerDelegate new]); > > auto configuration = adoptNS([WKWebViewConfiguration new]); >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm >index e324c29f4aca097e5659761940fe947469e7b30d..3d715b9fe392e06ba084a9cac1d0c956f8fc0fb8 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm >@@ -970,7 +970,6 @@ void setConfigurationInjectedBundlePath(WKWebViewConfiguration* configuration) > configuration.processPool = (WKProcessPool *)context.get(); > auto pool = configuration.processPool; > [pool _registerURLSchemeServiceWorkersCanHandle:@"sw"]; >- [pool _setMaximumNumberOfProcesses:5]; > > configuration.websiteDataStore = (WKWebsiteDataStore *)WKContextGetWebsiteDataStore(context.get()); > } >@@ -1249,8 +1248,6 @@ TEST(ServiceWorkers, HasServiceWorkerRegistrationBit) > newConfiguration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore]; > [newConfiguration.get().websiteDataStore _setServiceWorkerRegistrationDirectory: @"~/nonexistingfolder"]; > >- [newConfiguration.get().processPool _setMaximumNumberOfProcesses:1]; >- > webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:newConfiguration.get()]); > request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/regularPageWithoutConnection.html"]]; > [webView loadRequest:request]; >@@ -1261,14 +1258,14 @@ TEST(ServiceWorkers, HasServiceWorkerRegistrationBit) > newConfiguration.get().websiteDataStore = [configuration websiteDataStore]; > > webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:newConfiguration.get()]); >- EXPECT_EQ(1u, webView.get().configuration.processPool._webProcessCountIgnoringPrewarmed); >+ EXPECT_EQ(2u, webView.get().configuration.processPool._webProcessCountIgnoringPrewarmed); > request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/regularPageWithConnection.html"]]; > [webView loadRequest:request]; > TestWebKitAPI::Util::run(&done); > done = false; > > // Make sure that loading the simple page did not start the service worker process. >- EXPECT_EQ(1u, webView.get().configuration.processPool._webProcessCountIgnoringPrewarmed); >+ EXPECT_EQ(2u, webView.get().configuration.processPool._webProcessCountIgnoringPrewarmed); > > [[configuration websiteDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { > done = true; >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm >index 617164589ebdd65873bfcf6bd27c440376d54f70..8061ead535da788568a3134127f2e00347b84777 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm >@@ -237,7 +237,6 @@ TEST(WKUserContentController, ScriptMessageHandlerMultipleHandlerRemoval) > { > RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]); > RetainPtr<_WKProcessPoolConfiguration> processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]); >- [processPoolConfiguration setMaximumProcessCount:1]; > [configuration setProcessPool:[[[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()] autorelease]]; > > RetainPtr<WKWebView> webView = webViewForScriptMessageHandlerMultipleHandlerRemovalTest(configuration.get()); >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm >index a84ef58ab81bd4d3614f9a0e40e3360da56055dd..5e12eaf1772e59bbf145780699b32aa59c1cf591 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm >@@ -36,7 +36,6 @@ TEST(WKProcessPoolConfiguration, Copy) > auto configuration = adoptNS([[_WKProcessPoolConfiguration alloc] init]); > > [configuration setInjectedBundleURL:[NSURL fileURLWithPath:@"/path/to/injected.wkbundle"]]; >- [configuration setMaximumProcessCount:42]; > [configuration setCustomWebContentServiceBundleIdentifier:@"org.webkit.WebContent.custom"]; > [configuration setIgnoreSynchronousMessagingTimeoutsForTesting:YES]; > [configuration setAttrStyleEnabled:YES]; >@@ -65,7 +64,6 @@ TEST(WKProcessPoolConfiguration, Copy) > auto copy = adoptNS([configuration copy]); > > EXPECT_TRUE([[configuration injectedBundleURL] isEqual:[copy injectedBundleURL]]); >- EXPECT_EQ([configuration maximumProcessCount], [copy maximumProcessCount]); > EXPECT_TRUE([[configuration customWebContentServiceBundleIdentifier] isEqual:[copy customWebContentServiceBundleIdentifier]]); > EXPECT_EQ([configuration ignoreSynchronousMessagingTimeoutsForTesting], [copy ignoreSynchronousMessagingTimeoutsForTesting]); > EXPECT_EQ([configuration attrStyleEnabled], [copy attrStyleEnabled]);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 193725
:
359902
|
359917
|
359939
|
359946
| 359956