| Differences between
and this patch
- a/Source/WebKit/ChangeLog +27 lines
Lines 1-3 a/Source/WebKit/ChangeLog_sec1
1
2021-07-02  Sihui Liu  <sihui_liu@apple.com>
2
3
        WebIDBServer created after NetworkProcess::prepareToSuspend is not suspended correctly
4
        https://bugs.webkit.org/show_bug.cgi?id=227650
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        We created WebIDBServer on receiving AddIDBConnection message from web process, to make sure WebIDBServer's 
9
        thread is launched only when it is needed. Now WebIDBServer uses WorkQueue, which uses thread from thread pool,
10
        we can go back to ensure WebIDBServer at when connection to web process is needed. By doing this, it's less 
11
        likely WebIDBServer is created after NetworkProcess::prepareToSuspend. To make it more safe, this patch also 
12
        sets m_shouldSuspendIDBServer on NetworkProcess::prepareToSuspend. If the value is true, WebIDBServer is 
13
        suspended after creation.
14
15
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
16
        (WebKit::NetworkConnectionToWebProcess::addIDBConnection): Deleted.
17
        * NetworkProcess/NetworkConnectionToWebProcess.h:
18
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
19
        * NetworkProcess/NetworkProcess.cpp:
20
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
21
        (WebKit::NetworkProcess::prepareToSuspend):
22
        (WebKit::NetworkProcess::resume):
23
        (WebKit::NetworkProcess::createWebIDBServer):
24
        * NetworkProcess/NetworkProcess.h:
25
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
26
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
27
1
2021-07-02  Chris Dumez  <cdumez@apple.com>
28
2021-07-02  Chris Dumez  <cdumez@apple.com>
2
29
3
        Take a process assertion in the network process when holding locked files
30
        Take a process assertion in the network process when holding locked files
- a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp -5 lines
Lines 1240-1250 void NetworkConnectionToWebProcess::prioritizeResourceLoads(Vector<ResourceLoadI a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp_sec1
1240
    session->networkLoadScheduler().prioritizeLoads(loads);
1240
    session->networkLoadScheduler().prioritizeLoads(loads);
1241
}
1241
}
1242
1242
1243
void NetworkConnectionToWebProcess::addIDBConnection()
1244
{
1245
    m_networkProcess->webIDBServer(m_sessionID).addConnection(m_connection.get(), m_webProcessIdentifier);
1246
}
1247
1248
} // namespace WebKit
1243
} // namespace WebKit
1249
1244
1250
#undef CONNECTION_RELEASE_LOG
1245
#undef CONNECTION_RELEASE_LOG
- a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h -2 lines
Lines 186-193 public: a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h_sec1
186
186
187
    void broadcastConsoleMessage(JSC::MessageSource, JSC::MessageLevel, const String& message);
187
    void broadcastConsoleMessage(JSC::MessageSource, JSC::MessageLevel, const String& message);
188
188
189
    void addIDBConnection();
190
191
private:
189
private:
192
    NetworkConnectionToWebProcess(NetworkProcess&, WebCore::ProcessIdentifier, PAL::SessionID, IPC::Connection::Identifier);
190
    NetworkConnectionToWebProcess(NetworkProcess&, WebCore::ProcessIdentifier, PAL::SessionID, IPC::Connection::Identifier);
193
191
- a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in -2 lines
Lines 107-112 messages -> NetworkConnectionToWebProcess LegacyReceiver { a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in_sec1
107
#endif
107
#endif
108
    SetResourceLoadSchedulingMode(WebCore::PageIdentifier webPageID, enum:uint8_t WebCore::LoadSchedulingMode mode)
108
    SetResourceLoadSchedulingMode(WebCore::PageIdentifier webPageID, enum:uint8_t WebCore::LoadSchedulingMode mode)
109
    PrioritizeResourceLoads(Vector<uint64_t> loadIdentifiers)
109
    PrioritizeResourceLoads(Vector<uint64_t> loadIdentifiers)
110
111
    AddIDBConnection()
112
}
110
}
- a/Source/WebKit/NetworkProcess/NetworkProcess.cpp -1 / +8 lines
Lines 398-403 void NetworkProcess::createNetworkConnectionToWebProcess(ProcessIdentifier ident a/Source/WebKit/NetworkProcess/NetworkProcess.cpp_sec1
398
    connection.setOnLineState(NetworkStateNotifier::singleton().onLine());
398
    connection.setOnLineState(NetworkStateNotifier::singleton().onLine());
399
399
400
    m_storageManagerSet->addConnection(connection.connection());
400
    m_storageManagerSet->addConnection(connection.connection());
401
    webIDBServer(sessionID).addConnection(connection.connection(), identifier);
401
}
402
}
402
403
403
void NetworkProcess::clearCachedCredentials(PAL::SessionID sessionID)
404
void NetworkProcess::clearCachedCredentials(PAL::SessionID sessionID)
Lines 2217-2222 void NetworkProcess::prepareToSuspend(bool isSuspensionImminent, CompletionHandl a/Source/WebKit/NetworkProcess/NetworkProcess.cpp_sec2
2217
#if PLATFORM(IOS_FAMILY)
2218
#if PLATFORM(IOS_FAMILY)
2218
    for (auto& server : m_webIDBServers.values())
2219
    for (auto& server : m_webIDBServers.values())
2219
        server->suspend();
2220
        server->suspend();
2221
    m_shouldSuspendIDBServer = true;
2220
#endif
2222
#endif
2221
2223
2222
    lowMemoryHandler(Critical::Yes);
2224
    lowMemoryHandler(Critical::Yes);
Lines 2280-2285 void NetworkProcess::resume() a/Source/WebKit/NetworkProcess/NetworkProcess.cpp_sec3
2280
#if PLATFORM(IOS_FAMILY)
2282
#if PLATFORM(IOS_FAMILY)
2281
    for (auto& server : m_webIDBServers.values())
2283
    for (auto& server : m_webIDBServers.values())
2282
        server->resume();
2284
        server->resume();
2285
    m_shouldSuspendIDBServer = false;
2283
#endif
2286
#endif
2284
2287
2285
    m_storageManagerSet->resume();
2288
    m_storageManagerSet->resume();
Lines 2342-2348 Ref<WebIDBServer> NetworkProcess::createWebIDBServer(PAL::SessionID sessionID) a/Source/WebKit/NetworkProcess/NetworkProcess.cpp_sec4
2342
    auto spaceRequester = [protectedThis = makeRef(*this), sessionID](const auto& origin, uint64_t spaceRequested) {
2345
    auto spaceRequester = [protectedThis = makeRef(*this), sessionID](const auto& origin, uint64_t spaceRequested) {
2343
        return protectedThis->storageQuotaManager(sessionID, origin)->requestSpaceOnBackgroundThread(spaceRequested);
2346
        return protectedThis->storageQuotaManager(sessionID, origin)->requestSpaceOnBackgroundThread(spaceRequested);
2344
    };
2347
    };
2345
    return WebIDBServer::create(sessionID, path, WTFMove(spaceRequester));
2348
2349
    auto result = WebIDBServer::create(sessionID, path, WTFMove(spaceRequester));
2350
    if (m_shouldSuspendIDBServer)
2351
        result->suspend();
2352
    return result;
2346
}
2353
}
2347
2354
2348
WebIDBServer& NetworkProcess::webIDBServer(PAL::SessionID sessionID)
2355
WebIDBServer& NetworkProcess::webIDBServer(PAL::SessionID sessionID)
- a/Source/WebKit/NetworkProcess/NetworkProcess.h +1 lines
Lines 582-587 private: a/Source/WebKit/NetworkProcess/NetworkProcess.h_sec1
582
582
583
    HashMap<PAL::SessionID, String> m_idbDatabasePaths;
583
    HashMap<PAL::SessionID, String> m_idbDatabasePaths;
584
    HashMap<PAL::SessionID, RefPtr<WebIDBServer>> m_webIDBServers;
584
    HashMap<PAL::SessionID, RefPtr<WebIDBServer>> m_webIDBServers;
585
    bool m_shouldSuspendIDBServer { false };
585
    
586
    
586
#if ENABLE(SERVICE_WORKER)
587
#if ENABLE(SERVICE_WORKER)
587
    struct ServiceWorkerInfo {
588
    struct ServiceWorkerInfo {
- a/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp -1 lines
Lines 59-65 Ref<WebIDBConnectionToServer> WebIDBConnectionToServer::create() a/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp_sec1
59
WebIDBConnectionToServer::WebIDBConnectionToServer()
59
WebIDBConnectionToServer::WebIDBConnectionToServer()
60
    : m_connectionToServer(IDBClient::IDBConnectionToServer::create(*this))
60
    : m_connectionToServer(IDBClient::IDBConnectionToServer::create(*this))
61
{
61
{
62
    send(Messages::NetworkConnectionToWebProcess::AddIDBConnection());
63
}
62
}
64
63
65
WebIDBConnectionToServer::~WebIDBConnectionToServer()
64
WebIDBConnectionToServer::~WebIDBConnectionToServer()

Return to Bug 227650