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

Unified Diff: content/browser/indexed_db/indexed_db_factory_impl.cc

Issue 2773823002: Use a two-part data format version in IndexedDB metadata. (Closed)
Patch Set: jsbell, cmumford Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/indexed_db/indexed_db_factory_impl.cc
diff --git a/content/browser/indexed_db/indexed_db_factory_impl.cc b/content/browser/indexed_db/indexed_db_factory_impl.cc
index b8a553642a56f9d7861bae6025756eee0c78b383..9726ec2d9e3defe18aece5959ffe5d67957e6575 100644
--- a/content/browser/indexed_db/indexed_db_factory_impl.cc
+++ b/content/browser/indexed_db/indexed_db_factory_impl.cc
@@ -173,6 +173,7 @@ void IndexedDBFactoryImpl::GetDatabaseNames(
scoped_refptr<IndexedDBCallbacks> callbacks,
const Origin& origin,
const base::FilePath& data_directory,
+ const IndexedDBDataFormatVersion& client_data_format_version,
scoped_refptr<net::URLRequestContextGetter> request_context_getter) {
IDB_TRACE("IndexedDBFactoryImpl::GetDatabaseNames");
// TODO(dgrogan): Plumb data_loss back to script eventually?
@@ -181,8 +182,8 @@ void IndexedDBFactoryImpl::GetDatabaseNames(
leveldb::Status s;
// TODO(cmumford): Handle this error
scoped_refptr<IndexedDBBackingStore> backing_store =
- OpenBackingStore(origin, data_directory, request_context_getter,
- &data_loss_info, &disk_full, &s);
+ OpenBackingStore(origin, data_directory, client_data_format_version,
+ request_context_getter, &data_loss_info, &disk_full, &s);
if (!backing_store.get()) {
callbacks->OnError(
IndexedDBDatabaseError(blink::WebIDBDatabaseExceptionUnknownError,
@@ -214,6 +215,7 @@ void IndexedDBFactoryImpl::DeleteDatabase(
scoped_refptr<IndexedDBCallbacks> callbacks,
const Origin& origin,
const base::FilePath& data_directory,
+ const IndexedDBDataFormatVersion& client_data_format_version,
bool force_close) {
IDB_TRACE("IndexedDBFactoryImpl::DeleteDatabase");
IndexedDBDatabase::Identifier unique_identifier(origin, name);
@@ -230,8 +232,8 @@ void IndexedDBFactoryImpl::DeleteDatabase(
bool disk_full = false;
leveldb::Status s;
scoped_refptr<IndexedDBBackingStore> backing_store =
- OpenBackingStore(origin, data_directory, request_context_getter,
- &data_loss_info, &disk_full, &s);
+ OpenBackingStore(origin, data_directory, client_data_format_version,
+ request_context_getter, &data_loss_info, &disk_full, &s);
if (!backing_store.get()) {
IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
ASCIIToUTF16(
@@ -352,19 +354,21 @@ scoped_refptr<IndexedDBBackingStore>
IndexedDBFactoryImpl::OpenBackingStoreHelper(
const Origin& origin,
const base::FilePath& data_directory,
+ const IndexedDBDataFormatVersion& data_format_version,
scoped_refptr<net::URLRequestContextGetter> request_context_getter,
IndexedDBDataLossInfo* data_loss_info,
bool* disk_full,
bool first_time,
leveldb::Status* status) {
return IndexedDBBackingStore::Open(
- this, origin, data_directory, request_context_getter, data_loss_info,
- disk_full, context_->TaskRunner(), first_time, status);
+ this, origin, data_directory, data_format_version, request_context_getter,
+ data_loss_info, disk_full, context_->TaskRunner(), first_time, status);
}
scoped_refptr<IndexedDBBackingStore> IndexedDBFactoryImpl::OpenBackingStore(
const Origin& origin,
const base::FilePath& data_directory,
+ const IndexedDBDataFormatVersion& data_format_version,
scoped_refptr<net::URLRequestContextGetter> request_context_getter,
IndexedDBDataLossInfo* data_loss_info,
bool* disk_full,
@@ -373,21 +377,26 @@ scoped_refptr<IndexedDBBackingStore> IndexedDBFactoryImpl::OpenBackingStore(
const auto& it2 = backing_store_map_.find(origin);
if (it2 != backing_store_map_.end()) {
- it2->second->close_timer()->Stop();
- return it2->second;
+ scoped_refptr<IndexedDBBackingStore> backing_store = it2->second;
+ if (backing_store->data_format_version() != data_format_version) {
+ LOG(ERROR) << "IndexedDB backing store already open with a different "
+ "data format version.";
+ }
+ backing_store->close_timer()->Stop();
+ return backing_store;
}
scoped_refptr<IndexedDBBackingStore> backing_store;
bool first_time = false;
if (open_in_memory) {
backing_store = IndexedDBBackingStore::OpenInMemory(
- origin, context_->TaskRunner(), status);
+ origin, data_format_version, context_->TaskRunner(), status);
} else {
first_time = !backends_opened_since_boot_.count(origin);
- backing_store =
- OpenBackingStoreHelper(origin, data_directory, request_context_getter,
- data_loss_info, disk_full, first_time, status);
+ backing_store = OpenBackingStoreHelper(
+ origin, data_directory, data_format_version, request_context_getter,
+ data_loss_info, disk_full, first_time, status);
}
if (backing_store.get()) {
@@ -413,7 +422,8 @@ void IndexedDBFactoryImpl::Open(
std::unique_ptr<IndexedDBPendingConnection> connection,
scoped_refptr<net::URLRequestContextGetter> request_context_getter,
const Origin& origin,
- const base::FilePath& data_directory) {
+ const base::FilePath& data_directory,
+ const IndexedDBDataFormatVersion& client_data_format_version) {
IDB_TRACE("IndexedDBFactoryImpl::Open");
scoped_refptr<IndexedDBDatabase> database;
IndexedDBDatabase::Identifier unique_identifier(origin, name);
@@ -423,9 +433,9 @@ void IndexedDBFactoryImpl::Open(
bool was_open = (it != database_map_.end());
if (!was_open) {
leveldb::Status s;
- scoped_refptr<IndexedDBBackingStore> backing_store =
- OpenBackingStore(origin, data_directory, request_context_getter,
- &data_loss_info, &disk_full, &s);
+ scoped_refptr<IndexedDBBackingStore> backing_store = OpenBackingStore(
+ origin, data_directory, client_data_format_version,
+ request_context_getter, &data_loss_info, &disk_full, &s);
if (!backing_store.get()) {
if (disk_full) {
connection->callbacks->OnError(IndexedDBDatabaseError(

Powered by Google App Engine
This is Rietveld 408576698