Diff
Modified: trunk/Source/WebKit/ChangeLog (243710 => 243711)
--- trunk/Source/WebKit/ChangeLog 2019-04-01 20:46:23 UTC (rev 243710)
+++ trunk/Source/WebKit/ChangeLog 2019-04-01 20:52:36 UTC (rev 243711)
@@ -1,3 +1,29 @@
+2019-04-01 Chris Dumez <[email protected]>
+
+ UIProcess crash when a prewarmed process is terminated
+ https://bugs.webkit.org/show_bug.cgi?id=196451
+ <rdar://problem/49245471>
+
+ Reviewed by Geoffrey Garen.
+
+ Stop assuming that WebProcessProxy::m_websiteDataStore is non-null as this is no longer
+ true after r243384. For example, prewarmed WebContent processe do not get a data store
+ until they actually get used.
+
+ * UIProcess/API/Cocoa/WKProcessPool.mm:
+ (-[WKProcessPool _prewarmedProcessIdentifier]):
+ * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::networkProcessIdentifier):
+ (WebKit::WebProcessPool::prewarmedProcessIdentifier):
+ * UIProcess/WebProcessPool.h:
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::didClose):
+ (WebKit::WebProcessProxy::didFinishLaunching):
+ (WebKit::WebProcessProxy::requestTermination):
+ (WebKit::WebProcessProxy::isReleaseLoggingAllowed const):
+ * UIProcess/WebProcessProxy.h:
+
2019-04-01 Patrick Griffis <[email protected]>
[GTK][WPE] Add more websitedatastore directories to web process sandbox
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm (243710 => 243711)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm 2019-04-01 20:46:23 UTC (rev 243710)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm 2019-04-01 20:52:36 UTC (rev 243711)
@@ -440,6 +440,12 @@
return _processPool->networkProcessIdentifier();
}
+- (pid_t)_prewarmedProcessIdentifier
+{
+ return _processPool->prewarmedProcessIdentifier();
+}
+
+
- (void)_syncNetworkProcessCookies
{
_processPool->syncNetworkProcessCookies();
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h (243710 => 243711)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h 2019-04-01 20:46:23 UTC (rev 243710)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h 2019-04-01 20:52:36 UTC (rev 243711)
@@ -89,6 +89,7 @@
// Test only.
- (pid_t)_networkProcessIdentifier WK_API_AVAILABLE(macos(10.13), ios(11.0));
+- (pid_t)_prewarmedProcessIdentifier WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
// Test only.
- (size_t)_webProcessCount WK_API_AVAILABLE(macos(10.13), ios(11.0));
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (243710 => 243711)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-04-01 20:46:23 UTC (rev 243710)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-04-01 20:52:36 UTC (rev 243711)
@@ -1440,10 +1440,12 @@
ProcessID WebProcessPool::networkProcessIdentifier()
{
- if (!m_networkProcess)
- return 0;
+ return m_networkProcess ? m_networkProcess->processIdentifier() : 0;
+}
- return m_networkProcess->processIdentifier();
+ProcessID WebProcessPool::prewarmedProcessIdentifier()
+{
+ return m_prewarmedProcess ? m_prewarmedProcess->processIdentifier() : 0;
}
void WebProcessPool::activePagesOriginsInWebProcessForTesting(ProcessID pid, CompletionHandler<void(Vector<String>&&)>&& completionHandler)
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (243710 => 243711)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.h 2019-04-01 20:46:23 UTC (rev 243710)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h 2019-04-01 20:52:36 UTC (rev 243711)
@@ -232,6 +232,7 @@
void clearSupportedPlugins();
ProcessID networkProcessIdentifier();
+ ProcessID prewarmedProcessIdentifier();
void activePagesOriginsInWebProcessForTesting(ProcessID, CompletionHandler<void(Vector<String>&&)>&&);
bool networkProcessHasEntitlementForTesting(const String&);
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (243710 => 243711)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2019-04-01 20:46:23 UTC (rev 243710)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2019-04-01 20:52:36 UTC (rev 243711)
@@ -648,7 +648,7 @@
void WebProcessProxy::didClose(IPC::Connection&)
{
- RELEASE_LOG_IF(m_websiteDataStore->sessionID().isAlwaysOnLoggingAllowed(), Process, "%p - WebProcessProxy didClose (web process crash)", this);
+ RELEASE_LOG_IF(isReleaseLoggingAllowed(), Process, "%p - WebProcessProxy didClose (web process crash)", this);
processDidTerminateOrFailedToLaunch();
}
@@ -757,7 +757,7 @@
AuxiliaryProcessProxy::didFinishLaunching(launcher, connectionIdentifier);
if (!IPC::Connection::identifierIsValid(connectionIdentifier)) {
- RELEASE_LOG_IF(m_websiteDataStore->sessionID().isAlwaysOnLoggingAllowed(), Process, "%p - WebProcessProxy didFinishLaunching - invalid connection identifier (web process failed to launch)", this);
+ RELEASE_LOG_IF(isReleaseLoggingAllowed(), Process, "%p - WebProcessProxy didFinishLaunching - invalid connection identifier (web process failed to launch)", this);
processDidTerminateOrFailedToLaunch();
return;
}
@@ -984,7 +984,7 @@
return;
auto protectedThis = makeRef(*this);
- RELEASE_LOG_IF(m_websiteDataStore->sessionID().isAlwaysOnLoggingAllowed(), Process, "%p - WebProcessProxy::requestTermination - reason %d", this, reason);
+ RELEASE_LOG_IF(isReleaseLoggingAllowed(), Process, "%p - WebProcessProxy::requestTermination - reason %d", this, reason);
AuxiliaryProcessProxy::terminate();
@@ -999,6 +999,11 @@
page->processDidTerminate(reason);
}
+bool WebProcessProxy::isReleaseLoggingAllowed() const
+{
+ return !m_websiteDataStore || m_websiteDataStore->sessionID().isAlwaysOnLoggingAllowed();
+}
+
void WebProcessProxy::stopResponsivenessTimer()
{
responsivenessTimer().stop();
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (243710 => 243711)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2019-04-01 20:46:23 UTC (rev 243710)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2019-04-01 20:52:36 UTC (rev 243711)
@@ -358,6 +358,8 @@
void processDidTerminateOrFailedToLaunch();
+ bool isReleaseLoggingAllowed() const;
+
// IPC::Connection::Client
friend class WebConnectionToWebProcess;
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
Modified: trunk/Tools/ChangeLog (243710 => 243711)
--- trunk/Tools/ChangeLog 2019-04-01 20:46:23 UTC (rev 243710)
+++ trunk/Tools/ChangeLog 2019-04-01 20:52:36 UTC (rev 243711)
@@ -1,3 +1,16 @@
+2019-04-01 Chris Dumez <[email protected]>
+
+ UIProcess crash when a prewarmed process is terminated
+ https://bugs.webkit.org/show_bug.cgi?id=196451
+ <rdar://problem/49245471>
+
+ Reviewed by Geoffrey Garen.
+
+ Add API test coverage.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
+ (TEST):
+
2019-04-01 Aakash Jain <[email protected]>
[ews-app] Display OS and Xcode configuration in status-bubble's hover-over message
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm (243710 => 243711)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm 2019-04-01 20:46:23 UTC (rev 243710)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm 2019-04-01 20:52:36 UTC (rev 243711)
@@ -120,3 +120,24 @@
EXPECT_FALSE([pool _hasPrewarmedWebProcess]);
EXPECT_EQ(2U, [pool _webPageContentProcessCount]);
}
+
+TEST(WKProcessPool, PrewarmedProcessCrash)
+{
+ auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]);
+ processPoolConfiguration.get().prewarmsProcessesAutomatically = NO;
+
+ auto pool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]);
+ [pool _warmInitialProcess];
+
+ EXPECT_TRUE([pool _hasPrewarmedWebProcess]);
+ EXPECT_EQ(1U, [pool _webPageContentProcessCount]);
+
+ // Wait for prewarmed process to finish launching.
+ while (![pool _prewarmedProcessIdentifier])
+ TestWebKitAPI::Util::sleep(0.01);
+
+ kill([pool _prewarmedProcessIdentifier], 9);
+
+ while ([pool _hasPrewarmedWebProcess])
+ TestWebKitAPI::Util::sleep(0.01);
+}