Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(269)

Side by Side Diff: content/child/indexed_db/proxy_webidbdatabase_impl.cc

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

Powered by Google App Engine
This is Rietveld 408576698