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 |