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 d4d55119bc988e909aaaca5ee4ff31154eefa88f..49cf4cfb62a4dc817f71b7c46c3c210ad40aebd5 100644 |
--- a/content/browser/indexed_db/indexed_db_factory_impl.cc |
+++ b/content/browser/indexed_db/indexed_db_factory_impl.cc |
@@ -15,8 +15,11 @@ |
#include "content/browser/indexed_db/indexed_db_backing_store.h" |
#include "content/browser/indexed_db/indexed_db_context_impl.h" |
#include "content/browser/indexed_db/indexed_db_database_error.h" |
+#include "content/browser/indexed_db/indexed_db_pending_connection.h" |
+#include "content/browser/indexed_db/indexed_db_pending_delete.h" |
#include "content/browser/indexed_db/indexed_db_tracing.h" |
#include "content/browser/indexed_db/indexed_db_transaction_coordinator.h" |
+#include "net/url_request/url_request_context_getter.h" |
#include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBDatabaseException.h" |
#include "third_party/leveldatabase/env_chromium.h" |
@@ -169,7 +172,6 @@ void IndexedDBFactoryImpl::ReportOutstandingBlobs(const Origin& origin, |
} |
void IndexedDBFactoryImpl::GetDatabaseNames( |
- scoped_refptr<IndexedDBCallbacks> callbacks, |
const Origin& origin, |
const base::FilePath& data_directory, |
scoped_refptr<net::URLRequestContextGetter> request_context_getter) { |
@@ -183,10 +185,12 @@ void IndexedDBFactoryImpl::GetDatabaseNames( |
OpenBackingStore(origin, data_directory, request_context_getter, |
&data_loss_info, &disk_full, &s); |
if (!backing_store.get()) { |
+#ifdef CJM_NEED_CALLBACK |
callbacks->OnError( |
IndexedDBDatabaseError(blink::WebIDBDatabaseExceptionUnknownError, |
"Internal error opening backing store for " |
"indexedDB.webkitGetDatabaseNames.")); |
+#endif |
return; |
} |
@@ -196,13 +200,17 @@ void IndexedDBFactoryImpl::GetDatabaseNames( |
IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError, |
"Internal error opening backing store for " |
"indexedDB.webkitGetDatabaseNames."); |
+#ifdef CJM_NEED_CALLBACK |
callbacks->OnError(error); |
+#endif |
backing_store = NULL; |
if (s.IsCorruption()) |
HandleBackingStoreCorruption(origin, error); |
return; |
} |
+#ifdef CJM_NEED_CALLBACK |
callbacks->OnSuccess(names); |
+#endif |
backing_store = NULL; |
ReleaseBackingStore(origin, false /* immediate */); |
} |
@@ -210,7 +218,7 @@ void IndexedDBFactoryImpl::GetDatabaseNames( |
void IndexedDBFactoryImpl::DeleteDatabase( |
const base::string16& name, |
scoped_refptr<net::URLRequestContextGetter> request_context_getter, |
- scoped_refptr<IndexedDBCallbacks> callbacks, |
+ std::unique_ptr<IndexedDBPendingDelete> pending_delete, |
const Origin& origin, |
const base::FilePath& data_directory) { |
IDB_TRACE("IndexedDBFactoryImpl::DeleteDatabase"); |
@@ -219,7 +227,7 @@ void IndexedDBFactoryImpl::DeleteDatabase( |
if (it != database_map_.end()) { |
// If there are any connections to the database, directly delete the |
// database. |
- it->second->DeleteDatabase(callbacks); |
+ it->second->DeleteDatabase(std::move(pending_delete)); |
return; |
} |
@@ -235,7 +243,7 @@ void IndexedDBFactoryImpl::DeleteDatabase( |
ASCIIToUTF16( |
"Internal error opening backing store " |
"for indexedDB.deleteDatabase.")); |
- callbacks->OnError(error); |
+ pending_delete->OnError(error); |
if (s.IsCorruption()) { |
HandleBackingStoreCorruption(origin, error); |
} |
@@ -248,15 +256,17 @@ void IndexedDBFactoryImpl::DeleteDatabase( |
IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError, |
"Internal error opening backing store for " |
"indexedDB.deleteDatabase."); |
- callbacks->OnError(error); |
+ pending_delete->OnError(error); |
backing_store = NULL; |
if (s.IsCorruption()) |
HandleBackingStoreCorruption(origin, error); |
return; |
} |
if (!base::ContainsValue(names, name)) { |
+#ifdef CJM_NEED_CALLBACK |
const int64_t version = 0; |
- callbacks->OnSuccess(version); |
+ pending_delete->OnSuccess(version); |
+#endif |
backing_store = NULL; |
ReleaseBackingStore(origin, false /* immediate */); |
return; |
@@ -270,7 +280,7 @@ void IndexedDBFactoryImpl::DeleteDatabase( |
ASCIIToUTF16( |
"Internal error creating database backend for " |
"indexedDB.deleteDatabase.")); |
- callbacks->OnError(error); |
+ pending_delete->OnError(error); |
if (s.IsCorruption()) { |
backing_store = NULL; |
HandleBackingStoreCorruption(origin, error); |
@@ -280,7 +290,7 @@ void IndexedDBFactoryImpl::DeleteDatabase( |
database_map_[unique_identifier] = database.get(); |
origin_dbs_.insert(std::make_pair(origin, database.get())); |
- database->DeleteDatabase(callbacks); |
+ database->DeleteDatabase(std::move(pending_delete)); |
RemoveDatabaseFromMaps(unique_identifier); |
database = NULL; |
backing_store = NULL; |
@@ -419,7 +429,7 @@ void IndexedDBFactoryImpl::Open( |
&data_loss_info, &disk_full, &s); |
if (!backing_store.get()) { |
if (disk_full) { |
- connection->callbacks->OnError(IndexedDBDatabaseError( |
+ connection->OnError(IndexedDBDatabaseError( |
blink::WebIDBDatabaseExceptionQuotaError, |
ASCIIToUTF16("Encountered full disk while opening " |
"backing store for indexedDB.open."))); |
@@ -429,7 +439,7 @@ void IndexedDBFactoryImpl::Open( |
ASCIIToUTF16( |
"Internal error opening backing store" |
" for indexedDB.open.")); |
- connection->callbacks->OnError(error); |
+ connection->OnError(error); |
if (s.IsCorruption()) { |
HandleBackingStoreCorruption(origin, error); |
} |
@@ -445,7 +455,7 @@ void IndexedDBFactoryImpl::Open( |
"Internal error creating " |
"database backend for " |
"indexedDB.open.")); |
- connection->callbacks->OnError(error); |
+ connection->OnError(error); |
if (s.IsCorruption()) { |
backing_store = NULL; // Closes the LevelDB so that it can be deleted |
HandleBackingStoreCorruption(origin, error); |
@@ -456,7 +466,7 @@ void IndexedDBFactoryImpl::Open( |
database = it->second; |
} |
- connection->data_loss_info = data_loss_info; |
+ connection->SetDataLossInfo(data_loss_info); |
database->OpenConnection(std::move(connection)); |
@@ -482,4 +492,8 @@ size_t IndexedDBFactoryImpl::GetConnectionCount(const Origin& origin) const { |
return count; |
} |
+IndexedDBContext* IndexedDBFactoryImpl::context() const { |
+ return context_; |
+} |
+ |
} // namespace content |