| Index: content/browser/indexed_db/indexed_db_dispatcher_host.cc
|
| diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.cc b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
|
| index f1663a5dc6b57e552e03365b929a9f7588911214..ab3669cd4654d69a2e7147bfbc1ac19baafe605f 100644
|
| --- a/content/browser/indexed_db/indexed_db_dispatcher_host.cc
|
| +++ b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
|
| @@ -95,6 +95,17 @@ void IndexedDBDispatcherHost::DropBlobData(const std::string& uuid) {
|
| --iter->second.second;
|
| }
|
|
|
| +void IndexedDBDispatcherHost::Configure(
|
| + const IndexedDBDataFormatVersion& client_data_format_version) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| +
|
| + // TODO(jbroman): We could take mojo::GetBadMessageCallback here to tell the
|
| + // IPC system that this is a bad message, if this ever changes. Should we?
|
| + indexed_db_context_->TaskRunner()->PostTask(
|
| + FROM_HERE, base::Bind(&IndexedDBDispatcherHost::ConfigureOnIDBThread,
|
| + this, client_data_format_version));
|
| +}
|
| +
|
| void IndexedDBDispatcherHost::GetDatabaseNames(
|
| ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info,
|
| const url::Origin& origin) {
|
| @@ -159,14 +170,28 @@ void IndexedDBDispatcherHost::DeleteDatabase(
|
| force_close));
|
| }
|
|
|
| +void IndexedDBDispatcherHost::ConfigureOnIDBThread(
|
| + const IndexedDBDataFormatVersion& client_data_format_version) {
|
| + if (!client_data_format_version_)
|
| + client_data_format_version_ = client_data_format_version;
|
| + if (client_data_format_version_ != client_data_format_version)
|
| + LOG(ERROR) << "IndexedDB client's supported data format version changed!";
|
| +}
|
| +
|
| void IndexedDBDispatcherHost::GetDatabaseNamesOnIDBThread(
|
| scoped_refptr<IndexedDBCallbacks> callbacks,
|
| const url::Origin& origin) {
|
| DCHECK(indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread());
|
|
|
| + // TODO(jbroman): How fail here?
|
| + if (!client_data_format_version_)
|
| + LOG(ERROR) << "IndexedDB client failed to call Configure!";
|
| +
|
| base::FilePath indexed_db_path = indexed_db_context_->data_path();
|
| context()->GetIDBFactory()->GetDatabaseNames(
|
| - callbacks, origin, indexed_db_path, request_context_getter_);
|
| + callbacks, origin, indexed_db_path,
|
| + client_data_format_version_.value_or(IndexedDBDataFormatVersion()),
|
| + request_context_getter_);
|
| }
|
|
|
| void IndexedDBDispatcherHost::OpenOnIDBThread(
|
| @@ -181,6 +206,10 @@ void IndexedDBDispatcherHost::OpenOnIDBThread(
|
| base::TimeTicks begin_time = base::TimeTicks::Now();
|
| base::FilePath indexed_db_path = indexed_db_context_->data_path();
|
|
|
| + // TODO(jbroman): How fail here?
|
| + if (!client_data_format_version_)
|
| + LOG(ERROR) << "IndexedDB client failed to call Configure!";
|
| +
|
| // TODO(dgrogan): Don't let a non-existing database be opened (and therefore
|
| // created) if this origin is already over quota.
|
| callbacks->SetConnectionOpenStartTime(begin_time);
|
| @@ -189,9 +218,10 @@ void IndexedDBDispatcherHost::OpenOnIDBThread(
|
| callbacks, database_callbacks, ipc_process_id_, transaction_id,
|
| version);
|
| DCHECK(request_context_getter_);
|
| - context()->GetIDBFactory()->Open(name, std::move(connection),
|
| - request_context_getter_, origin,
|
| - indexed_db_path);
|
| + context()->GetIDBFactory()->Open(
|
| + name, std::move(connection), request_context_getter_, origin,
|
| + indexed_db_path,
|
| + client_data_format_version_.value_or(IndexedDBDataFormatVersion()));
|
| }
|
|
|
| void IndexedDBDispatcherHost::DeleteDatabaseOnIDBThread(
|
| @@ -202,9 +232,15 @@ void IndexedDBDispatcherHost::DeleteDatabaseOnIDBThread(
|
| DCHECK(indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread());
|
|
|
| base::FilePath indexed_db_path = indexed_db_context_->data_path();
|
| +
|
| + // TODO(jbroman): How fail here?
|
| + if (!client_data_format_version_)
|
| + LOG(ERROR) << "IndexedDB client failed to call Configure!";
|
| +
|
| DCHECK(request_context_getter_);
|
| context()->GetIDBFactory()->DeleteDatabase(
|
| name, request_context_getter_, callbacks, origin, indexed_db_path,
|
| + client_data_format_version_.value_or(IndexedDBDataFormatVersion()),
|
| force_close);
|
| }
|
|
|
|
|