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

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

Issue 18224002: IndexedDB: Eliminate IndexedDBDatabaseCallbacksWrapper (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Include fix for win Created 7 years, 5 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_database.h" 5 #include "content/browser/indexed_db/indexed_db_database.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 }; 57 };
58 58
59 class IndexedDBDatabase::VersionChangeOperation 59 class IndexedDBDatabase::VersionChangeOperation
60 : public IndexedDBTransaction::Operation { 60 : public IndexedDBTransaction::Operation {
61 public: 61 public:
62 VersionChangeOperation( 62 VersionChangeOperation(
63 scoped_refptr<IndexedDBDatabase> database, 63 scoped_refptr<IndexedDBDatabase> database,
64 int64 transaction_id, 64 int64 transaction_id,
65 int64 version, 65 int64 version,
66 scoped_refptr<IndexedDBCallbacksWrapper> callbacks, 66 scoped_refptr<IndexedDBCallbacksWrapper> callbacks,
67 scoped_refptr<IndexedDBDatabaseCallbacksWrapper> database_callbacks, 67 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
68 WebKit::WebIDBCallbacks::DataLoss data_loss) 68 WebKit::WebIDBCallbacks::DataLoss data_loss)
69 : database_(database), 69 : database_(database),
70 transaction_id_(transaction_id), 70 transaction_id_(transaction_id),
71 version_(version), 71 version_(version),
72 callbacks_(callbacks), 72 callbacks_(callbacks),
73 database_callbacks_(database_callbacks), 73 database_callbacks_(database_callbacks),
74 data_loss_(data_loss) {} 74 data_loss_(data_loss) {}
75 virtual void Perform(IndexedDBTransaction* transaction) OVERRIDE; 75 virtual void Perform(IndexedDBTransaction* transaction) OVERRIDE;
76 76
77 private: 77 private:
78 scoped_refptr<IndexedDBDatabase> database_; 78 scoped_refptr<IndexedDBDatabase> database_;
79 int64 transaction_id_; 79 int64 transaction_id_;
80 int64 version_; 80 int64 version_;
81 scoped_refptr<IndexedDBCallbacksWrapper> callbacks_; 81 scoped_refptr<IndexedDBCallbacksWrapper> callbacks_;
82 scoped_refptr<IndexedDBDatabaseCallbacksWrapper> database_callbacks_; 82 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks_;
83 WebKit::WebIDBCallbacks::DataLoss data_loss_; 83 WebKit::WebIDBCallbacks::DataLoss data_loss_;
84 }; 84 };
85 85
86 class CreateObjectStoreAbortOperation : public IndexedDBTransaction::Operation { 86 class CreateObjectStoreAbortOperation : public IndexedDBTransaction::Operation {
87 public: 87 public:
88 CreateObjectStoreAbortOperation(scoped_refptr<IndexedDBDatabase> database, 88 CreateObjectStoreAbortOperation(scoped_refptr<IndexedDBDatabase> database,
89 int64 object_store_id) 89 int64 object_store_id)
90 : database_(database), object_store_id_(object_store_id) {} 90 : database_(database), object_store_id_(object_store_id) {}
91 virtual void Perform(IndexedDBTransaction* transaction) OVERRIDE; 91 virtual void Perform(IndexedDBTransaction* transaction) OVERRIDE;
92 92
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 const scoped_refptr<IndexedDBBackingStore> backing_store_; 366 const scoped_refptr<IndexedDBBackingStore> backing_store_;
367 const int64 database_id_; 367 const int64 database_id_;
368 const int64 object_store_id_; 368 const int64 object_store_id_;
369 const scoped_refptr<IndexedDBCallbacksWrapper> callbacks_; 369 const scoped_refptr<IndexedDBCallbacksWrapper> callbacks_;
370 }; 370 };
371 371
372 class IndexedDBDatabase::PendingOpenCall { 372 class IndexedDBDatabase::PendingOpenCall {
373 public: 373 public:
374 PendingOpenCall( 374 PendingOpenCall(
375 scoped_refptr<IndexedDBCallbacksWrapper> callbacks, 375 scoped_refptr<IndexedDBCallbacksWrapper> callbacks,
376 scoped_refptr<IndexedDBDatabaseCallbacksWrapper> database_callbacks, 376 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
377 int64 transaction_id, 377 int64 transaction_id,
378 int64 version) 378 int64 version)
379 : callbacks_(callbacks), 379 : callbacks_(callbacks),
380 database_callbacks_(database_callbacks), 380 database_callbacks_(database_callbacks),
381 version_(version), 381 version_(version),
382 transaction_id_(transaction_id) {} 382 transaction_id_(transaction_id) {}
383 scoped_refptr<IndexedDBCallbacksWrapper> Callbacks() { return callbacks_; } 383 scoped_refptr<IndexedDBCallbacksWrapper> Callbacks() { return callbacks_; }
384 scoped_refptr<IndexedDBDatabaseCallbacksWrapper> DatabaseCallbacks() { 384 scoped_refptr<IndexedDBDatabaseCallbacks> DatabaseCallbacks() {
385 return database_callbacks_; 385 return database_callbacks_;
386 } 386 }
387 int64 Version() { return version_; } 387 int64 Version() { return version_; }
388 int64 TransactionId() const { return transaction_id_; } 388 int64 TransactionId() const { return transaction_id_; }
389 389
390 private: 390 private:
391 scoped_refptr<IndexedDBCallbacksWrapper> callbacks_; 391 scoped_refptr<IndexedDBCallbacksWrapper> callbacks_;
392 scoped_refptr<IndexedDBDatabaseCallbacksWrapper> database_callbacks_; 392 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks_;
393 int64 version_; 393 int64 version_;
394 const int64 transaction_id_; 394 const int64 transaction_id_;
395 }; 395 };
396 396
397 class IndexedDBDatabase::PendingDeleteCall { 397 class IndexedDBDatabase::PendingDeleteCall {
398 public: 398 public:
399 explicit PendingDeleteCall(scoped_refptr<IndexedDBCallbacksWrapper> callbacks) 399 explicit PendingDeleteCall(scoped_refptr<IndexedDBCallbacksWrapper> callbacks)
400 : callbacks_(callbacks) {} 400 : callbacks_(callbacks) {}
401 scoped_refptr<IndexedDBCallbacksWrapper> Callbacks() { return callbacks_; } 401 scoped_refptr<IndexedDBCallbacksWrapper> Callbacks() { return callbacks_; }
402 402
(...skipping 1102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1505 OpenConnection(pending_open_call->Callbacks(), 1505 OpenConnection(pending_open_call->Callbacks(),
1506 pending_open_call->DatabaseCallbacks(), 1506 pending_open_call->DatabaseCallbacks(),
1507 pending_open_call->TransactionId(), 1507 pending_open_call->TransactionId(),
1508 pending_open_call->Version()); 1508 pending_open_call->Version());
1509 } 1509 }
1510 } 1510 }
1511 } 1511 }
1512 1512
1513 void IndexedDBDatabase::CreateTransaction( 1513 void IndexedDBDatabase::CreateTransaction(
1514 int64 transaction_id, 1514 int64 transaction_id,
1515 scoped_refptr<IndexedDBDatabaseCallbacksWrapper> callbacks, 1515 scoped_refptr<IndexedDBDatabaseCallbacks> callbacks,
1516 const std::vector<int64>& object_store_ids, 1516 const std::vector<int64>& object_store_ids,
1517 uint16 mode) { 1517 uint16 mode) {
1518 1518
1519 DCHECK(database_callbacks_set_.has(callbacks)); 1519 DCHECK(database_callbacks_set_.has(callbacks));
1520 1520
1521 scoped_refptr<IndexedDBTransaction> transaction = 1521 scoped_refptr<IndexedDBTransaction> transaction =
1522 IndexedDBTransaction::Create( 1522 IndexedDBTransaction::Create(
1523 transaction_id, 1523 transaction_id,
1524 callbacks, 1524 callbacks,
1525 object_store_ids, 1525 object_store_ids,
1526 static_cast<indexed_db::TransactionMode>(mode), 1526 static_cast<indexed_db::TransactionMode>(mode),
1527 this); 1527 this);
1528 DCHECK(transactions_.find(transaction_id) == transactions_.end()); 1528 DCHECK(transactions_.find(transaction_id) == transactions_.end());
1529 transactions_[transaction_id] = transaction.get(); 1529 transactions_[transaction_id] = transaction.get();
1530 } 1530 }
1531 1531
1532 bool IndexedDBDatabase::IsOpenConnectionBlocked() const { 1532 bool IndexedDBDatabase::IsOpenConnectionBlocked() const {
1533 return !pending_delete_calls_.empty() || 1533 return !pending_delete_calls_.empty() ||
1534 running_version_change_transaction_ || 1534 running_version_change_transaction_ ||
1535 pending_run_version_change_transaction_call_; 1535 pending_run_version_change_transaction_call_;
1536 } 1536 }
1537 1537
1538 void IndexedDBDatabase::OpenConnection( 1538 void IndexedDBDatabase::OpenConnection(
1539 scoped_refptr<IndexedDBCallbacksWrapper> callbacks, 1539 scoped_refptr<IndexedDBCallbacksWrapper> callbacks,
1540 scoped_refptr<IndexedDBDatabaseCallbacksWrapper> database_callbacks, 1540 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
1541 int64 transaction_id, 1541 int64 transaction_id,
1542 int64 version) { 1542 int64 version) {
1543 const WebKit::WebIDBCallbacks::DataLoss kDataLoss = 1543 const WebKit::WebIDBCallbacks::DataLoss kDataLoss =
1544 WebKit::WebIDBCallbacks::DataLossNone; 1544 WebKit::WebIDBCallbacks::DataLossNone;
1545 OpenConnection( 1545 OpenConnection(
1546 callbacks, database_callbacks, transaction_id, version, kDataLoss); 1546 callbacks, database_callbacks, transaction_id, version, kDataLoss);
1547 } 1547 }
1548 1548
1549 void IndexedDBDatabase::OpenConnection( 1549 void IndexedDBDatabase::OpenConnection(
1550 scoped_refptr<IndexedDBCallbacksWrapper> callbacks, 1550 scoped_refptr<IndexedDBCallbacksWrapper> callbacks,
1551 scoped_refptr<IndexedDBDatabaseCallbacksWrapper> database_callbacks, 1551 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
1552 int64 transaction_id, 1552 int64 transaction_id,
1553 int64 version, 1553 int64 version,
1554 WebKit::WebIDBCallbacks::DataLoss data_loss) { 1554 WebKit::WebIDBCallbacks::DataLoss data_loss) {
1555 DCHECK(backing_store_.get()); 1555 DCHECK(backing_store_.get());
1556 1556
1557 // TODO(jsbell): Should have a priority queue so that higher version 1557 // TODO(jsbell): Should have a priority queue so that higher version
1558 // requests are processed first. http://crbug.com/225850 1558 // requests are processed first. http://crbug.com/225850
1559 if (IsOpenConnectionBlocked()) { 1559 if (IsOpenConnectionBlocked()) {
1560 // The backing store only detects data loss when it is first opened. The 1560 // The backing store only detects data loss when it is first opened. The
1561 // presence of existing connections means we didn't even check for data loss 1561 // presence of existing connections means we didn't even check for data loss
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1628 Int64ToString16(metadata_.int_version) + ASCIIToUTF16(")."))); 1628 Int64ToString16(metadata_.int_version) + ASCIIToUTF16(").")));
1629 return; 1629 return;
1630 } 1630 }
1631 DCHECK_EQ(version, metadata_.int_version); 1631 DCHECK_EQ(version, metadata_.int_version);
1632 database_callbacks_set_.insert(database_callbacks); 1632 database_callbacks_set_.insert(database_callbacks);
1633 callbacks->OnSuccess(this, this->metadata()); 1633 callbacks->OnSuccess(this, this->metadata());
1634 } 1634 }
1635 1635
1636 void IndexedDBDatabase::RunVersionChangeTransaction( 1636 void IndexedDBDatabase::RunVersionChangeTransaction(
1637 scoped_refptr<IndexedDBCallbacksWrapper> callbacks, 1637 scoped_refptr<IndexedDBCallbacksWrapper> callbacks,
1638 scoped_refptr<IndexedDBDatabaseCallbacksWrapper> database_callbacks, 1638 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
1639 int64 transaction_id, 1639 int64 transaction_id,
1640 int64 requested_version, 1640 int64 requested_version,
1641 WebKit::WebIDBCallbacks::DataLoss data_loss) { 1641 WebKit::WebIDBCallbacks::DataLoss data_loss) {
1642 1642
1643 DCHECK(callbacks.get()); 1643 DCHECK(callbacks.get());
1644 DCHECK(database_callbacks_set_.has(database_callbacks)); 1644 DCHECK(database_callbacks_set_.has(database_callbacks));
1645 if (ConnectionCount() > 1) { 1645 if (ConnectionCount() > 1) {
1646 DCHECK_NE(WebKit::WebIDBCallbacks::DataLossTotal, data_loss); 1646 DCHECK_NE(WebKit::WebIDBCallbacks::DataLossTotal, data_loss);
1647 // Front end ensures the event is not fired at connections that have 1647 // Front end ensures the event is not fired at connections that have
1648 // close_pending set. 1648 // close_pending set.
(...skipping 16 matching lines...) Expand all
1665 } 1665 }
1666 RunVersionChangeTransactionFinal(callbacks, 1666 RunVersionChangeTransactionFinal(callbacks,
1667 database_callbacks, 1667 database_callbacks,
1668 transaction_id, 1668 transaction_id,
1669 requested_version, 1669 requested_version,
1670 data_loss); 1670 data_loss);
1671 } 1671 }
1672 1672
1673 void IndexedDBDatabase::RunVersionChangeTransactionFinal( 1673 void IndexedDBDatabase::RunVersionChangeTransactionFinal(
1674 scoped_refptr<IndexedDBCallbacksWrapper> callbacks, 1674 scoped_refptr<IndexedDBCallbacksWrapper> callbacks,
1675 scoped_refptr<IndexedDBDatabaseCallbacksWrapper> database_callbacks, 1675 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
1676 int64 transaction_id, 1676 int64 transaction_id,
1677 int64 requested_version) { 1677 int64 requested_version) {
1678 const WebKit::WebIDBCallbacks::DataLoss kDataLoss = 1678 const WebKit::WebIDBCallbacks::DataLoss kDataLoss =
1679 WebKit::WebIDBCallbacks::DataLossNone; 1679 WebKit::WebIDBCallbacks::DataLossNone;
1680 RunVersionChangeTransactionFinal(callbacks, 1680 RunVersionChangeTransactionFinal(callbacks,
1681 database_callbacks, 1681 database_callbacks,
1682 transaction_id, 1682 transaction_id,
1683 requested_version, 1683 requested_version,
1684 kDataLoss); 1684 kDataLoss);
1685 } 1685 }
1686 1686
1687 void IndexedDBDatabase::RunVersionChangeTransactionFinal( 1687 void IndexedDBDatabase::RunVersionChangeTransactionFinal(
1688 scoped_refptr<IndexedDBCallbacksWrapper> callbacks, 1688 scoped_refptr<IndexedDBCallbacksWrapper> callbacks,
1689 scoped_refptr<IndexedDBDatabaseCallbacksWrapper> database_callbacks, 1689 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
1690 int64 transaction_id, 1690 int64 transaction_id,
1691 int64 requested_version, 1691 int64 requested_version,
1692 WebKit::WebIDBCallbacks::DataLoss data_loss) { 1692 WebKit::WebIDBCallbacks::DataLoss data_loss) {
1693 1693
1694 std::vector<int64> object_store_ids; 1694 std::vector<int64> object_store_ids;
1695 CreateTransaction(transaction_id, 1695 CreateTransaction(transaction_id,
1696 database_callbacks, 1696 database_callbacks,
1697 object_store_ids, 1697 object_store_ids,
1698 indexed_db::TRANSACTION_VERSION_CHANGE); 1698 indexed_db::TRANSACTION_VERSION_CHANGE);
1699 scoped_refptr<IndexedDBTransaction> transaction = 1699 scoped_refptr<IndexedDBTransaction> transaction =
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1750 return; 1750 return;
1751 } 1751 }
1752 metadata_.version = kNoStringVersion; 1752 metadata_.version = kNoStringVersion;
1753 metadata_.id = kInvalidId; 1753 metadata_.id = kInvalidId;
1754 metadata_.int_version = IndexedDBDatabaseMetadata::NO_INT_VERSION; 1754 metadata_.int_version = IndexedDBDatabaseMetadata::NO_INT_VERSION;
1755 metadata_.object_stores.clear(); 1755 metadata_.object_stores.clear();
1756 callbacks->OnSuccess(); 1756 callbacks->OnSuccess();
1757 } 1757 }
1758 1758
1759 void IndexedDBDatabase::Close( 1759 void IndexedDBDatabase::Close(
1760 scoped_refptr<IndexedDBDatabaseCallbacksWrapper> callbacks) { 1760 scoped_refptr<IndexedDBDatabaseCallbacks> callbacks) {
1761 DCHECK(callbacks.get()); 1761 DCHECK(callbacks.get());
1762 DCHECK(database_callbacks_set_.has(callbacks)); 1762 DCHECK(database_callbacks_set_.has(callbacks));
1763 1763
1764 // Close outstanding transactions from the closing connection. This 1764 // Close outstanding transactions from the closing connection. This
1765 // can not happen if the close is requested by the connection itself 1765 // can not happen if the close is requested by the connection itself
1766 // as the front-end defers the close until all transactions are 1766 // as the front-end defers the close until all transactions are
1767 // complete, so something unusual has happened e.g. unexpected 1767 // complete, so something unusual has happened e.g. unexpected
1768 // process termination. 1768 // process termination.
1769 { 1769 {
1770 TransactionMap transactions(transactions_); 1770 TransactionMap transactions(transactions_);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1829 1829
1830 void IndexedDBDatabase::VersionChangeAbortOperation::Perform( 1830 void IndexedDBDatabase::VersionChangeAbortOperation::Perform(
1831 IndexedDBTransaction* transaction) { 1831 IndexedDBTransaction* transaction) {
1832 IDB_TRACE("VersionChangeAbortOperation"); 1832 IDB_TRACE("VersionChangeAbortOperation");
1833 DCHECK(!transaction); 1833 DCHECK(!transaction);
1834 database_->metadata_.version = previous_version_; 1834 database_->metadata_.version = previous_version_;
1835 database_->metadata_.int_version = previous_int_version_; 1835 database_->metadata_.int_version = previous_int_version_;
1836 } 1836 }
1837 1837
1838 } // namespace content 1838 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/indexed_db/indexed_db_database.h ('k') | content/browser/indexed_db/indexed_db_database_callbacks.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698