Diff
Modified: tags/Safari-608.1.13.5/Source/WebKit/ChangeLog (243791 => 243792)
--- tags/Safari-608.1.13.5/Source/WebKit/ChangeLog 2019-04-03 06:23:48 UTC (rev 243791)
+++ tags/Safari-608.1.13.5/Source/WebKit/ChangeLog 2019-04-03 06:23:51 UTC (rev 243792)
@@ -1,5 +1,71 @@
2019-04-02 Babak Shafiei <[email protected]>
+ Cherry-pick r243711. rdar://problem/49245471
+
+ UIProcess crash when a prewarmed process is terminated
+ https://bugs.webkit.org/show_bug.cgi?id=196451
+ <rdar://problem/49245471>
+
+ Reviewed by Geoffrey Garen.
+
+ Source/WebKit:
+
+ 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:
+
+ Tools:
+
+ Add API test coverage.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
+ (TEST):
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243711 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 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-02 Babak Shafiei <[email protected]>
+
Cherry-pick r243606. rdar://problem/49229632
[iPad] Tapping on a popup form control may not show a popover
Modified: tags/Safari-608.1.13.5/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm (243791 => 243792)
--- tags/Safari-608.1.13.5/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm 2019-04-03 06:23:48 UTC (rev 243791)
+++ tags/Safari-608.1.13.5/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm 2019-04-03 06:23:51 UTC (rev 243792)
@@ -440,6 +440,12 @@
return _processPool->networkProcessIdentifier();
}
+- (pid_t)_prewarmedProcessIdentifier
+{
+ return _processPool->prewarmedProcessIdentifier();
+}
+
+
- (void)_syncNetworkProcessCookies
{
_processPool->syncNetworkProcessCookies();
Modified: tags/Safari-608.1.13.5/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h (243791 => 243792)
--- tags/Safari-608.1.13.5/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h 2019-04-03 06:23:48 UTC (rev 243791)
+++ tags/Safari-608.1.13.5/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h 2019-04-03 06:23:51 UTC (rev 243792)
@@ -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: tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessPool.cpp (243791 => 243792)
--- tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-04-03 06:23:48 UTC (rev 243791)
+++ tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-04-03 06:23:51 UTC (rev 243792)
@@ -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: tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessPool.h (243791 => 243792)
--- tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessPool.h 2019-04-03 06:23:48 UTC (rev 243791)
+++ tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessPool.h 2019-04-03 06:23:51 UTC (rev 243792)
@@ -232,6 +232,7 @@
void clearSupportedPlugins();
ProcessID networkProcessIdentifier();
+ ProcessID prewarmedProcessIdentifier();
void activePagesOriginsInWebProcessForTesting(ProcessID, CompletionHandler<void(Vector<String>&&)>&&);
bool networkProcessHasEntitlementForTesting(const String&);
Modified: tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessProxy.cpp (243791 => 243792)
--- tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessProxy.cpp 2019-04-03 06:23:48 UTC (rev 243791)
+++ tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessProxy.cpp 2019-04-03 06:23:51 UTC (rev 243792)
@@ -665,7 +665,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();
}
@@ -774,7 +774,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;
}
@@ -1003,7 +1003,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();
@@ -1018,6 +1018,11 @@
page->processDidTerminate(reason);
}
+bool WebProcessProxy::isReleaseLoggingAllowed() const
+{
+ return !m_websiteDataStore || m_websiteDataStore->sessionID().isAlwaysOnLoggingAllowed();
+}
+
void WebProcessProxy::stopResponsivenessTimer()
{
responsivenessTimer().stop();
Modified: tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessProxy.h (243791 => 243792)
--- tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessProxy.h 2019-04-03 06:23:48 UTC (rev 243791)
+++ tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessProxy.h 2019-04-03 06:23:51 UTC (rev 243792)
@@ -401,6 +401,8 @@
void processDidTerminateOrFailedToLaunch();
+ bool isReleaseLoggingAllowed() const;
+
// IPC::Connection::Client
friend class WebConnectionToWebProcess;
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
Modified: tags/Safari-608.1.13.5/Tools/ChangeLog (243791 => 243792)
--- tags/Safari-608.1.13.5/Tools/ChangeLog 2019-04-03 06:23:48 UTC (rev 243791)
+++ tags/Safari-608.1.13.5/Tools/ChangeLog 2019-04-03 06:23:51 UTC (rev 243792)
@@ -1,3 +1,56 @@
+2019-04-02 Babak Shafiei <[email protected]>
+
+ Cherry-pick r243711. rdar://problem/49245471
+
+ UIProcess crash when a prewarmed process is terminated
+ https://bugs.webkit.org/show_bug.cgi?id=196451
+ <rdar://problem/49245471>
+
+ Reviewed by Geoffrey Garen.
+
+ Source/WebKit:
+
+ 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:
+
+ Tools:
+
+ Add API test coverage.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
+ (TEST):
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243711 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 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-03-22 Chris Dumez <[email protected]>
[ iOS Simulator] REGRESSION (r241821) Layout Test platform/ipad/fast/viewport/viewport-unchanged-by-minimum-effective-width-if-not-ignore-meta-viewport.html is a flaky failure on bots
Modified: tags/Safari-608.1.13.5/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm (243791 => 243792)
--- tags/Safari-608.1.13.5/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm 2019-04-03 06:23:48 UTC (rev 243791)
+++ tags/Safari-608.1.13.5/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm 2019-04-03 06:23:51 UTC (rev 243792)
@@ -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);
+}