Title: [249640] trunk/Source
Revision
249640
Author
[email protected]
Date
2019-09-09 02:08:39 -0700 (Mon, 09 Sep 2019)

Log 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):

Modified Paths

Diff

Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h (249639 => 249640)


--- trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h	2019-09-09 09:08:39 UTC (rev 249640)
@@ -46,7 +46,8 @@
 class IDBConnectionToClient : public RefCounted<IDBConnectionToClient> {
 public:
     WEBCORE_EXPORT static Ref<IDBConnectionToClient> create(IDBConnectionToClientDelegate&);
-    
+
+    // FIXME: Use a typed identifier.
     uint64_t identifier() const;
 
     void didDeleteDatabase(const IDBResultData&);

Modified: trunk/Source/WebKit/ChangeLog (249639 => 249640)


--- trunk/Source/WebKit/ChangeLog	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebKit/ChangeLog	2019-09-09 09:08:39 UTC (rev 249640)
@@ -1,5 +1,42 @@
 2019-09-09  Youenn Fablet  <[email protected]>
 
+        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):
+
+2019-09-09  Youenn Fablet  <[email protected]>
+
         Move checkProcessLocalPortForActivity from provider to registry
         https://bugs.webkit.org/show_bug.cgi?id=201400
 

Modified: trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp (249639 => 249640)


--- trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp	2019-09-09 09:08:39 UTC (rev 249640)
@@ -44,12 +44,12 @@
 namespace WebKit {
 using namespace WebCore;
 
-Ref<WebIDBConnectionToClient> WebIDBConnectionToClient::create(NetworkProcess& networkProcess, IPC::Connection& connection, uint64_t serverConnectionIdentifier, PAL::SessionID sessionID)
+Ref<WebIDBConnectionToClient> WebIDBConnectionToClient::create(NetworkProcess& networkProcess, IPC::Connection& connection, ProcessIdentifier serverConnectionIdentifier, PAL::SessionID sessionID)
 {
     return adoptRef(*new WebIDBConnectionToClient(networkProcess, connection, serverConnectionIdentifier, sessionID));
 }
 
-WebIDBConnectionToClient::WebIDBConnectionToClient(NetworkProcess& networkProcess, IPC::Connection& connection, uint64_t serverConnectionIdentifier, PAL::SessionID sessionID)
+WebIDBConnectionToClient::WebIDBConnectionToClient(NetworkProcess& networkProcess, IPC::Connection& connection, ProcessIdentifier serverConnectionIdentifier, PAL::SessionID sessionID)
     : m_connection(connection)
     , m_networkProcess(networkProcess)
     , m_identifier(serverConnectionIdentifier)
@@ -345,9 +345,9 @@
     m_networkProcess->idbServer(m_sessionID).confirmDidCloseFromServer(databaseConnectionIdentifier);
 }
 
-void WebIDBConnectionToClient::getAllDatabaseNames(uint64_t serverConnectionIdentifier, const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID)
+void WebIDBConnectionToClient::getAllDatabaseNames(const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID)
 {
-    m_networkProcess->idbServer(m_sessionID).getAllDatabaseNames(serverConnectionIdentifier, topOrigin, openingOrigin, callbackID);
+    m_networkProcess->idbServer(m_sessionID).getAllDatabaseNames(identifier(), topOrigin, openingOrigin, callbackID);
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.h (249639 => 249640)


--- trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.h	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.h	2019-09-09 09:08:39 UTC (rev 249640)
@@ -31,6 +31,7 @@
 #include "NetworkConnectionToWebProcess.h"
 #include <WebCore/IDBConnectionToClient.h>
 #include <WebCore/IndexedDB.h>
+#include <WebCore/ProcessIdentifier.h>
 #include <pal/SessionID.h>
 
 namespace WebCore {
@@ -55,43 +56,24 @@
 
 class WebIDBConnectionToClient final : public WebCore::IDBServer::IDBConnectionToClientDelegate, public IPC::MessageSender, public RefCounted<WebIDBConnectionToClient> {
 public:
-    static Ref<WebIDBConnectionToClient> create(NetworkProcess&, IPC::Connection&, uint64_t serverConnectionIdentifier, PAL::SessionID);
+    static Ref<WebIDBConnectionToClient> create(NetworkProcess&, IPC::Connection&, WebCore::ProcessIdentifier, PAL::SessionID);
 
     virtual ~WebIDBConnectionToClient();
 
     WebCore::IDBServer::IDBConnectionToClient& connectionToClient();
-    uint64_t identifier() const final { return m_identifier; }
-    uint64_t messageSenderDestinationID() const final { return m_identifier; }
+    uint64_t identifier() const final { return m_identifier.toUInt64(); }
 
-    // IDBConnectionToClientDelegate
-    void didDeleteDatabase(const WebCore::IDBResultData&) final;
-    void didOpenDatabase(const WebCore::IDBResultData&) final;
-    void didAbortTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final;
-    void didCommitTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final;
-    void didCreateObjectStore(const WebCore::IDBResultData&) final;
-    void didDeleteObjectStore(const WebCore::IDBResultData&) final;
-    void didRenameObjectStore(const WebCore::IDBResultData&) final;
-    void didClearObjectStore(const WebCore::IDBResultData&) final;
-    void didCreateIndex(const WebCore::IDBResultData&) final;
-    void didDeleteIndex(const WebCore::IDBResultData&) final;
-    void didRenameIndex(const WebCore::IDBResultData&) final;
-    void didPutOrAdd(const WebCore::IDBResultData&) final;
-    void didGetRecord(const WebCore::IDBResultData&) final;
-    void didGetAllRecords(const WebCore::IDBResultData&) final;
-    void didGetCount(const WebCore::IDBResultData&) final;
-    void didDeleteRecord(const WebCore::IDBResultData&) final;
-    void didOpenCursor(const WebCore::IDBResultData&) final;
-    void didIterateCursor(const WebCore::IDBResultData&) final;
+    void ref() override { RefCounted<WebIDBConnectionToClient>::ref(); }
+    void deref() override { RefCounted<WebIDBConnectionToClient>::deref(); }
 
-    void fireVersionChangeEvent(WebCore::IDBServer::UniqueIDBDatabaseConnection&, const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion) final;
-    void didStartTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final;
-    void didCloseFromServer(WebCore::IDBServer::UniqueIDBDatabaseConnection&, const WebCore::IDBError&) final;
-    void notifyOpenDBRequestBlocked(const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion) final;
+    void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
+    void disconnectedFromWebProcess();
 
-    void didGetAllDatabaseNames(uint64_t callbackID, const Vector<String>& databaseNames) final;
+private:
+    WebIDBConnectionToClient(NetworkProcess&, IPC::Connection&, WebCore::ProcessIdentifier, PAL::SessionID);
 
-    void ref() override { RefCounted<WebIDBConnectionToClient>::ref(); }
-    void deref() override { RefCounted<WebIDBConnectionToClient>::deref(); }
+    IPC::Connection* messageSenderConnection() const final;
+    uint64_t messageSenderDestinationID() const final { return m_sessionID.toUInt64(); }
 
     // Messages received from WebProcess
     void deleteDatabase(const WebCore::IDBRequestData&);
@@ -122,23 +104,41 @@
     void openDBRequestCancelled(const WebCore::IDBRequestData&);
     void confirmDidCloseFromServer(uint64_t databaseConnectionIdentifier);
 
-    void getAllDatabaseNames(uint64_t serverConnectionIdentifier, const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID);
+    void getAllDatabaseNames(const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID);
 
-    void disconnectedFromWebProcess();
+    // IDBConnectionToClientDelegate
+    void didDeleteDatabase(const WebCore::IDBResultData&) final;
+    void didOpenDatabase(const WebCore::IDBResultData&) final;
+    void didAbortTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final;
+    void didCommitTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final;
+    void didCreateObjectStore(const WebCore::IDBResultData&) final;
+    void didDeleteObjectStore(const WebCore::IDBResultData&) final;
+    void didRenameObjectStore(const WebCore::IDBResultData&) final;
+    void didClearObjectStore(const WebCore::IDBResultData&) final;
+    void didCreateIndex(const WebCore::IDBResultData&) final;
+    void didDeleteIndex(const WebCore::IDBResultData&) final;
+    void didRenameIndex(const WebCore::IDBResultData&) final;
+    void didPutOrAdd(const WebCore::IDBResultData&) final;
+    void didGetRecord(const WebCore::IDBResultData&) final;
+    void didGetAllRecords(const WebCore::IDBResultData&) final;
+    void didGetCount(const WebCore::IDBResultData&) final;
+    void didDeleteRecord(const WebCore::IDBResultData&) final;
+    void didOpenCursor(const WebCore::IDBResultData&) final;
+    void didIterateCursor(const WebCore::IDBResultData&) final;
 
-    void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
+    void fireVersionChangeEvent(WebCore::IDBServer::UniqueIDBDatabaseConnection&, const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion) final;
+    void didStartTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final;
+    void didCloseFromServer(WebCore::IDBServer::UniqueIDBDatabaseConnection&, const WebCore::IDBError&) final;
+    void notifyOpenDBRequestBlocked(const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion) final;
 
-private:
-    WebIDBConnectionToClient(NetworkProcess&, IPC::Connection&, uint64_t serverConnectionIdentifier, PAL::SessionID);
+    void didGetAllDatabaseNames(uint64_t callbackID, const Vector<String>& databaseNames) final;
 
-    IPC::Connection* messageSenderConnection() const final;
-
     template<class MessageType> void handleGetResult(const WebCore::IDBResultData&);
 
     Ref<IPC::Connection> m_connection;
     Ref<NetworkProcess> m_networkProcess;
 
-    uint64_t m_identifier;
+    WebCore::ProcessIdentifier m_identifier;
     PAL::SessionID m_sessionID;
     RefPtr<WebCore::IDBServer::IDBConnectionToClient> m_connectionToClient;
 };

Modified: trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in (249639 => 249640)


--- trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in	2019-09-09 09:08:39 UTC (rev 249640)
@@ -51,6 +51,6 @@
     OpenDBRequestCancelled(WebCore::IDBRequestData requestData);
     ConfirmDidCloseFromServer(uint64_t databaseConnectionIdentifier);
 
-    GetAllDatabaseNames(uint64_t serverConnectionIdentifier, struct WebCore::SecurityOriginData topOrigin, struct WebCore::SecurityOriginData openingOrigin, uint64_t callbackID);
+    GetAllDatabaseNames(struct WebCore::SecurityOriginData topOrigin, struct WebCore::SecurityOriginData openingOrigin, uint64_t callbackID);
 }
 #endif // ENABLE(INDEXED_DATABASE)

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (249639 => 249640)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2019-09-09 09:08:39 UTC (rev 249640)
@@ -849,21 +849,12 @@
 }
 
 #if ENABLE(INDEXED_DATABASE)
-static uint64_t generateIDBConnectionToServerIdentifier()
+void NetworkConnectionToWebProcess::establishIDBConnectionToServer(PAL::SessionID sessionID)
 {
-    ASSERT(RunLoop::isMain());
-    static uint64_t identifier = 0;
-    return ++identifier;
-}
-
-void NetworkConnectionToWebProcess::establishIDBConnectionToServer(PAL::SessionID sessionID, CompletionHandler<void(uint64_t)>&& completionHandler)
-{
-    uint64_t serverConnectionIdentifier = generateIDBConnectionToServerIdentifier();
-    LOG(IndexedDB, "NetworkConnectionToWebProcess::establishIDBConnectionToServer - %" PRIu64, serverConnectionIdentifier);
-    ASSERT(!m_webIDBConnections.contains(serverConnectionIdentifier));
+    LOG(IndexedDB, "NetworkConnectionToWebProcess::establishIDBConnectionToServer - %" PRIu64, sessionID.toUInt64());
+    ASSERT(!m_webIDBConnections.contains(sessionID.toUInt64()));
     
-    m_webIDBConnections.set(serverConnectionIdentifier, WebIDBConnectionToClient::create(m_networkProcess, m_connection.get(), serverConnectionIdentifier, sessionID));
-    completionHandler(serverConnectionIdentifier);
+    m_webIDBConnections.add(sessionID.toUInt64(), WebIDBConnectionToClient::create(m_networkProcess, m_connection.get(), m_webProcessIdentifier, sessionID));
 }
 #endif
     

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (249639 => 249640)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h	2019-09-09 09:08:39 UTC (rev 249640)
@@ -204,7 +204,7 @@
 
 #if ENABLE(INDEXED_DATABASE)
     // Messages handlers (Modern IDB).
-    void establishIDBConnectionToServer(PAL::SessionID, CompletionHandler<void(uint64_t  serverConnectionIdentifier)>&&);
+    void establishIDBConnectionToServer(PAL::SessionID);
 #endif
 
 #if ENABLE(SERVICE_WORKER)
@@ -315,7 +315,7 @@
     RefPtr<CacheStorageEngineConnection> m_cacheStorageConnection;
 
 #if ENABLE(INDEXED_DATABASE)
-    HashMap<uint64_t, RefPtr<WebIDBConnectionToClient>> m_webIDBConnections;
+    HashMap<uint64_t, Ref<WebIDBConnectionToClient>> m_webIDBConnections;
 #endif
 
 #if ENABLE(SERVICE_WORKER)

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (249639 => 249640)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in	2019-09-09 09:08:39 UTC (rev 249640)
@@ -77,7 +77,7 @@
     TakeNetworkLoadInformationMetrics(uint64_t resourceLoadIdentifier) -> (WebCore::NetworkLoadMetrics networkMetrics) Synchronous
 
 #if ENABLE(INDEXED_DATABASE)
-    EstablishIDBConnectionToServer(PAL::SessionID sessionID) -> (uint64_t serverConnectionIdentifier) Synchronous
+    EstablishIDBConnectionToServer(PAL::SessionID sessionID)
 #endif
 
 #if ENABLE(SERVICE_WORKER)

Modified: trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp (249639 => 249640)


--- trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp	2019-09-09 09:08:39 UTC (rev 249640)
@@ -48,6 +48,7 @@
 #include <WebCore/IDBResultData.h>
 #include <WebCore/IDBTransactionInfo.h>
 #include <WebCore/IDBValue.h>
+#include <WebCore/ProcessIdentifier.h>
 
 namespace WebKit {
 using namespace WebCore;
@@ -59,12 +60,9 @@
 
 WebIDBConnectionToServer::WebIDBConnectionToServer(PAL::SessionID sessionID)
     : m_sessionID(sessionID)
+    , m_connectionToServer(IDBClient::IDBConnectionToServer::create(*this))
 {
-    relaxAdoptionRequirement();
-
-    m_isOpenInServer = sendSync(Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer(sessionID), Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer::Reply(m_identifier));
-
-    m_connectionToServer = IDBClient::IDBConnectionToServer::create(*this);
+    send(Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer(sessionID), 0);
 }
 
 WebIDBConnectionToServer::~WebIDBConnectionToServer()
@@ -71,6 +69,11 @@
 {
 }
 
+uint64_t WebIDBConnectionToServer::identifier() const
+{
+    return Process::identifier().toUInt64();
+}
+
 IPC::Connection* WebIDBConnectionToServer::messageSenderConnection() const
 {
     return &WebProcess::singleton().ensureNetworkProcessConnection().connection();
@@ -78,7 +81,7 @@
 
 IDBClient::IDBConnectionToServer& WebIDBConnectionToServer::coreConnectionToServer()
 {
-    return *m_connectionToServer;
+    return m_connectionToServer;
 }
 
 void WebIDBConnectionToServer::deleteDatabase(const IDBRequestData& requestData)
@@ -213,7 +216,7 @@
 
 void WebIDBConnectionToServer::getAllDatabaseNames(const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID)
 {
-    send(Messages::WebIDBConnectionToClient::GetAllDatabaseNames(m_identifier, topOrigin, openingOrigin, callbackID));
+    send(Messages::WebIDBConnectionToClient::GetAllDatabaseNames(topOrigin, openingOrigin, callbackID));
 }
 
 void WebIDBConnectionToServer::didDeleteDatabase(const IDBResultData& result)

Modified: trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h (249639 => 249640)


--- trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h	2019-09-09 09:08:39 UTC (rev 249640)
@@ -30,6 +30,7 @@
 #include "MessageSender.h"
 #include "SandboxExtension.h"
 #include <WebCore/IDBConnectionToServer.h>
+#include <WebCore/ProcessIdentifier.h>
 #include <pal/SessionID.h>
 
 namespace WebKit {
@@ -39,13 +40,23 @@
 class WebIDBConnectionToServer final : private WebCore::IDBClient::IDBConnectionToServerDelegate, private IPC::MessageSender, public RefCounted<WebIDBConnectionToServer> {
 public:
     static Ref<WebIDBConnectionToServer> create(PAL::SessionID);
-
     virtual ~WebIDBConnectionToServer();
 
     WebCore::IDBClient::IDBConnectionToServer& coreConnectionToServer();
-    uint64_t identifier() const final { return m_identifier; }
-    uint64_t messageSenderDestinationID() const final { return m_identifier; }
+    uint64_t identifier() const final;
 
+    void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
+    void connectionToServerLost();
+
+    void ref() final { RefCounted<WebIDBConnectionToServer>::ref(); }
+    void deref() final { RefCounted<WebIDBConnectionToServer>::deref(); }
+
+private:
+    explicit WebIDBConnectionToServer(PAL::SessionID);
+
+    IPC::Connection* messageSenderConnection() const final;
+    uint64_t messageSenderDestinationID() const final { return m_sessionID.toUInt64(); }
+
     // IDBConnectionToServerDelegate
     void deleteDatabase(const WebCore::IDBRequestData&) final;
     void openDatabase(const WebCore::IDBRequestData&) final;
@@ -76,9 +87,6 @@
 
     void getAllDatabaseNames(const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID) final;
 
-    void ref() override { RefCounted<WebIDBConnectionToServer>::ref(); }
-    void deref() override { RefCounted<WebIDBConnectionToServer>::deref(); }
-
     // Messages received from Network Process
     void didDeleteDatabase(const WebCore::IDBResultData&);
     void didOpenDatabase(const WebCore::IDBResultData&);
@@ -104,19 +112,8 @@
     void notifyOpenDBRequestBlocked(const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion);
     void didGetAllDatabaseNames(uint64_t callbackID, const Vector<String>& databaseNames);
 
-    void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
-
-    void connectionToServerLost();
-
-private:
-    WebIDBConnectionToServer(PAL::SessionID);
-
-    IPC::Connection* messageSenderConnection() const final;
-
-    uint64_t m_identifier { 0 };
-    bool m_isOpenInServer { false };
-    RefPtr<WebCore::IDBClient::IDBConnectionToServer> m_connectionToServer;
     PAL::SessionID m_sessionID;
+    Ref<WebCore::IDBClient::IDBConnectionToServer> m_connectionToServer;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp (249639 => 249640)


--- trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp	2019-09-09 09:08:39 UTC (rev 249640)
@@ -129,7 +129,7 @@
 
 #if ENABLE(INDEXED_DATABASE)
     if (decoder.messageReceiverName() == Messages::WebIDBConnectionToServer::messageReceiverName()) {
-        if (auto idbConnection = m_webIDBConnectionsByIdentifier.get(decoder.destinationID()))
+        if (auto* idbConnection = m_webIDBConnectionsBySession.get(decoder.destinationID()))
             idbConnection->didReceiveMessage(connection, decoder);
         return;
     }
@@ -194,16 +194,14 @@
     WebProcess::singleton().networkProcessConnectionClosed(this);
 
 #if ENABLE(INDEXED_DATABASE)
-    for (auto& connection : m_webIDBConnectionsByIdentifier.values())
+    auto idbConnections = std::exchange(m_webIDBConnectionsBySession, { });
+    for (auto& connection : idbConnections.values())
         connection->connectionToServerLost();
-    
-    m_webIDBConnectionsByIdentifier.clear();
-    m_webIDBConnectionsBySession.clear();
 #endif
 
 #if ENABLE(SERVICE_WORKER)
-    auto connections = std::exchange(m_swConnectionsByIdentifier, { });
-    for (auto& connection : connections.values())
+    auto swConnections = std::exchange(m_swConnectionsByIdentifier, { });
+    for (auto& connection : swConnections.values())
         connection->connectionToServerLost();
 #endif
 }
@@ -252,13 +250,8 @@
 #if ENABLE(INDEXED_DATABASE)
 WebIDBConnectionToServer& NetworkProcessConnection::idbConnectionToServerForSession(PAL::SessionID sessionID)
 {
-    return *m_webIDBConnectionsBySession.ensure(sessionID, [&] {
-        auto connection = WebIDBConnectionToServer::create(sessionID);
-        
-        auto result = m_webIDBConnectionsByIdentifier.add(connection->identifier(), connection.copyRef());
-        ASSERT_UNUSED(result, result.isNewEntry);
-        
-        return connection;
+    return *m_webIDBConnectionsBySession.ensure(sessionID.toUInt64(), [&] {
+        return WebIDBConnectionToServer::create(sessionID);
     }).iterator->value;
 }
 #endif

Modified: trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.h (249639 => 249640)


--- trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.h	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.h	2019-09-09 09:08:39 UTC (rev 249640)
@@ -71,7 +71,7 @@
     void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&);
 
 #if ENABLE(INDEXED_DATABASE)
-    WebIDBConnectionToServer* existingIDBConnectionToServerForIdentifier(uint64_t identifier) const { return m_webIDBConnectionsByIdentifier.get(identifier); };
+    WebIDBConnectionToServer* existingIDBConnectionToServer(PAL::SessionID sessionID) const { return m_webIDBConnectionsBySession.get(sessionID.toUInt64()); };
     WebIDBConnectionToServer& idbConnectionToServerForSession(PAL::SessionID);
 #endif
 
@@ -108,8 +108,7 @@
     Ref<IPC::Connection> m_connection;
 
 #if ENABLE(INDEXED_DATABASE)
-    HashMap<PAL::SessionID, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsBySession;
-    HashMap<uint64_t, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsByIdentifier;
+    HashMap<uint64_t, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsBySession;
 #endif
 
 #if ENABLE(SERVICE_WORKER)

Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (249639 => 249640)


--- trunk/Source/WebKit/WebProcess/WebProcess.cpp	2019-09-09 08:51:08 UTC (rev 249639)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp	2019-09-09 09:08:39 UTC (rev 249640)
@@ -1242,8 +1242,8 @@
         if (!idbConnection)
             continue;
         
-        if (connection->existingIDBConnectionToServerForIdentifier(idbConnection->identifier())) {
-            ASSERT(idbConnection == &connection->existingIDBConnectionToServerForIdentifier(idbConnection->identifier())->coreConnectionToServer());
+        if (connection->existingIDBConnectionToServer(page->corePage()->sessionID())) {
+            ASSERT(idbConnection == &connection->existingIDBConnectionToServer(page->corePage()->sessionID())->coreConnectionToServer());
             page->corePage()->clearIDBConnection();
         }
     }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to