Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(822)

Side by Side Diff: content/browser/indexed_db/indexed_db_callbacks.cc

Issue 2601163002: Remove indexed_db_messages.h. (Closed)
Patch Set: Set up the factory on the right thread. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 std::vector<::indexed_db::mojom::ReturnValuePtr> mojo_values, 125 std::vector<::indexed_db::mojom::ReturnValuePtr> mojo_values,
126 const std::vector<IndexedDBReturnValue>& values); 126 const std::vector<IndexedDBReturnValue>& values);
127 void SendSuccessKey(const IndexedDBKey& value); 127 void SendSuccessKey(const IndexedDBKey& value);
128 void SendSuccessInteger(int64_t value); 128 void SendSuccessInteger(int64_t value);
129 void SendSuccess(); 129 void SendSuccess();
130 130
131 std::string CreateBlobData(const IndexedDBBlobInfo& blob_info); 131 std::string CreateBlobData(const IndexedDBBlobInfo& blob_info);
132 bool CreateAllBlobs( 132 bool CreateAllBlobs(
133 const std::vector<IndexedDBBlobInfo>& blob_info, 133 const std::vector<IndexedDBBlobInfo>& blob_info,
134 std::vector<::indexed_db::mojom::BlobInfoPtr>* blob_or_file_info); 134 std::vector<::indexed_db::mojom::BlobInfoPtr>* blob_or_file_info);
135 void OnConnectionError();
cmumford 2017/01/05 00:29:01 No longer need to include indexed_db_blob_info.h
Reilly Grant (use Gerrit) 2017/01/06 02:23:35 Done.
135 136
136 private: 137 private:
137 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host_; 138 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host_;
138 ::indexed_db::mojom::CallbacksAssociatedPtr callbacks_; 139 ::indexed_db::mojom::CallbacksAssociatedPtr callbacks_;
139 140
140 DISALLOW_COPY_AND_ASSIGN(IOThreadHelper); 141 DISALLOW_COPY_AND_ASSIGN(IOThreadHelper);
141 }; 142 };
142 143
143 IndexedDBCallbacks::IndexedDBCallbacks( 144 IndexedDBCallbacks::IndexedDBCallbacks(
144 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host, 145 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host,
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 DCHECK(dispatcher_host_); 250 DCHECK(dispatcher_host_);
250 DCHECK(io_helper_); 251 DCHECK(io_helper_);
251 252
252 DCHECK_EQ(database_sent_, !connection); 253 DCHECK_EQ(database_sent_, !connection);
253 254
254 scoped_refptr<IndexedDBCallbacks> self(this); 255 scoped_refptr<IndexedDBCallbacks> self(this);
255 256
256 // Only send a new Database if the connection was not previously sent in 257 // Only send a new Database if the connection was not previously sent in
257 // OnUpgradeNeeded. 258 // OnUpgradeNeeded.
258 std::unique_ptr<DatabaseImpl> database; 259 std::unique_ptr<DatabaseImpl> database;
259 if (!database_sent_) 260 if (!database_sent_) {
260 database.reset( 261 database.reset(
261 new DatabaseImpl(std::move(connection), origin_, dispatcher_host_)); 262 new DatabaseImpl(std::move(connection), origin_, dispatcher_host_));
263 }
262 264
263 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 265 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
264 base::Bind(&IOThreadHelper::SendSuccessDatabase, 266 base::Bind(&IOThreadHelper::SendSuccessDatabase,
265 base::Unretained(io_helper_.get()), 267 base::Unretained(io_helper_.get()),
266 base::Passed(&database), metadata)); 268 base::Passed(&database), metadata));
267 dispatcher_host_ = nullptr; 269 dispatcher_host_ = nullptr;
268 270
269 if (!connection_open_start_time_.is_null()) { 271 if (!connection_open_start_time_.is_null()) {
270 UMA_HISTOGRAM_MEDIUM_TIMES( 272 UMA_HISTOGRAM_MEDIUM_TIMES(
271 "WebCore.IndexedDB.OpenTime.Success", 273 "WebCore.IndexedDB.OpenTime.Success",
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 DCHECK(io_helper_); 426 DCHECK(io_helper_);
425 427
426 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); 428 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
427 429
428 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 430 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
429 base::Bind(&IOThreadHelper::SendSuccess, 431 base::Bind(&IOThreadHelper::SendSuccess,
430 base::Unretained(io_helper_.get()))); 432 base::Unretained(io_helper_.get())));
431 dispatcher_host_ = nullptr; 433 dispatcher_host_ = nullptr;
432 } 434 }
433 435
434 bool IndexedDBCallbacks::IsValid() const {
435 DCHECK(dispatcher_host_.get());
436
437 return dispatcher_host_->IsOpen();
438 }
439
440 void IndexedDBCallbacks::SetConnectionOpenStartTime( 436 void IndexedDBCallbacks::SetConnectionOpenStartTime(
441 const base::TimeTicks& start_time) { 437 const base::TimeTicks& start_time) {
442 connection_open_start_time_ = start_time; 438 connection_open_start_time_ = start_time;
443 } 439 }
444 440
445 IndexedDBCallbacks::IOThreadHelper::IOThreadHelper( 441 IndexedDBCallbacks::IOThreadHelper::IOThreadHelper(
446 CallbacksAssociatedPtrInfo callbacks_info, 442 CallbacksAssociatedPtrInfo callbacks_info,
447 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host) 443 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host)
448 : dispatcher_host_(std::move(dispatcher_host)) { 444 : dispatcher_host_(std::move(dispatcher_host)) {
449 DCHECK_CURRENTLY_ON(BrowserThread::IO); 445 DCHECK_CURRENTLY_ON(BrowserThread::IO);
450 callbacks_.Bind(std::move(callbacks_info)); 446 if (callbacks_info.is_valid()) {
447 callbacks_.Bind(std::move(callbacks_info));
448 callbacks_.set_connection_error_handler(
449 base::Bind(&IOThreadHelper::OnConnectionError, base::Unretained(this)));
450 }
451 } 451 }
452 452
453 IndexedDBCallbacks::IOThreadHelper::~IOThreadHelper() {} 453 IndexedDBCallbacks::IOThreadHelper::~IOThreadHelper() {}
454 454
455 void IndexedDBCallbacks::IOThreadHelper::SendError( 455 void IndexedDBCallbacks::IOThreadHelper::SendError(
456 const IndexedDBDatabaseError& error) { 456 const IndexedDBDatabaseError& error) {
457 callbacks_->Error(error.code(), error.message()); 457 if (callbacks_)
458 callbacks_->Error(error.code(), error.message());
458 } 459 }
459 460
460 void IndexedDBCallbacks::IOThreadHelper::SendSuccessStringList( 461 void IndexedDBCallbacks::IOThreadHelper::SendSuccessStringList(
461 const std::vector<base::string16>& value) { 462 const std::vector<base::string16>& value) {
462 callbacks_->SuccessStringList(value); 463 if (callbacks_)
464 callbacks_->SuccessStringList(value);
463 } 465 }
464 466
465 void IndexedDBCallbacks::IOThreadHelper::SendBlocked(int64_t existing_version) { 467 void IndexedDBCallbacks::IOThreadHelper::SendBlocked(int64_t existing_version) {
466 callbacks_->Blocked(existing_version); 468 if (callbacks_)
469 callbacks_->Blocked(existing_version);
467 } 470 }
468 471
469 void IndexedDBCallbacks::IOThreadHelper::SendUpgradeNeeded( 472 void IndexedDBCallbacks::IOThreadHelper::SendUpgradeNeeded(
470 std::unique_ptr<DatabaseImpl> database, 473 std::unique_ptr<DatabaseImpl> database,
471 int64_t old_version, 474 int64_t old_version,
472 blink::WebIDBDataLoss data_loss, 475 blink::WebIDBDataLoss data_loss,
473 const std::string& data_loss_message, 476 const std::string& data_loss_message,
474 const content::IndexedDBDatabaseMetadata& metadata) { 477 const content::IndexedDBDatabaseMetadata& metadata) {
478 if (!callbacks_)
479 return;
480
475 ::indexed_db::mojom::DatabaseAssociatedPtrInfo ptr_info; 481 ::indexed_db::mojom::DatabaseAssociatedPtrInfo ptr_info;
476 ::indexed_db::mojom::DatabaseAssociatedRequest request; 482 ::indexed_db::mojom::DatabaseAssociatedRequest request;
477 callbacks_.associated_group()->CreateAssociatedInterface( 483 callbacks_.associated_group()->CreateAssociatedInterface(
478 mojo::AssociatedGroup::WILL_PASS_PTR, &ptr_info, &request); 484 mojo::AssociatedGroup::WILL_PASS_PTR, &ptr_info, &request);
479 mojo::MakeStrongAssociatedBinding(std::move(database), std::move(request)); 485 mojo::MakeStrongAssociatedBinding(std::move(database), std::move(request));
480 callbacks_->UpgradeNeeded(std::move(ptr_info), old_version, data_loss, 486 callbacks_->UpgradeNeeded(std::move(ptr_info), old_version, data_loss,
481 data_loss_message, metadata); 487 data_loss_message, metadata);
482 } 488 }
483 489
484 void IndexedDBCallbacks::IOThreadHelper::SendSuccessDatabase( 490 void IndexedDBCallbacks::IOThreadHelper::SendSuccessDatabase(
485 std::unique_ptr<DatabaseImpl> database, 491 std::unique_ptr<DatabaseImpl> database,
486 const content::IndexedDBDatabaseMetadata& metadata) { 492 const content::IndexedDBDatabaseMetadata& metadata) {
493 if (!callbacks_)
494 return;
495
487 ::indexed_db::mojom::DatabaseAssociatedPtrInfo ptr_info; 496 ::indexed_db::mojom::DatabaseAssociatedPtrInfo ptr_info;
488 if (database) { 497 if (database) {
489 ::indexed_db::mojom::DatabaseAssociatedRequest request; 498 ::indexed_db::mojom::DatabaseAssociatedRequest request;
490 callbacks_.associated_group()->CreateAssociatedInterface( 499 callbacks_.associated_group()->CreateAssociatedInterface(
491 mojo::AssociatedGroup::WILL_PASS_PTR, &ptr_info, &request); 500 mojo::AssociatedGroup::WILL_PASS_PTR, &ptr_info, &request);
492 mojo::MakeStrongAssociatedBinding(std::move(database), std::move(request)); 501 mojo::MakeStrongAssociatedBinding(std::move(database), std::move(request));
493 } 502 }
494 callbacks_->SuccessDatabase(std::move(ptr_info), metadata); 503 callbacks_->SuccessDatabase(std::move(ptr_info), metadata);
495 } 504 }
496 505
497 void IndexedDBCallbacks::IOThreadHelper::SendSuccessCursor( 506 void IndexedDBCallbacks::IOThreadHelper::SendSuccessCursor(
498 std::unique_ptr<CursorImpl> cursor, 507 std::unique_ptr<CursorImpl> cursor,
499 const IndexedDBKey& key, 508 const IndexedDBKey& key,
500 const IndexedDBKey& primary_key, 509 const IndexedDBKey& primary_key,
501 ::indexed_db::mojom::ValuePtr value, 510 ::indexed_db::mojom::ValuePtr value,
502 const std::vector<IndexedDBBlobInfo>& blob_info) { 511 const std::vector<IndexedDBBlobInfo>& blob_info) {
512 if (!callbacks_)
513 return;
514
503 if (value && !CreateAllBlobs(blob_info, &value->blob_or_file_info)) 515 if (value && !CreateAllBlobs(blob_info, &value->blob_or_file_info))
504 return; 516 return;
505 517
506 ::indexed_db::mojom::CursorAssociatedPtrInfo ptr_info; 518 ::indexed_db::mojom::CursorAssociatedPtrInfo ptr_info;
507 ::indexed_db::mojom::CursorAssociatedRequest request; 519 ::indexed_db::mojom::CursorAssociatedRequest request;
508 callbacks_.associated_group()->CreateAssociatedInterface( 520 callbacks_.associated_group()->CreateAssociatedInterface(
509 mojo::AssociatedGroup::WILL_PASS_PTR, &ptr_info, &request); 521 mojo::AssociatedGroup::WILL_PASS_PTR, &ptr_info, &request);
510 mojo::MakeStrongAssociatedBinding(std::move(cursor), std::move(request)); 522 mojo::MakeStrongAssociatedBinding(std::move(cursor), std::move(request));
511 callbacks_->SuccessCursor(std::move(ptr_info), key, primary_key, 523 callbacks_->SuccessCursor(std::move(ptr_info), key, primary_key,
512 std::move(value)); 524 std::move(value));
513 } 525 }
514 526
515 void IndexedDBCallbacks::IOThreadHelper::SendSuccessValue( 527 void IndexedDBCallbacks::IOThreadHelper::SendSuccessValue(
516 ::indexed_db::mojom::ReturnValuePtr value, 528 ::indexed_db::mojom::ReturnValuePtr value,
517 const std::vector<IndexedDBBlobInfo>& blob_info) { 529 const std::vector<IndexedDBBlobInfo>& blob_info) {
530 if (!callbacks_)
531 return;
532
518 if (!value || CreateAllBlobs(blob_info, &value->value->blob_or_file_info)) 533 if (!value || CreateAllBlobs(blob_info, &value->value->blob_or_file_info))
519 callbacks_->SuccessValue(std::move(value)); 534 callbacks_->SuccessValue(std::move(value));
520 } 535 }
521 536
522 void IndexedDBCallbacks::IOThreadHelper::SendSuccessArray( 537 void IndexedDBCallbacks::IOThreadHelper::SendSuccessArray(
523 std::vector<::indexed_db::mojom::ReturnValuePtr> mojo_values, 538 std::vector<::indexed_db::mojom::ReturnValuePtr> mojo_values,
524 const std::vector<IndexedDBReturnValue>& values) { 539 const std::vector<IndexedDBReturnValue>& values) {
525 DCHECK_EQ(mojo_values.size(), values.size()); 540 DCHECK_EQ(mojo_values.size(), values.size());
526 541
542 if (!callbacks_)
543 return;
544
527 for (size_t i = 0; i < mojo_values.size(); ++i) { 545 for (size_t i = 0; i < mojo_values.size(); ++i) {
528 if (!CreateAllBlobs(values[i].blob_info, 546 if (!CreateAllBlobs(values[i].blob_info,
529 &mojo_values[i]->value->blob_or_file_info)) 547 &mojo_values[i]->value->blob_or_file_info))
530 return; 548 return;
531 } 549 }
532 callbacks_->SuccessArray(std::move(mojo_values)); 550 callbacks_->SuccessArray(std::move(mojo_values));
533 } 551 }
534 552
535 void IndexedDBCallbacks::IOThreadHelper::SendSuccessCursorContinue( 553 void IndexedDBCallbacks::IOThreadHelper::SendSuccessCursorContinue(
536 const IndexedDBKey& key, 554 const IndexedDBKey& key,
537 const IndexedDBKey& primary_key, 555 const IndexedDBKey& primary_key,
538 ::indexed_db::mojom::ValuePtr value, 556 ::indexed_db::mojom::ValuePtr value,
539 const std::vector<IndexedDBBlobInfo>& blob_info) { 557 const std::vector<IndexedDBBlobInfo>& blob_info) {
558 if (!callbacks_)
559 return;
560
540 if (!value || CreateAllBlobs(blob_info, &value->blob_or_file_info)) 561 if (!value || CreateAllBlobs(blob_info, &value->blob_or_file_info))
541 callbacks_->SuccessCursorContinue(key, primary_key, std::move(value)); 562 callbacks_->SuccessCursorContinue(key, primary_key, std::move(value));
542 } 563 }
543 564
544 void IndexedDBCallbacks::IOThreadHelper::SendSuccessCursorPrefetch( 565 void IndexedDBCallbacks::IOThreadHelper::SendSuccessCursorPrefetch(
545 const std::vector<IndexedDBKey>& keys, 566 const std::vector<IndexedDBKey>& keys,
546 const std::vector<IndexedDBKey>& primary_keys, 567 const std::vector<IndexedDBKey>& primary_keys,
547 std::vector<::indexed_db::mojom::ValuePtr> mojo_values, 568 std::vector<::indexed_db::mojom::ValuePtr> mojo_values,
548 const std::vector<IndexedDBValue>& values) { 569 const std::vector<IndexedDBValue>& values) {
549 DCHECK_EQ(mojo_values.size(), values.size()); 570 DCHECK_EQ(mojo_values.size(), values.size());
550 571
572 if (!callbacks_)
573 return;
574
551 for (size_t i = 0; i < mojo_values.size(); ++i) { 575 for (size_t i = 0; i < mojo_values.size(); ++i) {
552 if (!CreateAllBlobs(values[i].blob_info, 576 if (!CreateAllBlobs(values[i].blob_info,
553 &mojo_values[i]->blob_or_file_info)) { 577 &mojo_values[i]->blob_or_file_info)) {
554 return; 578 return;
555 } 579 }
556 } 580 }
557 581
558 callbacks_->SuccessCursorPrefetch(keys, primary_keys, std::move(mojo_values)); 582 callbacks_->SuccessCursorPrefetch(keys, primary_keys, std::move(mojo_values));
559 } 583 }
560 584
561 void IndexedDBCallbacks::IOThreadHelper::SendSuccessKey( 585 void IndexedDBCallbacks::IOThreadHelper::SendSuccessKey(
562 const IndexedDBKey& value) { 586 const IndexedDBKey& value) {
563 callbacks_->SuccessKey(value); 587 if (callbacks_)
588 callbacks_->SuccessKey(value);
564 } 589 }
565 590
566 void IndexedDBCallbacks::IOThreadHelper::SendSuccessInteger(int64_t value) { 591 void IndexedDBCallbacks::IOThreadHelper::SendSuccessInteger(int64_t value) {
567 callbacks_->SuccessInteger(value); 592 if (callbacks_)
593 callbacks_->SuccessInteger(value);
568 } 594 }
569 595
570 void IndexedDBCallbacks::IOThreadHelper::SendSuccess() { 596 void IndexedDBCallbacks::IOThreadHelper::SendSuccess() {
571 callbacks_->Success(); 597 if (callbacks_)
598 callbacks_->Success();
572 } 599 }
573 600
574 std::string IndexedDBCallbacks::IOThreadHelper::CreateBlobData( 601 std::string IndexedDBCallbacks::IOThreadHelper::CreateBlobData(
575 const IndexedDBBlobInfo& blob_info) { 602 const IndexedDBBlobInfo& blob_info) {
576 if (!blob_info.uuid().empty()) { 603 if (!blob_info.uuid().empty()) {
577 // We're sending back a live blob, not a reference into our backing store. 604 // We're sending back a live blob, not a reference into our backing store.
578 return dispatcher_host_->HoldBlobData(blob_info); 605 return dispatcher_host_->HoldBlobData(blob_info);
579 } 606 }
580 scoped_refptr<ShareableFileReference> shareable_file = 607 scoped_refptr<ShareableFileReference> shareable_file =
581 ShareableFileReference::Get(blob_info.file_path()); 608 ShareableFileReference::Get(blob_info.file_path());
(...skipping 13 matching lines...) Expand all
595 std::vector<::indexed_db::mojom::BlobInfoPtr>* blob_or_file_info) { 622 std::vector<::indexed_db::mojom::BlobInfoPtr>* blob_or_file_info) {
596 IDB_TRACE("IndexedDBCallbacks::CreateAllBlobs"); 623 IDB_TRACE("IndexedDBCallbacks::CreateAllBlobs");
597 DCHECK_EQ(blob_info.size(), blob_or_file_info->size()); 624 DCHECK_EQ(blob_info.size(), blob_or_file_info->size());
598 if (!dispatcher_host_->blob_storage_context()) 625 if (!dispatcher_host_->blob_storage_context())
599 return false; 626 return false;
600 for (size_t i = 0; i < blob_info.size(); ++i) 627 for (size_t i = 0; i < blob_info.size(); ++i)
601 (*blob_or_file_info)[i]->uuid = CreateBlobData(blob_info[i]); 628 (*blob_or_file_info)[i]->uuid = CreateBlobData(blob_info[i]);
602 return true; 629 return true;
603 } 630 }
604 631
632 void IndexedDBCallbacks::IOThreadHelper::OnConnectionError() {
633 callbacks_.reset();
634 dispatcher_host_ = nullptr;
635 }
636
605 } // namespace content 637 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698