OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/browser/indexed_db/indexed_db_callbacks.h" | 5 #include "content/browser/indexed_db/indexed_db_callbacks.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "content/browser/indexed_db/indexed_db_connection.h" | 9 #include "content/browser/indexed_db/indexed_db_connection.h" |
10 #include "content/browser/indexed_db/indexed_db_cursor.h" | 10 #include "content/browser/indexed_db/indexed_db_cursor.h" |
11 #include "content/browser/indexed_db/indexed_db_database_callbacks.h" | 11 #include "content/browser/indexed_db/indexed_db_database_callbacks.h" |
12 #include "content/browser/indexed_db/indexed_db_database_error.h" | 12 #include "content/browser/indexed_db/indexed_db_database_error.h" |
13 #include "content/browser/indexed_db/indexed_db_metadata.h" | 13 #include "content/browser/indexed_db/indexed_db_metadata.h" |
| 14 #include "content/browser/indexed_db/indexed_db_value.h" |
14 #include "content/common/indexed_db/indexed_db_constants.h" | 15 #include "content/common/indexed_db/indexed_db_constants.h" |
15 #include "content/common/indexed_db/indexed_db_messages.h" | 16 #include "content/common/indexed_db/indexed_db_messages.h" |
16 #include "webkit/browser/quota/quota_manager.h" | 17 #include "webkit/browser/quota/quota_manager.h" |
17 | 18 |
18 namespace content { | 19 namespace content { |
19 | 20 |
20 namespace { | 21 namespace { |
21 const int32 kNoCursor = -1; | 22 const int32 kNoCursor = -1; |
22 const int32 kNoDatabaseCallbacks = -1; | 23 const int32 kNoDatabaseCallbacks = -1; |
23 const int64 kNoTransaction = -1; | 24 const int64 kNoTransaction = -1; |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 ipc_callbacks_id_, | 165 ipc_callbacks_id_, |
165 ipc_database_callbacks_id_, | 166 ipc_database_callbacks_id_, |
166 ipc_object_id, | 167 ipc_object_id, |
167 IndexedDBDispatcherHost::ConvertMetadata(metadata))); | 168 IndexedDBDispatcherHost::ConvertMetadata(metadata))); |
168 dispatcher_host_ = NULL; | 169 dispatcher_host_ = NULL; |
169 } | 170 } |
170 | 171 |
171 void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor, | 172 void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor, |
172 const IndexedDBKey& key, | 173 const IndexedDBKey& key, |
173 const IndexedDBKey& primary_key, | 174 const IndexedDBKey& primary_key, |
174 std::string* value) { | 175 IndexedDBValue* value) { |
175 DCHECK(dispatcher_host_.get()); | 176 DCHECK(dispatcher_host_.get()); |
176 | 177 |
177 DCHECK_EQ(kNoCursor, ipc_cursor_id_); | 178 DCHECK_EQ(kNoCursor, ipc_cursor_id_); |
178 DCHECK_EQ(kNoTransaction, host_transaction_id_); | 179 DCHECK_EQ(kNoTransaction, host_transaction_id_); |
179 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 180 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
180 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 181 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
181 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 182 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
182 | 183 |
183 int32 ipc_object_id = dispatcher_host_->Add(cursor.get()); | 184 int32 ipc_object_id = dispatcher_host_->Add(cursor.get()); |
184 IndexedDBMsg_CallbacksSuccessIDBCursor_Params params; | 185 IndexedDBMsg_CallbacksSuccessIDBCursor_Params params; |
185 params.ipc_thread_id = ipc_thread_id_; | 186 params.ipc_thread_id = ipc_thread_id_; |
186 params.ipc_callbacks_id = ipc_callbacks_id_; | 187 params.ipc_callbacks_id = ipc_callbacks_id_; |
187 params.ipc_cursor_id = ipc_object_id; | 188 params.ipc_cursor_id = ipc_object_id; |
188 params.key = key; | 189 params.key = key; |
189 params.primary_key = primary_key; | 190 params.primary_key = primary_key; |
190 if (value && !value->empty()) | 191 if (value && !value->empty()) |
191 std::swap(params.value, *value); | 192 std::swap(params.value, value->bits); |
192 // TODO(alecflett): Avoid a copy here: the whole params object is | 193 // TODO(alecflett): Avoid a copy here: the whole params object is |
193 // being copied into the message. | 194 // being copied into the message. |
194 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIDBCursor(params)); | 195 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIDBCursor(params)); |
195 | 196 |
196 dispatcher_host_ = NULL; | 197 dispatcher_host_ = NULL; |
197 } | 198 } |
198 | 199 |
199 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key, | 200 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key, |
200 const IndexedDBKey& primary_key, | 201 const IndexedDBKey& primary_key, |
201 std::string* value) { | 202 IndexedDBValue* value) { |
202 DCHECK(dispatcher_host_.get()); | 203 DCHECK(dispatcher_host_.get()); |
203 | 204 |
204 DCHECK_NE(kNoCursor, ipc_cursor_id_); | 205 DCHECK_NE(kNoCursor, ipc_cursor_id_); |
205 DCHECK_EQ(kNoTransaction, host_transaction_id_); | 206 DCHECK_EQ(kNoTransaction, host_transaction_id_); |
206 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 207 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
207 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 208 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
208 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 209 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
209 | 210 |
210 IndexedDBCursor* idb_cursor = | 211 IndexedDBCursor* idb_cursor = |
211 dispatcher_host_->GetCursorFromId(ipc_cursor_id_); | 212 dispatcher_host_->GetCursorFromId(ipc_cursor_id_); |
212 | 213 |
213 DCHECK(idb_cursor); | 214 DCHECK(idb_cursor); |
214 if (!idb_cursor) | 215 if (!idb_cursor) |
215 return; | 216 return; |
216 IndexedDBMsg_CallbacksSuccessCursorContinue_Params params; | 217 IndexedDBMsg_CallbacksSuccessCursorContinue_Params params; |
217 params.ipc_thread_id = ipc_thread_id_; | 218 params.ipc_thread_id = ipc_thread_id_; |
218 params.ipc_callbacks_id = ipc_callbacks_id_; | 219 params.ipc_callbacks_id = ipc_callbacks_id_; |
219 params.ipc_cursor_id = ipc_cursor_id_; | 220 params.ipc_cursor_id = ipc_cursor_id_; |
220 params.key = key; | 221 params.key = key; |
221 params.primary_key = primary_key; | 222 params.primary_key = primary_key; |
222 if (value && !value->empty()) | 223 if (value && !value->empty()) |
223 std::swap(params.value, *value); | 224 std::swap(params.value, value->bits); |
224 // TODO(alecflett): Avoid a copy here: the whole params object is | 225 // TODO(alecflett): Avoid a copy here: the whole params object is |
225 // being copied into the message. | 226 // being copied into the message. |
226 dispatcher_host_->Send( | 227 dispatcher_host_->Send( |
227 new IndexedDBMsg_CallbacksSuccessCursorContinue(params)); | 228 new IndexedDBMsg_CallbacksSuccessCursorContinue(params)); |
228 dispatcher_host_ = NULL; | 229 dispatcher_host_ = NULL; |
229 } | 230 } |
230 | 231 |
231 void IndexedDBCallbacks::OnSuccessWithPrefetch( | 232 void IndexedDBCallbacks::OnSuccessWithPrefetch( |
232 const std::vector<IndexedDBKey>& keys, | 233 const std::vector<IndexedDBKey>& keys, |
233 const std::vector<IndexedDBKey>& primary_keys, | 234 const std::vector<IndexedDBKey>& primary_keys, |
234 const std::vector<std::string>& values) { | 235 const std::vector<IndexedDBValue>& values) { |
235 DCHECK_EQ(keys.size(), primary_keys.size()); | 236 DCHECK_EQ(keys.size(), primary_keys.size()); |
236 DCHECK_EQ(keys.size(), values.size()); | 237 DCHECK_EQ(keys.size(), values.size()); |
237 | 238 |
238 DCHECK(dispatcher_host_.get()); | 239 DCHECK(dispatcher_host_.get()); |
239 | 240 |
240 DCHECK_NE(kNoCursor, ipc_cursor_id_); | 241 DCHECK_NE(kNoCursor, ipc_cursor_id_); |
241 DCHECK_EQ(kNoTransaction, host_transaction_id_); | 242 DCHECK_EQ(kNoTransaction, host_transaction_id_); |
242 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 243 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
243 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 244 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
244 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 245 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
245 | 246 |
246 std::vector<IndexedDBKey> msgKeys; | 247 std::vector<IndexedDBKey> msgKeys; |
247 std::vector<IndexedDBKey> msgPrimaryKeys; | 248 std::vector<IndexedDBKey> msgPrimaryKeys; |
248 | 249 |
249 for (size_t i = 0; i < keys.size(); ++i) { | 250 for (size_t i = 0; i < keys.size(); ++i) { |
250 msgKeys.push_back(keys[i]); | 251 msgKeys.push_back(keys[i]); |
251 msgPrimaryKeys.push_back(primary_keys[i]); | 252 msgPrimaryKeys.push_back(primary_keys[i]); |
252 } | 253 } |
253 | 254 |
254 IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params params; | 255 IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params params; |
255 params.ipc_thread_id = ipc_thread_id_; | 256 params.ipc_thread_id = ipc_thread_id_; |
256 params.ipc_callbacks_id = ipc_callbacks_id_; | 257 params.ipc_callbacks_id = ipc_callbacks_id_; |
257 params.ipc_cursor_id = ipc_cursor_id_; | 258 params.ipc_cursor_id = ipc_cursor_id_; |
258 params.keys = msgKeys; | 259 params.keys = msgKeys; |
259 params.primary_keys = msgPrimaryKeys; | 260 params.primary_keys = msgPrimaryKeys; |
260 params.values = values; | 261 std::vector<IndexedDBValue>::const_iterator iter; |
| 262 for (iter = values.begin(); iter != values.end(); ++iter) |
| 263 params.values.push_back(iter->bits); |
261 dispatcher_host_->Send( | 264 dispatcher_host_->Send( |
262 new IndexedDBMsg_CallbacksSuccessCursorPrefetch(params)); | 265 new IndexedDBMsg_CallbacksSuccessCursorPrefetch(params)); |
263 dispatcher_host_ = NULL; | 266 dispatcher_host_ = NULL; |
264 } | 267 } |
265 | 268 |
266 void IndexedDBCallbacks::OnSuccess(std::string* value, | 269 void IndexedDBCallbacks::OnSuccess(IndexedDBValue* value, |
267 const IndexedDBKey& key, | 270 const IndexedDBKey& key, |
268 const IndexedDBKeyPath& key_path) { | 271 const IndexedDBKeyPath& key_path) { |
269 DCHECK(dispatcher_host_.get()); | 272 DCHECK(dispatcher_host_.get()); |
270 | 273 |
271 DCHECK_EQ(kNoCursor, ipc_cursor_id_); | 274 DCHECK_EQ(kNoCursor, ipc_cursor_id_); |
272 DCHECK_EQ(kNoTransaction, host_transaction_id_); | 275 DCHECK_EQ(kNoTransaction, host_transaction_id_); |
273 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 276 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
274 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 277 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
275 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 278 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
276 | 279 |
277 std::string value_copy; | 280 std::string value_copy; |
278 if (value && !value->empty()) | 281 if (value && !value->empty()) |
279 std::swap(value_copy, *value); | 282 std::swap(value_copy, value->bits); |
280 | 283 |
281 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValueWithKey( | 284 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValueWithKey( |
282 ipc_thread_id_, | 285 ipc_thread_id_, |
283 ipc_callbacks_id_, | 286 ipc_callbacks_id_, |
284 // TODO(alecflett): Avoid a copy here. | 287 // TODO(alecflett): Avoid a copy here. |
285 value_copy, | 288 value_copy, |
286 key, | 289 key, |
287 key_path)); | 290 key_path)); |
288 dispatcher_host_ = NULL; | 291 dispatcher_host_ = NULL; |
289 } | 292 } |
290 | 293 |
291 void IndexedDBCallbacks::OnSuccess(std::string* value) { | 294 void IndexedDBCallbacks::OnSuccess(IndexedDBValue* value) { |
292 DCHECK(dispatcher_host_.get()); | 295 DCHECK(dispatcher_host_.get()); |
293 | 296 |
294 DCHECK(kNoCursor == ipc_cursor_id_ || value == NULL); | 297 DCHECK(kNoCursor == ipc_cursor_id_ || value == NULL); |
295 DCHECK_EQ(kNoTransaction, host_transaction_id_); | 298 DCHECK_EQ(kNoTransaction, host_transaction_id_); |
296 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 299 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
297 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 300 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
298 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 301 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
299 | 302 |
300 std::string value_copy; | 303 std::string value_copy; |
301 if (value && !value->empty()) | 304 if (value && !value->empty()) |
302 std::swap(value_copy, *value); | 305 std::swap(value_copy, value->bits); |
303 | 306 |
304 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValue( | 307 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValue( |
305 ipc_thread_id_, | 308 ipc_thread_id_, |
306 ipc_callbacks_id_, | 309 ipc_callbacks_id_, |
307 // TODO(alecflett): avoid a copy here. | 310 // TODO(alecflett): avoid a copy here. |
308 value_copy)); | 311 value_copy)); |
309 dispatcher_host_ = NULL; | 312 dispatcher_host_ = NULL; |
310 } | 313 } |
311 | 314 |
312 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) { | 315 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 348 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
346 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 349 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
347 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 350 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
348 | 351 |
349 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessUndefined( | 352 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessUndefined( |
350 ipc_thread_id_, ipc_callbacks_id_)); | 353 ipc_thread_id_, ipc_callbacks_id_)); |
351 dispatcher_host_ = NULL; | 354 dispatcher_host_ = NULL; |
352 } | 355 } |
353 | 356 |
354 } // namespace content | 357 } // namespace content |
OLD | NEW |