| OLD | NEW |
| 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/indexed_db_dispatcher.h" | 5 #include "content/child/indexed_db/indexed_db_dispatcher.h" |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
| 9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 10 #include "base/threading/thread_local.h" | 10 #include "base/threading/thread_local.h" |
| (...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); | 484 DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
| 485 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); | 485 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
| 486 if (!callbacks) | 486 if (!callbacks) |
| 487 return; | 487 return; |
| 488 callbacks->onSuccess(WebVector<WebString>(value)); | 488 callbacks->onSuccess(WebVector<WebString>(value)); |
| 489 pending_callbacks_.Remove(ipc_callbacks_id); | 489 pending_callbacks_.Remove(ipc_callbacks_id); |
| 490 } | 490 } |
| 491 | 491 |
| 492 void IndexedDBDispatcher::OnSuccessValue(int32 ipc_thread_id, | 492 void IndexedDBDispatcher::OnSuccessValue(int32 ipc_thread_id, |
| 493 int32 ipc_callbacks_id, | 493 int32 ipc_callbacks_id, |
| 494 const std::vector<char>& value) { | 494 const std::string& value) { |
| 495 DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); | 495 DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
| 496 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); | 496 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
| 497 if (!callbacks) | 497 if (!callbacks) |
| 498 return; | 498 return; |
| 499 WebData web_value; | 499 WebData web_value; |
| 500 if (value.size()) | 500 if (value.size()) |
| 501 web_value.assign(&value.front(), value.size()); | 501 web_value.assign(&*value.begin(), value.size()); |
| 502 callbacks->onSuccess(web_value); | 502 callbacks->onSuccess(web_value); |
| 503 pending_callbacks_.Remove(ipc_callbacks_id); | 503 pending_callbacks_.Remove(ipc_callbacks_id); |
| 504 } | 504 } |
| 505 | 505 |
| 506 void IndexedDBDispatcher::OnSuccessValueWithKey( | 506 void IndexedDBDispatcher::OnSuccessValueWithKey( |
| 507 int32 ipc_thread_id, | 507 int32 ipc_thread_id, |
| 508 int32 ipc_callbacks_id, | 508 int32 ipc_callbacks_id, |
| 509 const std::vector<char>& value, | 509 const std::string& value, |
| 510 const IndexedDBKey& primary_key, | 510 const IndexedDBKey& primary_key, |
| 511 const IndexedDBKeyPath& key_path) { | 511 const IndexedDBKeyPath& key_path) { |
| 512 DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); | 512 DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
| 513 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); | 513 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
| 514 if (!callbacks) | 514 if (!callbacks) |
| 515 return; | 515 return; |
| 516 WebData web_value; | 516 WebData web_value; |
| 517 if (value.size()) | 517 if (value.size()) |
| 518 web_value.assign(&value.front(), value.size()); | 518 web_value.assign(&*value.begin(), value.size()); |
| 519 callbacks->onSuccess(web_value, primary_key, key_path); | 519 callbacks->onSuccess(web_value, primary_key, key_path); |
| 520 pending_callbacks_.Remove(ipc_callbacks_id); | 520 pending_callbacks_.Remove(ipc_callbacks_id); |
| 521 } | 521 } |
| 522 | 522 |
| 523 void IndexedDBDispatcher::OnSuccessInteger(int32 ipc_thread_id, | 523 void IndexedDBDispatcher::OnSuccessInteger(int32 ipc_thread_id, |
| 524 int32 ipc_callbacks_id, | 524 int32 ipc_callbacks_id, |
| 525 int64 value) { | 525 int64 value) { |
| 526 DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); | 526 DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
| 527 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); | 527 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
| 528 if (!callbacks) | 528 if (!callbacks) |
| (...skipping 14 matching lines...) Expand all Loading... |
| 543 | 543 |
| 544 void IndexedDBDispatcher::OnSuccessOpenCursor( | 544 void IndexedDBDispatcher::OnSuccessOpenCursor( |
| 545 const IndexedDBMsg_CallbacksSuccessIDBCursor_Params& p) { | 545 const IndexedDBMsg_CallbacksSuccessIDBCursor_Params& p) { |
| 546 DCHECK_EQ(p.ipc_thread_id, CurrentWorkerId()); | 546 DCHECK_EQ(p.ipc_thread_id, CurrentWorkerId()); |
| 547 int32 ipc_callbacks_id = p.ipc_callbacks_id; | 547 int32 ipc_callbacks_id = p.ipc_callbacks_id; |
| 548 int32 ipc_object_id = p.ipc_cursor_id; | 548 int32 ipc_object_id = p.ipc_cursor_id; |
| 549 const IndexedDBKey& key = p.key; | 549 const IndexedDBKey& key = p.key; |
| 550 const IndexedDBKey& primary_key = p.primary_key; | 550 const IndexedDBKey& primary_key = p.primary_key; |
| 551 WebData web_value; | 551 WebData web_value; |
| 552 if (p.value.size()) | 552 if (p.value.size()) |
| 553 web_value.assign(&p.value.front(), p.value.size()); | 553 web_value.assign(&*p.value.begin(), p.value.size()); |
| 554 | 554 |
| 555 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); | 555 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
| 556 if (!callbacks) | 556 if (!callbacks) |
| 557 return; | 557 return; |
| 558 | 558 |
| 559 RendererWebIDBCursorImpl* cursor = | 559 RendererWebIDBCursorImpl* cursor = |
| 560 new RendererWebIDBCursorImpl(ipc_object_id, thread_safe_sender_.get()); | 560 new RendererWebIDBCursorImpl(ipc_object_id, thread_safe_sender_.get()); |
| 561 cursors_[ipc_object_id] = cursor; | 561 cursors_[ipc_object_id] = cursor; |
| 562 callbacks->onSuccess(cursor, key, primary_key, web_value); | 562 callbacks->onSuccess(cursor, key, primary_key, web_value); |
| 563 | 563 |
| 564 pending_callbacks_.Remove(ipc_callbacks_id); | 564 pending_callbacks_.Remove(ipc_callbacks_id); |
| 565 } | 565 } |
| 566 | 566 |
| 567 void IndexedDBDispatcher::OnSuccessCursorContinue( | 567 void IndexedDBDispatcher::OnSuccessCursorContinue( |
| 568 const IndexedDBMsg_CallbacksSuccessCursorContinue_Params& p) { | 568 const IndexedDBMsg_CallbacksSuccessCursorContinue_Params& p) { |
| 569 DCHECK_EQ(p.ipc_thread_id, CurrentWorkerId()); | 569 DCHECK_EQ(p.ipc_thread_id, CurrentWorkerId()); |
| 570 int32 ipc_callbacks_id = p.ipc_callbacks_id; | 570 int32 ipc_callbacks_id = p.ipc_callbacks_id; |
| 571 int32 ipc_cursor_id = p.ipc_cursor_id; | 571 int32 ipc_cursor_id = p.ipc_cursor_id; |
| 572 const IndexedDBKey& key = p.key; | 572 const IndexedDBKey& key = p.key; |
| 573 const IndexedDBKey& primary_key = p.primary_key; | 573 const IndexedDBKey& primary_key = p.primary_key; |
| 574 const std::vector<char>& value = p.value; | 574 const std::string& value = p.value; |
| 575 | 575 |
| 576 RendererWebIDBCursorImpl* cursor = cursors_[ipc_cursor_id]; | 576 RendererWebIDBCursorImpl* cursor = cursors_[ipc_cursor_id]; |
| 577 DCHECK(cursor); | 577 DCHECK(cursor); |
| 578 | 578 |
| 579 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); | 579 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
| 580 if (!callbacks) | 580 if (!callbacks) |
| 581 return; | 581 return; |
| 582 | 582 |
| 583 WebData web_value; | 583 WebData web_value; |
| 584 if (value.size()) | 584 if (value.size()) |
| 585 web_value.assign(&value.front(), value.size()); | 585 web_value.assign(&*value.begin(), value.size()); |
| 586 callbacks->onSuccess(key, primary_key, web_value); | 586 callbacks->onSuccess(key, primary_key, web_value); |
| 587 | 587 |
| 588 pending_callbacks_.Remove(ipc_callbacks_id); | 588 pending_callbacks_.Remove(ipc_callbacks_id); |
| 589 } | 589 } |
| 590 | 590 |
| 591 void IndexedDBDispatcher::OnSuccessCursorPrefetch( | 591 void IndexedDBDispatcher::OnSuccessCursorPrefetch( |
| 592 const IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params& p) { | 592 const IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params& p) { |
| 593 DCHECK_EQ(p.ipc_thread_id, CurrentWorkerId()); | 593 DCHECK_EQ(p.ipc_thread_id, CurrentWorkerId()); |
| 594 int32 ipc_callbacks_id = p.ipc_callbacks_id; | 594 int32 ipc_callbacks_id = p.ipc_callbacks_id; |
| 595 int32 ipc_cursor_id = p.ipc_cursor_id; | 595 int32 ipc_cursor_id = p.ipc_cursor_id; |
| 596 const std::vector<IndexedDBKey>& keys = p.keys; | 596 const std::vector<IndexedDBKey>& keys = p.keys; |
| 597 const std::vector<IndexedDBKey>& primary_keys = p.primary_keys; | 597 const std::vector<IndexedDBKey>& primary_keys = p.primary_keys; |
| 598 std::vector<WebData> values(p.values.size()); | 598 std::vector<WebData> values(p.values.size()); |
| 599 for (size_t i = 0; i < p.values.size(); ++i) { | 599 for (size_t i = 0; i < p.values.size(); ++i) { |
| 600 if (p.values[i].size()) | 600 if (p.values[i].size()) |
| 601 values[i].assign(&p.values[i].front(), p.values[i].size()); | 601 values[i].assign(&*p.values[i].begin(), p.values[i].size()); |
| 602 } | 602 } |
| 603 RendererWebIDBCursorImpl* cursor = cursors_[ipc_cursor_id]; | 603 RendererWebIDBCursorImpl* cursor = cursors_[ipc_cursor_id]; |
| 604 DCHECK(cursor); | 604 DCHECK(cursor); |
| 605 cursor->SetPrefetchData(keys, primary_keys, values); | 605 cursor->SetPrefetchData(keys, primary_keys, values); |
| 606 | 606 |
| 607 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); | 607 WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
| 608 DCHECK(callbacks); | 608 DCHECK(callbacks); |
| 609 cursor->CachedContinue(callbacks); | 609 cursor->CachedContinue(callbacks); |
| 610 pending_callbacks_.Remove(ipc_callbacks_id); | 610 pending_callbacks_.Remove(ipc_callbacks_id); |
| 611 } | 611 } |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 707 int32 ipc_exception_cursor_id) { | 707 int32 ipc_exception_cursor_id) { |
| 708 typedef std::map<int32, RendererWebIDBCursorImpl*>::iterator Iterator; | 708 typedef std::map<int32, RendererWebIDBCursorImpl*>::iterator Iterator; |
| 709 for (Iterator i = cursors_.begin(); i != cursors_.end(); ++i) { | 709 for (Iterator i = cursors_.begin(); i != cursors_.end(); ++i) { |
| 710 if (i->first == ipc_exception_cursor_id) | 710 if (i->first == ipc_exception_cursor_id) |
| 711 continue; | 711 continue; |
| 712 i->second->ResetPrefetchCache(); | 712 i->second->ResetPrefetchCache(); |
| 713 } | 713 } |
| 714 } | 714 } |
| 715 | 715 |
| 716 } // namespace content | 716 } // namespace content |
| OLD | NEW |