Title: [231298] trunk
- Revision
- 231298
- Author
- [email protected]
- Date
- 2018-05-03 01:45:32 -0700 (Thu, 03 May 2018)
Log Message
REGRESSION(r222772): [GTK][WPE] WebProcess from WebKitGtk+ 2.19.9x SIGSEVs in WebKit::WebProcess::ensureNetworkProcessConnection() at Source/WebKit/WebProcess/WebProcess.cpp:1127
https://bugs.webkit.org/show_bug.cgi?id=183348
Reviewed by Michael Catanzaro.
Source/WebKit:
When connection doesn't exit in case of sync message failure, always exit in case of failing to send
GetNetworkProcessConnection or GetStorageProcessConnection messages. This can happen when the WebView is created
and destroyed quickly.
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::ensureNetworkProcessConnection):
(WebKit::WebProcess::ensureWebToStorageProcessConnection):
Tools:
Add a test case to reproduce the crash.
* TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
(testWebViewCloseQuickly):
(beforeAll):
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (231297 => 231298)
--- trunk/Source/WebKit/ChangeLog 2018-05-03 07:23:08 UTC (rev 231297)
+++ trunk/Source/WebKit/ChangeLog 2018-05-03 08:45:32 UTC (rev 231298)
@@ -1,3 +1,18 @@
+2018-05-03 Carlos Garcia Campos <[email protected]>
+
+ REGRESSION(r222772): [GTK][WPE] WebProcess from WebKitGtk+ 2.19.9x SIGSEVs in WebKit::WebProcess::ensureNetworkProcessConnection() at Source/WebKit/WebProcess/WebProcess.cpp:1127
+ https://bugs.webkit.org/show_bug.cgi?id=183348
+
+ Reviewed by Michael Catanzaro.
+
+ When connection doesn't exit in case of sync message failure, always exit in case of failing to send
+ GetNetworkProcessConnection or GetStorageProcessConnection messages. This can happen when the WebView is created
+ and destroyed quickly.
+
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::ensureNetworkProcessConnection):
+ (WebKit::WebProcess::ensureWebToStorageProcessConnection):
+
2018-05-02 Nan Wang <[email protected]>
AX: Missing kAXSWebAccessibilityEventsEnabledNotification causes a crash
Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (231297 => 231298)
--- trunk/Source/WebKit/WebProcess/WebProcess.cpp 2018-05-03 07:23:08 UTC (rev 231297)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp 2018-05-03 08:45:32 UTC (rev 231298)
@@ -1148,8 +1148,18 @@
if (!m_networkProcessConnection) {
IPC::Attachment encodedConnectionIdentifier;
- if (!parentProcessConnection()->sendSync(Messages::WebProcessProxy::GetNetworkProcessConnection(), Messages::WebProcessProxy::GetNetworkProcessConnection::Reply(encodedConnectionIdentifier), 0, Seconds::infinity(), IPC::SendSyncOption::DoNotProcessIncomingMessagesWhenWaitingForSyncReply))
+ if (!parentProcessConnection()->sendSync(Messages::WebProcessProxy::GetNetworkProcessConnection(), Messages::WebProcessProxy::GetNetworkProcessConnection::Reply(encodedConnectionIdentifier), 0, Seconds::infinity(), IPC::SendSyncOption::DoNotProcessIncomingMessagesWhenWaitingForSyncReply)) {
+#if PLATFORM(GTK) || PLATFORM(WPE)
+ // GTK+ and WPE ports don't exit on send sync message failure.
+ // In this particular case, the network process can be terminated by the UI process while the
+ // Web process is still initializing, so we always want to exit instead of crashing. This can
+ // happen when the WebView is created and then destroyed quickly.
+ // See https://bugs.webkit.org/show_bug.cgi?id=183348.
+ exit(0);
+#else
CRASH();
+#endif
+ }
#if USE(UNIX_DOMAIN_SOCKETS)
IPC::Connection::Identifier connectionIdentifier = encodedConnectionIdentifier.releaseFileDescriptor();
@@ -1222,8 +1232,16 @@
if (!m_webToStorageProcessConnection) {
IPC::Attachment encodedConnectionIdentifier;
- if (!parentProcessConnection()->sendSync(Messages::WebProcessProxy::GetStorageProcessConnection(initialSessionID), Messages::WebProcessProxy::GetStorageProcessConnection::Reply(encodedConnectionIdentifier), 0))
+ if (!parentProcessConnection()->sendSync(Messages::WebProcessProxy::GetStorageProcessConnection(initialSessionID), Messages::WebProcessProxy::GetStorageProcessConnection::Reply(encodedConnectionIdentifier), 0)) {
+#if PLATFORM(GTK) || PLATFORM(WPE)
+ // GTK+ and WPE ports don't exit on send sync message failure.
+ // In this particular case, the storage process can be terminated by the UI process while the
+ // connection is being done, so we always want to exit instead of crashing.
+ // See https://bugs.webkit.org/show_bug.cgi?id=183348.
+#else
CRASH();
+#endif
+ }
#if USE(UNIX_DOMAIN_SOCKETS)
IPC::Connection::Identifier connectionIdentifier = encodedConnectionIdentifier.releaseFileDescriptor();
Modified: trunk/Tools/ChangeLog (231297 => 231298)
--- trunk/Tools/ChangeLog 2018-05-03 07:23:08 UTC (rev 231297)
+++ trunk/Tools/ChangeLog 2018-05-03 08:45:32 UTC (rev 231298)
@@ -1,3 +1,16 @@
+2018-05-03 Carlos Garcia Campos <[email protected]>
+
+ REGRESSION(r222772): [GTK][WPE] WebProcess from WebKitGtk+ 2.19.9x SIGSEVs in WebKit::WebProcess::ensureNetworkProcessConnection() at Source/WebKit/WebProcess/WebProcess.cpp:1127
+ https://bugs.webkit.org/show_bug.cgi?id=183348
+
+ Reviewed by Michael Catanzaro.
+
+ Add a test case to reproduce the crash.
+
+ * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
+ (testWebViewCloseQuickly):
+ (beforeAll):
+
2018-05-02 Aditya Keerthi <[email protected]>
Can't copy and paste URLs that have no title into Mail (macOS)
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp (231297 => 231298)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp 2018-05-03 07:23:08 UTC (rev 231297)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp 2018-05-03 08:45:32 UTC (rev 231298)
@@ -105,6 +105,18 @@
g_object_unref(webContext2);
}
+static void testWebViewCloseQuickly(WebViewTest* test, gconstpointer)
+{
+ auto webView = Test::adoptView(Test::createWebView());
+ test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView.get()));
+ g_idle_add([](gpointer userData) -> gboolean {
+ static_cast<WebViewTest*>(userData)->quitMainLoop();
+ return G_SOURCE_REMOVE;
+ }, test);
+ g_main_loop_run(test->m_mainLoop);
+ webView = nullptr;
+}
+
#if PLATFORM(WPE)
static void testWebViewWebBackend(Test* test, gconstpointer)
{
@@ -1203,6 +1215,7 @@
WebViewTest::add("WebKitWebView", "web-context", testWebViewWebContext);
WebViewTest::add("WebKitWebView", "web-context-lifetime", testWebViewWebContextLifetime);
+ WebViewTest::add("WebKitWebView", "close-quickly", testWebViewCloseQuickly);
#if PLATFORM(WPE)
Test::add("WebKitWebView", "backend", testWebViewWebBackend);
#endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes