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

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

Issue 2370643004: Port messages sent by WebIDBFactoryImpl to Mojo. (Closed)
Patch Set: Require explicit wrapping when discarding map keys. Created 4 years, 2 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_callbacks.cc
diff --git a/content/browser/indexed_db/indexed_db_callbacks.cc b/content/browser/indexed_db/indexed_db_callbacks.cc
index 8783d3b1049623997bd3145a5593259b8334a222..0b8d99145d96cee479eb740c04a3ba318f164a76 100644
--- a/content/browser/indexed_db/indexed_db_callbacks.cc
+++ b/content/browser/indexed_db/indexed_db_callbacks.cc
@@ -18,28 +18,51 @@
#include "content/browser/indexed_db/indexed_db_connection.h"
#include "content/browser/indexed_db/indexed_db_context_impl.h"
#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/indexed_db_return_value.h"
#include "content/browser/indexed_db/indexed_db_tracing.h"
#include "content/browser/indexed_db/indexed_db_value.h"
#include "content/common/indexed_db/indexed_db_constants.h"
#include "content/common/indexed_db/indexed_db_messages.h"
+#include "content/common/indexed_db/indexed_db_metadata.h"
#include "storage/browser/blob/blob_storage_context.h"
#include "storage/browser/blob/shareable_file_reference.h"
#include "storage/browser/quota/quota_manager.h"
+using indexed_db::mojom::CallbacksAssociatedPtrInfo;
using storage::ShareableFileReference;
namespace content {
namespace {
+
dcheng 2016/10/17 05:33:44 Nit: be consistent with newlines surrounding the c
Reilly Grant (use Gerrit) 2016/10/19 00:36:51 clang-format keeps eating my newlines. I need to f
const int32_t kNoCursor = -1;
-const int32_t kNoDatabaseCallbacks = -1;
const int64_t kNoTransaction = -1;
}
+class IndexedDBCallbacks::IOThreadHelper {
+ public:
+ IOThreadHelper(CallbacksAssociatedPtrInfo callbacks_info);
dcheng 2016/10/17 05:33:44 Nit: explicit
Reilly Grant (use Gerrit) 2016/10/19 00:36:51 Done.
+ ~IOThreadHelper();
+
+ void SendError(const IndexedDBDatabaseError& error);
+ void SendSuccessStringList(const std::vector<base::string16>& value);
+ void SendBlocked(int64_t existing_version);
+ void SendUpgradeNeeded(int32_t database_id,
+ int64_t old_version,
+ blink::WebIDBDataLoss data_loss,
+ const std::string& data_loss_message,
+ const content::IndexedDBDatabaseMetadata& metadata);
+ void SendSuccessDatabase(int32_t database_id,
+ const content::IndexedDBDatabaseMetadata& metadata);
+ void SendSuccessInteger(int64_t value);
+
+ private:
+ ::indexed_db::mojom::CallbacksAssociatedPtr callbacks_;
+
+ DISALLOW_COPY_AND_ASSIGN(IOThreadHelper);
+};
+
IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
int32_t ipc_thread_id,
int32_t ipc_callbacks_id)
@@ -49,9 +72,9 @@ IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
ipc_cursor_id_(kNoCursor),
host_transaction_id_(kNoTransaction),
ipc_database_id_(kNoDatabase),
- ipc_database_callbacks_id_(kNoDatabaseCallbacks),
data_loss_(blink::WebIDBDataLossNone),
- sent_blocked_(false) {}
+ sent_blocked_(false),
+ io_helper_(nullptr) {}
IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
int32_t ipc_thread_id,
@@ -63,34 +86,42 @@ IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
ipc_cursor_id_(ipc_cursor_id),
host_transaction_id_(kNoTransaction),
ipc_database_id_(kNoDatabase),
- ipc_database_callbacks_id_(kNoDatabaseCallbacks),
data_loss_(blink::WebIDBDataLossNone),
- sent_blocked_(false) {}
+ sent_blocked_(false),
+ io_helper_(nullptr) {}
-IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
- int32_t ipc_thread_id,
- int32_t ipc_callbacks_id,
- int32_t ipc_database_callbacks_id,
- int64_t host_transaction_id,
- const url::Origin& origin)
+IndexedDBCallbacks::IndexedDBCallbacks(
+ IndexedDBDispatcherHost* dispatcher_host,
+ const url::Origin& origin,
+ ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info)
: 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),
+ host_transaction_id_(kNoTransaction),
origin_(origin),
ipc_database_id_(kNoDatabase),
- ipc_database_callbacks_id_(ipc_database_callbacks_id),
data_loss_(blink::WebIDBDataLossNone),
- sent_blocked_(false) {}
+ sent_blocked_(false),
+ io_helper_(nullptr) {
+ if (callbacks_info.is_valid())
dcheng 2016/10/17 05:33:44 What are the circumstances where this wouldn't be
Reilly Grant (use Gerrit) 2016/10/19 00:36:51 |callbacks_info| is invalid in tests, where this c
+ io_helper_ = new IOThreadHelper(std::move(callbacks_info));
+}
-IndexedDBCallbacks::~IndexedDBCallbacks() {}
+IndexedDBCallbacks::~IndexedDBCallbacks() {
+ if (io_helper_)
+ BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, io_helper_);
+}
void IndexedDBCallbacks::OnError(const IndexedDBDatabaseError& error) {
DCHECK(dispatcher_host_.get());
- dispatcher_host_->Send(new IndexedDBMsg_CallbacksError(
- ipc_thread_id_, ipc_callbacks_id_, error.code(), error.message()));
+ if (io_helper_) {
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
+ base::Bind(&IOThreadHelper::SendError,
+ base::Unretained(io_helper_), error));
+ } else {
+ dispatcher_host_->Send(new IndexedDBMsg_CallbacksError(
+ ipc_thread_id_, ipc_callbacks_id_, error.code(), error.message()));
+ }
dispatcher_host_ = NULL;
if (!connection_open_start_time_.is_null()) {
@@ -103,37 +134,31 @@ void IndexedDBCallbacks::OnError(const IndexedDBDatabaseError& error) {
void IndexedDBCallbacks::OnSuccess(const std::vector<base::string16>& value) {
DCHECK(dispatcher_host_.get());
-
+ DCHECK(io_helper_);
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_);
- DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
-
- std::vector<base::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));
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
+ base::Bind(&IOThreadHelper::SendSuccessStringList,
+ base::Unretained(io_helper_), value));
dispatcher_host_ = NULL;
}
void IndexedDBCallbacks::OnBlocked(int64_t existing_version) {
DCHECK(dispatcher_host_.get());
-
+ DCHECK(io_helper_);
DCHECK_EQ(kNoCursor, ipc_cursor_id_);
- // No transaction/db callbacks for DeleteDatabase.
- DCHECK_EQ(kNoTransaction == host_transaction_id_,
- kNoDatabaseCallbacks == ipc_database_callbacks_id_);
- DCHECK_EQ(kNoDatabase, ipc_database_id_);
if (sent_blocked_)
return;
sent_blocked_ = true;
- dispatcher_host_->Send(new IndexedDBMsg_CallbacksIntBlocked(
- ipc_thread_id_, ipc_callbacks_id_, existing_version));
+
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&IOThreadHelper::SendBlocked, base::Unretained(io_helper_),
+ existing_version));
if (!connection_open_start_time_.is_null()) {
UMA_HISTOGRAM_MEDIUM_TIMES(
@@ -149,29 +174,25 @@ void IndexedDBCallbacks::OnUpgradeNeeded(
const IndexedDBDatabaseMetadata& metadata,
const IndexedDBDataLossInfo& data_loss_info) {
DCHECK(dispatcher_host_.get());
-
- DCHECK_EQ(kNoCursor, ipc_cursor_id_);
+ DCHECK(io_helper_);
DCHECK_NE(kNoTransaction, host_transaction_id_);
+ DCHECK_EQ(kNoCursor, ipc_cursor_id_);
DCHECK_EQ(kNoDatabase, ipc_database_id_);
- DCHECK_NE(kNoDatabaseCallbacks, ipc_database_callbacks_id_);
data_loss_ = data_loss_info.status;
dispatcher_host_->RegisterTransactionId(host_transaction_id_, origin_);
int32_t ipc_database_id =
- dispatcher_host_->Add(connection.release(), ipc_thread_id_, origin_);
+ dispatcher_host_->Add(connection.release(), origin_);
if (ipc_database_id < 0)
return;
+
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_info.status;
- params.data_loss_message = data_loss_info.message;
- dispatcher_host_->Send(new IndexedDBMsg_CallbacksUpgradeNeeded(params));
+
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&IOThreadHelper::SendUpgradeNeeded,
+ base::Unretained(io_helper_), ipc_database_id, old_version,
+ data_loss_info.status, data_loss_info.message, metadata));
if (!connection_open_start_time_.is_null()) {
UMA_HISTOGRAM_MEDIUM_TIMES(
@@ -185,27 +206,23 @@ void IndexedDBCallbacks::OnSuccess(
std::unique_ptr<IndexedDBConnection> connection,
const IndexedDBDatabaseMetadata& metadata) {
DCHECK(dispatcher_host_.get());
-
+ DCHECK(io_helper_);
DCHECK_EQ(kNoCursor, ipc_cursor_id_);
DCHECK_NE(kNoTransaction, host_transaction_id_);
DCHECK_NE(ipc_database_id_ == kNoDatabase, !connection);
- DCHECK_NE(kNoDatabaseCallbacks, ipc_database_callbacks_id_);
scoped_refptr<IndexedDBCallbacks> self(this);
int32_t ipc_object_id = kNoDatabase;
// Only register if the connection was not previously sent in OnUpgradeNeeded.
if (ipc_database_id_ == kNoDatabase) {
- ipc_object_id =
- dispatcher_host_->Add(connection.release(), ipc_thread_id_, origin_);
+ ipc_object_id = dispatcher_host_->Add(connection.release(), origin_);
}
- dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIDBDatabase(
- ipc_thread_id_,
- ipc_callbacks_id_,
- ipc_database_callbacks_id_,
- ipc_object_id,
- IndexedDBDispatcherHost::ConvertMetadata(metadata)));
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&IOThreadHelper::SendSuccessDatabase,
+ base::Unretained(io_helper_), ipc_object_id, metadata));
dispatcher_host_ = NULL;
if (!connection_open_start_time_.is_null()) {
@@ -335,12 +352,12 @@ void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor,
const IndexedDBKey& key,
const IndexedDBKey& primary_key,
IndexedDBValue* value) {
+ DCHECK(!io_helper_);
DCHECK(dispatcher_host_.get());
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_);
DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
int32_t ipc_object_id = dispatcher_host_->Add(cursor.get());
@@ -374,12 +391,12 @@ void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor,
void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key,
const IndexedDBKey& primary_key,
IndexedDBValue* value) {
+ DCHECK(!io_helper_);
DCHECK(dispatcher_host_.get());
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_);
DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
IndexedDBCursor* idb_cursor =
@@ -422,6 +439,7 @@ void IndexedDBCallbacks::OnSuccessWithPrefetch(
const std::vector<IndexedDBKey>& keys,
const std::vector<IndexedDBKey>& primary_keys,
std::vector<IndexedDBValue>* values) {
+ DCHECK(!io_helper_);
DCHECK_EQ(keys.size(), primary_keys.size());
DCHECK_EQ(keys.size(), values->size());
@@ -430,7 +448,6 @@ void IndexedDBCallbacks::OnSuccessWithPrefetch(
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_);
DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
std::vector<IndexedDBKey> msg_keys;
@@ -479,6 +496,7 @@ void IndexedDBCallbacks::OnSuccessWithPrefetch(
}
void IndexedDBCallbacks::OnSuccess(IndexedDBReturnValue* value) {
+ DCHECK(!io_helper_);
DCHECK(dispatcher_host_.get());
if (value && value->primary_key.IsValid()) {
@@ -488,7 +506,6 @@ void IndexedDBCallbacks::OnSuccess(IndexedDBReturnValue* value) {
}
DCHECK_EQ(kNoTransaction, host_transaction_id_);
DCHECK_EQ(kNoDatabase, ipc_database_id_);
- DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_);
DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
std::unique_ptr<IndexedDBMsg_CallbacksSuccessValue_Params> params(
@@ -520,11 +537,11 @@ void IndexedDBCallbacks::OnSuccess(IndexedDBReturnValue* value) {
void IndexedDBCallbacks::OnSuccessArray(
std::vector<IndexedDBReturnValue>* values,
const IndexedDBKeyPath& key_path) {
+ DCHECK(!io_helper_);
DCHECK(dispatcher_host_.get());
DCHECK_EQ(kNoTransaction, host_transaction_id_);
DCHECK_EQ(kNoDatabase, ipc_database_id_);
- DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_);
DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
std::unique_ptr<IndexedDBMsg_CallbacksSuccessArray_Params> params(
@@ -563,12 +580,12 @@ void IndexedDBCallbacks::OnSuccessArray(
}
void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) {
+ DCHECK(!io_helper_);
DCHECK(dispatcher_host_.get());
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_);
DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIndexedDBKey(
@@ -578,25 +595,29 @@ void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) {
void IndexedDBCallbacks::OnSuccess(int64_t value) {
DCHECK(dispatcher_host_.get());
+ if (io_helper_) {
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
+ base::Bind(&IOThreadHelper::SendSuccessInteger,
+ base::Unretained(io_helper_), value));
+ } else {
+ DCHECK_EQ(kNoCursor, ipc_cursor_id_);
+ DCHECK_EQ(kNoTransaction, host_transaction_id_);
+ DCHECK_EQ(kNoDatabase, ipc_database_id_);
+ DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
- 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_);
- DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
-
- dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessInteger(
- ipc_thread_id_, ipc_callbacks_id_, value));
+ dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessInteger(
+ ipc_thread_id_, ipc_callbacks_id_, value));
+ }
dispatcher_host_ = NULL;
dcheng 2016/10/17 05:33:44 Nit: nullptr
Reilly Grant (use Gerrit) 2016/10/19 00:36:51 Done.
}
void IndexedDBCallbacks::OnSuccess() {
+ DCHECK(!io_helper_);
DCHECK(dispatcher_host_.get());
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_);
DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessUndefined(
@@ -615,4 +636,46 @@ void IndexedDBCallbacks::SetConnectionOpenStartTime(
connection_open_start_time_ = start_time;
}
+IndexedDBCallbacks::IOThreadHelper::IOThreadHelper(
+ CallbacksAssociatedPtrInfo callbacks_info) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ callbacks_.Bind(std::move(callbacks_info));
+}
+
+IndexedDBCallbacks::IOThreadHelper::~IOThreadHelper() {}
+
+void IndexedDBCallbacks::IOThreadHelper::SendError(
+ const IndexedDBDatabaseError& error) {
+ callbacks_->Error(error.code(), error.message());
+}
+
+void IndexedDBCallbacks::IOThreadHelper::SendSuccessStringList(
+ const std::vector<base::string16>& value) {
+ callbacks_->SuccessStringList(value);
+}
+
+void IndexedDBCallbacks::IOThreadHelper::SendBlocked(int64_t existing_version) {
+ callbacks_->Blocked(existing_version);
+}
+
+void IndexedDBCallbacks::IOThreadHelper::SendUpgradeNeeded(
+ int32_t database_id,
+ int64_t old_version,
+ blink::WebIDBDataLoss data_loss,
+ const std::string& data_loss_message,
+ const content::IndexedDBDatabaseMetadata& metadata) {
+ callbacks_->UpgradeNeeded(database_id, old_version, data_loss,
+ data_loss_message, metadata);
+}
+
+void IndexedDBCallbacks::IOThreadHelper::SendSuccessDatabase(
+ int32_t database_id,
+ const content::IndexedDBDatabaseMetadata& metadata) {
+ callbacks_->SuccessDatabase(database_id, metadata);
+}
+
+void IndexedDBCallbacks::IOThreadHelper::SendSuccessInteger(int64_t value) {
+ callbacks_->SuccessInteger(value);
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698