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( |