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();
}
}