| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "content/common_child/indexed_db/proxy_webidbdatabase_impl.h" | |
| 6 | |
| 7 #include <vector> | |
| 8 | |
| 9 #include "content/common/child_thread.h" | |
| 10 #include "content/common/indexed_db/indexed_db_messages.h" | |
| 11 #include "content/common_child/indexed_db/indexed_db_dispatcher.h" | |
| 12 #include "third_party/WebKit/public/platform/WebIDBKeyPath.h" | |
| 13 #include "third_party/WebKit/public/platform/WebIDBMetadata.h" | |
| 14 #include "third_party/WebKit/public/platform/WebString.h" | |
| 15 #include "third_party/WebKit/public/platform/WebVector.h" | |
| 16 #include "webkit/glue/worker_task_runner.h" | |
| 17 | |
| 18 using WebKit::WebIDBCallbacks; | |
| 19 using WebKit::WebIDBDatabaseCallbacks; | |
| 20 using WebKit::WebIDBMetadata; | |
| 21 using WebKit::WebIDBKeyPath; | |
| 22 using WebKit::WebString; | |
| 23 using WebKit::WebVector; | |
| 24 using webkit_glue::WorkerTaskRunner; | |
| 25 | |
| 26 namespace content { | |
| 27 | |
| 28 RendererWebIDBDatabaseImpl::RendererWebIDBDatabaseImpl( | |
| 29 int32 ipc_database_id, int32 ipc_database_callbacks_id) | |
| 30 : ipc_database_id_(ipc_database_id), | |
| 31 ipc_database_callbacks_id_(ipc_database_callbacks_id) { | |
| 32 } | |
| 33 | |
| 34 RendererWebIDBDatabaseImpl::~RendererWebIDBDatabaseImpl() { | |
| 35 // It's not possible for there to be pending callbacks that address this | |
| 36 // object since inside WebKit, they hold a reference to the object which owns | |
| 37 // this object. But, if that ever changed, then we'd need to invalidate | |
| 38 // any such pointers. | |
| 39 IndexedDBDispatcher::Send(new IndexedDBHostMsg_DatabaseDestroyed( | |
| 40 ipc_database_id_)); | |
| 41 IndexedDBDispatcher* dispatcher = | |
| 42 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 43 dispatcher->DatabaseDestroyed(ipc_database_id_); | |
| 44 } | |
| 45 | |
| 46 void RendererWebIDBDatabaseImpl::createObjectStore( | |
| 47 long long transaction_id, | |
| 48 long long object_store_id, | |
| 49 const WebKit::WebString& name, | |
| 50 const WebKit::WebIDBKeyPath& key_path, | |
| 51 bool auto_increment) { | |
| 52 IndexedDBHostMsg_DatabaseCreateObjectStore_Params params; | |
| 53 params.ipc_database_id = ipc_database_id_; | |
| 54 params.transaction_id = transaction_id; | |
| 55 params.object_store_id = object_store_id; | |
| 56 params.name = name; | |
| 57 params.key_path = IndexedDBKeyPath(key_path); | |
| 58 params.auto_increment = auto_increment; | |
| 59 | |
| 60 IndexedDBDispatcher::Send( | |
| 61 new IndexedDBHostMsg_DatabaseCreateObjectStore(params)); | |
| 62 } | |
| 63 | |
| 64 void RendererWebIDBDatabaseImpl::deleteObjectStore( | |
| 65 long long transaction_id, | |
| 66 long long object_store_id) { | |
| 67 IndexedDBDispatcher::Send( | |
| 68 new IndexedDBHostMsg_DatabaseDeleteObjectStore( | |
| 69 ipc_database_id_, | |
| 70 transaction_id, | |
| 71 object_store_id)); | |
| 72 } | |
| 73 | |
| 74 void RendererWebIDBDatabaseImpl::createTransaction( | |
| 75 long long transaction_id, | |
| 76 WebKit::WebIDBDatabaseCallbacks* callbacks, | |
| 77 const WebVector<long long>& object_store_ids, | |
| 78 unsigned short mode) | |
| 79 { | |
| 80 IndexedDBDispatcher* dispatcher = | |
| 81 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 82 dispatcher->RequestIDBDatabaseCreateTransaction(ipc_database_id_, | |
| 83 transaction_id, | |
| 84 callbacks, | |
| 85 object_store_ids, | |
| 86 mode); | |
| 87 } | |
| 88 | |
| 89 void RendererWebIDBDatabaseImpl::close() { | |
| 90 IndexedDBDispatcher* dispatcher = | |
| 91 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 92 dispatcher->RequestIDBDatabaseClose(ipc_database_id_, | |
| 93 ipc_database_callbacks_id_); | |
| 94 } | |
| 95 | |
| 96 void RendererWebIDBDatabaseImpl::get( | |
| 97 long long transaction_id, | |
| 98 long long object_store_id, | |
| 99 long long index_id, | |
| 100 const WebKit::WebIDBKeyRange& key_range, | |
| 101 bool key_only, | |
| 102 WebIDBCallbacks* callbacks) { | |
| 103 IndexedDBDispatcher* dispatcher = | |
| 104 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 105 dispatcher->RequestIDBDatabaseGet( | |
| 106 ipc_database_id_, transaction_id, object_store_id, index_id, | |
| 107 IndexedDBKeyRange(key_range), key_only, callbacks); | |
| 108 } | |
| 109 | |
| 110 void RendererWebIDBDatabaseImpl::put( | |
| 111 long long transaction_id, | |
| 112 long long object_store_id, | |
| 113 const WebKit::WebData& value, | |
| 114 const WebKit::WebIDBKey& key, | |
| 115 PutMode put_mode, | |
| 116 WebIDBCallbacks* callbacks, | |
| 117 const WebVector<long long>& web_index_ids, | |
| 118 const WebVector<WebIndexKeys>& web_index_keys) { | |
| 119 IndexedDBDispatcher* dispatcher = | |
| 120 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 121 dispatcher->RequestIDBDatabasePut( | |
| 122 ipc_database_id_, transaction_id, object_store_id, | |
| 123 value, IndexedDBKey(key), put_mode, callbacks, | |
| 124 web_index_ids, web_index_keys); | |
| 125 } | |
| 126 | |
| 127 void RendererWebIDBDatabaseImpl::setIndexKeys( | |
| 128 long long transaction_id, | |
| 129 long long object_store_id, | |
| 130 const WebKit::WebIDBKey& primary_key, | |
| 131 const WebVector<long long>& index_ids, | |
| 132 const WebVector<WebIndexKeys>& index_keys) { | |
| 133 IndexedDBHostMsg_DatabaseSetIndexKeys_Params params; | |
| 134 params.ipc_database_id = ipc_database_id_; | |
| 135 params.transaction_id = transaction_id; | |
| 136 params.object_store_id = object_store_id; | |
| 137 params.primary_key = IndexedDBKey(primary_key); | |
| 138 COMPILE_ASSERT(sizeof(params.index_ids[0]) == | |
| 139 sizeof(index_ids[0]), Cant_copy); | |
| 140 params.index_ids.assign(index_ids.data(), | |
| 141 index_ids.data() + index_ids.size()); | |
| 142 | |
| 143 params.index_keys.resize(index_keys.size()); | |
| 144 for (size_t i = 0; i < index_keys.size(); ++i) { | |
| 145 params.index_keys[i].resize(index_keys[i].size()); | |
| 146 for (size_t j = 0; j < index_keys[i].size(); ++j) { | |
| 147 params.index_keys[i][j] = content::IndexedDBKey(index_keys[i][j]); | |
| 148 } | |
| 149 } | |
| 150 IndexedDBDispatcher::Send(new IndexedDBHostMsg_DatabaseSetIndexKeys( | |
| 151 params)); | |
| 152 } | |
| 153 | |
| 154 void RendererWebIDBDatabaseImpl::setIndexesReady( | |
| 155 long long transaction_id, | |
| 156 long long object_store_id, | |
| 157 const WebVector<long long>& web_index_ids) { | |
| 158 std::vector<int64> index_ids(web_index_ids.data(), | |
| 159 web_index_ids.data() + web_index_ids.size()); | |
| 160 IndexedDBDispatcher::Send(new IndexedDBHostMsg_DatabaseSetIndexesReady( | |
| 161 ipc_database_id_, transaction_id, object_store_id, index_ids)); | |
| 162 } | |
| 163 | |
| 164 void RendererWebIDBDatabaseImpl::openCursor( | |
| 165 long long transaction_id, | |
| 166 long long object_store_id, | |
| 167 long long index_id, | |
| 168 const WebKit::WebIDBKeyRange& key_range, | |
| 169 unsigned short direction, | |
| 170 bool key_only, | |
| 171 TaskType task_type, | |
| 172 WebIDBCallbacks* callbacks) { | |
| 173 IndexedDBDispatcher* dispatcher = | |
| 174 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 175 dispatcher->RequestIDBDatabaseOpenCursor( | |
| 176 ipc_database_id_, | |
| 177 transaction_id, object_store_id, index_id, | |
| 178 IndexedDBKeyRange(key_range), direction, key_only, task_type, callbacks); | |
| 179 } | |
| 180 | |
| 181 void RendererWebIDBDatabaseImpl::count( | |
| 182 long long transaction_id, | |
| 183 long long object_store_id, | |
| 184 long long index_id, | |
| 185 const WebKit::WebIDBKeyRange& key_range, | |
| 186 WebIDBCallbacks* callbacks) { | |
| 187 IndexedDBDispatcher* dispatcher = | |
| 188 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 189 dispatcher->RequestIDBDatabaseCount( | |
| 190 ipc_database_id_, | |
| 191 transaction_id, object_store_id, index_id, | |
| 192 IndexedDBKeyRange(key_range), callbacks); | |
| 193 } | |
| 194 | |
| 195 void RendererWebIDBDatabaseImpl::deleteRange( | |
| 196 long long transaction_id, | |
| 197 long long object_store_id, | |
| 198 const WebKit::WebIDBKeyRange& key_range, | |
| 199 WebIDBCallbacks* callbacks) { | |
| 200 IndexedDBDispatcher* dispatcher = | |
| 201 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 202 dispatcher->RequestIDBDatabaseDeleteRange( | |
| 203 ipc_database_id_, | |
| 204 transaction_id, object_store_id, | |
| 205 IndexedDBKeyRange(key_range), callbacks); | |
| 206 } | |
| 207 | |
| 208 void RendererWebIDBDatabaseImpl::clear( | |
| 209 long long transaction_id, | |
| 210 long long object_store_id, | |
| 211 WebIDBCallbacks* callbacks) { | |
| 212 IndexedDBDispatcher* dispatcher = | |
| 213 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 214 dispatcher->RequestIDBDatabaseClear( | |
| 215 ipc_database_id_, | |
| 216 transaction_id, object_store_id, callbacks); | |
| 217 } | |
| 218 | |
| 219 void RendererWebIDBDatabaseImpl::createIndex( | |
| 220 long long transaction_id, | |
| 221 long long object_store_id, | |
| 222 long long index_id, | |
| 223 const WebString& name, | |
| 224 const WebIDBKeyPath& key_path, | |
| 225 bool unique, | |
| 226 bool multi_entry) | |
| 227 { | |
| 228 IndexedDBHostMsg_DatabaseCreateIndex_Params params; | |
| 229 params.ipc_database_id = ipc_database_id_; | |
| 230 params.transaction_id = transaction_id; | |
| 231 params.object_store_id = object_store_id; | |
| 232 params.index_id = index_id; | |
| 233 params.name = name; | |
| 234 params.key_path = IndexedDBKeyPath(key_path); | |
| 235 params.unique = unique; | |
| 236 params.multi_entry = multi_entry; | |
| 237 | |
| 238 IndexedDBDispatcher::Send( | |
| 239 new IndexedDBHostMsg_DatabaseCreateIndex(params)); | |
| 240 } | |
| 241 | |
| 242 void RendererWebIDBDatabaseImpl::deleteIndex( | |
| 243 long long transaction_id, | |
| 244 long long object_store_id, | |
| 245 long long index_id) | |
| 246 { | |
| 247 IndexedDBDispatcher::Send( | |
| 248 new IndexedDBHostMsg_DatabaseDeleteIndex( | |
| 249 ipc_database_id_, | |
| 250 transaction_id, | |
| 251 object_store_id, index_id)); | |
| 252 } | |
| 253 | |
| 254 void RendererWebIDBDatabaseImpl::abort(long long transaction_id) { | |
| 255 IndexedDBDispatcher::Send(new IndexedDBHostMsg_DatabaseAbort( | |
| 256 ipc_database_id_, transaction_id)); | |
| 257 } | |
| 258 | |
| 259 void RendererWebIDBDatabaseImpl::commit(long long transaction_id) { | |
| 260 IndexedDBDispatcher::Send(new IndexedDBHostMsg_DatabaseCommit( | |
| 261 ipc_database_id_, transaction_id)); | |
| 262 } | |
| 263 | |
| 264 } // namespace content | |
| OLD | NEW |