diff options
author | jsbell@chromium.org <jsbell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-01 22:54:07 +0000 |
---|---|---|
committer | jsbell@chromium.org <jsbell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-01 22:54:07 +0000 |
commit | 6abf88deaa410566ad4d57717e6fa204a9c85fb6 (patch) | |
tree | edfb54490e1814fc1b43686e4dc74b1815d02caf /content/browser/indexed_db/indexed_db_callbacks.cc | |
parent | b5167a3a9773bd348e1ab49e12545d6a6bdc2205 (diff) | |
download | chromium_src-6abf88deaa410566ad4d57717e6fa204a9c85fb6.zip chromium_src-6abf88deaa410566ad4d57717e6fa204a9c85fb6.tar.gz chromium_src-6abf88deaa410566ad4d57717e6fa204a9c85fb6.tar.bz2 |
IndexedDB: Remove IndexedDBCallbacksWrapper
Eliminate another bit of cruft from the Blink migration by merging
IndexedDBCallbacks and IndexedDBCallbacksWrapper.
BUG=234278
R=alecflett@chromium.org,dgrogan@chromium.org
TBR=jam@chromium.org
Review URL: https://chromiumcodereview.appspot.com/18241003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@209528 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/indexed_db/indexed_db_callbacks.cc')
-rw-r--r-- | content/browser/indexed_db/indexed_db_callbacks.cc | 408 |
1 files changed, 225 insertions, 183 deletions
diff --git a/content/browser/indexed_db/indexed_db_callbacks.cc b/content/browser/indexed_db/indexed_db_callbacks.cc index 51d44e8..b0f063e 100644 --- a/content/browser/indexed_db/indexed_db_callbacks.cc +++ b/content/browser/indexed_db/indexed_db_callbacks.cc @@ -7,6 +7,8 @@ #include <algorithm> #include <vector> +#include "content/browser/indexed_db/indexed_db_cursor.h" +#include "content/browser/indexed_db/indexed_db_database_callbacks.h" #include "content/browser/indexed_db/indexed_db_database_error.h" #include "content/browser/indexed_db/indexed_db_metadata.h" #include "content/browser/indexed_db/webidbdatabase_impl.h" @@ -18,278 +20,318 @@ using WebKit::WebIDBCallbacks; namespace content { namespace { -const int32 kDatabaseNotAdded = -1; +const int32 kNoCursor = -1; +const int32 kNoDatabase = -1; +const int32 kNoDatabaseCallbacks = -1; +const int64 kNoTransaction = -1; } -IndexedDBCallbacksBase::IndexedDBCallbacksBase( - IndexedDBDispatcherHost* dispatcher_host, - int32 ipc_thread_id, - int32 ipc_callbacks_id) - : dispatcher_host_(dispatcher_host), +IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host, + int32 ipc_thread_id, + int32 ipc_callbacks_id) + : did_complete_(false), + did_create_proxy_(false), + dispatcher_host_(dispatcher_host), ipc_callbacks_id_(ipc_callbacks_id), - ipc_thread_id_(ipc_thread_id) {} + ipc_thread_id_(ipc_thread_id), + ipc_cursor_id_(kNoCursor), + host_transaction_id_(kNoTransaction), + ipc_database_id_(kNoDatabase), + ipc_database_callbacks_id_(kNoDatabaseCallbacks) {} + +IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host, + int32 ipc_thread_id, + int32 ipc_callbacks_id, + int32 ipc_cursor_id) + : did_complete_(false), + did_create_proxy_(false), + dispatcher_host_(dispatcher_host), + ipc_callbacks_id_(ipc_callbacks_id), + ipc_thread_id_(ipc_thread_id), + ipc_cursor_id_(ipc_cursor_id), + host_transaction_id_(kNoTransaction), + ipc_database_id_(kNoDatabase), + ipc_database_callbacks_id_(kNoDatabaseCallbacks) {} + +IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host, + int32 ipc_thread_id, + int32 ipc_callbacks_id, + int32 ipc_database_callbacks_id, + int64 host_transaction_id, + const GURL& origin_url) + : did_complete_(false), + did_create_proxy_(false), + dispatcher_host_(dispatcher_host), + ipc_callbacks_id_(ipc_callbacks_id), + ipc_thread_id_(ipc_thread_id), + ipc_cursor_id_(kNoCursor), + host_transaction_id_(host_transaction_id), + origin_url_(origin_url), + ipc_database_id_(kNoDatabase), + ipc_database_callbacks_id_(ipc_database_callbacks_id) {} -IndexedDBCallbacksBase::~IndexedDBCallbacksBase() {} +IndexedDBCallbacks::~IndexedDBCallbacks() {} + +void IndexedDBCallbacks::OnError(const IndexedDBDatabaseError& error) { + DCHECK(dispatcher_host_); -void IndexedDBCallbacksBase::onError(const IndexedDBDatabaseError& error) { dispatcher_host_->Send(new IndexedDBMsg_CallbacksError( ipc_thread_id_, ipc_callbacks_id_, error.code(), error.message())); + dispatcher_host_ = NULL; } -void IndexedDBCallbacksBase::onBlocked(long long old_version) { - dispatcher_host_->Send(new IndexedDBMsg_CallbacksIntBlocked( - ipc_thread_id_, ipc_callbacks_id_, old_version)); -} +void IndexedDBCallbacks::OnSuccess(const std::vector<string16>& value) { + DCHECK(dispatcher_host_); -void IndexedDBCallbacksBase::onSuccess(const std::vector<string16>& value) { - NOTREACHED(); -} + DCHECK_EQ(kNoCursor, ipc_cursor_id_); + DCHECK_EQ(kNoTransaction, host_transaction_id_); + DCHECK_EQ(kNoDatabase, ipc_database_id_); + DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); -void IndexedDBCallbacksBase::onSuccess( - WebIDBDatabaseImpl* idb_object, - const IndexedDBDatabaseMetadata& metadata) { - NOTREACHED(); -} + std::vector<string16> list; + for (unsigned i = 0; i < value.size(); ++i) + list.push_back(value[i]); -void IndexedDBCallbacksBase::onUpgradeNeeded( - long long old_version, - WebIDBDatabaseImpl* database, - const IndexedDBDatabaseMetadata& /*metadata*/, - WebKit::WebIDBCallbacks::DataLoss data_loss) { - NOTREACHED(); + dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessStringList( + ipc_thread_id_, ipc_callbacks_id_, list)); + dispatcher_host_ = NULL; } -void IndexedDBCallbacksBase::onSuccess(IndexedDBCursor* idb_object, - const IndexedDBKey& key, - const IndexedDBKey& primaryKey, - std::vector<char>* value) { - NOTREACHED(); -} +void IndexedDBCallbacks::OnBlocked(int64 existing_version) { + DCHECK(dispatcher_host_); + DCHECK_EQ(kNoCursor, ipc_cursor_id_); -void IndexedDBCallbacksBase::onSuccess(const IndexedDBKey& key, - const IndexedDBKey& primaryKey, - std::vector<char>* value) { - NOTREACHED(); + dispatcher_host_->Send(new IndexedDBMsg_CallbacksIntBlocked( + ipc_thread_id_, ipc_callbacks_id_, existing_version)); } -void IndexedDBCallbacksBase::onSuccess(std::vector<char>* value) { - NOTREACHED(); -} +void IndexedDBCallbacks::OnUpgradeNeeded( + int64 old_version, + scoped_refptr<IndexedDBDatabase> database, + const IndexedDBDatabaseMetadata& metadata, + WebIDBCallbacks::DataLoss data_loss) { + DCHECK(dispatcher_host_); + DCHECK_EQ(kNoCursor, ipc_cursor_id_); + did_create_proxy_ = true; -void IndexedDBCallbacksBase::onSuccessWithPrefetch( - const std::vector<IndexedDBKey>& keys, - const std::vector<IndexedDBKey>& primaryKeys, - const std::vector<std::vector<char> >& values) { - NOTREACHED(); -} + WebIDBDatabaseImpl* web_database = + new WebIDBDatabaseImpl(database, database_callbacks_); -void IndexedDBCallbacksBase::onSuccess(const IndexedDBKey& value) { - NOTREACHED(); -} + dispatcher_host_->RegisterTransactionId(host_transaction_id_, origin_url_); + int32 ipc_database_id = + dispatcher_host_->Add(web_database, ipc_thread_id_, origin_url_); + ipc_database_id_ = ipc_database_id; + IndexedDBMsg_CallbacksUpgradeNeeded_Params params; + params.ipc_thread_id = ipc_thread_id_; + params.ipc_callbacks_id = ipc_callbacks_id_; + params.ipc_database_id = ipc_database_id; + params.ipc_database_callbacks_id = ipc_database_callbacks_id_; + params.old_version = old_version; + params.idb_metadata = IndexedDBDispatcherHost::ConvertMetadata(metadata); + params.data_loss = data_loss; + dispatcher_host_->Send(new IndexedDBMsg_CallbacksUpgradeNeeded(params)); -void IndexedDBCallbacksBase::onSuccess(std::vector<char>* value, - const IndexedDBKey& key, - const IndexedDBKeyPath& keyPath) { - NOTREACHED(); + database_callbacks_ = NULL; } -void IndexedDBCallbacksBase::onSuccess(long long value) { NOTREACHED(); } +void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBDatabase> database, + const IndexedDBDatabaseMetadata& metadata) { + DCHECK(dispatcher_host_); + DCHECK_EQ(kNoCursor, ipc_cursor_id_); -void IndexedDBCallbacksBase::onSuccess() { NOTREACHED(); } + scoped_refptr<IndexedDBCallbacks> self(this); -IndexedDBCallbacksDatabase::IndexedDBCallbacksDatabase( - IndexedDBDispatcherHost* dispatcher_host, - int32 ipc_thread_id, - int32 ipc_callbacks_id, - int32 ipc_database_callbacks_id, - int64 host_transaction_id, - const GURL& origin_url) - : IndexedDBCallbacksBase(dispatcher_host, ipc_thread_id, ipc_callbacks_id), - host_transaction_id_(host_transaction_id), - origin_url_(origin_url), - ipc_database_id_(kDatabaseNotAdded), - ipc_database_callbacks_id_(ipc_database_callbacks_id) {} + WebIDBDatabaseImpl* impl = + did_create_proxy_ ? 0 + : new WebIDBDatabaseImpl(database, database_callbacks_); + database_callbacks_ = NULL; -void IndexedDBCallbacksDatabase::onSuccess( - WebIDBDatabaseImpl* idb_object, - const IndexedDBDatabaseMetadata& metadata) { int32 ipc_object_id = ipc_database_id_; - if (ipc_object_id == kDatabaseNotAdded) { - ipc_object_id = - dispatcher_host()->Add(idb_object, ipc_thread_id(), origin_url_); - } else { - // We already have this database and don't need a new copy of it. - delete idb_object; - } - const ::IndexedDBDatabaseMetadata idb_metadata = - IndexedDBDispatcherHost::ConvertMetadata(metadata); - - dispatcher_host()->Send( - new IndexedDBMsg_CallbacksSuccessIDBDatabase(ipc_thread_id(), - ipc_callbacks_id(), - ipc_database_callbacks_id_, - ipc_object_id, - idb_metadata)); + if (ipc_object_id == kNoDatabase) + ipc_object_id = dispatcher_host_->Add(impl, ipc_thread_id_, origin_url_); + + dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIDBDatabase( + ipc_thread_id_, + ipc_callbacks_id_, + ipc_database_callbacks_id_, + ipc_object_id, + IndexedDBDispatcherHost::ConvertMetadata(metadata))); + dispatcher_host_ = NULL; } -void IndexedDBCallbacksDatabase::onUpgradeNeeded( - long long old_version, - WebIDBDatabaseImpl* database, - const IndexedDBDatabaseMetadata& metadata, - WebIDBCallbacks::DataLoss data_loss) { - dispatcher_host()->RegisterTransactionId(host_transaction_id_, origin_url_); - int32 ipc_database_id = - dispatcher_host()->Add(database, ipc_thread_id(), origin_url_); - ipc_database_id_ = ipc_database_id; - IndexedDBMsg_CallbacksUpgradeNeeded_Params params; - params.ipc_thread_id = ipc_thread_id(); - params.ipc_callbacks_id = ipc_callbacks_id(); - params.ipc_database_id = ipc_database_id; - params.ipc_database_callbacks_id = ipc_database_callbacks_id_; - params.old_version = old_version; - params.idb_metadata = IndexedDBDispatcherHost::ConvertMetadata(metadata); - params.data_loss = data_loss; - dispatcher_host()->Send(new IndexedDBMsg_CallbacksUpgradeNeeded(params)); +void IndexedDBCallbacks::SetDatabaseCallbacks( + scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks) { + database_callbacks_ = database_callbacks; } -void IndexedDBCallbacks<IndexedDBCursor>::onSuccess( - IndexedDBCursor* idb_cursor, - const IndexedDBKey& key, - const IndexedDBKey& primaryKey, - std::vector<char>* value) { - int32 ipc_object_id = dispatcher_host()->Add(idb_cursor); +void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor, + const IndexedDBKey& key, + const IndexedDBKey& primary_key, + std::vector<char>* value) { + DCHECK(dispatcher_host_); + + DCHECK_EQ(kNoTransaction, host_transaction_id_); + DCHECK_EQ(kNoDatabase, ipc_database_id_); + DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); + + int32 ipc_object_id = dispatcher_host_->Add(cursor); IndexedDBMsg_CallbacksSuccessIDBCursor_Params params; - params.ipc_thread_id = ipc_thread_id(); - params.ipc_callbacks_id = ipc_callbacks_id(); + params.ipc_thread_id = ipc_thread_id_; + params.ipc_callbacks_id = ipc_callbacks_id_; params.ipc_cursor_id = ipc_object_id; params.key = key; - params.primary_key = primaryKey; + params.primary_key = primary_key; if (value && !value->empty()) std::swap(params.value, *value); // TODO(alecflett): Avoid a copy here: the whole params object is // being copied into the message. - dispatcher_host()->Send(new IndexedDBMsg_CallbacksSuccessIDBCursor(params)); -} + dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIDBCursor(params)); -void IndexedDBCallbacks<IndexedDBCursor>::onSuccess(std::vector<char>* value) { - std::vector<char> value_copy; - if (value && !value->empty()) - std::swap(value_copy, *value); - dispatcher_host()->Send(new IndexedDBMsg_CallbacksSuccessValue( - ipc_thread_id(), - ipc_callbacks_id(), - // TODO(alecflett): avoid a copy here. - value_copy)); + dispatcher_host_ = NULL; } -void IndexedDBCallbacks<IndexedDBCursor>::onSuccess( - const IndexedDBKey& key, - const IndexedDBKey& primaryKey, - std::vector<char>* value) { - DCHECK_NE(ipc_cursor_id_, -1); +void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key, + const IndexedDBKey& primary_key, + std::vector<char>* value) { + DCHECK(dispatcher_host_); + + DCHECK_NE(kNoCursor, ipc_cursor_id_); + DCHECK_EQ(kNoTransaction, host_transaction_id_); + DCHECK_EQ(kNoDatabase, ipc_database_id_); + DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); + IndexedDBCursor* idb_cursor = - dispatcher_host()->GetCursorFromId(ipc_cursor_id_); + dispatcher_host_->GetCursorFromId(ipc_cursor_id_); DCHECK(idb_cursor); if (!idb_cursor) return; IndexedDBMsg_CallbacksSuccessCursorContinue_Params params; - params.ipc_thread_id = ipc_thread_id(); - params.ipc_callbacks_id = ipc_callbacks_id(); + params.ipc_thread_id = ipc_thread_id_; + params.ipc_callbacks_id = ipc_callbacks_id_; params.ipc_cursor_id = ipc_cursor_id_; params.key = key; - params.primary_key = primaryKey; + params.primary_key = primary_key; if (value && !value->empty()) std::swap(params.value, *value); // TODO(alecflett): Avoid a copy here: the whole params object is // being copied into the message. - dispatcher_host()->Send( + dispatcher_host_->Send( new IndexedDBMsg_CallbacksSuccessCursorContinue(params)); + dispatcher_host_ = NULL; } -void IndexedDBCallbacks<IndexedDBCursor>::onSuccessWithPrefetch( +void IndexedDBCallbacks::OnSuccessWithPrefetch( const std::vector<IndexedDBKey>& keys, - const std::vector<IndexedDBKey>& primaryKeys, + const std::vector<IndexedDBKey>& primary_keys, const std::vector<std::vector<char> >& values) { - DCHECK_NE(ipc_cursor_id_, -1); + DCHECK_EQ(keys.size(), primary_keys.size()); + DCHECK_EQ(keys.size(), values.size()); + + DCHECK(dispatcher_host_); + + DCHECK_NE(kNoCursor, ipc_cursor_id_); + DCHECK_EQ(kNoTransaction, host_transaction_id_); + DCHECK_EQ(kNoDatabase, ipc_database_id_); + DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); std::vector<IndexedDBKey> msgKeys; std::vector<IndexedDBKey> msgPrimaryKeys; for (size_t i = 0; i < keys.size(); ++i) { msgKeys.push_back(keys[i]); - msgPrimaryKeys.push_back(primaryKeys[i]); + msgPrimaryKeys.push_back(primary_keys[i]); } IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params params; - params.ipc_thread_id = ipc_thread_id(); - params.ipc_callbacks_id = ipc_callbacks_id(); + params.ipc_thread_id = ipc_thread_id_; + params.ipc_callbacks_id = ipc_callbacks_id_; params.ipc_cursor_id = ipc_cursor_id_; params.keys = msgKeys; params.primary_keys = msgPrimaryKeys; params.values = values; - dispatcher_host()->Send( + dispatcher_host_->Send( new IndexedDBMsg_CallbacksSuccessCursorPrefetch(params)); + dispatcher_host_ = NULL; } -void IndexedDBCallbacks<IndexedDBKey>::onSuccess(const IndexedDBKey& value) { - dispatcher_host()->Send(new IndexedDBMsg_CallbacksSuccessIndexedDBKey( - ipc_thread_id(), ipc_callbacks_id(), IndexedDBKey(value))); -} +void IndexedDBCallbacks::OnSuccess(std::vector<char>* value, + const IndexedDBKey& key, + const IndexedDBKeyPath& key_path) { + DCHECK(dispatcher_host_); -void IndexedDBCallbacks<std::vector<string16> >::onSuccess( - const std::vector<string16>& value) { + DCHECK_EQ(kNoCursor, ipc_cursor_id_); + DCHECK_EQ(kNoTransaction, host_transaction_id_); + DCHECK_EQ(kNoDatabase, ipc_database_id_); + DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); - std::vector<string16> list; - for (unsigned i = 0; i < value.size(); ++i) - list.push_back(value[i]); - - dispatcher_host()->Send(new IndexedDBMsg_CallbacksSuccessStringList( - ipc_thread_id(), ipc_callbacks_id(), list)); -} - -void IndexedDBCallbacks<std::vector<char> >::onSuccess( - std::vector<char>* value) { std::vector<char> value_copy; if (value && !value->empty()) std::swap(value_copy, *value); - dispatcher_host()->Send(new IndexedDBMsg_CallbacksSuccessValue( - ipc_thread_id(), - ipc_callbacks_id(), - // TODO(alecflett): avoid a copy here - value_copy)); + dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValueWithKey( + ipc_thread_id_, + ipc_callbacks_id_, + // TODO(alecflett): Avoid a copy here. + value_copy, + key, + key_path)); + dispatcher_host_ = NULL; } -void IndexedDBCallbacks<std::vector<char> >::onSuccess( - std::vector<char>* value, - const IndexedDBKey& primaryKey, - const IndexedDBKeyPath& keyPath) { +void IndexedDBCallbacks::OnSuccess(std::vector<char>* value) { + DCHECK(dispatcher_host_); + + DCHECK_EQ(kNoTransaction, host_transaction_id_); + DCHECK_EQ(kNoDatabase, ipc_database_id_); + DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); + std::vector<char> value_copy; if (value && !value->empty()) std::swap(value_copy, *value); - dispatcher_host()->Send(new IndexedDBMsg_CallbacksSuccessValueWithKey( - ipc_thread_id(), - ipc_callbacks_id(), - // TODO(alecflett): Avoid a copy here. - value_copy, - IndexedDBKey(primaryKey), - IndexedDBKeyPath(keyPath))); + dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValue( + ipc_thread_id_, + ipc_callbacks_id_, + // TODO(alecflett): avoid a copy here. + value_copy)); + dispatcher_host_ = NULL; } -void IndexedDBCallbacks<std::vector<char> >::onSuccess(long long value) { - dispatcher_host()->Send(new IndexedDBMsg_CallbacksSuccessInteger( - ipc_thread_id(), ipc_callbacks_id(), value)); +void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) { + DCHECK(dispatcher_host_); + + DCHECK_EQ(kNoCursor, ipc_cursor_id_); + DCHECK_EQ(kNoTransaction, host_transaction_id_); + DCHECK_EQ(kNoDatabase, ipc_database_id_); + DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); + + dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIndexedDBKey( + ipc_thread_id_, ipc_callbacks_id_, value)); + dispatcher_host_ = NULL; } -void IndexedDBCallbacks<std::vector<char> >::onSuccess() { - dispatcher_host()->Send(new IndexedDBMsg_CallbacksSuccessUndefined( - ipc_thread_id(), ipc_callbacks_id())); +void IndexedDBCallbacks::OnSuccess(int64 value) { + DCHECK(dispatcher_host_); + + DCHECK_EQ(kNoCursor, ipc_cursor_id_); + DCHECK_EQ(kNoTransaction, host_transaction_id_); + DCHECK_EQ(kNoDatabase, ipc_database_id_); + DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); + + dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessInteger( + ipc_thread_id_, ipc_callbacks_id_, value)); + dispatcher_host_ = NULL; } -void IndexedDBCallbacks<std::vector<char> >::onSuccess( - const IndexedDBKey& value) { - dispatcher_host()->Send(new IndexedDBMsg_CallbacksSuccessIndexedDBKey( - ipc_thread_id(), ipc_callbacks_id(), value)); +void IndexedDBCallbacks::OnSuccess() { + DCHECK(dispatcher_host_); + + DCHECK_EQ(kNoTransaction, host_transaction_id_); + DCHECK_EQ(kNoDatabase, ipc_database_id_); + DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); + + dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessUndefined( + ipc_thread_id_, ipc_callbacks_id_)); + dispatcher_host_ = NULL; } } // namespace content |