Skip to content

Commit 4259815

Browse files
committed
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. Source/WebKit: 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: Tools: 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): Canonical link: https://commits.webkit.org/208261@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240363 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 1f5b63d commit 4259815

19 files changed

+118
-63
lines changed

Source/WebKit/ChangeLog

+42
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,45 @@
1+
2019-01-23 Chris Dumez <cdumez@apple.com>
2+
3+
Deprecate API to limit the maximum number of WebProcesses
4+
https://bugs.webkit.org/show_bug.cgi?id=193725
5+
<rdar://problem/47464879>
6+
7+
Reviewed by Geoff Garen.
8+
9+
Deprecate API to limit the maximum number of WebProcesses and make it a no-op. It adds
10+
complexity and is not safe (conflicts with PSON).
11+
12+
Add a new usesSingleWebProcess SPI to _WKProcessPoolConfiguration to be used by
13+
Minibrowser / Safari in order to disable process per tab (can be useful for debugging).
14+
Note that enabling the single WebProcess mode will disable PSON and process prewarming.
15+
16+
* UIProcess/API/APIProcessPoolConfiguration.cpp:
17+
(API::ProcessPoolConfiguration::createWithLegacyOptions):
18+
(API::ProcessPoolConfiguration::copy):
19+
* UIProcess/API/APIProcessPoolConfiguration.h:
20+
* UIProcess/API/C/WKContext.cpp:
21+
(WKContextSetMaximumNumberOfProcesses):
22+
(WKContextGetMaximumNumberOfProcesses):
23+
* UIProcess/API/C/WKContext.h:
24+
* UIProcess/API/Cocoa/WKProcessPool.mm:
25+
* UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
26+
* UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
27+
* UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
28+
(-[_WKProcessPoolConfiguration maximumProcessCount]):
29+
(-[_WKProcessPoolConfiguration setMaximumProcessCount:]):
30+
(-[_WKProcessPoolConfiguration usesSingleWebProcess]):
31+
(-[_WKProcessPoolConfiguration setUsesSingleWebProcess:]):
32+
(-[_WKProcessPoolConfiguration description]):
33+
* UIProcess/API/glib/WebKitWebContext.cpp:
34+
(webkitWebContextConstructed):
35+
(webkit_web_context_set_process_model):
36+
(webkit_web_context_set_web_process_count_limit):
37+
* UIProcess/WebProcessPool.cpp:
38+
(WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit):
39+
(WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
40+
(WebKit::WebProcessPool::processForNavigationInternal):
41+
* UIProcess/WebProcessPool.h:
42+
143
2019-01-23 Brent Fulgham <bfulgham@apple.com>
244

345
Switch NetworkStorageSession portions of ResourceLoadStatistics to Async message passing style

Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ Ref<ProcessPoolConfiguration> ProcessPoolConfiguration::createWithLegacyOptions(
4141
auto configuration = ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration(WebsiteDataStore::legacyDefaultDataStoreConfiguration());
4242

4343
configuration->m_shouldHaveLegacyDataStore = true;
44-
configuration->m_maximumProcessCount = 1;
4544
configuration->m_cacheModel = WebKit::CacheModel::DocumentViewer;
4645

4746
return configuration;
@@ -90,7 +89,6 @@ Ref<ProcessPoolConfiguration> ProcessPoolConfiguration::copy()
9089
auto copy = this->create();
9190

9291
copy->m_shouldHaveLegacyDataStore = this->m_shouldHaveLegacyDataStore;
93-
copy->m_maximumProcessCount = this->m_maximumProcessCount;
9492
copy->m_cacheModel = this->m_cacheModel;
9593
copy->m_diskCacheDirectory = this->m_diskCacheDirectory;
9694
copy->m_diskCacheSpeculativeValidationEnabled = this->m_diskCacheSpeculativeValidationEnabled;
@@ -133,6 +131,7 @@ Ref<ProcessPoolConfiguration> ProcessPoolConfiguration::copy()
133131
copy->m_suppressesConnectionTerminationOnSystemChange = this->m_suppressesConnectionTerminationOnSystemChange;
134132
#endif
135133
copy->m_customWebContentServiceBundleIdentifier = this->m_customWebContentServiceBundleIdentifier;
134+
copy->m_usesSingleWebProcess = m_usesSingleWebProcess;
136135

137136
return copy;
138137
}

Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ class ProcessPoolConfiguration final : public ObjectImpl<Object::Type::ProcessPo
5656
bool shouldHaveLegacyDataStore() const { return m_shouldHaveLegacyDataStore; }
5757
void setShouldHaveLegacyDataStore(bool shouldHaveLegacyDataStore) { m_shouldHaveLegacyDataStore = shouldHaveLegacyDataStore; }
5858

59-
unsigned maximumProcessCount() const { return m_maximumProcessCount; }
60-
void setMaximumProcessCount(unsigned maximumProcessCount) { m_maximumProcessCount = maximumProcessCount; }
59+
bool usesSingleWebProcess() const { return m_usesSingleWebProcess; }
60+
void setUsesSingleWebProcess(bool enabled) { m_usesSingleWebProcess = enabled; }
6161

6262
bool isAutomaticProcessWarmingEnabled() const
6363
{
@@ -187,7 +187,6 @@ class ProcessPoolConfiguration final : public ObjectImpl<Object::Type::ProcessPo
187187
private:
188188
bool m_shouldHaveLegacyDataStore { false };
189189

190-
unsigned m_maximumProcessCount { 0 };
191190
bool m_diskCacheSpeculativeValidationEnabled { false };
192191
WebKit::CacheModel m_cacheModel { WebKit::CacheModel::PrimaryWebBrowser };
193192

@@ -224,6 +223,7 @@ class ProcessPoolConfiguration final : public ObjectImpl<Object::Type::ProcessPo
224223
bool m_clientWouldBenefitFromAutomaticProcessPrewarming { false };
225224
WTF::String m_customWebContentServiceBundleIdentifier;
226225
bool m_isJITEnabled { true };
226+
bool m_usesSingleWebProcess { false };
227227

228228
#if PLATFORM(IOS_FAMILY)
229229
WTF::String m_ctDataConnectionServiceType;

Source/WebKit/UIProcess/API/C/WKContext.cpp

+15-4
Original file line numberDiff line numberDiff line change
@@ -326,14 +326,15 @@ WKCacheModel WKContextGetCacheModel(WKContextRef contextRef)
326326
return WebKit::toAPI(WebKit::toImpl(contextRef)->cacheModel());
327327
}
328328

329-
void WKContextSetMaximumNumberOfProcesses(WKContextRef contextRef, unsigned numberOfProcesses)
329+
void WKContextSetMaximumNumberOfProcesses(WKContextRef, unsigned)
330330
{
331-
WebKit::toImpl(contextRef)->setMaximumNumberOfProcesses(numberOfProcesses);
331+
// Deprecated.
332332
}
333333

334-
unsigned WKContextGetMaximumNumberOfProcesses(WKContextRef contextRef)
334+
unsigned WKContextGetMaximumNumberOfProcesses(WKContextRef)
335335
{
336-
return WebKit::toImpl(contextRef)->maximumNumberOfProcesses();
336+
// Deprecated.
337+
return std::numeric_limits<unsigned>::max();
337338
}
338339

339340
void WKContextSetAlwaysUsesComplexTextCodePath(WKContextRef contextRef, bool alwaysUseComplexTextCodePath)
@@ -405,6 +406,16 @@ void WKContextSetPrewarmsProcessesAutomatically(WKContextRef contextRef, bool va
405406
WebKit::toImpl(contextRef)->configuration().setIsAutomaticProcessWarmingEnabled(value);
406407
}
407408

409+
void WKContextSetUsesSingleWebProcess(WKContextRef contextRef, bool value)
410+
{
411+
WebKit::toImpl(contextRef)->configuration().setUsesSingleWebProcess(value);
412+
}
413+
414+
bool WKContextGetUsesSingleWebProcess(WKContextRef contextRef)
415+
{
416+
return WebKit::toImpl(contextRef)->configuration().usesSingleWebProcess();
417+
}
418+
408419
void WKContextSetCustomWebContentServiceBundleIdentifier(WKContextRef contextRef, WKStringRef name)
409420
{
410421
WebKit::toImpl(contextRef)->setCustomWebContentServiceBundleIdentifier(WebKit::toImpl(name)->string());

Source/WebKit/UIProcess/API/C/WKContext.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,11 @@ WK_EXPORT WKCacheModel WKContextGetCacheModel(WKContextRef context);
131131
// FIXME: Move these to WKDeprecatedFunctions.cpp once support for Mavericks has been dropped.
132132
WK_EXPORT void WKContextSetProcessModel(WKContextRef, WKProcessModel);
133133

134-
WK_EXPORT void WKContextSetMaximumNumberOfProcesses(WKContextRef context, unsigned numberOfProcesses);
135-
WK_EXPORT unsigned WKContextGetMaximumNumberOfProcesses(WKContextRef context);
134+
WK_EXPORT void WKContextSetMaximumNumberOfProcesses(WKContextRef context, unsigned numberOfProcesses) WK_C_API_DEPRECATED;
135+
WK_EXPORT unsigned WKContextGetMaximumNumberOfProcesses(WKContextRef context) WK_C_API_DEPRECATED;
136+
137+
WK_EXPORT void WKContextSetUsesSingleWebProcess(WKContextRef, bool);
138+
WK_EXPORT bool WKContextGetUsesSingleWebProcess(WKContextRef);
136139

137140
WK_EXPORT void WKContextStartMemorySampler(WKContextRef context, WKDoubleRef interval);
138141
WK_EXPORT void WKContextStopMemorySampler(WKContextRef context);

Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm

-5
Original file line numberDiff line numberDiff line change
@@ -199,11 +199,6 @@ - (void)_registerURLSchemeAsCanDisplayOnlyIfCanRequest:(NSString *)scheme
199199
_processPool->registerURLSchemeAsCanDisplayOnlyIfCanRequest(scheme);
200200
}
201201

202-
- (void)_setMaximumNumberOfProcesses:(NSUInteger)value
203-
{
204-
_processPool->setMaximumNumberOfProcesses(value);
205-
}
206-
207202
- (void)_setCanHandleHTTPSServerTrustEvaluation:(BOOL)value
208203
{
209204
_processPool->setCanHandleHTTPSServerTrustEvaluation(value);

Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h

-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@
114114
// Test only.
115115
- (void)_setAllowsAnySSLCertificateForServiceWorker:(BOOL)allows WK_API_AVAILABLE(macosx(10.13.4), ios(11.3));
116116
- (void)_registerURLSchemeServiceWorkersCanHandle:(NSString *)scheme WK_API_AVAILABLE(macosx(10.13.4), ios(11.3));
117-
- (void)_setMaximumNumberOfProcesses:(NSUInteger)value WK_API_AVAILABLE(macosx(10.13.4), ios(11.3));
118117
- (void)_getActivePagesOriginsInWebProcessForTesting:(pid_t)pid completionHandler:(void(^)(NSArray<NSString *> *))completionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
119118
- (BOOL)_networkProcessHasEntitlementForTesting:(NSString *)entitlement WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
120119

Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ WK_CLASS_AVAILABLE(macosx(10.10), ios(8.0))
3434
@interface _WKProcessPoolConfiguration : NSObject <NSCopying>
3535

3636
@property (nonatomic, copy) NSURL *injectedBundleURL;
37-
@property (nonatomic) NSUInteger maximumProcessCount;
37+
@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));
38+
@property (nonatomic) BOOL usesSingleWebProcess WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
3839
@property (nonatomic, nullable, copy) NSString *customWebContentServiceBundleIdentifier WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
3940

4041
@property (nonatomic) BOOL ignoreSynchronousMessagingTimeoutsForTesting WK_API_AVAILABLE(macosx(10.12), ios(10.0));

Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm

+14-3
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,13 @@ - (void)setInjectedBundleURL:(NSURL *)injectedBundleURL
6464

6565
- (NSUInteger)maximumProcessCount
6666
{
67-
return _processPoolConfiguration->maximumProcessCount();
67+
// Deprecated.
68+
return NSUIntegerMax;
6869
}
6970

7071
- (void)setMaximumProcessCount:(NSUInteger)maximumProcessCount
7172
{
72-
_processPoolConfiguration->setMaximumProcessCount(maximumProcessCount);
73+
// Deprecated.
7374
}
7475

7576
- (NSInteger)diskCacheSizeOverride
@@ -290,6 +291,16 @@ - (void)setPageCacheEnabled:(BOOL)enabled
290291
_processPoolConfiguration->setCacheModel(WebKit::CacheModel::PrimaryWebBrowser);
291292
}
292293

294+
- (BOOL)usesSingleWebProcess
295+
{
296+
return _processPoolConfiguration->usesSingleWebProcess();
297+
}
298+
299+
- (void)setUsesSingleWebProcess:(BOOL)enabled
300+
{
301+
_processPoolConfiguration->setUsesSingleWebProcess(enabled);
302+
}
303+
293304
- (BOOL)suppressesConnectionTerminationOnSystemChange
294305
{
295306
return _processPoolConfiguration->suppressesConnectionTerminationOnSystemChange();
@@ -344,7 +355,7 @@ - (void)setShouldTakeUIBackgroundAssertion:(BOOL)shouldTakeUIBackgroundAssertion
344355

345356
- (NSString *)description
346357
{
347-
NSString *description = [NSString stringWithFormat:@"<%@: %p; maximumProcessCount = %lu", NSStringFromClass(self.class), self, static_cast<unsigned long>([self maximumProcessCount])];
358+
NSString *description = [NSString stringWithFormat:@"<%@: %p", NSStringFromClass(self.class), self];
348359

349360
if (!_processPoolConfiguration->injectedBundlePath().isEmpty())
350361
return [description stringByAppendingFormat:@"; injectedBundleURL: \"%@\">", [self injectedBundleURL]];

Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp

-11
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,6 @@ static void webkitWebContextConstructed(GObject* object)
334334

335335
API::ProcessPoolConfiguration configuration;
336336
configuration.setInjectedBundlePath(WebCore::FileSystem::stringFromFileSystemRepresentation(bundleFilename.get()));
337-
configuration.setMaximumProcessCount(1);
338337
configuration.setDiskCacheSpeculativeValidationEnabled(true);
339338

340339
WebKitWebContext* webContext = WEBKIT_WEB_CONTEXT(object);
@@ -1495,14 +1494,6 @@ void webkit_web_context_set_process_model(WebKitWebContext* context, WebKitProce
14951494
return;
14961495

14971496
context->priv->processModel = processModel;
1498-
switch (context->priv->processModel) {
1499-
case WEBKIT_PROCESS_MODEL_SHARED_SECONDARY_PROCESS:
1500-
context->priv->processPool->setMaximumNumberOfProcesses(1);
1501-
break;
1502-
case WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES:
1503-
context->priv->processPool->setMaximumNumberOfProcesses(context->priv->processCountLimit);
1504-
break;
1505-
}
15061497
}
15071498

15081499
/**
@@ -1545,8 +1536,6 @@ void webkit_web_context_set_web_process_count_limit(WebKitWebContext* context, g
15451536
return;
15461537

15471538
context->priv->processCountLimit = limit;
1548-
if (context->priv->processModel != WEBKIT_PROCESS_MODEL_SHARED_SECONDARY_PROCESS)
1549-
context->priv->processPool->setMaximumNumberOfProcesses(limit);
15501539
}
15511540

15521541
/**

Source/WebKit/UIProcess/WebProcessPool.cpp

+8-16
Original file line numberDiff line numberDiff line change
@@ -404,11 +404,6 @@ void WebProcessPool::setLegacyCustomProtocolManagerClient(std::unique_ptr<API::C
404404
#endif
405405
}
406406

407-
void WebProcessPool::setMaximumNumberOfProcesses(unsigned maximumNumberOfProcesses)
408-
{
409-
m_configuration->setMaximumProcessCount(maximumNumberOfProcesses);
410-
}
411-
412407
void WebProcessPool::setCustomWebContentServiceBundleIdentifier(const String& customWebContentServiceBundleIdentifier)
413408
{
414409
// Guard against API misuse.
@@ -1086,31 +1081,25 @@ void WebProcessPool::disconnectProcess(WebProcessProxy* process)
10861081

10871082
WebProcessProxy& WebProcessPool::createNewWebProcessRespectingProcessCountLimit(WebsiteDataStore& websiteDataStore)
10881083
{
1089-
// FIXME: https://bugs.webkit.org/show_bug.cgi?id=168676
1090-
// Once WebsiteDataStores are truly per-view instead of per-process, remove this nonsense.
1084+
if (!usesSingleWebProcess())
1085+
return createNewWebProcess(websiteDataStore);
10911086

10921087
#if PLATFORM(COCOA)
10931088
bool mustMatchDataStore = API::WebsiteDataStore::defaultDataStoreExists() && &websiteDataStore != &API::WebsiteDataStore::defaultDataStore()->websiteDataStore();
10941089
#else
10951090
bool mustMatchDataStore = false;
10961091
#endif
10971092

1098-
if (m_processes.size() < maximumNumberOfProcesses())
1099-
return createNewWebProcess(websiteDataStore);
1100-
1101-
WebProcessProxy* processToReuse = nullptr;
11021093
for (auto& process : m_processes) {
11031094
if (mustMatchDataStore && &process->websiteDataStore() != &websiteDataStore)
11041095
continue;
11051096
#if ENABLE(SERVICE_WORKER)
11061097
if (is<ServiceWorkerProcessProxy>(*process))
11071098
continue;
11081099
#endif
1109-
// Choose the process with fewest pages.
1110-
if (!processToReuse || processToReuse->pageCount() > process->pageCount())
1111-
processToReuse = process.get();
1100+
return *process;
11121101
}
1113-
return processToReuse ? *processToReuse : createNewWebProcess(websiteDataStore);
1102+
return createNewWebProcess(websiteDataStore);
11141103
}
11151104

11161105
Ref<WebPageProxy> WebProcessPool::createWebPage(PageClient& pageClient, Ref<API::PageConfiguration>&& pageConfiguration)
@@ -1296,7 +1285,7 @@ void WebProcessPool::postMessageToInjectedBundle(const String& messageName, API:
12961285

12971286
void WebProcessPool::didReachGoodTimeToPrewarm()
12981287
{
1299-
if (!configuration().isAutomaticProcessWarmingEnabled() || !configuration().processSwapsOnNavigation())
1288+
if (!configuration().isAutomaticProcessWarmingEnabled() || !configuration().processSwapsOnNavigation() || usesSingleWebProcess())
13001289
return;
13011290

13021291
if (MemoryPressureHandler::singleton().isUnderMemoryPressure()) {
@@ -2157,6 +2146,9 @@ void WebProcessPool::processForNavigationInternal(WebPageProxy& page, const API:
21572146
return createNewWebProcess(page.websiteDataStore());
21582147
};
21592148

2149+
if (usesSingleWebProcess())
2150+
return completionHandler(page.process(), nullptr, "Single WebProcess mode is enabled"_s);
2151+
21602152
if (processSwapRequestedByClient == ProcessSwapRequestedByClient::Yes)
21612153
return completionHandler(createNewProcess(), nullptr, "Process swap was requested by the client"_s);
21622154

Source/WebKit/UIProcess/WebProcessPool.h

+2-3
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,6 @@ class WebProcessPool final : public API::ObjectImpl<API::Object::Type::ProcessPo
153153
void setAutomationClient(std::unique_ptr<API::AutomationClient>&&);
154154
void setLegacyCustomProtocolManagerClient(std::unique_ptr<API::CustomProtocolManagerClient>&&);
155155

156-
void setMaximumNumberOfProcesses(unsigned); // Can only be called when there are no processes running.
157-
unsigned maximumNumberOfProcesses() const { return !m_configuration->maximumProcessCount() ? UINT_MAX : m_configuration->maximumProcessCount(); }
158-
159156
void setCustomWebContentServiceBundleIdentifier(const String&);
160157
const String& customWebContentServiceBundleIdentifier() { return m_configuration->customWebContentServiceBundleIdentifier(); }
161158

@@ -516,6 +513,8 @@ class WebProcessPool final : public API::ObjectImpl<API::Object::Type::ProcessPo
516513
static void languageChanged(void* context);
517514
void languageChanged();
518515

516+
bool usesSingleWebProcess() const { return m_configuration->usesSingleWebProcess(); }
517+
519518
#if PLATFORM(IOS_FAMILY)
520519
String cookieStorageDirectory() const;
521520
#endif

Tools/ChangeLog

+22
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,25 @@
1+
2019-01-23 Chris Dumez <cdumez@apple.com>
2+
3+
Deprecate API to limit the maximum number of WebProcesses
4+
https://bugs.webkit.org/show_bug.cgi?id=193725
5+
<rdar://problem/47464879>
6+
7+
Reviewed by Geoff Garen.
8+
9+
Update existing API tests to stop using deprecated API.
10+
11+
* MiniBrowser/mac/AppDelegate.m:
12+
(defaultConfiguration):
13+
* TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
14+
(TestWebKitAPI::TEST):
15+
* TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimer.mm:
16+
(TestWebKitAPI::TEST):
17+
* TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
18+
* TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
19+
(TEST):
20+
* TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm:
21+
(TEST):
22+
123
2019-01-23 Aakash Jain <aakash_jain@apple.com>
224

325
[ews-app] Rename ews model buildermappings to buildermapping

Tools/MiniBrowser/mac/AppDelegate.m

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ - (void)awakeFromNib
100100
_WKProcessPoolConfiguration *processConfiguration = [[[_WKProcessPoolConfiguration alloc] init] autorelease];
101101
processConfiguration.diskCacheSpeculativeValidationEnabled = ![SettingsController shared].networkCacheSpeculativeRevalidationDisabled;
102102
if ([SettingsController shared].perWindowWebProcessesDisabled)
103-
processConfiguration.maximumProcessCount = 1;
103+
processConfiguration.usesSingleWebProcess = YES;
104104
if ([SettingsController shared].processSwapOnWindowOpenWithOpenerEnabled)
105105
processConfiguration.processSwapsOnWindowOpenWithOpener = true;
106106

Tools/TestWebKitAPI/Tests/WebKit/UserMedia.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ static void didCrashCallback(WKPageRef, const void*)
106106
TEST(WebKit, OnDeviceChangeCrash)
107107
{
108108
auto context = adoptWK(WKContextCreateWithConfiguration(nullptr));
109-
WKContextSetMaximumNumberOfProcesses(context.get(), 1);
110109

111110
WKRetainPtr<WKPageGroupRef> pageGroup(AdoptWK, WKPageGroupCreateWithIdentifier(Util::toWK("GetUserMedia").get()));
112111
WKPreferencesRef preferences = WKPageGroupGetPreferences(pageGroup.get());
@@ -131,7 +130,7 @@ TEST(WebKit, OnDeviceChangeCrash)
131130
WKPageLoadURL(webView.page(), url.get());
132131

133132
// Load a second page in same process.
134-
PlatformWebView webView2(context.get(), pageGroup.get());
133+
PlatformWebView webView2(webView.page());
135134
WKPageSetPageUIClient(webView2.page(), &uiClient.base);
136135
WKPageNavigationClientV0 navigationClient;
137136
memset(&navigationClient, 0, sizeof(navigationClient));

Tools/TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimer.mm

-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ - (void)_webViewWebProcessDidBecomeUnresponsive:(WKWebView *)webView
6060
{
6161
auto processPoolConfiguration = adoptNS([_WKProcessPoolConfiguration new]);
6262
auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]);
63-
[processPool _setMaximumNumberOfProcesses:1];
6463
auto delegate = adoptNS([ResponsivenessTimerDelegate new]);
6564

6665
auto configuration = adoptNS([WKWebViewConfiguration new]);

0 commit comments

Comments
 (0)