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

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

Issue 203833003: Add the IndexedDBActiveBlobRegistry, currently unused, to enable future blob (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: clang fixes Created 6 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/browser/indexed_db/indexed_db_backing_store.h" 5 #include "content/browser/indexed_db/indexed_db_backing_store.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/strings/string_piece.h" 10 #include "base/strings/string_piece.h"
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 bool* is_disk_full) OVERRIDE { 389 bool* is_disk_full) OVERRIDE {
390 return LevelDBDatabase::Open(file_name, comparator, db, is_disk_full); 390 return LevelDBDatabase::Open(file_name, comparator, db, is_disk_full);
391 } 391 }
392 virtual leveldb::Status DestroyLevelDB(const base::FilePath& file_name) 392 virtual leveldb::Status DestroyLevelDB(const base::FilePath& file_name)
393 OVERRIDE { 393 OVERRIDE {
394 return LevelDBDatabase::Destroy(file_name); 394 return LevelDBDatabase::Destroy(file_name);
395 } 395 }
396 }; 396 };
397 397
398 IndexedDBBackingStore::IndexedDBBackingStore( 398 IndexedDBBackingStore::IndexedDBBackingStore(
399 IndexedDBFactory* indexed_db_factory,
399 const GURL& origin_url, 400 const GURL& origin_url,
400 scoped_ptr<LevelDBDatabase> db, 401 scoped_ptr<LevelDBDatabase> db,
401 scoped_ptr<LevelDBComparator> comparator) 402 scoped_ptr<LevelDBComparator> comparator,
402 : origin_url_(origin_url), 403 base::TaskRunner* task_runner)
404 : indexed_db_factory_(indexed_db_factory),
405 origin_url_(origin_url),
403 origin_identifier_(ComputeOriginIdentifier(origin_url)), 406 origin_identifier_(ComputeOriginIdentifier(origin_url)),
407 task_runner_(task_runner),
404 db_(db.Pass()), 408 db_(db.Pass()),
405 comparator_(comparator.Pass()) {} 409 comparator_(comparator.Pass()),
410 active_blob_registry_(this) {}
406 411
407 IndexedDBBackingStore::~IndexedDBBackingStore() { 412 IndexedDBBackingStore::~IndexedDBBackingStore() {
408 // db_'s destructor uses comparator_. The order of destruction is important. 413 // db_'s destructor uses comparator_. The order of destruction is important.
409 db_.reset(); 414 db_.reset();
410 comparator_.reset(); 415 comparator_.reset();
411 } 416 }
412 417
413 IndexedDBBackingStore::RecordIdentifier::RecordIdentifier( 418 IndexedDBBackingStore::RecordIdentifier::RecordIdentifier(
414 const std::string& primary_key, 419 const std::string& primary_key,
415 int64 version) 420 int64 version)
(...skipping 20 matching lines...) Expand all
436 INDEXED_DB_BACKING_STORE_OPEN_MEMORY_FAILED, 441 INDEXED_DB_BACKING_STORE_OPEN_MEMORY_FAILED,
437 INDEXED_DB_BACKING_STORE_OPEN_ATTEMPT_NON_ASCII, 442 INDEXED_DB_BACKING_STORE_OPEN_ATTEMPT_NON_ASCII,
438 INDEXED_DB_BACKING_STORE_OPEN_DISK_FULL_DEPRECATED, 443 INDEXED_DB_BACKING_STORE_OPEN_DISK_FULL_DEPRECATED,
439 INDEXED_DB_BACKING_STORE_OPEN_ORIGIN_TOO_LONG, 444 INDEXED_DB_BACKING_STORE_OPEN_ORIGIN_TOO_LONG,
440 INDEXED_DB_BACKING_STORE_OPEN_NO_RECOVERY, 445 INDEXED_DB_BACKING_STORE_OPEN_NO_RECOVERY,
441 INDEXED_DB_BACKING_STORE_OPEN_MAX, 446 INDEXED_DB_BACKING_STORE_OPEN_MAX,
442 }; 447 };
443 448
444 // static 449 // static
445 scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::Open( 450 scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::Open(
451 IndexedDBFactory* indexed_db_factory,
446 const GURL& origin_url, 452 const GURL& origin_url,
447 const base::FilePath& path_base, 453 const base::FilePath& path_base,
448 blink::WebIDBDataLoss* data_loss, 454 blink::WebIDBDataLoss* data_loss,
449 std::string* data_loss_message, 455 std::string* data_loss_message,
450 bool* disk_full) { 456 bool* disk_full,
457 base::TaskRunner* task_runner) {
451 *data_loss = blink::WebIDBDataLossNone; 458 *data_loss = blink::WebIDBDataLossNone;
452 DefaultLevelDBFactory leveldb_factory; 459 DefaultLevelDBFactory leveldb_factory;
453 return IndexedDBBackingStore::Open(origin_url, 460 return IndexedDBBackingStore::Open(indexed_db_factory,
461 origin_url,
454 path_base, 462 path_base,
455 data_loss, 463 data_loss,
456 data_loss_message, 464 data_loss_message,
457 disk_full, 465 disk_full,
458 &leveldb_factory); 466 &leveldb_factory,
467 task_runner);
459 } 468 }
460 469
461 static std::string OriginToCustomHistogramSuffix(const GURL& origin_url) { 470 static std::string OriginToCustomHistogramSuffix(const GURL& origin_url) {
462 if (origin_url.host() == "docs.google.com") 471 if (origin_url.host() == "docs.google.com")
463 return ".Docs"; 472 return ".Docs";
464 return std::string(); 473 return std::string();
465 } 474 }
466 475
467 static void HistogramOpenStatus(IndexedDBBackingStoreOpenResult result, 476 static void HistogramOpenStatus(IndexedDBBackingStoreOpenResult result,
468 const GURL& origin_url) { 477 const GURL& origin_url) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 min, 518 min,
510 max, 519 max,
511 num_buckets); 520 num_buckets);
512 return true; 521 return true;
513 } 522 }
514 return false; 523 return false;
515 } 524 }
516 525
517 // static 526 // static
518 scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::Open( 527 scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::Open(
528 IndexedDBFactory* indexed_db_factory,
519 const GURL& origin_url, 529 const GURL& origin_url,
520 const base::FilePath& path_base, 530 const base::FilePath& path_base,
521 blink::WebIDBDataLoss* data_loss, 531 blink::WebIDBDataLoss* data_loss,
522 std::string* data_loss_message, 532 std::string* data_loss_message,
523 bool* is_disk_full, 533 bool* is_disk_full,
524 LevelDBFactory* leveldb_factory) { 534 LevelDBFactory* leveldb_factory,
535 base::TaskRunner* task_runner) {
525 IDB_TRACE("IndexedDBBackingStore::Open"); 536 IDB_TRACE("IndexedDBBackingStore::Open");
526 DCHECK(!path_base.empty()); 537 DCHECK(!path_base.empty());
527 *data_loss = blink::WebIDBDataLossNone; 538 *data_loss = blink::WebIDBDataLossNone;
528 *data_loss_message = ""; 539 *data_loss_message = "";
529 *is_disk_full = false; 540 *is_disk_full = false;
530 541
531 scoped_ptr<LevelDBComparator> comparator(new Comparator()); 542 scoped_ptr<LevelDBComparator> comparator(new Comparator());
532 543
533 if (!IsStringASCII(path_base.AsUTF8Unsafe())) { 544 if (!IsStringASCII(path_base.AsUTF8Unsafe())) {
534 HistogramOpenStatus(INDEXED_DB_BACKING_STORE_OPEN_ATTEMPT_NON_ASCII, 545 HistogramOpenStatus(INDEXED_DB_BACKING_STORE_OPEN_ATTEMPT_NON_ASCII,
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 origin_url); 632 origin_url);
622 } 633 }
623 634
624 if (!db) { 635 if (!db) {
625 NOTREACHED(); 636 NOTREACHED();
626 HistogramOpenStatus(INDEXED_DB_BACKING_STORE_OPEN_FAILED_UNKNOWN_ERR, 637 HistogramOpenStatus(INDEXED_DB_BACKING_STORE_OPEN_FAILED_UNKNOWN_ERR,
627 origin_url); 638 origin_url);
628 return scoped_refptr<IndexedDBBackingStore>(); 639 return scoped_refptr<IndexedDBBackingStore>();
629 } 640 }
630 641
631 return Create(origin_url, db.Pass(), comparator.Pass()); 642 return Create(indexed_db_factory,
632 } 643 origin_url,
633 644 db.Pass(),
634 // static 645 comparator.Pass(),
635 scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::OpenInMemory( 646 task_runner);
636 const GURL& origin_url) {
637 DefaultLevelDBFactory leveldb_factory;
638 return IndexedDBBackingStore::OpenInMemory(origin_url, &leveldb_factory);
639 } 647 }
640 648
641 // static 649 // static
642 scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::OpenInMemory( 650 scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::OpenInMemory(
643 const GURL& origin_url, 651 const GURL& origin_url,
644 LevelDBFactory* leveldb_factory) { 652 base::TaskRunner* task_runner) {
653 DefaultLevelDBFactory leveldb_factory;
654 return IndexedDBBackingStore::OpenInMemory(
655 origin_url, &leveldb_factory, task_runner);
656 }
657
658 // static
659 scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::OpenInMemory(
660 const GURL& origin_url,
661 LevelDBFactory* leveldb_factory,
662 base::TaskRunner* task_runner) {
645 IDB_TRACE("IndexedDBBackingStore::OpenInMemory"); 663 IDB_TRACE("IndexedDBBackingStore::OpenInMemory");
646 664
647 scoped_ptr<LevelDBComparator> comparator(new Comparator()); 665 scoped_ptr<LevelDBComparator> comparator(new Comparator());
648 scoped_ptr<LevelDBDatabase> db = 666 scoped_ptr<LevelDBDatabase> db =
649 LevelDBDatabase::OpenInMemory(comparator.get()); 667 LevelDBDatabase::OpenInMemory(comparator.get());
650 if (!db) { 668 if (!db) {
651 LOG(ERROR) << "LevelDBDatabase::OpenInMemory failed."; 669 LOG(ERROR) << "LevelDBDatabase::OpenInMemory failed.";
652 HistogramOpenStatus(INDEXED_DB_BACKING_STORE_OPEN_MEMORY_FAILED, 670 HistogramOpenStatus(INDEXED_DB_BACKING_STORE_OPEN_MEMORY_FAILED,
653 origin_url); 671 origin_url);
654 return scoped_refptr<IndexedDBBackingStore>(); 672 return scoped_refptr<IndexedDBBackingStore>();
655 } 673 }
656 HistogramOpenStatus(INDEXED_DB_BACKING_STORE_OPEN_MEMORY_SUCCESS, origin_url); 674 HistogramOpenStatus(INDEXED_DB_BACKING_STORE_OPEN_MEMORY_SUCCESS, origin_url);
657 675
658 return Create(origin_url, db.Pass(), comparator.Pass()); 676 return Create(NULL /* indexed_db_factory */,
677 origin_url,
678 db.Pass(),
679 comparator.Pass(),
680 task_runner);
659 } 681 }
660 682
661 // static 683 // static
662 scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::Create( 684 scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::Create(
685 IndexedDBFactory* indexed_db_factory,
663 const GURL& origin_url, 686 const GURL& origin_url,
664 scoped_ptr<LevelDBDatabase> db, 687 scoped_ptr<LevelDBDatabase> db,
665 scoped_ptr<LevelDBComparator> comparator) { 688 scoped_ptr<LevelDBComparator> comparator,
689 base::TaskRunner* task_runner) {
666 // TODO(jsbell): Handle comparator name changes. 690 // TODO(jsbell): Handle comparator name changes.
667 691
668 scoped_refptr<IndexedDBBackingStore> backing_store( 692 scoped_refptr<IndexedDBBackingStore> backing_store(
669 new IndexedDBBackingStore(origin_url, db.Pass(), comparator.Pass())); 693 new IndexedDBBackingStore(indexed_db_factory,
694 origin_url,
695 db.Pass(),
696 comparator.Pass(),
697 task_runner));
670 if (!SetUpMetadata(backing_store->db_.get(), 698 if (!SetUpMetadata(backing_store->db_.get(),
671 backing_store->origin_identifier_)) 699 backing_store->origin_identifier_))
672 return scoped_refptr<IndexedDBBackingStore>(); 700 return scoped_refptr<IndexedDBBackingStore>();
673 701
674 return backing_store; 702 return backing_store;
675 } 703 }
676 704
677 std::vector<base::string16> IndexedDBBackingStore::GetDatabaseNames() { 705 std::vector<base::string16> IndexedDBBackingStore::GetDatabaseNames() {
678 std::vector<base::string16> found_names; 706 std::vector<base::string16> found_names;
679 const std::string start_key = 707 const std::string start_key =
(...skipping 1169 matching lines...) Expand 10 before | Expand all | Expand 10 after
1849 return InvalidDBKeyStatus(); 1877 return InvalidDBKeyStatus();
1850 } 1878 }
1851 1879
1852 StringPiece slice(found_encoded_primary_key); 1880 StringPiece slice(found_encoded_primary_key);
1853 if (DecodeIDBKey(&slice, found_primary_key) && slice.empty()) 1881 if (DecodeIDBKey(&slice, found_primary_key) && slice.empty())
1854 return s; 1882 return s;
1855 else 1883 else
1856 return InvalidDBKeyStatus(); 1884 return InvalidDBKeyStatus();
1857 } 1885 }
1858 1886
1887 void IndexedDBBackingStore::ReportBlobUnused(int64 database_id,
1888 int64 blob_key) {
1889 // TODO(ericu)
1890 }
1891
1859 IndexedDBBackingStore::Cursor::Cursor( 1892 IndexedDBBackingStore::Cursor::Cursor(
1860 const IndexedDBBackingStore::Cursor* other) 1893 const IndexedDBBackingStore::Cursor* other)
1861 : transaction_(other->transaction_), 1894 : transaction_(other->transaction_),
1862 cursor_options_(other->cursor_options_), 1895 cursor_options_(other->cursor_options_),
1863 current_key_(new IndexedDBKey(*other->current_key_)) { 1896 current_key_(new IndexedDBKey(*other->current_key_)) {
1864 if (other->iterator_) { 1897 if (other->iterator_) {
1865 iterator_ = transaction_->CreateIterator(); 1898 iterator_ = transaction_->CreateIterator();
1866 1899
1867 if (other->iterator_->IsValid()) { 1900 if (other->iterator_->IsValid()) {
1868 iterator_->Seek(other->iterator_->Key()); 1901 iterator_->Seek(other->iterator_->Key());
(...skipping 776 matching lines...) Expand 10 before | Expand all | Expand 10 after
2645 } 2678 }
2646 2679
2647 void IndexedDBBackingStore::Transaction::Rollback() { 2680 void IndexedDBBackingStore::Transaction::Rollback() {
2648 IDB_TRACE("IndexedDBBackingStore::Transaction::Rollback"); 2681 IDB_TRACE("IndexedDBBackingStore::Transaction::Rollback");
2649 DCHECK(transaction_.get()); 2682 DCHECK(transaction_.get());
2650 transaction_->Rollback(); 2683 transaction_->Rollback();
2651 transaction_ = NULL; 2684 transaction_ = NULL;
2652 } 2685 }
2653 2686
2654 } // namespace content 2687 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698