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

Unified Diff: content/child/indexed_db/indexed_db_callbacks_impl.cc

Issue 2449953008: Port messages sent by WebIDBDatabaseImpl to Mojo. (Closed)
Patch Set: Address more comments from dcheng@. Created 4 years, 1 month 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/child/indexed_db/indexed_db_callbacks_impl.cc
diff --git a/content/child/indexed_db/indexed_db_callbacks_impl.cc b/content/child/indexed_db/indexed_db_callbacks_impl.cc
index 1e88ab80bf2a796233a2e08bf52866fd7394316c..465cf5759bdcfb75407e1ad6b89f76cac771f626 100644
--- a/content/child/indexed_db/indexed_db_callbacks_impl.cc
+++ b/content/child/indexed_db/indexed_db_callbacks_impl.cc
@@ -6,17 +6,23 @@
#include "content/child/indexed_db/indexed_db_dispatcher.h"
#include "content/child/indexed_db/indexed_db_key_builders.h"
+#include "content/child/indexed_db/webidbcursor_impl.h"
+#include "content/child/indexed_db/webidbdatabase_impl.h"
#include "content/child/thread_safe_sender.h"
#include "content/common/indexed_db/indexed_db_constants.h"
#include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBCallbacks.h"
#include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBDatabaseError.h"
#include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBMetadata.h"
+#include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBValue.h"
+using blink::WebBlobInfo;
using blink::WebIDBCallbacks;
using blink::WebIDBDatabase;
using blink::WebIDBMetadata;
+using blink::WebIDBValue;
using blink::WebString;
using blink::WebVector;
+using indexed_db::mojom::DatabaseAssociatedPtrInfo;
namespace content {
@@ -58,12 +64,47 @@ void ConvertDatabaseMetadata(const content::IndexedDBDatabaseMetadata& metadata,
ConvertObjectStoreMetadata(iter.second, &output->objectStores[i++]);
}
+void ConvertValue(const indexed_db::mojom::ValuePtr& value,
+ WebIDBValue* web_value) {
+ if (value->bits.empty())
+ return;
+
+ blink::WebVector<WebBlobInfo> local_blob_info(
+ value->blob_or_file_info.size());
+ for (size_t i = 0; i < value->blob_or_file_info.size(); ++i) {
+ const auto& info = value->blob_or_file_info[i];
+ if (info->file) {
+ local_blob_info[i] = WebBlobInfo(
+ WebString::fromUTF8(info->uuid), info->file->path.AsUTF16Unsafe(),
+ info->file->name, info->mime_type,
+ info->file->last_modified.ToDoubleT(), info->size);
+ } else {
+ local_blob_info[i] = WebBlobInfo(WebString::fromUTF8(info->uuid),
+ info->mime_type, info->size);
+ }
+ }
+
+ web_value->data.assign(&*value->bits.begin(), value->bits.size());
+ web_value->webBlobInfo.swap(local_blob_info);
+}
+
+void ConvertReturnValue(const indexed_db::mojom::ReturnValuePtr& value,
+ WebIDBValue* web_value) {
+ ConvertValue(value->value, web_value);
+ web_value->primaryKey = WebIDBKeyBuilder::Build(value->primary_key);
+ web_value->keyPath = WebIDBKeyPathBuilder::Build(value->key_path);
+}
+
} // namespace
IndexedDBCallbacksImpl::IndexedDBCallbacksImpl(
std::unique_ptr<WebIDBCallbacks> callbacks,
+ int64_t transaction_id,
+ scoped_refptr<base::SingleThreadTaskRunner> io_runner,
scoped_refptr<ThreadSafeSender> thread_safe_sender)
: internal_state_(new InternalState(std::move(callbacks),
+ transaction_id,
+ std::move(io_runner),
std::move(thread_safe_sender))),
callback_runner_(base::ThreadTaskRunnerHandle::Get()) {}
@@ -93,7 +134,7 @@ void IndexedDBCallbacksImpl::Blocked(int64_t existing_version) {
}
void IndexedDBCallbacksImpl::UpgradeNeeded(
- int32_t database_id,
+ DatabaseAssociatedPtrInfo database,
int64_t old_version,
blink::WebIDBDataLoss data_loss,
const std::string& data_loss_message,
@@ -101,17 +142,49 @@ void IndexedDBCallbacksImpl::UpgradeNeeded(
callback_runner_->PostTask(
FROM_HERE,
base::Bind(&InternalState::UpgradeNeeded,
- base::Unretained(internal_state_), database_id, old_version,
- data_loss, data_loss_message, metadata));
+ base::Unretained(internal_state_), base::Passed(&database),
+ old_version, data_loss, data_loss_message, metadata));
}
void IndexedDBCallbacksImpl::SuccessDatabase(
- int32_t database_id,
+ DatabaseAssociatedPtrInfo database,
const content::IndexedDBDatabaseMetadata& metadata) {
+ callback_runner_->PostTask(FROM_HERE,
+ base::Bind(&InternalState::SuccessDatabase,
+ base::Unretained(internal_state_),
+ base::Passed(&database), metadata));
+}
+
+void IndexedDBCallbacksImpl::SuccessCursor(int32_t cursor_id,
+ const IndexedDBKey& key,
+ const IndexedDBKey& primary_key,
+ indexed_db::mojom::ValuePtr value) {
+ callback_runner_->PostTask(
+ FROM_HERE, base::Bind(&InternalState::SuccessCursor,
+ base::Unretained(internal_state_), cursor_id, key,
+ primary_key, base::Passed(&value)));
+}
+
+void IndexedDBCallbacksImpl::SuccessValue(
+ indexed_db::mojom::ReturnValuePtr value) {
callback_runner_->PostTask(
FROM_HERE,
- base::Bind(&InternalState::SuccessDatabase,
- base::Unretained(internal_state_), database_id, metadata));
+ base::Bind(&InternalState::SuccessValue,
+ base::Unretained(internal_state_), base::Passed(&value)));
+}
+
+void IndexedDBCallbacksImpl::SuccessArray(
+ std::vector<indexed_db::mojom::ReturnValuePtr> values) {
+ callback_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&InternalState::SuccessArray,
+ base::Unretained(internal_state_), base::Passed(&values)));
+}
+
+void IndexedDBCallbacksImpl::SuccessKey(const IndexedDBKey& key) {
+ callback_runner_->PostTask(
+ FROM_HERE, base::Bind(&InternalState::SuccessKey,
+ base::Unretained(internal_state_), key));
}
void IndexedDBCallbacksImpl::SuccessInteger(int64_t value) {
@@ -120,10 +193,20 @@ void IndexedDBCallbacksImpl::SuccessInteger(int64_t value) {
base::Unretained(internal_state_), value));
}
+void IndexedDBCallbacksImpl::Success() {
+ callback_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&InternalState::Success, base::Unretained(internal_state_)));
+}
+
IndexedDBCallbacksImpl::InternalState::InternalState(
std::unique_ptr<blink::WebIDBCallbacks> callbacks,
+ int64_t transaction_id,
+ scoped_refptr<base::SingleThreadTaskRunner> io_runner,
scoped_refptr<ThreadSafeSender> thread_safe_sender)
: callbacks_(std::move(callbacks)),
+ transaction_id_(transaction_id),
+ io_runner_(std::move(io_runner)),
thread_safe_sender_(std::move(thread_safe_sender)) {
IndexedDBDispatcher* dispatcher =
IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get());
@@ -140,48 +223,100 @@ void IndexedDBCallbacksImpl::InternalState::Error(
int32_t code,
const base::string16& message) {
callbacks_->onError(blink::WebIDBDatabaseError(code, message));
+ callbacks_.reset();
}
void IndexedDBCallbacksImpl::InternalState::SuccessStringList(
const std::vector<base::string16>& value) {
callbacks_->onSuccess(WebVector<WebString>(value));
+ callbacks_.reset();
}
void IndexedDBCallbacksImpl::InternalState::Blocked(int64_t existing_version) {
callbacks_->onBlocked(existing_version);
+ // Not resetting |callbacks_|.
}
void IndexedDBCallbacksImpl::InternalState::UpgradeNeeded(
- int32_t database_id,
+ DatabaseAssociatedPtrInfo database_info,
int64_t old_version,
blink::WebIDBDataLoss data_loss,
const std::string& data_loss_message,
const content::IndexedDBDatabaseMetadata& metadata) {
- IndexedDBDispatcher* dispatcher =
- IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get());
- WebIDBDatabase* database = dispatcher->RegisterDatabase(database_id);
+ WebIDBDatabase* database = new WebIDBDatabaseImpl(
+ std::move(database_info), io_runner_, thread_safe_sender_);
WebIDBMetadata web_metadata;
ConvertDatabaseMetadata(metadata, &web_metadata);
callbacks_->onUpgradeNeeded(old_version, database, web_metadata, data_loss,
WebString::fromUTF8(data_loss_message));
+ // Not resetting |callbacks_|.
}
void IndexedDBCallbacksImpl::InternalState::SuccessDatabase(
- int32_t database_id,
+ DatabaseAssociatedPtrInfo database_info,
const content::IndexedDBDatabaseMetadata& metadata) {
WebIDBDatabase* database = nullptr;
- if (database_id != kNoDatabase) {
- IndexedDBDispatcher* dispatcher =
- IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get());
- database = dispatcher->RegisterDatabase(database_id);
+ if (database_info.is_valid()) {
+ database = new WebIDBDatabaseImpl(std::move(database_info), io_runner_,
+ thread_safe_sender_);
}
WebIDBMetadata web_metadata;
ConvertDatabaseMetadata(metadata, &web_metadata);
callbacks_->onSuccess(database, web_metadata);
+ callbacks_.reset();
+}
+
+void IndexedDBCallbacksImpl::InternalState::SuccessCursor(
+ int32_t cursor_id,
+ const IndexedDBKey& key,
+ const IndexedDBKey& primary_key,
+ indexed_db::mojom::ValuePtr value) {
+ WebIDBValue web_value;
+ if (value)
+ ConvertValue(value, &web_value);
+
+ WebIDBCursorImpl* cursor = new WebIDBCursorImpl(cursor_id, transaction_id_,
+ thread_safe_sender_.get());
+ IndexedDBDispatcher* dispatcher =
+ IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get());
+ dispatcher->RegisterCursor(cursor_id, cursor);
+ callbacks_->onSuccess(cursor, WebIDBKeyBuilder::Build(key),
+ WebIDBKeyBuilder::Build(primary_key), web_value);
+ callbacks_.reset();
+}
+
+void IndexedDBCallbacksImpl::InternalState::SuccessKey(
+ const IndexedDBKey& key) {
+ callbacks_->onSuccess(WebIDBKeyBuilder::Build(key));
+ callbacks_.reset();
+}
+
+void IndexedDBCallbacksImpl::InternalState::SuccessValue(
+ indexed_db::mojom::ReturnValuePtr value) {
+ WebIDBValue web_value;
+ if (value)
+ ConvertReturnValue(value, &web_value);
+ callbacks_->onSuccess(web_value);
+ callbacks_.reset();
+}
+
+void IndexedDBCallbacksImpl::InternalState::SuccessArray(
+ std::vector<indexed_db::mojom::ReturnValuePtr> values) {
+ blink::WebVector<WebIDBValue> web_values(values.size());
+ for (size_t i = 0; i < values.size(); ++i)
+ ConvertReturnValue(values[i], &web_values[i]);
+ callbacks_->onSuccess(web_values);
+ callbacks_.reset();
}
void IndexedDBCallbacksImpl::InternalState::SuccessInteger(int64_t value) {
callbacks_->onSuccess(value);
+ callbacks_.reset();
+}
+
+void IndexedDBCallbacksImpl::InternalState::Success() {
+ callbacks_->onSuccess();
+ callbacks_.reset();
}
} // namespace content
« no previous file with comments | « content/child/indexed_db/indexed_db_callbacks_impl.h ('k') | content/child/indexed_db/indexed_db_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698