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 "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 for (size_t i = 0; i < values.size(); ++i) { | 277 for (size_t i = 0; i < values.size(); ++i) { |
278 if (!CreateAllBlobs(values[i].blob_info, | 278 if (!CreateAllBlobs(values[i].blob_info, |
279 ¶ms->values[i].blob_or_file_info, dispatcher_host)) | 279 ¶ms->values[i].blob_or_file_info, dispatcher_host)) |
280 return; | 280 return; |
281 } | 281 } |
282 | 282 |
283 dispatcher_host->Send( | 283 dispatcher_host->Send( |
284 new IndexedDBMsg_CallbacksSuccessCursorPrefetch(*params)); | 284 new IndexedDBMsg_CallbacksSuccessCursorPrefetch(*params)); |
285 } | 285 } |
286 | 286 |
| 287 static void BlobLookupForGetAll( |
| 288 IndexedDBMsg_CallbacksSuccessArray_Params* params, |
| 289 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host, |
| 290 const std::vector<IndexedDBValue>& values) { |
| 291 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 292 DCHECK_EQ(values.size(), params->values.size()); |
| 293 |
| 294 for (size_t i = 0; i < values.size(); ++i) { |
| 295 if (!CreateAllBlobs(values[i].blob_info, |
| 296 ¶ms->values.at(i).blob_or_file_info, |
| 297 dispatcher_host)) |
| 298 return; |
| 299 } |
| 300 |
| 301 dispatcher_host->Send(new IndexedDBMsg_CallbacksSuccessArray(*params)); |
| 302 } |
| 303 |
287 static void FillInBlobData( | 304 static void FillInBlobData( |
288 const std::vector<IndexedDBBlobInfo>& blob_info, | 305 const std::vector<IndexedDBBlobInfo>& blob_info, |
289 std::vector<IndexedDBMsg_BlobOrFileInfo>* blob_or_file_info) { | 306 std::vector<IndexedDBMsg_BlobOrFileInfo>* blob_or_file_info) { |
290 for (const auto& iter : blob_info) { | 307 for (const auto& iter : blob_info) { |
291 if (iter.is_file()) { | 308 if (iter.is_file()) { |
292 IndexedDBMsg_BlobOrFileInfo info; | 309 IndexedDBMsg_BlobOrFileInfo info; |
293 info.is_file = true; | 310 info.is_file = true; |
294 info.mime_type = iter.type(); | 311 info.mime_type = iter.type(); |
295 info.file_name = iter.file_name(); | 312 info.file_name = iter.file_name(); |
296 info.file_path = iter.file_path().AsUTF16Unsafe(); | 313 info.file_path = iter.file_path().AsUTF16Unsafe(); |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
523 value->blob_info, | 540 value->blob_info, |
524 base::Bind(CreateBlobsAndSend<IndexedDBMsg_CallbacksSuccessValue_Params, | 541 base::Bind(CreateBlobsAndSend<IndexedDBMsg_CallbacksSuccessValue_Params, |
525 IndexedDBMsg_CallbacksSuccessValue>, | 542 IndexedDBMsg_CallbacksSuccessValue>, |
526 base::Owned(params.release()), dispatcher_host_, | 543 base::Owned(params.release()), dispatcher_host_, |
527 value->blob_info, | 544 value->blob_info, |
528 base::Unretained(&p->value.blob_or_file_info))); | 545 base::Unretained(&p->value.blob_or_file_info))); |
529 } | 546 } |
530 dispatcher_host_ = NULL; | 547 dispatcher_host_ = NULL; |
531 } | 548 } |
532 | 549 |
| 550 void IndexedDBCallbacks::OnSuccessArray(std::vector<IndexedDBValue>* values) { |
| 551 DCHECK(dispatcher_host_.get()); |
| 552 |
| 553 DCHECK_EQ(kNoTransaction, host_transaction_id_); |
| 554 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
| 555 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
| 556 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
| 557 |
| 558 scoped_ptr<IndexedDBMsg_CallbacksSuccessArray_Params> params( |
| 559 new IndexedDBMsg_CallbacksSuccessArray_Params()); |
| 560 params->ipc_thread_id = ipc_thread_id_; |
| 561 params->ipc_callbacks_id = ipc_callbacks_id_; |
| 562 params->values.resize(values->size()); |
| 563 |
| 564 bool found_blob_info = false; |
| 565 for (size_t i = 0; i < values->size(); ++i) { |
| 566 params->values[i].bits.swap(values->at(i).bits); |
| 567 if (!values->at(i).blob_info.empty()) { |
| 568 found_blob_info = true; |
| 569 FillInBlobData(values->at(i).blob_info, |
| 570 ¶ms->values[i].blob_or_file_info); |
| 571 for (const auto& blob_info : values->at(i).blob_info) { |
| 572 if (!blob_info.mark_used_callback().is_null()) |
| 573 blob_info.mark_used_callback().Run(); |
| 574 } |
| 575 } |
| 576 } |
| 577 |
| 578 if (found_blob_info) { |
| 579 BrowserThread::PostTask( |
| 580 BrowserThread::IO, FROM_HERE, |
| 581 base::Bind(BlobLookupForGetAll, base::Owned(params.release()), |
| 582 dispatcher_host_, *values)); |
| 583 } else { |
| 584 dispatcher_host_->Send( |
| 585 new IndexedDBMsg_CallbacksSuccessArray(*params.get())); |
| 586 } |
| 587 dispatcher_host_ = NULL; |
| 588 } |
| 589 |
533 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) { | 590 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) { |
534 DCHECK(dispatcher_host_.get()); | 591 DCHECK(dispatcher_host_.get()); |
535 | 592 |
536 DCHECK_EQ(kNoCursor, ipc_cursor_id_); | 593 DCHECK_EQ(kNoCursor, ipc_cursor_id_); |
537 DCHECK_EQ(kNoTransaction, host_transaction_id_); | 594 DCHECK_EQ(kNoTransaction, host_transaction_id_); |
538 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 595 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
539 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 596 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
540 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 597 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
541 | 598 |
542 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIndexedDBKey( | 599 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIndexedDBKey( |
(...skipping 28 matching lines...) Expand all Loading... |
571 ipc_thread_id_, ipc_callbacks_id_)); | 628 ipc_thread_id_, ipc_callbacks_id_)); |
572 dispatcher_host_ = NULL; | 629 dispatcher_host_ = NULL; |
573 } | 630 } |
574 | 631 |
575 void IndexedDBCallbacks::SetConnectionOpenStartTime( | 632 void IndexedDBCallbacks::SetConnectionOpenStartTime( |
576 const base::TimeTicks& start_time) { | 633 const base::TimeTicks& start_time) { |
577 connection_open_start_time_ = start_time; | 634 connection_open_start_time_ = start_time; |
578 } | 635 } |
579 | 636 |
580 } // namespace content | 637 } // namespace content |
OLD | NEW |