⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 243792 in webkit


Ignore:
Timestamp:
Apr 2, 2019, 11:23:51 PM (7 years ago)
Author:
bshafiei@apple.com
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

Location:
tags/Safari-608.1.13.5
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • tags/Safari-608.1.13.5/Source/WebKit/ChangeLog

    r243791 r243792  
     12019-04-02  Babak Shafiei  <bshafiei@apple.com>
     2
     3        Cherry-pick r243711. rdar://problem/49245471
     4
     5    UIProcess crash when a prewarmed process is terminated
     6    https://bugs.webkit.org/show_bug.cgi?id=196451
     7    <rdar://problem/49245471>
     8   
     9    Reviewed by Geoffrey Garen.
     10   
     11    Source/WebKit:
     12   
     13    Stop assuming that WebProcessProxy::m_websiteDataStore is non-null as this is no longer
     14    true after r243384. For example, prewarmed WebContent processe do not get a data store
     15    until they actually get used.
     16   
     17    * UIProcess/API/Cocoa/WKProcessPool.mm:
     18    (-[WKProcessPool _prewarmedProcessIdentifier]):
     19    * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
     20    * UIProcess/WebProcessPool.cpp:
     21    (WebKit::WebProcessPool::networkProcessIdentifier):
     22    (WebKit::WebProcessPool::prewarmedProcessIdentifier):
     23    * UIProcess/WebProcessPool.h:
     24    * UIProcess/WebProcessProxy.cpp:
     25    (WebKit::WebProcessProxy::didClose):
     26    (WebKit::WebProcessProxy::didFinishLaunching):
     27    (WebKit::WebProcessProxy::requestTermination):
     28    (WebKit::WebProcessProxy::isReleaseLoggingAllowed const):
     29    * UIProcess/WebProcessProxy.h:
     30   
     31    Tools:
     32   
     33    Add API test coverage.
     34   
     35    * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
     36    (TEST):
     37   
     38   
     39    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243711 268f45cc-cd09-0410-ab3c-d52691b4dbfc
     40
     41    2019-04-01  Chris Dumez  <cdumez@apple.com>
     42
     43            UIProcess crash when a prewarmed process is terminated
     44            https://bugs.webkit.org/show_bug.cgi?id=196451
     45            <rdar://problem/49245471>
     46
     47            Reviewed by Geoffrey Garen.
     48
     49            Stop assuming that WebProcessProxy::m_websiteDataStore is non-null as this is no longer
     50            true after r243384. For example, prewarmed WebContent processe do not get a data store
     51            until they actually get used.
     52
     53            * UIProcess/API/Cocoa/WKProcessPool.mm:
     54            (-[WKProcessPool _prewarmedProcessIdentifier]):
     55            * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
     56            * UIProcess/WebProcessPool.cpp:
     57            (WebKit::WebProcessPool::networkProcessIdentifier):
     58            (WebKit::WebProcessPool::prewarmedProcessIdentifier):
     59            * UIProcess/WebProcessPool.h:
     60            * UIProcess/WebProcessProxy.cpp:
     61            (WebKit::WebProcessProxy::didClose):
     62            (WebKit::WebProcessProxy::didFinishLaunching):
     63            (WebKit::WebProcessProxy::requestTermination):
     64            (WebKit::WebProcessProxy::isReleaseLoggingAllowed const):
     65            * UIProcess/WebProcessProxy.h:
     66
    1672019-04-02  Babak Shafiei  <bshafiei@apple.com>
    268
  • tags/Safari-608.1.13.5/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm

    r243384 r243792  
    441441}
    442442
     443- (pid_t)_prewarmedProcessIdentifier
     444{
     445    return _processPool->prewarmedProcessIdentifier();
     446}
     447
     448
    443449- (void)_syncNetworkProcessCookies
    444450{
  • tags/Safari-608.1.13.5/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h

    r243376 r243792  
    9090// Test only.
    9191- (pid_t)_networkProcessIdentifier WK_API_AVAILABLE(macos(10.13), ios(11.0));
     92- (pid_t)_prewarmedProcessIdentifier WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    9293
    9394// Test only.
  • tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessPool.cpp

    r243384 r243792  
    14411441ProcessID WebProcessPool::networkProcessIdentifier()
    14421442{
    1443     if (!m_networkProcess)
    1444         return 0;
    1445 
    1446     return m_networkProcess->processIdentifier();
     1443    return m_networkProcess ? m_networkProcess->processIdentifier() : 0;
     1444}
     1445
     1446ProcessID WebProcessPool::prewarmedProcessIdentifier()
     1447{
     1448    return m_prewarmedProcess ? m_prewarmedProcess->processIdentifier() : 0;
    14471449}
    14481450
  • tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessPool.h

    r243384 r243792  
    233233
    234234    ProcessID networkProcessIdentifier();
     235    ProcessID prewarmedProcessIdentifier();
    235236    void activePagesOriginsInWebProcessForTesting(ProcessID, CompletionHandler<void(Vector<String>&&)>&&);
    236237    bool networkProcessHasEntitlementForTesting(const String&);
  • tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessProxy.cpp

    r243384 r243792  
    666666void WebProcessProxy::didClose(IPC::Connection&)
    667667{
    668     RELEASE_LOG_IF(m_websiteDataStore->sessionID().isAlwaysOnLoggingAllowed(), Process, "%p - WebProcessProxy didClose (web process crash)", this);
     668    RELEASE_LOG_IF(isReleaseLoggingAllowed(), Process, "%p - WebProcessProxy didClose (web process crash)", this);
    669669    processDidTerminateOrFailedToLaunch();
    670670}
     
    775775
    776776    if (!IPC::Connection::identifierIsValid(connectionIdentifier)) {
    777         RELEASE_LOG_IF(m_websiteDataStore->sessionID().isAlwaysOnLoggingAllowed(), Process, "%p - WebProcessProxy didFinishLaunching - invalid connection identifier (web process failed to launch)", this);
     777        RELEASE_LOG_IF(isReleaseLoggingAllowed(), Process, "%p - WebProcessProxy didFinishLaunching - invalid connection identifier (web process failed to launch)", this);
    778778        processDidTerminateOrFailedToLaunch();
    779779        return;
     
    10041004
    10051005    auto protectedThis = makeRef(*this);
    1006     RELEASE_LOG_IF(m_websiteDataStore->sessionID().isAlwaysOnLoggingAllowed(), Process, "%p - WebProcessProxy::requestTermination - reason %d", this, reason);
     1006    RELEASE_LOG_IF(isReleaseLoggingAllowed(), Process, "%p - WebProcessProxy::requestTermination - reason %d", this, reason);
    10071007
    10081008    AuxiliaryProcessProxy::terminate();
     
    10171017    for (auto& page : pages)
    10181018        page->processDidTerminate(reason);
     1019}
     1020
     1021bool WebProcessProxy::isReleaseLoggingAllowed() const
     1022{
     1023    return !m_websiteDataStore || m_websiteDataStore->sessionID().isAlwaysOnLoggingAllowed();
    10191024}
    10201025
  • tags/Safari-608.1.13.5/Source/WebKit/UIProcess/WebProcessProxy.h

    r243384 r243792  
    402402    void processDidTerminateOrFailedToLaunch();
    403403
     404    bool isReleaseLoggingAllowed() const;
     405
    404406    // IPC::Connection::Client
    405407    friend class WebConnectionToWebProcess;
  • tags/Safari-608.1.13.5/Tools/ChangeLog

    r243385 r243792  
     12019-04-02  Babak Shafiei  <bshafiei@apple.com>
     2
     3        Cherry-pick r243711. rdar://problem/49245471
     4
     5    UIProcess crash when a prewarmed process is terminated
     6    https://bugs.webkit.org/show_bug.cgi?id=196451
     7    <rdar://problem/49245471>
     8   
     9    Reviewed by Geoffrey Garen.
     10   
     11    Source/WebKit:
     12   
     13    Stop assuming that WebProcessProxy::m_websiteDataStore is non-null as this is no longer
     14    true after r243384. For example, prewarmed WebContent processe do not get a data store
     15    until they actually get used.
     16   
     17    * UIProcess/API/Cocoa/WKProcessPool.mm:
     18    (-[WKProcessPool _prewarmedProcessIdentifier]):
     19    * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
     20    * UIProcess/WebProcessPool.cpp:
     21    (WebKit::WebProcessPool::networkProcessIdentifier):
     22    (WebKit::WebProcessPool::prewarmedProcessIdentifier):
     23    * UIProcess/WebProcessPool.h:
     24    * UIProcess/WebProcessProxy.cpp:
     25    (WebKit::WebProcessProxy::didClose):
     26    (WebKit::WebProcessProxy::didFinishLaunching):
     27    (WebKit::WebProcessProxy::requestTermination):
     28    (WebKit::WebProcessProxy::isReleaseLoggingAllowed const):
     29    * UIProcess/WebProcessProxy.h:
     30   
     31    Tools:
     32   
     33    Add API test coverage.
     34   
     35    * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
     36    (TEST):
     37   
     38   
     39    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243711 268f45cc-cd09-0410-ab3c-d52691b4dbfc
     40
     41    2019-04-01  Chris Dumez  <cdumez@apple.com>
     42
     43            UIProcess crash when a prewarmed process is terminated
     44            https://bugs.webkit.org/show_bug.cgi?id=196451
     45            <rdar://problem/49245471>
     46
     47            Reviewed by Geoffrey Garen.
     48
     49            Add API test coverage.
     50
     51            * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
     52            (TEST):
     53
    1542019-03-22  Chris Dumez  <cdumez@apple.com>
    255
  • tags/Safari-608.1.13.5/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm

    r243384 r243792  
    121121    EXPECT_EQ(2U, [pool _webPageContentProcessCount]);
    122122}
     123
     124TEST(WKProcessPool, PrewarmedProcessCrash)
     125{
     126    auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]);
     127    processPoolConfiguration.get().prewarmsProcessesAutomatically = NO;
     128
     129    auto pool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]);
     130    [pool _warmInitialProcess];
     131
     132    EXPECT_TRUE([pool _hasPrewarmedWebProcess]);
     133    EXPECT_EQ(1U, [pool _webPageContentProcessCount]);
     134
     135    // Wait for prewarmed process to finish launching.
     136    while (![pool _prewarmedProcessIdentifier])
     137        TestWebKitAPI::Util::sleep(0.01);
     138
     139    kill([pool _prewarmedProcessIdentifier], 9);
     140
     141    while ([pool _hasPrewarmedWebProcess])
     142        TestWebKitAPI::Util::sleep(0.01);
     143}
Note: See TracChangeset for help on using the changeset viewer.