Title: [243792] tags/Safari-608.1.13.5
Revision
243792
Author
[email protected]
Date
2019-04-02 23:23:51 -0700 (Tue, 02 Apr 2019)

Log Message

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

Modified Paths

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);
+}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to