Changeset 249640 in webkit


Ignore:
Timestamp:
Sep 9, 2019 2:08:39 AM (5 years ago)
Author:
youenn@apple.com
Message:

Use WebProcess processIdentifier to identify IDB connections between WebProcess and NetworkProcess
https://bugs.webkit.org/show_bug.cgi?id=201419

Reviewed by Alex Christensen.

We change from an identifier generated by NetworkProcess to WebProcess identifier.
A WebProcess identifier is unique globally and is stable even in case of NetworkProcess crash.
This removes the need for a sync IPC and makes things more easy to handle in case of NetworkProcess crash.

  • NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:

(WebKit::WebIDBConnectionToClient::create):
(WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
(WebKit::WebIDBConnectionToClient::getAllDatabaseNames):

  • NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
  • NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in:
  • NetworkProcess/NetworkConnectionToWebProcess.cpp:

(WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):

  • NetworkProcess/NetworkConnectionToWebProcess.h:
  • NetworkProcess/NetworkConnectionToWebProcess.messages.in:
  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:

(WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
(WebKit::WebIDBConnectionToServer::identifier const):
(WebKit::WebIDBConnectionToServer::coreConnectionToServer):
(WebKit::WebIDBConnectionToServer::getAllDatabaseNames):

  • WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
  • WebProcess/Network/NetworkProcessConnection.cpp:

(WebKit::NetworkProcessConnection::didReceiveMessage):
(WebKit::NetworkProcessConnection::didClose):
(WebKit::NetworkProcessConnection::idbConnectionToServerForSession):

  • WebProcess/Network/NetworkProcessConnection.h:

(WebKit::NetworkProcessConnection::existingIDBConnectionToServer const):

  • WebProcess/WebProcess.cpp:

(WebKit::WebProcess::networkProcessConnectionClosed):

Location:
trunk/Source
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h

    r241967 r249640  
    4747public:
    4848    WEBCORE_EXPORT static Ref<IDBConnectionToClient> create(IDBConnectionToClientDelegate&);
    49    
     49
     50    // FIXME: Use a typed identifier.
    5051    uint64_t identifier() const;
    5152
  • trunk/Source/WebKit/ChangeLog

    r249637 r249640  
     12019-09-09  Youenn Fablet  <youenn@apple.com>
     2
     3        Use WebProcess processIdentifier to identify IDB connections between WebProcess and NetworkProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=201419
     5
     6        Reviewed by Alex Christensen.
     7
     8        We change from an identifier generated by NetworkProcess to WebProcess identifier.
     9        A WebProcess identifier is unique globally and is stable even in case of NetworkProcess crash.
     10        This removes the need for a sync IPC and makes things more easy to handle in case of NetworkProcess crash.
     11
     12        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
     13        (WebKit::WebIDBConnectionToClient::create):
     14        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
     15        (WebKit::WebIDBConnectionToClient::getAllDatabaseNames):
     16        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
     17        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in:
     18        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
     19        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
     20        * NetworkProcess/NetworkConnectionToWebProcess.h:
     21        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
     22        * WebKit.xcodeproj/project.pbxproj:
     23        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
     24        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
     25        (WebKit::WebIDBConnectionToServer::identifier const):
     26        (WebKit::WebIDBConnectionToServer::coreConnectionToServer):
     27        (WebKit::WebIDBConnectionToServer::getAllDatabaseNames):
     28        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
     29        * WebProcess/Network/NetworkProcessConnection.cpp:
     30        (WebKit::NetworkProcessConnection::didReceiveMessage):
     31        (WebKit::NetworkProcessConnection::didClose):
     32        (WebKit::NetworkProcessConnection::idbConnectionToServerForSession):
     33        * WebProcess/Network/NetworkProcessConnection.h:
     34        (WebKit::NetworkProcessConnection::existingIDBConnectionToServer const):
     35        * WebProcess/WebProcess.cpp:
     36        (WebKit::WebProcess::networkProcessConnectionClosed):
     37
    1382019-09-09  Youenn Fablet  <youenn@apple.com>
    239
  • trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp

    r242281 r249640  
    4545using namespace WebCore;
    4646
    47 Ref<WebIDBConnectionToClient> WebIDBConnectionToClient::create(NetworkProcess& networkProcess, IPC::Connection& connection, uint64_t serverConnectionIdentifier, PAL::SessionID sessionID)
     47Ref<WebIDBConnectionToClient> WebIDBConnectionToClient::create(NetworkProcess& networkProcess, IPC::Connection& connection, ProcessIdentifier serverConnectionIdentifier, PAL::SessionID sessionID)
    4848{
    4949    return adoptRef(*new WebIDBConnectionToClient(networkProcess, connection, serverConnectionIdentifier, sessionID));
    5050}
    5151
    52 WebIDBConnectionToClient::WebIDBConnectionToClient(NetworkProcess& networkProcess, IPC::Connection& connection, uint64_t serverConnectionIdentifier, PAL::SessionID sessionID)
     52WebIDBConnectionToClient::WebIDBConnectionToClient(NetworkProcess& networkProcess, IPC::Connection& connection, ProcessIdentifier serverConnectionIdentifier, PAL::SessionID sessionID)
    5353    : m_connection(connection)
    5454    , m_networkProcess(networkProcess)
     
    346346}
    347347
    348 void WebIDBConnectionToClient::getAllDatabaseNames(uint64_t serverConnectionIdentifier, const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID)
    349 {
    350     m_networkProcess->idbServer(m_sessionID).getAllDatabaseNames(serverConnectionIdentifier, topOrigin, openingOrigin, callbackID);
     348void WebIDBConnectionToClient::getAllDatabaseNames(const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID)
     349{
     350    m_networkProcess->idbServer(m_sessionID).getAllDatabaseNames(identifier(), topOrigin, openingOrigin, callbackID);
    351351}
    352352
  • trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.h

    r242281 r249640  
    3232#include <WebCore/IDBConnectionToClient.h>
    3333#include <WebCore/IndexedDB.h>
     34#include <WebCore/ProcessIdentifier.h>
    3435#include <pal/SessionID.h>
    3536
     
    5657class WebIDBConnectionToClient final : public WebCore::IDBServer::IDBConnectionToClientDelegate, public IPC::MessageSender, public RefCounted<WebIDBConnectionToClient> {
    5758public:
    58     static Ref<WebIDBConnectionToClient> create(NetworkProcess&, IPC::Connection&, uint64_t serverConnectionIdentifier, PAL::SessionID);
     59    static Ref<WebIDBConnectionToClient> create(NetworkProcess&, IPC::Connection&, WebCore::ProcessIdentifier, PAL::SessionID);
    5960
    6061    virtual ~WebIDBConnectionToClient();
    6162
    6263    WebCore::IDBServer::IDBConnectionToClient& connectionToClient();
    63     uint64_t identifier() const final { return m_identifier; }
    64     uint64_t messageSenderDestinationID() const final { return m_identifier; }
    65 
    66     // IDBConnectionToClientDelegate
    67     void didDeleteDatabase(const WebCore::IDBResultData&) final;
    68     void didOpenDatabase(const WebCore::IDBResultData&) final;
    69     void didAbortTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final;
    70     void didCommitTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final;
    71     void didCreateObjectStore(const WebCore::IDBResultData&) final;
    72     void didDeleteObjectStore(const WebCore::IDBResultData&) final;
    73     void didRenameObjectStore(const WebCore::IDBResultData&) final;
    74     void didClearObjectStore(const WebCore::IDBResultData&) final;
    75     void didCreateIndex(const WebCore::IDBResultData&) final;
    76     void didDeleteIndex(const WebCore::IDBResultData&) final;
    77     void didRenameIndex(const WebCore::IDBResultData&) final;
    78     void didPutOrAdd(const WebCore::IDBResultData&) final;
    79     void didGetRecord(const WebCore::IDBResultData&) final;
    80     void didGetAllRecords(const WebCore::IDBResultData&) final;
    81     void didGetCount(const WebCore::IDBResultData&) final;
    82     void didDeleteRecord(const WebCore::IDBResultData&) final;
    83     void didOpenCursor(const WebCore::IDBResultData&) final;
    84     void didIterateCursor(const WebCore::IDBResultData&) final;
    85 
    86     void fireVersionChangeEvent(WebCore::IDBServer::UniqueIDBDatabaseConnection&, const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion) final;
    87     void didStartTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final;
    88     void didCloseFromServer(WebCore::IDBServer::UniqueIDBDatabaseConnection&, const WebCore::IDBError&) final;
    89     void notifyOpenDBRequestBlocked(const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion) final;
    90 
    91     void didGetAllDatabaseNames(uint64_t callbackID, const Vector<String>& databaseNames) final;
     64    uint64_t identifier() const final { return m_identifier.toUInt64(); }
    9265
    9366    void ref() override { RefCounted<WebIDBConnectionToClient>::ref(); }
    9467    void deref() override { RefCounted<WebIDBConnectionToClient>::deref(); }
     68
     69    void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
     70    void disconnectedFromWebProcess();
     71
     72private:
     73    WebIDBConnectionToClient(NetworkProcess&, IPC::Connection&, WebCore::ProcessIdentifier, PAL::SessionID);
     74
     75    IPC::Connection* messageSenderConnection() const final;
     76    uint64_t messageSenderDestinationID() const final { return m_sessionID.toUInt64(); }
    9577
    9678    // Messages received from WebProcess
     
    123105    void confirmDidCloseFromServer(uint64_t databaseConnectionIdentifier);
    124106
    125     void getAllDatabaseNames(uint64_t serverConnectionIdentifier, const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID);
     107    void getAllDatabaseNames(const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID);
    126108
    127     void disconnectedFromWebProcess();
     109    // IDBConnectionToClientDelegate
     110    void didDeleteDatabase(const WebCore::IDBResultData&) final;
     111    void didOpenDatabase(const WebCore::IDBResultData&) final;
     112    void didAbortTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final;
     113    void didCommitTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final;
     114    void didCreateObjectStore(const WebCore::IDBResultData&) final;
     115    void didDeleteObjectStore(const WebCore::IDBResultData&) final;
     116    void didRenameObjectStore(const WebCore::IDBResultData&) final;
     117    void didClearObjectStore(const WebCore::IDBResultData&) final;
     118    void didCreateIndex(const WebCore::IDBResultData&) final;
     119    void didDeleteIndex(const WebCore::IDBResultData&) final;
     120    void didRenameIndex(const WebCore::IDBResultData&) final;
     121    void didPutOrAdd(const WebCore::IDBResultData&) final;
     122    void didGetRecord(const WebCore::IDBResultData&) final;
     123    void didGetAllRecords(const WebCore::IDBResultData&) final;
     124    void didGetCount(const WebCore::IDBResultData&) final;
     125    void didDeleteRecord(const WebCore::IDBResultData&) final;
     126    void didOpenCursor(const WebCore::IDBResultData&) final;
     127    void didIterateCursor(const WebCore::IDBResultData&) final;
    128128
    129     void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
     129    void fireVersionChangeEvent(WebCore::IDBServer::UniqueIDBDatabaseConnection&, const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion) final;
     130    void didStartTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final;
     131    void didCloseFromServer(WebCore::IDBServer::UniqueIDBDatabaseConnection&, const WebCore::IDBError&) final;
     132    void notifyOpenDBRequestBlocked(const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion) final;
    130133
    131 private:
    132     WebIDBConnectionToClient(NetworkProcess&, IPC::Connection&, uint64_t serverConnectionIdentifier, PAL::SessionID);
    133 
    134     IPC::Connection* messageSenderConnection() const final;
     134    void didGetAllDatabaseNames(uint64_t callbackID, const Vector<String>& databaseNames) final;
    135135
    136136    template<class MessageType> void handleGetResult(const WebCore::IDBResultData&);
     
    139139    Ref<NetworkProcess> m_networkProcess;
    140140
    141     uint64_t m_identifier;
     141    WebCore::ProcessIdentifier m_identifier;
    142142    PAL::SessionID m_sessionID;
    143143    RefPtr<WebCore::IDBServer::IDBConnectionToClient> m_connectionToClient;
  • trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in

    r242281 r249640  
    5252    ConfirmDidCloseFromServer(uint64_t databaseConnectionIdentifier);
    5353
    54     GetAllDatabaseNames(uint64_t serverConnectionIdentifier, struct WebCore::SecurityOriginData topOrigin, struct WebCore::SecurityOriginData openingOrigin, uint64_t callbackID);
     54    GetAllDatabaseNames(struct WebCore::SecurityOriginData topOrigin, struct WebCore::SecurityOriginData openingOrigin, uint64_t callbackID);
    5555}
    5656#endif // ENABLE(INDEXED_DATABASE)
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp

    r249637 r249640  
    850850
    851851#if ENABLE(INDEXED_DATABASE)
    852 static uint64_t generateIDBConnectionToServerIdentifier()
    853 {
    854     ASSERT(RunLoop::isMain());
    855     static uint64_t identifier = 0;
    856     return ++identifier;
    857 }
    858 
    859 void NetworkConnectionToWebProcess::establishIDBConnectionToServer(PAL::SessionID sessionID, CompletionHandler<void(uint64_t)>&& completionHandler)
    860 {
    861     uint64_t serverConnectionIdentifier = generateIDBConnectionToServerIdentifier();
    862     LOG(IndexedDB, "NetworkConnectionToWebProcess::establishIDBConnectionToServer - %" PRIu64, serverConnectionIdentifier);
    863     ASSERT(!m_webIDBConnections.contains(serverConnectionIdentifier));
     852void NetworkConnectionToWebProcess::establishIDBConnectionToServer(PAL::SessionID sessionID)
     853{
     854    LOG(IndexedDB, "NetworkConnectionToWebProcess::establishIDBConnectionToServer - %" PRIu64, sessionID.toUInt64());
     855    ASSERT(!m_webIDBConnections.contains(sessionID.toUInt64()));
    864856   
    865     m_webIDBConnections.set(serverConnectionIdentifier, WebIDBConnectionToClient::create(m_networkProcess, m_connection.get(), serverConnectionIdentifier, sessionID));
    866     completionHandler(serverConnectionIdentifier);
     857    m_webIDBConnections.add(sessionID.toUInt64(), WebIDBConnectionToClient::create(m_networkProcess, m_connection.get(), m_webProcessIdentifier, sessionID));
    867858}
    868859#endif
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h

    r249603 r249640  
    205205#if ENABLE(INDEXED_DATABASE)
    206206    // Messages handlers (Modern IDB).
    207     void establishIDBConnectionToServer(PAL::SessionID, CompletionHandler<void(uint64_t  serverConnectionIdentifier)>&&);
     207    void establishIDBConnectionToServer(PAL::SessionID);
    208208#endif
    209209
     
    316316
    317317#if ENABLE(INDEXED_DATABASE)
    318     HashMap<uint64_t, RefPtr<WebIDBConnectionToClient>> m_webIDBConnections;
     318    HashMap<uint64_t, Ref<WebIDBConnectionToClient>> m_webIDBConnections;
    319319#endif
    320320
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in

    r249501 r249640  
    7878
    7979#if ENABLE(INDEXED_DATABASE)
    80     EstablishIDBConnectionToServer(PAL::SessionID sessionID) -> (uint64_t serverConnectionIdentifier) Synchronous
     80    EstablishIDBConnectionToServer(PAL::SessionID sessionID)
    8181#endif
    8282
  • trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp

    r242281 r249640  
    4949#include <WebCore/IDBTransactionInfo.h>
    5050#include <WebCore/IDBValue.h>
     51#include <WebCore/ProcessIdentifier.h>
    5152
    5253namespace WebKit {
     
    6061WebIDBConnectionToServer::WebIDBConnectionToServer(PAL::SessionID sessionID)
    6162    : m_sessionID(sessionID)
    62 {
    63     relaxAdoptionRequirement();
    64 
    65     m_isOpenInServer = sendSync(Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer(sessionID), Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer::Reply(m_identifier));
    66 
    67     m_connectionToServer = IDBClient::IDBConnectionToServer::create(*this);
     63    , m_connectionToServer(IDBClient::IDBConnectionToServer::create(*this))
     64{
     65    send(Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer(sessionID), 0);
    6866}
    6967
     
    7270}
    7371
     72uint64_t WebIDBConnectionToServer::identifier() const
     73{
     74    return Process::identifier().toUInt64();
     75}
     76
    7477IPC::Connection* WebIDBConnectionToServer::messageSenderConnection() const
    7578{
     
    7982IDBClient::IDBConnectionToServer& WebIDBConnectionToServer::coreConnectionToServer()
    8083{
    81     return *m_connectionToServer;
     84    return m_connectionToServer;
    8285}
    8386
     
    214217void WebIDBConnectionToServer::getAllDatabaseNames(const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID)
    215218{
    216     send(Messages::WebIDBConnectionToClient::GetAllDatabaseNames(m_identifier, topOrigin, openingOrigin, callbackID));
     219    send(Messages::WebIDBConnectionToClient::GetAllDatabaseNames(topOrigin, openingOrigin, callbackID));
    217220}
    218221
  • trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h

    r240955 r249640  
    3131#include "SandboxExtension.h"
    3232#include <WebCore/IDBConnectionToServer.h>
     33#include <WebCore/ProcessIdentifier.h>
    3334#include <pal/SessionID.h>
    3435
     
    4041public:
    4142    static Ref<WebIDBConnectionToServer> create(PAL::SessionID);
    42 
    4343    virtual ~WebIDBConnectionToServer();
    4444
    4545    WebCore::IDBClient::IDBConnectionToServer& coreConnectionToServer();
    46     uint64_t identifier() const final { return m_identifier; }
    47     uint64_t messageSenderDestinationID() const final { return m_identifier; }
     46    uint64_t identifier() const final;
     47
     48    void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
     49    void connectionToServerLost();
     50
     51    void ref() final { RefCounted<WebIDBConnectionToServer>::ref(); }
     52    void deref() final { RefCounted<WebIDBConnectionToServer>::deref(); }
     53
     54private:
     55    explicit WebIDBConnectionToServer(PAL::SessionID);
     56
     57    IPC::Connection* messageSenderConnection() const final;
     58    uint64_t messageSenderDestinationID() const final { return m_sessionID.toUInt64(); }
    4859
    4960    // IDBConnectionToServerDelegate
     
    7788    void getAllDatabaseNames(const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID) final;
    7889
    79     void ref() override { RefCounted<WebIDBConnectionToServer>::ref(); }
    80     void deref() override { RefCounted<WebIDBConnectionToServer>::deref(); }
    81 
    8290    // Messages received from Network Process
    8391    void didDeleteDatabase(const WebCore::IDBResultData&);
     
    105113    void didGetAllDatabaseNames(uint64_t callbackID, const Vector<String>& databaseNames);
    106114
    107     void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
    108 
    109     void connectionToServerLost();
    110 
    111 private:
    112     WebIDBConnectionToServer(PAL::SessionID);
    113 
    114     IPC::Connection* messageSenderConnection() const final;
    115 
    116     uint64_t m_identifier { 0 };
    117     bool m_isOpenInServer { false };
    118     RefPtr<WebCore::IDBClient::IDBConnectionToServer> m_connectionToServer;
    119115    PAL::SessionID m_sessionID;
     116    Ref<WebCore::IDBClient::IDBConnectionToServer> m_connectionToServer;
    120117};
    121118
  • trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp

    r249479 r249640  
    130130#if ENABLE(INDEXED_DATABASE)
    131131    if (decoder.messageReceiverName() == Messages::WebIDBConnectionToServer::messageReceiverName()) {
    132         if (auto idbConnection = m_webIDBConnectionsByIdentifier.get(decoder.destinationID()))
     132        if (auto* idbConnection = m_webIDBConnectionsBySession.get(decoder.destinationID()))
    133133            idbConnection->didReceiveMessage(connection, decoder);
    134134        return;
     
    195195
    196196#if ENABLE(INDEXED_DATABASE)
    197     for (auto& connection : m_webIDBConnectionsByIdentifier.values())
     197    auto idbConnections = std::exchange(m_webIDBConnectionsBySession, { });
     198    for (auto& connection : idbConnections.values())
    198199        connection->connectionToServerLost();
    199    
    200     m_webIDBConnectionsByIdentifier.clear();
    201     m_webIDBConnectionsBySession.clear();
    202 #endif
    203 
    204 #if ENABLE(SERVICE_WORKER)
    205     auto connections = std::exchange(m_swConnectionsByIdentifier, { });
    206     for (auto& connection : connections.values())
     200#endif
     201
     202#if ENABLE(SERVICE_WORKER)
     203    auto swConnections = std::exchange(m_swConnectionsByIdentifier, { });
     204    for (auto& connection : swConnections.values())
    207205        connection->connectionToServerLost();
    208206#endif
     
    253251WebIDBConnectionToServer& NetworkProcessConnection::idbConnectionToServerForSession(PAL::SessionID sessionID)
    254252{
    255     return *m_webIDBConnectionsBySession.ensure(sessionID, [&] {
    256         auto connection = WebIDBConnectionToServer::create(sessionID);
    257        
    258         auto result = m_webIDBConnectionsByIdentifier.add(connection->identifier(), connection.copyRef());
    259         ASSERT_UNUSED(result, result.isNewEntry);
    260        
    261         return connection;
     253    return *m_webIDBConnectionsBySession.ensure(sessionID.toUInt64(), [&] {
     254        return WebIDBConnectionToServer::create(sessionID);
    262255    }).iterator->value;
    263256}
  • trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.h

    r249479 r249640  
    7272
    7373#if ENABLE(INDEXED_DATABASE)
    74     WebIDBConnectionToServer* existingIDBConnectionToServerForIdentifier(uint64_t identifier) const { return m_webIDBConnectionsByIdentifier.get(identifier); };
     74    WebIDBConnectionToServer* existingIDBConnectionToServer(PAL::SessionID sessionID) const { return m_webIDBConnectionsBySession.get(sessionID.toUInt64()); };
    7575    WebIDBConnectionToServer& idbConnectionToServerForSession(PAL::SessionID);
    7676#endif
     
    109109
    110110#if ENABLE(INDEXED_DATABASE)
    111     HashMap<PAL::SessionID, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsBySession;
    112     HashMap<uint64_t, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsByIdentifier;
     111    HashMap<uint64_t, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsBySession;
    113112#endif
    114113
  • trunk/Source/WebKit/WebProcess/WebProcess.cpp

    r249608 r249640  
    12431243            continue;
    12441244       
    1245         if (connection->existingIDBConnectionToServerForIdentifier(idbConnection->identifier())) {
    1246             ASSERT(idbConnection == &connection->existingIDBConnectionToServerForIdentifier(idbConnection->identifier())->coreConnectionToServer());
     1245        if (connection->existingIDBConnectionToServer(page->corePage()->sessionID())) {
     1246            ASSERT(idbConnection == &connection->existingIDBConnectionToServer(page->corePage()->sessionID())->coreConnectionToServer());
    12471247            page->corePage()->clearIDBConnection();
    12481248        }
Note: See TracChangeset for help on using the changeset viewer.