Title: [196779] trunk/Source
Revision
196779
Author
[email protected]
Date
2016-02-18 14:42:54 -0800 (Thu, 18 Feb 2016)

Log Message

Modern IDB: Implement server->client operations in WK2.
https://bugs.webkit.org/show_bug.cgi?id=154411

Reviewed by Alex Christensen.

No change in behavior yet; Just laying the groundwork.
Source/WebCore:

* Modules/indexeddb/client/IDBConnectionToServer.h:
* Modules/indexeddb/server/IDBServer.h:
* Modules/indexeddb/shared/IDBTransactionInfo.h:
(WebCore::IDBTransactionInfo::encode):
(WebCore::IDBTransactionInfo::decode):

Source/WebKit2:

* DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
(WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
(WebKit::WebIDBConnectionToClient::~WebIDBConnectionToClient):

* WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
(WebKit::WebIDBConnectionToServer::didDeleteDatabase):
(WebKit::WebIDBConnectionToServer::didOpenDatabase):
(WebKit::WebIDBConnectionToServer::didAbortTransaction):
(WebKit::WebIDBConnectionToServer::didCommitTransaction):
(WebKit::WebIDBConnectionToServer::didCreateObjectStore):
(WebKit::WebIDBConnectionToServer::didDeleteObjectStore):
(WebKit::WebIDBConnectionToServer::didClearObjectStore):
(WebKit::WebIDBConnectionToServer::didCreateIndex):
(WebKit::WebIDBConnectionToServer::didDeleteIndex):
(WebKit::WebIDBConnectionToServer::didPutOrAdd):
(WebKit::WebIDBConnectionToServer::didGetRecord):
(WebKit::WebIDBConnectionToServer::didGetCount):
(WebKit::WebIDBConnectionToServer::didDeleteRecord):
(WebKit::WebIDBConnectionToServer::didOpenCursor):
(WebKit::WebIDBConnectionToServer::didIterateCursor):
(WebKit::WebIDBConnectionToServer::fireVersionChangeEvent):
(WebKit::WebIDBConnectionToServer::didStartTransaction):
(WebKit::WebIDBConnectionToServer::notifyOpenDBRequestBlocked):
* WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

* WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
(WebKit::WebToDatabaseProcessConnection::didReceiveMessage):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (196778 => 196779)


--- trunk/Source/WebCore/ChangeLog	2016-02-18 22:31:49 UTC (rev 196778)
+++ trunk/Source/WebCore/ChangeLog	2016-02-18 22:42:54 UTC (rev 196779)
@@ -1,3 +1,18 @@
+2016-02-18  Brady Eidson  <[email protected]>
+
+        Modern IDB: Implement server->client operations in WK2.
+        https://bugs.webkit.org/show_bug.cgi?id=154411
+
+        Reviewed by Alex Christensen.
+
+        No change in behavior yet; Just laying the groundwork.
+    
+        * Modules/indexeddb/client/IDBConnectionToServer.h:
+        * Modules/indexeddb/server/IDBServer.h:
+        * Modules/indexeddb/shared/IDBTransactionInfo.h:
+        (WebCore::IDBTransactionInfo::encode):
+        (WebCore::IDBTransactionInfo::decode):
+
 2016-02-18  Csaba Osztrogonác  <[email protected]>
 
         Fix unused-const-variable warning on non Cocoa platforms

Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h (196778 => 196779)


--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h	2016-02-18 22:31:49 UTC (rev 196778)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h	2016-02-18 22:42:54 UTC (rev 196779)
@@ -57,57 +57,57 @@
     uint64_t identifier() const;
 
     void deleteDatabase(IDBOpenDBRequest&);
-    void didDeleteDatabase(const IDBResultData&);
+    WEBCORE_EXPORT void didDeleteDatabase(const IDBResultData&);
 
     void openDatabase(IDBOpenDBRequest&);
-    void didOpenDatabase(const IDBResultData&);
+    WEBCORE_EXPORT void didOpenDatabase(const IDBResultData&);
 
     void createObjectStore(TransactionOperation&, const IDBObjectStoreInfo&);
-    void didCreateObjectStore(const IDBResultData&);
+    WEBCORE_EXPORT void didCreateObjectStore(const IDBResultData&);
 
     void deleteObjectStore(TransactionOperation&, const String& objectStoreName);
-    void didDeleteObjectStore(const IDBResultData&);
+    WEBCORE_EXPORT void didDeleteObjectStore(const IDBResultData&);
 
     void clearObjectStore(TransactionOperation&, uint64_t objectStoreIdentifier);
-    void didClearObjectStore(const IDBResultData&);
+    WEBCORE_EXPORT void didClearObjectStore(const IDBResultData&);
 
     void createIndex(TransactionOperation&, const IDBIndexInfo&);
-    void didCreateIndex(const IDBResultData&);
+    WEBCORE_EXPORT void didCreateIndex(const IDBResultData&);
 
     void deleteIndex(TransactionOperation&, uint64_t objectStoreIdentifier, const String& indexName);
-    void didDeleteIndex(const IDBResultData&);
+    WEBCORE_EXPORT void didDeleteIndex(const IDBResultData&);
 
     void putOrAdd(TransactionOperation&, RefPtr<IDBKey>&, RefPtr<SerializedScriptValue>&, const IndexedDB::ObjectStoreOverwriteMode);
-    void didPutOrAdd(const IDBResultData&);
+    WEBCORE_EXPORT void didPutOrAdd(const IDBResultData&);
 
     void getRecord(TransactionOperation&, const IDBKeyRangeData&);
-    void didGetRecord(const IDBResultData&);
+    WEBCORE_EXPORT void didGetRecord(const IDBResultData&);
 
     void getCount(TransactionOperation&, const IDBKeyRangeData&);
-    void didGetCount(const IDBResultData&);
+    WEBCORE_EXPORT void didGetCount(const IDBResultData&);
 
     void deleteRecord(TransactionOperation&, const IDBKeyRangeData&);
-    void didDeleteRecord(const IDBResultData&);
+    WEBCORE_EXPORT void didDeleteRecord(const IDBResultData&);
 
     void openCursor(TransactionOperation&, const IDBCursorInfo&);
-    void didOpenCursor(const IDBResultData&);
+    WEBCORE_EXPORT void didOpenCursor(const IDBResultData&);
 
     void iterateCursor(TransactionOperation&, const IDBKeyData&, unsigned long count);
-    void didIterateCursor(const IDBResultData&);
+    WEBCORE_EXPORT void didIterateCursor(const IDBResultData&);
 
     void commitTransaction(IDBTransaction&);
-    void didCommitTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&);
+    WEBCORE_EXPORT void didCommitTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&);
 
     void didFinishHandlingVersionChangeTransaction(IDBTransaction&);
 
     void abortTransaction(IDBTransaction&);
-    void didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&);
+    WEBCORE_EXPORT void didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&);
 
-    void fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion);
+    WEBCORE_EXPORT void fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion);
     void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier);
 
-    void didStartTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&);
-    void notifyOpenDBRequestBlocked(const IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion);
+    WEBCORE_EXPORT void didStartTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&);
+    WEBCORE_EXPORT void notifyOpenDBRequestBlocked(const IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion);
 
     void establishTransaction(IDBTransaction&);
 

Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h (196778 => 196779)


--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h	2016-02-18 22:31:49 UTC (rev 196778)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h	2016-02-18 22:42:54 UTC (rev 196779)
@@ -53,8 +53,8 @@
     static Ref<IDBServer> create();
     WEBCORE_EXPORT static Ref<IDBServer> create(const String& databaseDirectoryPath);
 
-    void registerConnection(IDBConnectionToClient&);
-    void unregisterConnection(IDBConnectionToClient&);
+    WEBCORE_EXPORT void registerConnection(IDBConnectionToClient&);
+    WEBCORE_EXPORT void unregisterConnection(IDBConnectionToClient&);
 
     // Operations requested by the client.
     WEBCORE_EXPORT void openDatabase(const IDBRequestData&);

Modified: trunk/Source/WebCore/Modules/indexeddb/shared/IDBTransactionInfo.h (196778 => 196779)


--- trunk/Source/WebCore/Modules/indexeddb/shared/IDBTransactionInfo.h	2016-02-18 22:31:49 UTC (rev 196778)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/IDBTransactionInfo.h	2016-02-18 22:42:54 UTC (rev 196779)
@@ -85,6 +85,10 @@
 {
     encoder << m_identifier << m_newVersion << m_objectStores;
     encoder.encodeEnum(m_mode);
+
+    encoder << !!m_originalDatabaseInfo;
+    if (m_originalDatabaseInfo)
+        encoder << *m_originalDatabaseInfo;
 }
 
 template<class Decoder>
@@ -102,6 +106,17 @@
     if (!decoder.decodeEnum(info.m_mode))
         return false;
 
+    bool hasObject;
+    if (!decoder.decode(hasObject))
+        return false;
+
+    if (hasObject) {
+        std::unique_ptr<IDBDatabaseInfo> object = std::make_unique<IDBDatabaseInfo>();
+        if (!decoder.decode(*object))
+            return false;
+        info.m_originalDatabaseInfo = WTFMove(object);
+    }
+
     return true;
 }
 

Modified: trunk/Source/WebKit2/ChangeLog (196778 => 196779)


--- trunk/Source/WebKit2/ChangeLog	2016-02-18 22:31:49 UTC (rev 196778)
+++ trunk/Source/WebKit2/ChangeLog	2016-02-18 22:42:54 UTC (rev 196779)
@@ -1,3 +1,40 @@
+2016-02-18  Brady Eidson  <[email protected]>
+
+        Modern IDB: Implement server->client operations in WK2.
+        https://bugs.webkit.org/show_bug.cgi?id=154411
+
+        Reviewed by Alex Christensen.
+
+        No change in behavior yet; Just laying the groundwork.
+
+        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
+        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
+        (WebKit::WebIDBConnectionToClient::~WebIDBConnectionToClient):
+
+        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
+        (WebKit::WebIDBConnectionToServer::didDeleteDatabase):
+        (WebKit::WebIDBConnectionToServer::didOpenDatabase):
+        (WebKit::WebIDBConnectionToServer::didAbortTransaction):
+        (WebKit::WebIDBConnectionToServer::didCommitTransaction):
+        (WebKit::WebIDBConnectionToServer::didCreateObjectStore):
+        (WebKit::WebIDBConnectionToServer::didDeleteObjectStore):
+        (WebKit::WebIDBConnectionToServer::didClearObjectStore):
+        (WebKit::WebIDBConnectionToServer::didCreateIndex):
+        (WebKit::WebIDBConnectionToServer::didDeleteIndex):
+        (WebKit::WebIDBConnectionToServer::didPutOrAdd):
+        (WebKit::WebIDBConnectionToServer::didGetRecord):
+        (WebKit::WebIDBConnectionToServer::didGetCount):
+        (WebKit::WebIDBConnectionToServer::didDeleteRecord):
+        (WebKit::WebIDBConnectionToServer::didOpenCursor):
+        (WebKit::WebIDBConnectionToServer::didIterateCursor):
+        (WebKit::WebIDBConnectionToServer::fireVersionChangeEvent):
+        (WebKit::WebIDBConnectionToServer::didStartTransaction):
+        (WebKit::WebIDBConnectionToServer::notifyOpenDBRequestBlocked):
+        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
+        
+        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
+        (WebKit::WebToDatabaseProcessConnection::didReceiveMessage):
+
 2016-02-18  Brian Burg  <[email protected]>
 
         RemoteInspector deadlocks if _WKAutomationDelegate creates/registers a target synchronously

Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp (196778 => 196779)


--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp	2016-02-18 22:31:49 UTC (rev 196778)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp	2016-02-18 22:42:54 UTC (rev 196779)
@@ -48,13 +48,16 @@
 
 WebIDBConnectionToClient::WebIDBConnectionToClient(DatabaseToWebProcessConnection& connection, uint64_t serverConnectionIdentifier)
     : m_connection(connection)
+    , m_identifier(serverConnectionIdentifier)
 {
     relaxAdoptionRequirement();
     m_connectionToClient = IDBServer::IDBConnectionToClient::create(*this);
+    DatabaseProcess::singleton().idbServer().registerConnection(*m_connectionToClient);
 }
 
 WebIDBConnectionToClient::~WebIDBConnectionToClient()
 {
+    DatabaseProcess::singleton().idbServer().unregisterConnection(*m_connectionToClient);
 }
 
 void WebIDBConnectionToClient::disconnectedFromWebProcess()

Modified: trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp (196778 => 196779)


--- trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp	2016-02-18 22:31:49 UTC (rev 196778)
+++ trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp	2016-02-18 22:42:54 UTC (rev 196779)
@@ -189,76 +189,94 @@
     send(Messages::WebIDBConnectionToClient::DidFireVersionChangeEvent(databaseConnectionIdentifier, requestIdentifier));
 }
 
-void WebIDBConnectionToServer::didDeleteDatabase(const IDBResultData&)
+void WebIDBConnectionToServer::didDeleteDatabase(const IDBResultData& result)
 {
+    m_connectionToServer->didDeleteDatabase(result);
 }
 
-void WebIDBConnectionToServer::didOpenDatabase(const IDBResultData&)
+void WebIDBConnectionToServer::didOpenDatabase(const IDBResultData& result)
 {
+    m_connectionToServer->didOpenDatabase(result);
 }
 
-void WebIDBConnectionToServer::didAbortTransaction(const IDBResourceIdentifier&, const IDBError&)
+void WebIDBConnectionToServer::didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError& error)
 {
+    m_connectionToServer->didAbortTransaction(transactionIdentifier, error);
 }
 
-void WebIDBConnectionToServer::didCommitTransaction(const IDBResourceIdentifier&, const IDBError&)
+void WebIDBConnectionToServer::didCommitTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError& error)
 {
+    m_connectionToServer->didCommitTransaction(transactionIdentifier, error);
 }
 
-void WebIDBConnectionToServer::didCreateObjectStore(const IDBResultData&)
+void WebIDBConnectionToServer::didCreateObjectStore(const IDBResultData& result)
 {
+    m_connectionToServer->didCreateObjectStore(result);
 }
 
-void WebIDBConnectionToServer::didDeleteObjectStore(const IDBResultData&)
+void WebIDBConnectionToServer::didDeleteObjectStore(const IDBResultData& result)
 {
+    m_connectionToServer->didDeleteObjectStore(result);
 }
 
-void WebIDBConnectionToServer::didClearObjectStore(const IDBResultData&)
+void WebIDBConnectionToServer::didClearObjectStore(const IDBResultData& result)
 {
+    m_connectionToServer->didClearObjectStore(result);
 }
 
-void WebIDBConnectionToServer::didCreateIndex(const IDBResultData&)
+void WebIDBConnectionToServer::didCreateIndex(const IDBResultData& result)
 {
+    m_connectionToServer->didCreateIndex(result);
 }
 
-void WebIDBConnectionToServer::didDeleteIndex(const IDBResultData&)
+void WebIDBConnectionToServer::didDeleteIndex(const IDBResultData& result)
 {
+    m_connectionToServer->didDeleteIndex(result);
 }
 
-void WebIDBConnectionToServer::didPutOrAdd(const IDBResultData&)
+void WebIDBConnectionToServer::didPutOrAdd(const IDBResultData& result)
 {
+    m_connectionToServer->didPutOrAdd(result);
 }
 
-void WebIDBConnectionToServer::didGetRecord(const IDBResultData&)
+void WebIDBConnectionToServer::didGetRecord(const IDBResultData& result)
 {
+    m_connectionToServer->didGetRecord(result);
 }
 
-void WebIDBConnectionToServer::didGetCount(const IDBResultData&)
+void WebIDBConnectionToServer::didGetCount(const IDBResultData& result)
 {
+    m_connectionToServer->didGetCount(result);
 }
 
-void WebIDBConnectionToServer::didDeleteRecord(const IDBResultData&)
+void WebIDBConnectionToServer::didDeleteRecord(const IDBResultData& result)
 {
+    m_connectionToServer->didDeleteRecord(result);
 }
 
-void WebIDBConnectionToServer::didOpenCursor(const IDBResultData&)
+void WebIDBConnectionToServer::didOpenCursor(const IDBResultData& result)
 {
+    m_connectionToServer->didOpenCursor(result);
 }
 
-void WebIDBConnectionToServer::didIterateCursor(const IDBResultData&)
+void WebIDBConnectionToServer::didIterateCursor(const IDBResultData& result)
 {
+    m_connectionToServer->didIterateCursor(result);
 }
 
-void WebIDBConnectionToServer::fireVersionChangeEvent(uint64_t, const WebCore::IDBResourceIdentifier&, uint64_t)
+void WebIDBConnectionToServer::fireVersionChangeEvent(uint64_t uniqueDatabaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion)
 {
+    m_connectionToServer->fireVersionChangeEvent(uniqueDatabaseConnectionIdentifier, requestIdentifier, requestedVersion);
 }
 
-void WebIDBConnectionToServer::didStartTransaction(const WebCore::IDBResourceIdentifier&, const WebCore::IDBError&)
+void WebIDBConnectionToServer::didStartTransaction(const IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError& error)
 {
+    m_connectionToServer->didStartTransaction(transactionIdentifier, error);
 }
 
-void WebIDBConnectionToServer::notifyOpenDBRequestBlocked(const WebCore::IDBResourceIdentifier&, uint64_t, uint64_t)
+void WebIDBConnectionToServer::notifyOpenDBRequestBlocked(const IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion)
 {
+    m_connectionToServer->notifyOpenDBRequestBlocked(requestIdentifier, oldVersion, newVersion);
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h (196778 => 196779)


--- trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h	2016-02-18 22:31:49 UTC (rev 196778)
+++ trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h	2016-02-18 22:42:54 UTC (rev 196779)
@@ -88,11 +88,12 @@
     void didStartTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&);
     void notifyOpenDBRequestBlocked(const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion);
 
+    void didReceiveMessage(IPC::Connection&, IPC::MessageDecoder&);
+
 private:
     WebIDBConnectionToServer();
 
     virtual IPC::Connection* messageSenderConnection() override final;
-    void didReceiveMessage(IPC::Connection&, IPC::MessageDecoder&);
 
     uint64_t m_identifier;
     bool m_isOpenInServer { false };

Modified: trunk/Source/WebKit2/WebProcess/Databases/WebToDatabaseProcessConnection.cpp (196778 => 196779)


--- trunk/Source/WebKit2/WebProcess/Databases/WebToDatabaseProcessConnection.cpp	2016-02-18 22:31:49 UTC (rev 196778)
+++ trunk/Source/WebKit2/WebProcess/Databases/WebToDatabaseProcessConnection.cpp	2016-02-18 22:42:54 UTC (rev 196779)
@@ -28,6 +28,7 @@
 #include "WebToDatabaseProcessConnection.h"
 
 #include "DatabaseToWebProcessConnectionMessages.h"
+#include "WebIDBConnectionToServerMessages.h"
 #include "WebIDBServerConnection.h"
 #include "WebIDBServerConnectionMessages.h"
 #include "WebProcess.h"
@@ -52,6 +53,13 @@
 void WebToDatabaseProcessConnection::didReceiveMessage(IPC::Connection& connection, IPC::MessageDecoder& decoder)
 {
 #if ENABLE(INDEXED_DATABASE)
+    if (decoder.messageReceiverName() == Messages::WebIDBConnectionToServer::messageReceiverName()) {
+        auto iterator = m_webIDBConnections.find(decoder.destinationID());
+        if (iterator != m_webIDBConnections.end())
+            iterator->value->didReceiveMessage(connection, decoder);
+        return;
+    }
+
     if (decoder.messageReceiverName() == Messages::WebIDBServerConnection::messageReceiverName()) {
         HashMap<uint64_t, WebIDBServerConnection*>::iterator connectionIterator = m_webIDBServerConnections.find(decoder.destinationID());
         if (connectionIterator != m_webIDBServerConnections.end())
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to