Changeset 196771 in webkit
- Timestamp:
- Feb 18, 2016 12:23:51 PM (8 years ago)
- Location:
- trunk/Source
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r196770 r196771 1 2016-02-18 Brady Eidson <beidson@apple.com> 2 3 Modern IDB: Implement client->server operations in WK2. 4 https://bugs.webkit.org/show_bug.cgi?id=154400 5 6 Reviewed by Alex Christensen. 7 8 No change in behavior yet; Just laying the groundwork. 9 10 * Modules/indexeddb/server/IDBServer.h: 11 * Modules/indexeddb/server/UniqueIDBDatabase.h: 12 * Modules/indexeddb/shared/IDBIndexInfo.h: 13 * Modules/indexeddb/shared/IDBObjectStoreInfo.h: 14 1 15 2016-02-18 Chris Dumez <cdumez@apple.com> 2 16 -
trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h
r195090 r196771 52 52 public: 53 53 static Ref<IDBServer> create(); 54 static Ref<IDBServer> create(const String& databaseDirectoryPath);54 WEBCORE_EXPORT static Ref<IDBServer> create(const String& databaseDirectoryPath); 55 55 56 56 void registerConnection(IDBConnectionToClient&); … … 58 58 59 59 // Operations requested by the client. 60 void openDatabase(const IDBRequestData&);61 void deleteDatabase(const IDBRequestData&);62 void abortTransaction(const IDBResourceIdentifier&);63 void commitTransaction(const IDBResourceIdentifier&);64 void didFinishHandlingVersionChangeTransaction(const IDBResourceIdentifier&);65 void createObjectStore(const IDBRequestData&, const IDBObjectStoreInfo&);66 void deleteObjectStore(const IDBRequestData&, const String& objectStoreName);67 void clearObjectStore(const IDBRequestData&, uint64_t objectStoreIdentifier);68 void createIndex(const IDBRequestData&, const IDBIndexInfo&);69 void deleteIndex(const IDBRequestData&, uint64_t objectStoreIdentifier, const String& indexName);70 void putOrAdd(const IDBRequestData&, const IDBKeyData&, const ThreadSafeDataBuffer& valueData, IndexedDB::ObjectStoreOverwriteMode);71 void getRecord(const IDBRequestData&, const IDBKeyRangeData&);72 void getCount(const IDBRequestData&, const IDBKeyRangeData&);73 void deleteRecord(const IDBRequestData&, const IDBKeyRangeData&);74 void openCursor(const IDBRequestData&, const IDBCursorInfo&);75 void iterateCursor(const IDBRequestData&, const IDBKeyData&, unsigned long count);60 WEBCORE_EXPORT void openDatabase(const IDBRequestData&); 61 WEBCORE_EXPORT void deleteDatabase(const IDBRequestData&); 62 WEBCORE_EXPORT void abortTransaction(const IDBResourceIdentifier&); 63 WEBCORE_EXPORT void commitTransaction(const IDBResourceIdentifier&); 64 WEBCORE_EXPORT void didFinishHandlingVersionChangeTransaction(const IDBResourceIdentifier&); 65 WEBCORE_EXPORT void createObjectStore(const IDBRequestData&, const IDBObjectStoreInfo&); 66 WEBCORE_EXPORT void deleteObjectStore(const IDBRequestData&, const String& objectStoreName); 67 WEBCORE_EXPORT void clearObjectStore(const IDBRequestData&, uint64_t objectStoreIdentifier); 68 WEBCORE_EXPORT void createIndex(const IDBRequestData&, const IDBIndexInfo&); 69 WEBCORE_EXPORT void deleteIndex(const IDBRequestData&, uint64_t objectStoreIdentifier, const String& indexName); 70 WEBCORE_EXPORT void putOrAdd(const IDBRequestData&, const IDBKeyData&, const ThreadSafeDataBuffer& valueData, IndexedDB::ObjectStoreOverwriteMode); 71 WEBCORE_EXPORT void getRecord(const IDBRequestData&, const IDBKeyRangeData&); 72 WEBCORE_EXPORT void getCount(const IDBRequestData&, const IDBKeyRangeData&); 73 WEBCORE_EXPORT void deleteRecord(const IDBRequestData&, const IDBKeyRangeData&); 74 WEBCORE_EXPORT void openCursor(const IDBRequestData&, const IDBCursorInfo&); 75 WEBCORE_EXPORT void iterateCursor(const IDBRequestData&, const IDBKeyData&, unsigned long count); 76 76 77 void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&);78 void databaseConnectionClosed(uint64_t databaseConnectionIdentifier);79 void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier);80 void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier);77 WEBCORE_EXPORT void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&); 78 WEBCORE_EXPORT void databaseConnectionClosed(uint64_t databaseConnectionIdentifier); 79 WEBCORE_EXPORT void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier); 80 WEBCORE_EXPORT void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier); 81 81 82 82 void postDatabaseTask(std::unique_ptr<CrossThreadTask>&&); -
trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h
r195527 r196771 73 73 } 74 74 75 ~UniqueIDBDatabase();75 WEBCORE_EXPORT ~UniqueIDBDatabase(); 76 76 77 77 void openDatabaseConnection(IDBConnectionToClient&, const IDBRequestData&); -
trunk/Source/WebCore/Modules/indexeddb/shared/IDBIndexInfo.h
r196715 r196771 36 36 class IDBIndexInfo { 37 37 public: 38 IDBIndexInfo();38 WEBCORE_EXPORT IDBIndexInfo(); 39 39 IDBIndexInfo(uint64_t identifier, uint64_t objectStoreIdentifier, const String& name, const IDBKeyPath&, bool unique, bool multiEntry); 40 40 -
trunk/Source/WebCore/Modules/indexeddb/shared/IDBObjectStoreInfo.h
r196715 r196771 40 40 class IDBObjectStoreInfo { 41 41 public: 42 IDBObjectStoreInfo();42 WEBCORE_EXPORT IDBObjectStoreInfo(); 43 43 IDBObjectStoreInfo(uint64_t identifier, const String& name, const IDBKeyPath&, bool autoIncrement); 44 44 -
trunk/Source/WebKit2/ChangeLog
r196767 r196771 1 2016-02-18 Brady Eidson <beidson@apple.com> 2 3 Modern IDB: Implement client->server operations in WK2. 4 https://bugs.webkit.org/show_bug.cgi?id=154400 5 6 Reviewed by Alex Christensen. 7 8 No change in behavior yet; Just laying the groundwork. 9 10 * DatabaseProcess/DatabaseProcess.cpp: 11 (WebKit::DatabaseProcess::idbServer): 12 * DatabaseProcess/DatabaseProcess.h: 13 14 * DatabaseProcess/DatabaseToWebProcessConnection.cpp: 15 (WebKit::DatabaseToWebProcessConnection::didReceiveMessage): 16 * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h: 17 18 * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp: 19 (WebKit::WebIDBConnectionToClient::deleteDatabase): 20 (WebKit::WebIDBConnectionToClient::openDatabase): 21 (WebKit::WebIDBConnectionToClient::abortTransaction): 22 (WebKit::WebIDBConnectionToClient::commitTransaction): 23 (WebKit::WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction): 24 (WebKit::WebIDBConnectionToClient::createObjectStore): 25 (WebKit::WebIDBConnectionToClient::deleteObjectStore): 26 (WebKit::WebIDBConnectionToClient::clearObjectStore): 27 (WebKit::WebIDBConnectionToClient::createIndex): 28 (WebKit::WebIDBConnectionToClient::deleteIndex): 29 (WebKit::WebIDBConnectionToClient::putOrAdd): 30 (WebKit::WebIDBConnectionToClient::getRecord): 31 (WebKit::WebIDBConnectionToClient::getCount): 32 (WebKit::WebIDBConnectionToClient::deleteRecord): 33 (WebKit::WebIDBConnectionToClient::openCursor): 34 (WebKit::WebIDBConnectionToClient::iterateCursor): 35 (WebKit::WebIDBConnectionToClient::establishTransaction): 36 (WebKit::WebIDBConnectionToClient::databaseConnectionClosed): 37 (WebKit::WebIDBConnectionToClient::abortOpenAndUpgradeNeeded): 38 (WebKit::WebIDBConnectionToClient::didFireVersionChangeEvent): 39 * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h: 40 * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in: 41 1 42 2016-02-18 ChangSeok Oh <changseok.oh@collabora.com> 2 43 -
trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp
r196735 r196771 116 116 m_idbDatabases.remove(identifier); 117 117 } 118 119 IDBServer::IDBServer& DatabaseProcess::idbServer() 120 { 121 if (!m_idbServer) 122 m_idbServer = IDBServer::IDBServer::create(indexedDatabaseDirectory()); 123 124 return *m_idbServer; 125 } 118 126 #endif 119 127 -
trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h
r196735 r196771 30 30 31 31 #include "ChildProcess.h" 32 #include "LegacyUniqueIDBDatabase.h" 32 33 #include "LegacyUniqueIDBDatabaseIdentifier.h" 34 #include <WebCore/IDBServer.h> 35 #include <WebCore/UniqueIDBDatabase.h> 33 36 #include <wtf/NeverDestroyed.h> 34 37 … … 42 45 43 46 class DatabaseToWebProcessConnection; 44 class LegacyUniqueIDBDatabase;45 47 46 48 struct DatabaseProcessCreationParameters; … … 61 63 void ensureIndexedDatabaseRelativePathExists(const String&); 62 64 String absoluteIndexedDatabasePathFromDatabaseRelativePath(const String&); 65 66 WebCore::IDBServer::IDBServer& idbServer(); 63 67 #endif 64 68 … … 111 115 112 116 HashMap<LegacyUniqueIDBDatabaseIdentifier, RefPtr<LegacyUniqueIDBDatabase>> m_idbDatabases; 117 118 RefPtr<WebCore::IDBServer::IDBServer> m_idbServer; 113 119 #endif 114 120 -
trunk/Source/WebKit2/DatabaseProcess/DatabaseToWebProcessConnection.cpp
r196651 r196771 32 32 #include "Logging.h" 33 33 #include "WebIDBConnectionToClient.h" 34 #include "WebIDBConnectionToClientMessages.h" 34 35 #include <wtf/RunLoop.h> 35 36 … … 63 64 64 65 #if ENABLE(INDEXED_DATABASE) 66 if (decoder.messageReceiverName() == Messages::WebIDBConnectionToClient::messageReceiverName()) { 67 auto iterator = m_webIDBConnections.find(decoder.destinationID()); 68 if (iterator != m_webIDBConnections.end()) 69 iterator->value->didReceiveMessage(connection, decoder); 70 return; 71 } 72 65 73 if (decoder.messageReceiverName() == Messages::DatabaseProcessIDBConnection::messageReceiverName()) { 66 74 IDBConnectionMap::iterator backendIterator = m_idbConnections.find(decoder.destinationID()); -
trunk/Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp
r196735 r196771 33 33 #include "DatabaseToWebProcessConnection.h" 34 34 #include "IDBIdentifier.h" 35 #include "LegacyUniqueIDBDatabase.h" 35 36 #include "Logging.h" 36 #include "LegacyUniqueIDBDatabase.h"37 37 #include "WebCoreArgumentCoders.h" 38 38 #include "WebIDBServerConnectionMessages.h" -
trunk/Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h
r196735 r196771 32 32 33 33 #include "DatabaseProcessIDBConnectionMessages.h" 34 #include "LegacyUniqueIDBDatabase.h" 34 35 #include "LegacyUniqueIDBDatabaseIdentifier.h" 35 36 #include <WebCore/SecurityOriginData.h> … … 44 45 45 46 class DatabaseToWebProcessConnection; 46 class LegacyUniqueIDBDatabase;47 47 48 48 class DatabaseProcessIDBConnection : public RefCounted<DatabaseProcessIDBConnection>, public IPC::MessageSender { -
trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp
r196725 r196771 29 29 #if ENABLE(INDEXED_DATABASE) 30 30 31 #include "DataReference.h" 32 #include "DatabaseProcess.h" 31 33 #include "WebCoreArgumentCoders.h" 32 34 #include "WebIDBConnectionToServerMessages.h" 33 35 #include <WebCore/IDBError.h> 34 36 #include <WebCore/IDBResultData.h> 37 #include <WebCore/ThreadSafeDataBuffer.h> 35 38 #include <WebCore/UniqueIDBDatabaseConnection.h> 36 39 … … 159 162 } 160 163 161 void WebIDBConnectionToClient::deleteDatabase(const IDBRequestData&) 162 { 163 } 164 165 void WebIDBConnectionToClient::openDatabase(const IDBRequestData&) 166 { 167 } 168 169 void WebIDBConnectionToClient::abortTransaction(const IDBResourceIdentifier&) 170 { 171 } 172 173 void WebIDBConnectionToClient::commitTransaction(const IDBResourceIdentifier&) 174 { 175 } 176 177 void WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction(const IDBResourceIdentifier&) 178 { 179 } 180 181 void WebIDBConnectionToClient::createObjectStore(const IDBRequestData&, const IDBObjectStoreInfo&) 182 { 183 } 184 185 void WebIDBConnectionToClient::deleteObjectStore(const IDBRequestData&, const String&) 186 { 187 } 188 189 void WebIDBConnectionToClient::clearObjectStore(const IDBRequestData&, uint64_t) 190 { 191 } 192 193 void WebIDBConnectionToClient::createIndex(const IDBRequestData&, const IDBIndexInfo&) 194 { 195 } 196 197 void WebIDBConnectionToClient::deleteIndex(const IDBRequestData&, uint64_t, const String&) 198 { 199 } 200 201 void WebIDBConnectionToClient::putOrAdd(const IDBRequestData&, const IDBKeyData&, const IPC::DataReference&, bool) 202 { 203 } 204 205 void WebIDBConnectionToClient::getRecord(const IDBRequestData&, const IDBKeyRangeData&) 206 { 207 } 208 209 void WebIDBConnectionToClient::getCount(const IDBRequestData&, const IDBKeyRangeData&) 210 { 211 } 212 213 void WebIDBConnectionToClient::deleteRecord(const IDBRequestData&, const IDBKeyRangeData&) 214 { 215 } 216 217 void WebIDBConnectionToClient::openCursor(const IDBRequestData&, const IDBCursorInfo&) 218 { 219 } 220 221 void WebIDBConnectionToClient::iterateCursor(const IDBRequestData&, const IDBKeyData&, unsigned long) 222 { 223 } 224 225 void WebIDBConnectionToClient::establishTransaction(uint64_t, const IDBTransactionInfo&) 226 { 227 } 228 229 void WebIDBConnectionToClient::databaseConnectionClosed(uint64_t) 230 { 231 } 232 233 void WebIDBConnectionToClient::abortOpenAndUpgradeNeeded(uint64_t, const IDBResourceIdentifier&) 234 { 235 } 236 237 void WebIDBConnectionToClient::didFireVersionChangeEvent(uint64_t, const IDBResourceIdentifier&) 238 { 164 void WebIDBConnectionToClient::deleteDatabase(const IDBRequestData& request) 165 { 166 DatabaseProcess::singleton().idbServer().deleteDatabase(request); 167 } 168 169 void WebIDBConnectionToClient::openDatabase(const IDBRequestData& request) 170 { 171 DatabaseProcess::singleton().idbServer().openDatabase(request); 172 } 173 174 void WebIDBConnectionToClient::abortTransaction(const IDBResourceIdentifier& transactionIdentifier) 175 { 176 DatabaseProcess::singleton().idbServer().abortTransaction(transactionIdentifier); 177 } 178 179 void WebIDBConnectionToClient::commitTransaction(const IDBResourceIdentifier& transactionIdentifier) 180 { 181 DatabaseProcess::singleton().idbServer().commitTransaction(transactionIdentifier); 182 } 183 184 void WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction(const IDBResourceIdentifier& transactionIdentifier) 185 { 186 DatabaseProcess::singleton().idbServer().didFinishHandlingVersionChangeTransaction(transactionIdentifier); 187 } 188 189 void WebIDBConnectionToClient::createObjectStore(const IDBRequestData& request, const IDBObjectStoreInfo& info) 190 { 191 DatabaseProcess::singleton().idbServer().createObjectStore(request, info); 192 } 193 194 void WebIDBConnectionToClient::deleteObjectStore(const IDBRequestData& request, const String& name) 195 { 196 DatabaseProcess::singleton().idbServer().deleteObjectStore(request, name); 197 } 198 199 void WebIDBConnectionToClient::clearObjectStore(const IDBRequestData& request, uint64_t objectStoreIdentifier) 200 { 201 DatabaseProcess::singleton().idbServer().clearObjectStore(request, objectStoreIdentifier); 202 } 203 204 void WebIDBConnectionToClient::createIndex(const IDBRequestData& request, const IDBIndexInfo& info) 205 { 206 DatabaseProcess::singleton().idbServer().createIndex(request, info); 207 } 208 209 void WebIDBConnectionToClient::deleteIndex(const IDBRequestData& request, uint64_t objectStoreIdentifier, const String& name) 210 { 211 DatabaseProcess::singleton().idbServer().deleteIndex(request, objectStoreIdentifier, name); 212 } 213 214 void WebIDBConnectionToClient::putOrAdd(const IDBRequestData& request, const IDBKeyData& key, const IPC::DataReference& data, unsigned overwriteMode) 215 { 216 if (overwriteMode != static_cast<unsigned>(IndexedDB::ObjectStoreOverwriteMode::NoOverwrite) 217 && overwriteMode != static_cast<unsigned>(IndexedDB::ObjectStoreOverwriteMode::Overwrite) 218 && overwriteMode != static_cast<unsigned>(IndexedDB::ObjectStoreOverwriteMode::OverwriteForCursor)) { 219 // FIXME: This message from the WebProcess is corrupt. 220 // The DatabaseProcess should return early at this point, but can we also kill the bad WebProcess? 221 return; 222 } 223 224 IndexedDB::ObjectStoreOverwriteMode mode = static_cast<IndexedDB::ObjectStoreOverwriteMode>(overwriteMode); 225 auto buffer = ThreadSafeDataBuffer::copyVector(data.vector()); 226 227 DatabaseProcess::singleton().idbServer().putOrAdd(request, key, buffer, mode); 228 } 229 230 void WebIDBConnectionToClient::getRecord(const IDBRequestData& request, const IDBKeyRangeData& range) 231 { 232 DatabaseProcess::singleton().idbServer().getRecord(request, range); 233 } 234 235 void WebIDBConnectionToClient::getCount(const IDBRequestData& request, const IDBKeyRangeData& range) 236 { 237 DatabaseProcess::singleton().idbServer().getCount(request, range); 238 } 239 240 void WebIDBConnectionToClient::deleteRecord(const IDBRequestData& request, const IDBKeyRangeData& range) 241 { 242 DatabaseProcess::singleton().idbServer().deleteRecord(request, range); 243 } 244 245 void WebIDBConnectionToClient::openCursor(const IDBRequestData& request, const IDBCursorInfo& info) 246 { 247 DatabaseProcess::singleton().idbServer().openCursor(request, info); 248 } 249 250 void WebIDBConnectionToClient::iterateCursor(const IDBRequestData& request, const IDBKeyData& key, unsigned long count) 251 { 252 DatabaseProcess::singleton().idbServer().iterateCursor(request, key, count); 253 } 254 255 void WebIDBConnectionToClient::establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo& info) 256 { 257 DatabaseProcess::singleton().idbServer().establishTransaction(databaseConnectionIdentifier, info); 258 } 259 260 void WebIDBConnectionToClient::databaseConnectionClosed(uint64_t databaseConnectionIdentifier) 261 { 262 DatabaseProcess::singleton().idbServer().databaseConnectionClosed(databaseConnectionIdentifier); 263 } 264 265 void WebIDBConnectionToClient::abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier) 266 { 267 DatabaseProcess::singleton().idbServer().abortOpenAndUpgradeNeeded(databaseConnectionIdentifier, transactionIdentifier); 268 } 269 270 void WebIDBConnectionToClient::didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier) 271 { 272 DatabaseProcess::singleton().idbServer().didFireVersionChangeEvent(databaseConnectionIdentifier, transactionIdentifier); 239 273 } 240 274 -
trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h
r196705 r196771 89 89 void createIndex(const WebCore::IDBRequestData&, const WebCore::IDBIndexInfo&); 90 90 void deleteIndex(const WebCore::IDBRequestData&, uint64_t objectStoreIdentifier, const String& indexName); 91 void putOrAdd(const WebCore::IDBRequestData&, const WebCore::IDBKeyData&, const IPC::DataReference& value, bool overwriteEnabled);91 void putOrAdd(const WebCore::IDBRequestData&, const WebCore::IDBKeyData&, const IPC::DataReference& value, unsigned overwriteMode); 92 92 void getRecord(const WebCore::IDBRequestData&, const WebCore::IDBKeyRangeData&); 93 93 void getCount(const WebCore::IDBRequestData&, const WebCore::IDBKeyRangeData&); … … 103 103 void disconnectedFromWebProcess(); 104 104 105 void didReceiveMessage(IPC::Connection&, IPC::MessageDecoder&); 106 105 107 private: 106 108 WebIDBConnectionToClient(DatabaseToWebProcessConnection&, uint64_t serverConnectionIdentifier); 107 109 108 110 virtual IPC::Connection* messageSenderConnection() override final; 109 void didReceiveMessage(IPC::Connection&, IPC::MessageDecoder&);110 111 111 112 Ref<DatabaseToWebProcessConnection> m_connection; -
trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in
r196705 r196771 34 34 CreateIndex(WebCore::IDBRequestData requestData, WebCore::IDBIndexInfo info); 35 35 DeleteIndex(WebCore::IDBRequestData requestData, uint64_t objectStoreIdentifier, String indexName); 36 PutOrAdd(WebCore::IDBRequestData requestData, WebCore::IDBKeyData key, IPC::DataReference value, bool overwriteEnabled);36 PutOrAdd(WebCore::IDBRequestData requestData, WebCore::IDBKeyData key, IPC::DataReference value, unsigned overwriteMode); 37 37 GetRecord(WebCore::IDBRequestData requestData, struct WebCore::IDBKeyRangeData range); 38 38 GetCount(WebCore::IDBRequestData requestData, struct WebCore::IDBKeyRangeData range);
Note: See TracChangeset
for help on using the changeset viewer.