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

Side by Side Diff: content/child/indexed_db/indexed_db_callbacks_impl.cc

Issue 2370643004: Port messages sent by WebIDBFactoryImpl to Mojo. (Closed)
Patch Set: Rebase over the Blink reformatting. 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/child/indexed_db/indexed_db_callbacks_impl.h"
6
7 #include "content/child/indexed_db/indexed_db_dispatcher.h"
8 #include "content/child/indexed_db/indexed_db_key_builders.h"
9 #include "content/child/thread_safe_sender.h"
10 #include "content/common/indexed_db/indexed_db_constants.h"
11 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBCallbacks.h "
12 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBDatabaseErr or.h"
13 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBMetadata.h"
14
15 using blink::WebIDBCallbacks;
16 using blink::WebIDBDatabase;
17 using blink::WebIDBMetadata;
18 using blink::WebString;
19 using blink::WebVector;
20 using indexed_db::mojom::DatabaseMetadataPtr;
21
22 namespace content {
23
24 namespace {
25
26 WebIDBMetadata ConvertMetadata(DatabaseMetadataPtr metadata) {
27 WebIDBMetadata web_metadata;
28 web_metadata.id = metadata->id;
29 web_metadata.name = metadata->name;
30 web_metadata.version = metadata->version;
31 web_metadata.maxObjectStoreId = metadata->max_object_store_id;
32 web_metadata.objectStores =
33 WebVector<WebIDBMetadata::ObjectStore>(metadata->object_stores.size());
34
35 for (size_t i = 0; i < metadata->object_stores.size(); ++i) {
36 const indexed_db::mojom::ObjectStoreMetadataPtr& store_metadata =
37 metadata->object_stores[i];
38 WebIDBMetadata::ObjectStore& web_store_metadata =
39 web_metadata.objectStores[i];
40
41 web_store_metadata.id = store_metadata->id;
42 web_store_metadata.name = store_metadata->name;
43 web_store_metadata.keyPath =
44 WebIDBKeyPathBuilder::Build(store_metadata->key_path);
45 web_store_metadata.autoIncrement = store_metadata->auto_increment;
46 web_store_metadata.maxIndexId = store_metadata->max_index_id;
47 web_store_metadata.indexes =
48 WebVector<WebIDBMetadata::Index>(store_metadata->indexes.size());
49
50 for (size_t j = 0; j < store_metadata->indexes.size(); ++j) {
51 const indexed_db::mojom::IndexMetadataPtr& index_metadata =
52 store_metadata->indexes[j];
53 WebIDBMetadata::Index& web_index_metadata = web_store_metadata.indexes[j];
54
55 web_index_metadata.id = index_metadata->id;
56 web_index_metadata.name = index_metadata->name;
57 web_index_metadata.keyPath =
58 WebIDBKeyPathBuilder::Build(index_metadata->key_path);
59 web_index_metadata.unique = index_metadata->unique;
60 web_index_metadata.multiEntry = index_metadata->multi_entry;
61 }
62 }
63
64 return web_metadata;
65 }
66
67 } // namespace
68
69 class IndexedDBCallbacksImpl::InternalState {
70 public:
71 InternalState(blink::WebIDBCallbacks* callbacks,
72 scoped_refptr<ThreadSafeSender> thread_safe_sender);
73 ~InternalState();
74
75 void Blocked(int64_t existing_version);
76 void Error(int32_t code, const base::string16& message);
77 void SuccessDatabase(int32_t database_id,
78 indexed_db::mojom::DatabaseMetadataPtr metadata);
79 void SuccessInteger(int64_t value);
80 void SuccessStringList(const std::vector<base::string16>& value);
81 void UpgradeNeeded(int32_t database_id,
82 int64_t old_version,
83 indexed_db::mojom::DataLoss data_loss,
84 const std::string& data_loss_message,
85 indexed_db::mojom::DatabaseMetadataPtr metadata);
86
87 private:
88 std::unique_ptr<WebIDBCallbacks> callbacks_;
89 scoped_refptr<ThreadSafeSender> thread_safe_sender_;
90 };
91
92 IndexedDBCallbacksImpl::IndexedDBCallbacksImpl(
93 WebIDBCallbacks* callbacks,
94 scoped_refptr<ThreadSafeSender> thread_safe_sender)
95 : callback_runner_(base::ThreadTaskRunnerHandle::Get()) {
96 internal_state_ = new InternalState(callbacks, std::move(thread_safe_sender));
97 }
98
99 IndexedDBCallbacksImpl::~IndexedDBCallbacksImpl() {
100 callback_runner_->DeleteSoon(FROM_HERE, internal_state_);
101 }
102
103 void IndexedDBCallbacksImpl::Blocked(int64_t existing_version) {
104 callback_runner_->PostTask(
105 FROM_HERE,
106 base::Bind(&InternalState::Blocked, base::Unretained(internal_state_),
107 existing_version));
108 }
109
110 void IndexedDBCallbacksImpl::Error(int32_t code,
111 const base::string16& message) {
112 callback_runner_->PostTask(
113 FROM_HERE, base::Bind(&InternalState::Error,
114 base::Unretained(internal_state_), code, message));
115 }
116
117 void IndexedDBCallbacksImpl::SuccessDatabase(int32_t database_id,
118 DatabaseMetadataPtr metadata) {
119 callback_runner_->PostTask(
120 FROM_HERE, base::Bind(&InternalState::SuccessDatabase,
121 base::Unretained(internal_state_), database_id,
122 base::Passed(&metadata)));
123 }
124
125 void IndexedDBCallbacksImpl::SuccessInteger(int64_t value) {
126 callback_runner_->PostTask(
127 FROM_HERE, base::Bind(&InternalState::SuccessInteger,
128 base::Unretained(internal_state_), value));
129 }
130
131 void IndexedDBCallbacksImpl::SuccessStringList(
132 const std::vector<base::string16>& value) {
133 callback_runner_->PostTask(
134 FROM_HERE, base::Bind(&InternalState::SuccessStringList,
135 base::Unretained(internal_state_), value));
136 }
137
138 void IndexedDBCallbacksImpl::UpgradeNeeded(
139 int32_t database_id,
140 int64_t old_version,
141 indexed_db::mojom::DataLoss data_loss,
142 const std::string& data_loss_message,
143 DatabaseMetadataPtr metadata) {
144 callback_runner_->PostTask(
145 FROM_HERE,
146 base::Bind(&InternalState::UpgradeNeeded,
147 base::Unretained(internal_state_), database_id, old_version,
148 data_loss, data_loss_message, base::Passed(&metadata)));
149 }
150
151 IndexedDBCallbacksImpl::InternalState::InternalState(
152 blink::WebIDBCallbacks* callbacks,
153 scoped_refptr<ThreadSafeSender> thread_safe_sender)
154 : callbacks_(callbacks),
155 thread_safe_sender_(std::move(thread_safe_sender)) {}
156
157 IndexedDBCallbacksImpl::InternalState::~InternalState() {}
158
159 void IndexedDBCallbacksImpl::InternalState::Blocked(int64_t existing_version) {
160 callbacks_->onBlocked(existing_version);
161 }
162
163 void IndexedDBCallbacksImpl::InternalState::Error(
164 int32_t code,
165 const base::string16& message) {
166 callbacks_->onError(blink::WebIDBDatabaseError(code, message));
167 }
168
169 void IndexedDBCallbacksImpl::InternalState::SuccessDatabase(
170 int32_t database_id,
171 DatabaseMetadataPtr metadata) {
172 WebIDBDatabase* database = nullptr;
173 if (database_id != kNoDatabase) {
174 IndexedDBDispatcher* dispatcher =
175 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get());
176 database = dispatcher->RegisterDatabase(database_id);
177 }
178 callbacks_->onSuccess(database, ConvertMetadata(std::move(metadata)));
179 }
180
181 void IndexedDBCallbacksImpl::InternalState::SuccessInteger(int64_t value) {
182 callbacks_->onSuccess(value);
183 }
184
185 void IndexedDBCallbacksImpl::InternalState::SuccessStringList(
186 const std::vector<base::string16>& value) {
187 callbacks_->onSuccess(WebVector<WebString>(value));
188 }
189
190 void IndexedDBCallbacksImpl::InternalState::UpgradeNeeded(
191 int32_t database_id,
192 int64_t old_version,
193 indexed_db::mojom::DataLoss data_loss,
194 const std::string& data_loss_message,
195 DatabaseMetadataPtr metadata) {
196 IndexedDBDispatcher* dispatcher =
197 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get());
198 WebIDBDatabase* database = dispatcher->RegisterDatabase(database_id);
199 callbacks_->onUpgradeNeeded(old_version, database,
200 ConvertMetadata(std::move(metadata)),
201 static_cast<blink::WebIDBDataLoss>(data_loss),
202 WebString::fromUTF8(data_loss_message));
203 }
204
205 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698