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/common/indexed_db/indexed_db_dispatcher.h" | 5 #include "content/common/indexed_db/indexed_db_dispatcher.h" |
6 | 6 |
7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
8 #include "base/threading/thread_local.h" | 8 #include "base/threading/thread_local.h" |
9 #include "content/common/child_thread.h" | 9 #include "content/common/child_thread.h" |
10 #include "content/common/indexed_db/indexed_db_messages.h" | 10 #include "content/common/indexed_db/indexed_db_messages.h" |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 pending_callbacks_.Remove(response_id); | 414 pending_callbacks_.Remove(response_id); |
415 } | 415 } |
416 | 416 |
417 void IndexedDBDispatcher::RequestIDBObjectStorePut( | 417 void IndexedDBDispatcher::RequestIDBObjectStorePut( |
418 const SerializedScriptValue& value, | 418 const SerializedScriptValue& value, |
419 const IndexedDBKey& key, | 419 const IndexedDBKey& key, |
420 WebKit::WebIDBObjectStore::PutMode put_mode, | 420 WebKit::WebIDBObjectStore::PutMode put_mode, |
421 WebIDBCallbacks* callbacks_ptr, | 421 WebIDBCallbacks* callbacks_ptr, |
422 int32 idb_object_store_id, | 422 int32 idb_object_store_id, |
423 const WebIDBTransaction& transaction, | 423 const WebIDBTransaction& transaction, |
| 424 const WebKit::WebVector<WebKit::WebString>& index_names, |
| 425 const WebKit::WebVector<WebKit::WebVector<WebKit::WebIDBKey> >& index_keys, |
424 WebExceptionCode* ec) { | 426 WebExceptionCode* ec) { |
425 ResetCursorPrefetchCaches(); | 427 ResetCursorPrefetchCaches(); |
426 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); | 428 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
427 if (!value.is_null() && | 429 if (!value.is_null() && |
428 (value.data().length() * sizeof(char16)) > kMaxIDBValueSizeInBytes) { | 430 (value.data().length() * sizeof(char16)) > kMaxIDBValueSizeInBytes) { |
429 *ec = WebKit::WebIDBDatabaseExceptionDataError; | 431 *ec = WebKit::WebIDBDatabaseExceptionDataError; |
430 return; | 432 return; |
431 } | 433 } |
432 IndexedDBHostMsg_ObjectStorePut_Params params; | 434 IndexedDBHostMsg_ObjectStorePut_Params params; |
433 params.thread_id = CurrentWorkerId(); | 435 params.thread_id = CurrentWorkerId(); |
434 params.idb_object_store_id = idb_object_store_id; | 436 params.idb_object_store_id = idb_object_store_id; |
435 params.response_id = pending_callbacks_.Add(callbacks.release()); | 437 params.response_id = pending_callbacks_.Add(callbacks.release()); |
436 params.serialized_value = value; | 438 params.serialized_value = value; |
437 params.key = key; | 439 params.key = key; |
438 params.put_mode = put_mode; | 440 params.put_mode = put_mode; |
439 params.transaction_id = TransactionId(transaction); | 441 params.transaction_id = TransactionId(transaction); |
| 442 params.index_names.resize(index_names.size()); |
| 443 for (size_t i = 0; i < index_names.size(); ++i) { |
| 444 params.index_names[i] = index_names[i]; |
| 445 } |
| 446 |
| 447 params.index_keys.resize(index_keys.size()); |
| 448 for (size_t i = 0; i < index_keys.size(); ++i) { |
| 449 params.index_keys[i].resize(index_keys[i].size()); |
| 450 for (size_t j = 0; j < index_keys[i].size(); ++j) { |
| 451 params.index_keys[i][j] = content::IndexedDBKey(index_keys[i][j]); |
| 452 } |
| 453 } |
440 Send(new IndexedDBHostMsg_ObjectStorePut(params, ec)); | 454 Send(new IndexedDBHostMsg_ObjectStorePut(params, ec)); |
441 if (*ec) | 455 if (*ec) |
442 pending_callbacks_.Remove(params.response_id); | 456 pending_callbacks_.Remove(params.response_id); |
443 } | 457 } |
444 | 458 |
445 void IndexedDBDispatcher::RequestIDBObjectStoreDelete( | 459 void IndexedDBDispatcher::RequestIDBObjectStoreDelete( |
446 const IndexedDBKeyRange& key_range, | 460 const IndexedDBKeyRange& key_range, |
447 WebIDBCallbacks* callbacks_ptr, | 461 WebIDBCallbacks* callbacks_ptr, |
448 int32 idb_object_store_id, | 462 int32 idb_object_store_id, |
449 const WebIDBTransaction& transaction, | 463 const WebIDBTransaction& transaction, |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 } | 717 } |
704 | 718 |
705 void IndexedDBDispatcher::ResetCursorPrefetchCaches(int32 exception_cursor_id) { | 719 void IndexedDBDispatcher::ResetCursorPrefetchCaches(int32 exception_cursor_id) { |
706 typedef std::map<int32, RendererWebIDBCursorImpl*>::iterator Iterator; | 720 typedef std::map<int32, RendererWebIDBCursorImpl*>::iterator Iterator; |
707 for (Iterator i = cursors_.begin(); i != cursors_.end(); ++i) { | 721 for (Iterator i = cursors_.begin(); i != cursors_.end(); ++i) { |
708 if (i->first == exception_cursor_id) | 722 if (i->first == exception_cursor_id) |
709 continue; | 723 continue; |
710 i->second->ResetPrefetchCache(); | 724 i->second->ResetPrefetchCache(); |
711 } | 725 } |
712 } | 726 } |
OLD | NEW |