OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/child/indexed_db/webidbdatabase_impl.h" | 5 #include "content/child/indexed_db/webidbdatabase_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/stl_util.h" | 12 #include "base/stl_util.h" |
13 #include "content/child/indexed_db/indexed_db_callbacks_impl.h" | |
13 #include "content/child/indexed_db/indexed_db_dispatcher.h" | 14 #include "content/child/indexed_db/indexed_db_dispatcher.h" |
14 #include "content/child/indexed_db/indexed_db_key_builders.h" | 15 #include "content/child/indexed_db/indexed_db_key_builders.h" |
15 #include "content/child/thread_safe_sender.h" | 16 #include "content/child/thread_safe_sender.h" |
16 #include "content/child/worker_thread_registry.h" | 17 #include "content/child/worker_thread_registry.h" |
17 #include "content/common/indexed_db/indexed_db_messages.h" | 18 #include "content/common/indexed_db/indexed_db_messages.h" |
19 #include "mojo/public/cpp/bindings/strong_associated_binding.h" | |
18 #include "third_party/WebKit/public/platform/WebBlobInfo.h" | 20 #include "third_party/WebKit/public/platform/WebBlobInfo.h" |
19 #include "third_party/WebKit/public/platform/WebString.h" | 21 #include "third_party/WebKit/public/platform/WebString.h" |
20 #include "third_party/WebKit/public/platform/WebVector.h" | 22 #include "third_party/WebKit/public/platform/WebVector.h" |
23 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBDatabaseErr or.h" | |
24 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBDatabaseExc eption.h" | |
21 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBKeyPath.h" | 25 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBKeyPath.h" |
22 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBMetadata.h" | 26 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBMetadata.h" |
23 | 27 |
24 using blink::WebBlobInfo; | 28 using blink::WebBlobInfo; |
25 using blink::WebIDBCallbacks; | 29 using blink::WebIDBCallbacks; |
26 using blink::WebIDBCursor; | 30 using blink::WebIDBCursor; |
27 using blink::WebIDBDatabase; | 31 using blink::WebIDBDatabase; |
28 using blink::WebIDBDatabaseCallbacks; | 32 using blink::WebIDBDatabaseCallbacks; |
29 using blink::WebIDBMetadata; | 33 using blink::WebIDBMetadata; |
30 using blink::WebIDBKey; | 34 using blink::WebIDBKey; |
31 using blink::WebIDBKeyPath; | 35 using blink::WebIDBKeyPath; |
32 using blink::WebIDBKeyRange; | 36 using blink::WebIDBKeyRange; |
33 using blink::WebIDBObserver; | 37 using blink::WebIDBObserver; |
34 using blink::WebString; | 38 using blink::WebString; |
35 using blink::WebVector; | 39 using blink::WebVector; |
40 using indexed_db::mojom::CallbacksAssociatedPtrInfo; | |
41 using indexed_db::mojom::DatabaseAssociatedPtrInfo; | |
36 | 42 |
37 namespace content { | 43 namespace content { |
38 | 44 |
39 WebIDBDatabaseImpl::WebIDBDatabaseImpl(int32_t ipc_database_id, | 45 namespace { |
40 ThreadSafeSender* thread_safe_sender) | 46 |
41 : ipc_database_id_(ipc_database_id), | 47 std::vector<content::IndexedDBIndexKeys> ConvertWebIndexKeys( |
42 thread_safe_sender_(thread_safe_sender) {} | 48 const WebVector<long long>& index_ids, |
49 const WebVector<WebIDBDatabase::WebIndexKeys>& index_keys) { | |
50 DCHECK_EQ(index_ids.size(), index_keys.size()); | |
51 std::vector<content::IndexedDBIndexKeys> result; | |
52 result.resize(index_ids.size()); | |
53 for (size_t i = 0, len = index_ids.size(); i < len; ++i) { | |
54 result[i].first = index_ids[i]; | |
55 result[i].second.resize(index_keys[i].size()); | |
56 for (size_t j = 0; j < index_keys[i].size(); ++j) | |
57 result[i].second[j] = IndexedDBKeyBuilder::Build(index_keys[i][j]); | |
58 } | |
59 return result; | |
60 } | |
61 | |
62 } // namespace | |
63 | |
64 class WebIDBDatabaseImpl::IOThreadHelper { | |
65 public: | |
66 IOThreadHelper(); | |
67 ~IOThreadHelper(); | |
68 | |
69 void Bind(DatabaseAssociatedPtrInfo database_info); | |
70 void CreateObjectStore(int64_t transaction_id, | |
71 int64_t object_store_id, | |
72 const base::string16& name, | |
73 const IndexedDBKeyPath& key_path, | |
74 bool auto_increment); | |
75 void DeleteObjectStore(int64_t transaction_id, int64_t object_store_id); | |
76 void RenameObjectStore(int64_t transaction_id, | |
77 int64_t object_store_id, | |
78 const base::string16& new_name); | |
79 void CreateTransaction(int64_t transaction_id, | |
80 const std::vector<int64_t>& object_store_ids, | |
81 blink::WebIDBTransactionMode mode); | |
82 void Close(); | |
83 void VersionChangeIgnored(); | |
84 void AddObserver(int64_t transaction_id, | |
85 int32_t observer_id, | |
86 bool include_transaction, | |
87 bool no_records, | |
88 bool values, | |
89 uint16_t operation_types); | |
90 void RemoveObservers(const std::vector<int32_t>& observers); | |
91 void Get(int64_t transaction_id, | |
92 int64_t object_store_id, | |
93 int64_t index_id, | |
94 const IndexedDBKeyRange& key_range, | |
95 bool key_only, | |
96 std::unique_ptr<IndexedDBCallbacksImpl> callbacks); | |
97 void GetAll(int64_t transaction_id, | |
98 int64_t object_store_id, | |
99 int64_t index_id, | |
100 const IndexedDBKeyRange& key_range, | |
101 int64_t max_count, | |
102 bool key_only, | |
103 std::unique_ptr<IndexedDBCallbacksImpl> callbacks); | |
104 void Put(int64_t transaction_id, | |
105 int64_t object_store_id, | |
106 indexed_db::mojom::ValuePtr value, | |
107 const IndexedDBKey& key, | |
108 blink::WebIDBPutMode mode, | |
109 std::unique_ptr<IndexedDBCallbacksImpl> callbacks, | |
110 const std::vector<content::IndexedDBIndexKeys>& index_keys); | |
111 void SetIndexKeys(int64_t transaction_id, | |
112 int64_t object_store_id, | |
113 const IndexedDBKey& primary_key, | |
114 const std::vector<content::IndexedDBIndexKeys>& index_keys); | |
115 void SetIndexesReady(int64_t transaction_id, | |
116 int64_t object_store_id, | |
117 const std::vector<int64_t>& index_ids); | |
118 void OpenCursor(int64_t transaction_id, | |
119 int64_t object_store_id, | |
120 int64_t index_id, | |
121 const IndexedDBKeyRange& key_range, | |
122 blink::WebIDBCursorDirection direction, | |
123 bool key_only, | |
124 blink::WebIDBTaskType task_type, | |
125 std::unique_ptr<IndexedDBCallbacksImpl> callbacks); | |
126 void Count(int64_t transaction_id, | |
127 int64_t object_store_id, | |
128 int64_t index_id, | |
129 const IndexedDBKeyRange& key_range, | |
130 std::unique_ptr<IndexedDBCallbacksImpl> callbacks); | |
131 void DeleteRange(int64_t transaction_id, | |
132 int64_t object_store_id, | |
133 const IndexedDBKeyRange& key_range, | |
134 std::unique_ptr<IndexedDBCallbacksImpl> callbacks); | |
135 void Clear(int64_t transaction_id, | |
136 int64_t object_store_id, | |
137 std::unique_ptr<IndexedDBCallbacksImpl> callbacks); | |
138 void CreateIndex(int64_t transaction_id, | |
139 int64_t object_store_id, | |
140 int64_t index_id, | |
141 const base::string16& name, | |
142 const IndexedDBKeyPath& key_path, | |
143 bool unique, | |
144 bool multi_entry); | |
145 void DeleteIndex(int64_t transaction_id, | |
146 int64_t object_store_id, | |
147 int64_t index_id); | |
148 void RenameIndex(int64_t transaction_id, | |
149 int64_t object_store_id, | |
150 int64_t index_id, | |
151 const base::string16& new_name); | |
152 void Abort(int64_t transaction_id); | |
153 void Commit(int64_t transaction_id); | |
154 void AckReceivedBlobs(const std::vector<std::string>& uuids); | |
155 | |
156 private: | |
157 CallbacksAssociatedPtrInfo GetCallbacksProxy( | |
158 std::unique_ptr<IndexedDBCallbacksImpl> callbacks); | |
159 | |
160 indexed_db::mojom::DatabaseAssociatedPtr database_; | |
161 | |
162 DISALLOW_COPY_AND_ASSIGN(IOThreadHelper); | |
163 }; | |
164 | |
165 WebIDBDatabaseImpl::WebIDBDatabaseImpl( | |
166 DatabaseAssociatedPtrInfo database_info, | |
167 scoped_refptr<base::SingleThreadTaskRunner> io_runner, | |
168 scoped_refptr<ThreadSafeSender> thread_safe_sender) | |
169 : helper_(new IOThreadHelper()), | |
170 io_runner_(std::move(io_runner)), | |
171 thread_safe_sender_(std::move(thread_safe_sender)) { | |
172 io_runner_->PostTask( | |
173 FROM_HERE, base::Bind(&IOThreadHelper::Bind, base::Unretained(helper_), | |
174 base::Passed(&database_info))); | |
175 } | |
43 | 176 |
44 WebIDBDatabaseImpl::~WebIDBDatabaseImpl() { | 177 WebIDBDatabaseImpl::~WebIDBDatabaseImpl() { |
45 // It's not possible for there to be pending callbacks that address this | 178 io_runner_->DeleteSoon(FROM_HERE, helper_); |
46 // object since inside WebKit, they hold a reference to the object which owns | |
47 // this object. But, if that ever changed, then we'd need to invalidate | |
48 // any such pointers. | |
49 thread_safe_sender_->Send( | |
50 new IndexedDBHostMsg_DatabaseDestroyed(ipc_database_id_)); | |
51 IndexedDBDispatcher* dispatcher = | |
52 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | |
53 dispatcher->DatabaseDestroyed(ipc_database_id_); | |
54 } | 179 } |
55 | 180 |
56 void WebIDBDatabaseImpl::createObjectStore(long long transaction_id, | 181 void WebIDBDatabaseImpl::createObjectStore(long long transaction_id, |
57 long long object_store_id, | 182 long long object_store_id, |
58 const WebString& name, | 183 const WebString& name, |
59 const WebIDBKeyPath& key_path, | 184 const WebIDBKeyPath& key_path, |
60 bool auto_increment) { | 185 bool auto_increment) { |
61 IndexedDBHostMsg_DatabaseCreateObjectStore_Params params; | 186 io_runner_->PostTask( |
62 params.ipc_database_id = ipc_database_id_; | 187 FROM_HERE, |
63 params.transaction_id = transaction_id; | 188 base::Bind(&IOThreadHelper::CreateObjectStore, base::Unretained(helper_), |
64 params.object_store_id = object_store_id; | 189 transaction_id, object_store_id, base::string16(name), |
65 params.name = name; | 190 IndexedDBKeyPathBuilder::Build(key_path), auto_increment)); |
66 params.key_path = IndexedDBKeyPathBuilder::Build(key_path); | |
67 params.auto_increment = auto_increment; | |
68 | |
69 thread_safe_sender_->Send( | |
70 new IndexedDBHostMsg_DatabaseCreateObjectStore(params)); | |
71 } | 191 } |
72 | 192 |
73 void WebIDBDatabaseImpl::deleteObjectStore(long long transaction_id, | 193 void WebIDBDatabaseImpl::deleteObjectStore(long long transaction_id, |
74 long long object_store_id) { | 194 long long object_store_id) { |
75 thread_safe_sender_->Send(new IndexedDBHostMsg_DatabaseDeleteObjectStore( | 195 io_runner_->PostTask(FROM_HERE, base::Bind(&IOThreadHelper::DeleteObjectStore, |
76 ipc_database_id_, transaction_id, object_store_id)); | 196 base::Unretained(helper_), |
197 transaction_id, object_store_id)); | |
77 } | 198 } |
78 | 199 |
79 void WebIDBDatabaseImpl::renameObjectStore(long long transaction_id, | 200 void WebIDBDatabaseImpl::renameObjectStore(long long transaction_id, |
80 long long object_store_id, | 201 long long object_store_id, |
81 const blink::WebString& new_name) { | 202 const blink::WebString& new_name) { |
82 thread_safe_sender_->Send(new IndexedDBHostMsg_DatabaseRenameObjectStore( | 203 io_runner_->PostTask( |
83 ipc_database_id_, transaction_id, object_store_id, new_name)); | 204 FROM_HERE, |
205 base::Bind(&IOThreadHelper::RenameObjectStore, base::Unretained(helper_), | |
206 transaction_id, object_store_id, base::string16(new_name))); | |
84 } | 207 } |
85 | 208 |
86 void WebIDBDatabaseImpl::createTransaction( | 209 void WebIDBDatabaseImpl::createTransaction( |
87 long long transaction_id, | 210 long long transaction_id, |
88 const WebVector<long long>& object_store_ids, | 211 const WebVector<long long>& object_store_ids, |
89 blink::WebIDBTransactionMode mode) { | 212 blink::WebIDBTransactionMode mode) { |
90 IndexedDBDispatcher* dispatcher = | 213 io_runner_->PostTask( |
91 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 214 FROM_HERE, |
92 dispatcher->RequestIDBDatabaseCreateTransaction( | 215 base::Bind(&IOThreadHelper::CreateTransaction, base::Unretained(helper_), |
93 ipc_database_id_, transaction_id, object_store_ids, mode); | 216 transaction_id, std::vector<int64_t>(object_store_ids.begin(), |
217 object_store_ids.end()), | |
218 mode)); | |
94 } | 219 } |
95 | 220 |
96 void WebIDBDatabaseImpl::close() { | 221 void WebIDBDatabaseImpl::close() { |
97 IndexedDBDispatcher* dispatcher = | 222 IndexedDBDispatcher* dispatcher = |
98 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 223 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); |
99 dispatcher->RemoveIDBObservers(observer_ids_); | 224 std::vector<int32_t> remove_observer_ids(observer_ids_.begin(), |
100 dispatcher->RequestIDBDatabaseClose(ipc_database_id_); | 225 observer_ids_.end()); |
226 dispatcher->RemoveObservers(remove_observer_ids); | |
227 io_runner_->PostTask( | |
228 FROM_HERE, base::Bind(&IOThreadHelper::Close, base::Unretained(helper_))); | |
101 } | 229 } |
102 | 230 |
103 void WebIDBDatabaseImpl::versionChangeIgnored() { | 231 void WebIDBDatabaseImpl::versionChangeIgnored() { |
104 IndexedDBDispatcher* dispatcher = | 232 io_runner_->PostTask(FROM_HERE, |
105 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 233 base::Bind(&IOThreadHelper::VersionChangeIgnored, |
106 dispatcher->NotifyIDBDatabaseVersionChangeIgnored(ipc_database_id_); | 234 base::Unretained(helper_))); |
107 } | 235 } |
108 | 236 |
109 int32_t WebIDBDatabaseImpl::addObserver( | 237 int32_t WebIDBDatabaseImpl::addObserver( |
110 std::unique_ptr<WebIDBObserver> observer, | 238 std::unique_ptr<WebIDBObserver> observer, |
111 long long transaction_id) { | 239 long long transaction_id) { |
112 IndexedDBDispatcher* dispatcher = | 240 IndexedDBDispatcher* dispatcher = |
113 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 241 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); |
114 | 242 WebIDBObserver* observer_ptr = observer.get(); |
115 int32_t observer_id = dispatcher->AddIDBObserver( | 243 int32_t observer_id = dispatcher->RegisterObserver(std::move(observer)); |
116 ipc_database_id_, transaction_id, std::move(observer)); | |
117 observer_ids_.insert(observer_id); | 244 observer_ids_.insert(observer_id); |
245 static_assert(blink::WebIDBOperationTypeCount < sizeof(uint16_t) * CHAR_BIT, | |
246 "WebIDBOperationType Count exceeds size of uint16_t"); | |
247 io_runner_->PostTask( | |
248 FROM_HERE, | |
249 base::Bind(&IOThreadHelper::AddObserver, base::Unretained(helper_), | |
250 transaction_id, observer_id, observer_ptr->transaction(), | |
251 observer_ptr->noRecords(), observer_ptr->values(), | |
252 observer_ptr->operationTypes().to_ulong())); | |
118 return observer_id; | 253 return observer_id; |
119 } | 254 } |
120 | 255 |
121 void WebIDBDatabaseImpl::removeObservers( | 256 void WebIDBDatabaseImpl::removeObservers( |
122 const WebVector<int32_t>& observer_ids_to_remove) { | 257 const WebVector<int32_t>& observer_ids_to_remove) { |
123 std::vector<int32_t> remove_observer_ids( | 258 std::vector<int32_t> remove_observer_ids( |
124 observer_ids_to_remove.data(), | 259 observer_ids_to_remove.data(), |
125 observer_ids_to_remove.data() + observer_ids_to_remove.size()); | 260 observer_ids_to_remove.data() + observer_ids_to_remove.size()); |
126 for (int32_t id : observer_ids_to_remove) | 261 for (int32_t id : observer_ids_to_remove) |
127 observer_ids_.erase(id); | 262 observer_ids_.erase(id); |
128 | 263 |
129 IndexedDBDispatcher* dispatcher = | 264 IndexedDBDispatcher* dispatcher = |
130 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 265 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); |
131 dispatcher->RemoveIDBObserversFromDatabase(ipc_database_id_, | 266 dispatcher->RemoveObservers(remove_observer_ids); |
132 remove_observer_ids); | 267 io_runner_->PostTask( |
268 FROM_HERE, base::Bind(&IOThreadHelper::RemoveObservers, | |
269 base::Unretained(helper_), remove_observer_ids)); | |
133 } | 270 } |
134 | 271 |
135 void WebIDBDatabaseImpl::get(long long transaction_id, | 272 void WebIDBDatabaseImpl::get(long long transaction_id, |
136 long long object_store_id, | 273 long long object_store_id, |
137 long long index_id, | 274 long long index_id, |
138 const WebIDBKeyRange& key_range, | 275 const WebIDBKeyRange& key_range, |
139 bool key_only, | 276 bool key_only, |
140 WebIDBCallbacks* callbacks) { | 277 WebIDBCallbacks* callbacks) { |
141 IndexedDBDispatcher* dispatcher = | 278 IndexedDBDispatcher* dispatcher = |
142 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 279 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); |
143 dispatcher->RequestIDBDatabaseGet(ipc_database_id_, | 280 dispatcher->ResetCursorPrefetchCaches(transaction_id, |
144 transaction_id, | 281 IndexedDBDispatcher::kAllCursors); |
145 object_store_id, | 282 |
146 index_id, | 283 auto callbacks_impl = base::MakeUnique<IndexedDBCallbacksImpl>( |
147 IndexedDBKeyRangeBuilder::Build(key_range), | 284 base::WrapUnique(callbacks), transaction_id, io_runner_, |
148 key_only, | 285 thread_safe_sender_); |
149 callbacks); | 286 io_runner_->PostTask( |
287 FROM_HERE, base::Bind(&IOThreadHelper::Get, base::Unretained(helper_), | |
288 transaction_id, object_store_id, index_id, | |
289 IndexedDBKeyRangeBuilder::Build(key_range), | |
290 key_only, base::Passed(&callbacks_impl))); | |
150 } | 291 } |
151 | 292 |
152 void WebIDBDatabaseImpl::getAll(long long transaction_id, | 293 void WebIDBDatabaseImpl::getAll(long long transaction_id, |
153 long long object_store_id, | 294 long long object_store_id, |
154 long long index_id, | 295 long long index_id, |
155 const WebIDBKeyRange& key_range, | 296 const WebIDBKeyRange& key_range, |
156 long long max_count, | 297 long long max_count, |
157 bool key_only, | 298 bool key_only, |
158 WebIDBCallbacks* callbacks) { | 299 WebIDBCallbacks* callbacks) { |
159 IndexedDBDispatcher* dispatcher = | 300 IndexedDBDispatcher* dispatcher = |
160 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 301 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); |
161 dispatcher->RequestIDBDatabaseGetAll( | 302 dispatcher->ResetCursorPrefetchCaches(transaction_id, |
162 ipc_database_id_, transaction_id, object_store_id, index_id, | 303 IndexedDBDispatcher::kAllCursors); |
163 IndexedDBKeyRangeBuilder::Build(key_range), key_only, max_count, | 304 |
164 callbacks); | 305 auto callbacks_impl = base::MakeUnique<IndexedDBCallbacksImpl>( |
306 base::WrapUnique(callbacks), transaction_id, io_runner_, | |
307 thread_safe_sender_); | |
308 io_runner_->PostTask( | |
309 FROM_HERE, | |
310 base::Bind(&IOThreadHelper::GetAll, base::Unretained(helper_), | |
311 transaction_id, object_store_id, index_id, | |
312 IndexedDBKeyRangeBuilder::Build(key_range), max_count, | |
313 key_only, base::Passed(&callbacks_impl))); | |
165 } | 314 } |
166 | 315 |
167 void WebIDBDatabaseImpl::put(long long transaction_id, | 316 void WebIDBDatabaseImpl::put(long long transaction_id, |
168 long long object_store_id, | 317 long long object_store_id, |
169 const blink::WebData& value, | 318 const blink::WebData& value, |
170 const blink::WebVector<WebBlobInfo>& web_blob_info, | 319 const blink::WebVector<WebBlobInfo>& web_blob_info, |
171 const WebIDBKey& key, | 320 const WebIDBKey& web_key, |
172 blink::WebIDBPutMode put_mode, | 321 blink::WebIDBPutMode put_mode, |
173 WebIDBCallbacks* callbacks, | 322 WebIDBCallbacks* callbacks, |
174 const WebVector<long long>& web_index_ids, | 323 const WebVector<long long>& index_ids, |
175 const WebVector<WebIndexKeys>& web_index_keys) { | 324 const WebVector<WebIndexKeys>& index_keys) { |
325 IndexedDBKey key = IndexedDBKeyBuilder::Build(web_key); | |
326 | |
327 if (value.size() + key.size_estimate() > max_put_value_size_) { | |
328 callbacks->onError(blink::WebIDBDatabaseError( | |
329 blink::WebIDBDatabaseExceptionUnknownError, | |
330 WebString::fromUTF8( | |
331 base::StringPrintf("The serialized value is too large" | |
332 " (size=%" PRIuS " bytes, max=%" PRIuS | |
333 " bytes).", | |
334 value.size(), max_put_value_size_) | |
335 .c_str()))); | |
dcheng
2016/11/03 04:27:04
c_str() shouldn't be needed.
Reilly Grant (use Gerrit)
2016/11/03 21:32:22
Done.
| |
336 return; | |
337 } | |
338 | |
176 IndexedDBDispatcher* dispatcher = | 339 IndexedDBDispatcher* dispatcher = |
177 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 340 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); |
178 dispatcher->RequestIDBDatabasePut(ipc_database_id_, | 341 dispatcher->ResetCursorPrefetchCaches(transaction_id, |
179 transaction_id, | 342 IndexedDBDispatcher::kAllCursors); |
180 object_store_id, | 343 |
181 value, | 344 auto mojo_value = indexed_db::mojom::Value::New(); |
182 web_blob_info, | 345 mojo_value->bits.assign(value.data(), value.data() + value.size()); |
183 IndexedDBKeyBuilder::Build(key), | 346 mojo_value->blob_or_file_info.reserve(web_blob_info.size()); |
184 put_mode, | 347 for (const WebBlobInfo& info : web_blob_info) { |
185 callbacks, | 348 auto blob_or_file_info = indexed_db::mojom::BlobOrFileInfo::New(); |
186 web_index_ids, | 349 blob_or_file_info->is_file = info.isFile(); |
187 web_index_keys); | 350 if (info.isFile()) { |
351 blob_or_file_info->file_path = info.filePath(); | |
352 blob_or_file_info->file_name = info.fileName(); | |
353 blob_or_file_info->last_modified = info.lastModified(); | |
354 } | |
355 blob_or_file_info->size = info.size(); | |
356 blob_or_file_info->uuid = info.uuid().latin1(); | |
357 DCHECK(blob_or_file_info->uuid.size()); | |
358 blob_or_file_info->mime_type = info.type(); | |
359 mojo_value->blob_or_file_info.push_back(std::move(blob_or_file_info)); | |
360 } | |
361 | |
362 auto callbacks_impl = base::MakeUnique<IndexedDBCallbacksImpl>( | |
363 base::WrapUnique(callbacks), transaction_id, io_runner_, | |
364 thread_safe_sender_); | |
365 io_runner_->PostTask( | |
366 FROM_HERE, | |
367 base::Bind(&IOThreadHelper::Put, base::Unretained(helper_), | |
368 transaction_id, object_store_id, base::Passed(&mojo_value), | |
369 key, put_mode, base::Passed(&callbacks_impl), | |
370 ConvertWebIndexKeys(index_ids, index_keys))); | |
188 } | 371 } |
189 | 372 |
190 void WebIDBDatabaseImpl::setIndexKeys( | 373 void WebIDBDatabaseImpl::setIndexKeys( |
191 long long transaction_id, | 374 long long transaction_id, |
192 long long object_store_id, | 375 long long object_store_id, |
193 const WebIDBKey& primary_key, | 376 const WebIDBKey& primary_key, |
194 const WebVector<long long>& index_ids, | 377 const WebVector<long long>& index_ids, |
195 const WebVector<WebIndexKeys>& index_keys) { | 378 const WebVector<WebIndexKeys>& index_keys) { |
196 IndexedDBHostMsg_DatabaseSetIndexKeys_Params params; | 379 io_runner_->PostTask( |
197 params.ipc_database_id = ipc_database_id_; | 380 FROM_HERE, |
198 params.transaction_id = transaction_id; | 381 base::Bind(&IOThreadHelper::SetIndexKeys, base::Unretained(helper_), |
199 params.object_store_id = object_store_id; | 382 transaction_id, object_store_id, |
200 params.primary_key = IndexedDBKeyBuilder::Build(primary_key); | 383 IndexedDBKeyBuilder::Build(primary_key), |
201 | 384 ConvertWebIndexKeys(index_ids, index_keys))); |
202 DCHECK_EQ(index_ids.size(), index_keys.size()); | |
203 params.index_keys.resize(index_ids.size()); | |
204 for (size_t i = 0, len = index_ids.size(); i < len; ++i) { | |
205 params.index_keys[i].first = index_ids[i]; | |
206 params.index_keys[i].second.resize(index_keys[i].size()); | |
207 for (size_t j = 0; j < index_keys[i].size(); ++j) { | |
208 params.index_keys[i].second[j] = | |
209 IndexedDBKey(IndexedDBKeyBuilder::Build(index_keys[i][j])); | |
210 } | |
211 } | |
212 | |
213 thread_safe_sender_->Send(new IndexedDBHostMsg_DatabaseSetIndexKeys(params)); | |
214 } | 385 } |
215 | 386 |
216 void WebIDBDatabaseImpl::setIndexesReady( | 387 void WebIDBDatabaseImpl::setIndexesReady( |
217 long long transaction_id, | 388 long long transaction_id, |
218 long long object_store_id, | 389 long long object_store_id, |
219 const WebVector<long long>& web_index_ids) { | 390 const WebVector<long long>& web_index_ids) { |
220 std::vector<int64_t> index_ids(web_index_ids.data(), | 391 std::vector<int64_t> index_ids(web_index_ids.data(), |
221 web_index_ids.data() + web_index_ids.size()); | 392 web_index_ids.data() + web_index_ids.size()); |
222 thread_safe_sender_->Send(new IndexedDBHostMsg_DatabaseSetIndexesReady( | 393 io_runner_->PostTask( |
223 ipc_database_id_, transaction_id, object_store_id, index_ids)); | 394 FROM_HERE, |
395 base::Bind(&IOThreadHelper::SetIndexesReady, base::Unretained(helper_), | |
396 transaction_id, object_store_id, base::Passed(&index_ids))); | |
224 } | 397 } |
225 | 398 |
226 void WebIDBDatabaseImpl::openCursor(long long transaction_id, | 399 void WebIDBDatabaseImpl::openCursor(long long transaction_id, |
227 long long object_store_id, | 400 long long object_store_id, |
228 long long index_id, | 401 long long index_id, |
229 const WebIDBKeyRange& key_range, | 402 const WebIDBKeyRange& key_range, |
230 blink::WebIDBCursorDirection direction, | 403 blink::WebIDBCursorDirection direction, |
231 bool key_only, | 404 bool key_only, |
232 blink::WebIDBTaskType task_type, | 405 blink::WebIDBTaskType task_type, |
233 WebIDBCallbacks* callbacks) { | 406 WebIDBCallbacks* callbacks) { |
234 IndexedDBDispatcher* dispatcher = | 407 IndexedDBDispatcher* dispatcher = |
235 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 408 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); |
236 dispatcher->RequestIDBDatabaseOpenCursor( | 409 dispatcher->ResetCursorPrefetchCaches(transaction_id, |
237 ipc_database_id_, | 410 IndexedDBDispatcher::kAllCursors); |
238 transaction_id, | 411 |
239 object_store_id, | 412 auto callbacks_impl = base::MakeUnique<IndexedDBCallbacksImpl>( |
240 index_id, | 413 base::WrapUnique(callbacks), transaction_id, io_runner_, |
241 IndexedDBKeyRangeBuilder::Build(key_range), | 414 thread_safe_sender_); |
242 direction, | 415 io_runner_->PostTask( |
243 key_only, | 416 FROM_HERE, |
244 task_type, | 417 base::Bind(&IOThreadHelper::OpenCursor, base::Unretained(helper_), |
245 callbacks); | 418 transaction_id, object_store_id, index_id, |
419 IndexedDBKeyRangeBuilder::Build(key_range), direction, | |
420 key_only, task_type, base::Passed(&callbacks_impl))); | |
246 } | 421 } |
247 | 422 |
248 void WebIDBDatabaseImpl::count(long long transaction_id, | 423 void WebIDBDatabaseImpl::count(long long transaction_id, |
249 long long object_store_id, | 424 long long object_store_id, |
250 long long index_id, | 425 long long index_id, |
251 const WebIDBKeyRange& key_range, | 426 const WebIDBKeyRange& key_range, |
252 WebIDBCallbacks* callbacks) { | 427 WebIDBCallbacks* callbacks) { |
253 IndexedDBDispatcher* dispatcher = | 428 IndexedDBDispatcher* dispatcher = |
254 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 429 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); |
255 dispatcher->RequestIDBDatabaseCount( | 430 dispatcher->ResetCursorPrefetchCaches(transaction_id, |
256 ipc_database_id_, | 431 IndexedDBDispatcher::kAllCursors); |
257 transaction_id, | 432 |
258 object_store_id, | 433 auto callbacks_impl = base::MakeUnique<IndexedDBCallbacksImpl>( |
259 index_id, | 434 base::WrapUnique(callbacks), transaction_id, io_runner_, |
260 IndexedDBKeyRangeBuilder::Build(key_range), | 435 thread_safe_sender_); |
261 callbacks); | 436 io_runner_->PostTask( |
437 FROM_HERE, base::Bind(&IOThreadHelper::Count, base::Unretained(helper_), | |
438 transaction_id, object_store_id, index_id, | |
439 IndexedDBKeyRangeBuilder::Build(key_range), | |
440 base::Passed(&callbacks_impl))); | |
262 } | 441 } |
263 | 442 |
264 void WebIDBDatabaseImpl::deleteRange(long long transaction_id, | 443 void WebIDBDatabaseImpl::deleteRange(long long transaction_id, |
265 long long object_store_id, | 444 long long object_store_id, |
266 const WebIDBKeyRange& key_range, | 445 const WebIDBKeyRange& key_range, |
267 WebIDBCallbacks* callbacks) { | 446 WebIDBCallbacks* callbacks) { |
268 IndexedDBDispatcher* dispatcher = | 447 IndexedDBDispatcher* dispatcher = |
269 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 448 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); |
270 dispatcher->RequestIDBDatabaseDeleteRange( | 449 dispatcher->ResetCursorPrefetchCaches(transaction_id, |
271 ipc_database_id_, | 450 IndexedDBDispatcher::kAllCursors); |
272 transaction_id, | 451 |
273 object_store_id, | 452 auto callbacks_impl = base::MakeUnique<IndexedDBCallbacksImpl>( |
274 IndexedDBKeyRangeBuilder::Build(key_range), | 453 base::WrapUnique(callbacks), transaction_id, io_runner_, |
275 callbacks); | 454 thread_safe_sender_); |
455 io_runner_->PostTask( | |
456 FROM_HERE, | |
457 base::Bind(&IOThreadHelper::DeleteRange, base::Unretained(helper_), | |
458 transaction_id, object_store_id, | |
459 IndexedDBKeyRangeBuilder::Build(key_range), | |
460 base::Passed(&callbacks_impl))); | |
276 } | 461 } |
277 | 462 |
278 void WebIDBDatabaseImpl::clear(long long transaction_id, | 463 void WebIDBDatabaseImpl::clear(long long transaction_id, |
279 long long object_store_id, | 464 long long object_store_id, |
280 WebIDBCallbacks* callbacks) { | 465 WebIDBCallbacks* callbacks) { |
281 IndexedDBDispatcher* dispatcher = | 466 IndexedDBDispatcher* dispatcher = |
282 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 467 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); |
283 dispatcher->RequestIDBDatabaseClear( | 468 dispatcher->ResetCursorPrefetchCaches(transaction_id, |
284 ipc_database_id_, transaction_id, object_store_id, callbacks); | 469 IndexedDBDispatcher::kAllCursors); |
470 | |
471 auto callbacks_impl = base::MakeUnique<IndexedDBCallbacksImpl>( | |
472 base::WrapUnique(callbacks), transaction_id, io_runner_, | |
473 thread_safe_sender_); | |
474 io_runner_->PostTask( | |
475 FROM_HERE, base::Bind(&IOThreadHelper::Clear, base::Unretained(helper_), | |
476 transaction_id, object_store_id, | |
477 base::Passed(&callbacks_impl))); | |
285 } | 478 } |
286 | 479 |
287 void WebIDBDatabaseImpl::createIndex(long long transaction_id, | 480 void WebIDBDatabaseImpl::createIndex(long long transaction_id, |
288 long long object_store_id, | 481 long long object_store_id, |
289 long long index_id, | 482 long long index_id, |
290 const WebString& name, | 483 const WebString& name, |
291 const WebIDBKeyPath& key_path, | 484 const WebIDBKeyPath& key_path, |
292 bool unique, | 485 bool unique, |
293 bool multi_entry) { | 486 bool multi_entry) { |
294 IndexedDBHostMsg_DatabaseCreateIndex_Params params; | 487 io_runner_->PostTask( |
295 params.ipc_database_id = ipc_database_id_; | 488 FROM_HERE, |
296 params.transaction_id = transaction_id; | 489 base::Bind(&IOThreadHelper::CreateIndex, base::Unretained(helper_), |
297 params.object_store_id = object_store_id; | 490 transaction_id, object_store_id, index_id, |
298 params.index_id = index_id; | 491 base::string16(name), IndexedDBKeyPathBuilder::Build(key_path), |
299 params.name = name; | 492 unique, multi_entry)); |
300 params.key_path = IndexedDBKeyPathBuilder::Build(key_path); | |
301 params.unique = unique; | |
302 params.multi_entry = multi_entry; | |
303 | |
304 thread_safe_sender_->Send(new IndexedDBHostMsg_DatabaseCreateIndex(params)); | |
305 } | 493 } |
306 | 494 |
307 void WebIDBDatabaseImpl::deleteIndex(long long transaction_id, | 495 void WebIDBDatabaseImpl::deleteIndex(long long transaction_id, |
308 long long object_store_id, | 496 long long object_store_id, |
309 long long index_id) { | 497 long long index_id) { |
310 thread_safe_sender_->Send(new IndexedDBHostMsg_DatabaseDeleteIndex( | 498 io_runner_->PostTask( |
311 ipc_database_id_, transaction_id, object_store_id, index_id)); | 499 FROM_HERE, |
500 base::Bind(&IOThreadHelper::DeleteIndex, base::Unretained(helper_), | |
501 transaction_id, object_store_id, index_id)); | |
312 } | 502 } |
313 | 503 |
314 void WebIDBDatabaseImpl::renameIndex(long long transaction_id, | 504 void WebIDBDatabaseImpl::renameIndex(long long transaction_id, |
315 long long object_store_id, | 505 long long object_store_id, |
316 long long index_id, | 506 long long index_id, |
317 const WebString& new_name) { | 507 const WebString& new_name) { |
318 thread_safe_sender_->Send(new IndexedDBHostMsg_DatabaseRenameIndex( | 508 io_runner_->PostTask( |
319 ipc_database_id_, transaction_id, object_store_id, index_id, new_name)); | 509 FROM_HERE, |
510 base::Bind(&IOThreadHelper::RenameIndex, base::Unretained(helper_), | |
511 transaction_id, object_store_id, index_id, new_name)); | |
320 } | 512 } |
321 | 513 |
322 void WebIDBDatabaseImpl::abort(long long transaction_id) { | 514 void WebIDBDatabaseImpl::abort(long long transaction_id) { |
323 thread_safe_sender_->Send( | 515 io_runner_->PostTask( |
324 new IndexedDBHostMsg_DatabaseAbort(ipc_database_id_, transaction_id)); | 516 FROM_HERE, base::Bind(&IOThreadHelper::Abort, base::Unretained(helper_), |
517 transaction_id)); | |
325 } | 518 } |
326 | 519 |
327 void WebIDBDatabaseImpl::commit(long long transaction_id) { | 520 void WebIDBDatabaseImpl::commit(long long transaction_id) { |
328 thread_safe_sender_->Send( | 521 io_runner_->PostTask( |
329 new IndexedDBHostMsg_DatabaseCommit(ipc_database_id_, transaction_id)); | 522 FROM_HERE, base::Bind(&IOThreadHelper::Commit, base::Unretained(helper_), |
523 transaction_id)); | |
330 } | 524 } |
331 | 525 |
332 void WebIDBDatabaseImpl::ackReceivedBlobs(const WebVector<WebString>& uuids) { | 526 void WebIDBDatabaseImpl::ackReceivedBlobs(const WebVector<WebString>& uuids) { |
333 DCHECK(uuids.size()); | 527 DCHECK(uuids.size()); |
334 std::vector<std::string> param(uuids.size()); | 528 std::vector<std::string> param(uuids.size()); |
335 for (size_t i = 0; i < uuids.size(); ++i) | 529 for (size_t i = 0; i < uuids.size(); ++i) |
336 param[i] = uuids[i].latin1().data(); | 530 param[i] = uuids[i].latin1().data(); |
337 thread_safe_sender_->Send(new IndexedDBHostMsg_AckReceivedBlobs(param)); | 531 io_runner_->PostTask(FROM_HERE, |
532 base::Bind(&IOThreadHelper::AckReceivedBlobs, | |
533 base::Unretained(helper_), std::move(param))); | |
534 } | |
535 | |
536 WebIDBDatabaseImpl::IOThreadHelper::IOThreadHelper() {} | |
537 | |
538 WebIDBDatabaseImpl::IOThreadHelper::~IOThreadHelper() {} | |
539 | |
540 void WebIDBDatabaseImpl::IOThreadHelper::Bind( | |
541 DatabaseAssociatedPtrInfo database_info) { | |
542 database_.Bind(std::move(database_info)); | |
543 } | |
544 | |
545 void WebIDBDatabaseImpl::IOThreadHelper::CreateObjectStore( | |
546 int64_t transaction_id, | |
547 int64_t object_store_id, | |
548 const base::string16& name, | |
549 const IndexedDBKeyPath& key_path, | |
550 bool auto_increment) { | |
551 database_->CreateObjectStore(transaction_id, object_store_id, name, key_path, | |
552 auto_increment); | |
553 } | |
554 | |
555 void WebIDBDatabaseImpl::IOThreadHelper::DeleteObjectStore( | |
556 int64_t transaction_id, | |
557 int64_t object_store_id) { | |
558 database_->DeleteObjectStore(transaction_id, object_store_id); | |
559 } | |
560 | |
561 void WebIDBDatabaseImpl::IOThreadHelper::RenameObjectStore( | |
562 int64_t transaction_id, | |
563 int64_t object_store_id, | |
564 const base::string16& new_name) { | |
565 database_->RenameObjectStore(transaction_id, object_store_id, new_name); | |
566 } | |
567 | |
568 void WebIDBDatabaseImpl::IOThreadHelper::CreateTransaction( | |
569 int64_t transaction_id, | |
570 const std::vector<int64_t>& object_store_ids, | |
571 blink::WebIDBTransactionMode mode) { | |
572 database_->CreateTransaction(transaction_id, object_store_ids, mode); | |
573 } | |
574 | |
575 void WebIDBDatabaseImpl::IOThreadHelper::Close() { | |
576 database_->Close(); | |
577 } | |
578 | |
579 void WebIDBDatabaseImpl::IOThreadHelper::VersionChangeIgnored() { | |
580 database_->VersionChangeIgnored(); | |
581 } | |
582 | |
583 void WebIDBDatabaseImpl::IOThreadHelper::AddObserver(int64_t transaction_id, | |
584 int32_t observer_id, | |
585 bool include_transaction, | |
586 bool no_records, | |
587 bool values, | |
588 uint16_t operation_types) { | |
589 database_->AddObserver(transaction_id, observer_id, include_transaction, | |
590 no_records, values, operation_types); | |
591 } | |
592 | |
593 void WebIDBDatabaseImpl::IOThreadHelper::RemoveObservers( | |
594 const std::vector<int32_t>& observers) { | |
595 database_->RemoveObservers(observers); | |
596 } | |
597 | |
598 void WebIDBDatabaseImpl::IOThreadHelper::Get( | |
599 int64_t transaction_id, | |
600 int64_t object_store_id, | |
601 int64_t index_id, | |
602 const IndexedDBKeyRange& key_range, | |
603 bool key_only, | |
604 std::unique_ptr<IndexedDBCallbacksImpl> callbacks) { | |
605 database_->Get(transaction_id, object_store_id, index_id, key_range, key_only, | |
606 GetCallbacksProxy(std::move(callbacks))); | |
607 } | |
608 | |
609 void WebIDBDatabaseImpl::IOThreadHelper::GetAll( | |
610 int64_t transaction_id, | |
611 int64_t object_store_id, | |
612 int64_t index_id, | |
613 const IndexedDBKeyRange& key_range, | |
614 int64_t max_count, | |
615 bool key_only, | |
616 std::unique_ptr<IndexedDBCallbacksImpl> callbacks) { | |
617 database_->GetAll(transaction_id, object_store_id, index_id, key_range, | |
618 key_only, max_count, | |
619 GetCallbacksProxy(std::move(callbacks))); | |
620 } | |
621 | |
622 void WebIDBDatabaseImpl::IOThreadHelper::Put( | |
623 int64_t transaction_id, | |
624 int64_t object_store_id, | |
625 indexed_db::mojom::ValuePtr value, | |
626 const IndexedDBKey& key, | |
627 blink::WebIDBPutMode mode, | |
628 std::unique_ptr<IndexedDBCallbacksImpl> callbacks, | |
629 const std::vector<content::IndexedDBIndexKeys>& index_keys) { | |
630 database_->Put(transaction_id, object_store_id, std::move(value), key, mode, | |
631 index_keys, GetCallbacksProxy(std::move(callbacks))); | |
632 } | |
633 | |
634 void WebIDBDatabaseImpl::IOThreadHelper::SetIndexKeys( | |
635 int64_t transaction_id, | |
636 int64_t object_store_id, | |
637 const IndexedDBKey& primary_key, | |
638 const std::vector<content::IndexedDBIndexKeys>& index_keys) { | |
639 database_->SetIndexKeys(transaction_id, object_store_id, primary_key, | |
640 index_keys); | |
641 } | |
642 | |
643 void WebIDBDatabaseImpl::IOThreadHelper::SetIndexesReady( | |
644 int64_t transaction_id, | |
645 int64_t object_store_id, | |
646 const std::vector<int64_t>& index_ids) { | |
647 database_->SetIndexesReady(transaction_id, object_store_id, index_ids); | |
648 } | |
649 | |
650 void WebIDBDatabaseImpl::IOThreadHelper::OpenCursor( | |
651 int64_t transaction_id, | |
652 int64_t object_store_id, | |
653 int64_t index_id, | |
654 const IndexedDBKeyRange& key_range, | |
655 blink::WebIDBCursorDirection direction, | |
656 bool key_only, | |
657 blink::WebIDBTaskType task_type, | |
658 std::unique_ptr<IndexedDBCallbacksImpl> callbacks) { | |
659 database_->OpenCursor(transaction_id, object_store_id, index_id, key_range, | |
660 direction, key_only, task_type, | |
661 GetCallbacksProxy(std::move(callbacks))); | |
662 } | |
663 | |
664 void WebIDBDatabaseImpl::IOThreadHelper::Count( | |
665 int64_t transaction_id, | |
666 int64_t object_store_id, | |
667 int64_t index_id, | |
668 const IndexedDBKeyRange& key_range, | |
669 std::unique_ptr<IndexedDBCallbacksImpl> callbacks) { | |
670 database_->Count(transaction_id, object_store_id, index_id, key_range, | |
671 GetCallbacksProxy(std::move(callbacks))); | |
672 } | |
673 | |
674 void WebIDBDatabaseImpl::IOThreadHelper::DeleteRange( | |
675 int64_t transaction_id, | |
676 int64_t object_store_id, | |
677 const IndexedDBKeyRange& key_range, | |
678 std::unique_ptr<IndexedDBCallbacksImpl> callbacks) { | |
679 database_->DeleteRange(transaction_id, object_store_id, key_range, | |
680 GetCallbacksProxy(std::move(callbacks))); | |
681 } | |
682 | |
683 void WebIDBDatabaseImpl::IOThreadHelper::Clear( | |
684 int64_t transaction_id, | |
685 int64_t object_store_id, | |
686 std::unique_ptr<IndexedDBCallbacksImpl> callbacks) { | |
687 database_->Clear(transaction_id, object_store_id, | |
688 GetCallbacksProxy(std::move(callbacks))); | |
689 } | |
690 | |
691 void WebIDBDatabaseImpl::IOThreadHelper::CreateIndex( | |
692 int64_t transaction_id, | |
693 int64_t object_store_id, | |
694 int64_t index_id, | |
695 const base::string16& name, | |
696 const IndexedDBKeyPath& key_path, | |
697 bool unique, | |
698 bool multi_entry) { | |
699 database_->CreateIndex(transaction_id, object_store_id, index_id, name, | |
700 key_path, unique, multi_entry); | |
701 } | |
702 | |
703 void WebIDBDatabaseImpl::IOThreadHelper::DeleteIndex(int64_t transaction_id, | |
704 int64_t object_store_id, | |
705 int64_t index_id) { | |
706 database_->DeleteIndex(transaction_id, object_store_id, index_id); | |
707 } | |
708 | |
709 void WebIDBDatabaseImpl::IOThreadHelper::RenameIndex( | |
710 int64_t transaction_id, | |
711 int64_t object_store_id, | |
712 int64_t index_id, | |
713 const base::string16& new_name) { | |
714 database_->RenameIndex(transaction_id, object_store_id, index_id, new_name); | |
715 } | |
716 | |
717 void WebIDBDatabaseImpl::IOThreadHelper::Abort(int64_t transaction_id) { | |
718 database_->Abort(transaction_id); | |
719 } | |
720 | |
721 void WebIDBDatabaseImpl::IOThreadHelper::Commit(int64_t transaction_id) { | |
722 database_->Commit(transaction_id); | |
723 } | |
724 | |
725 void WebIDBDatabaseImpl::IOThreadHelper::AckReceivedBlobs( | |
726 const std::vector<std::string>& uuids) { | |
727 database_->AckReceivedBlobs(uuids); | |
728 } | |
729 | |
730 CallbacksAssociatedPtrInfo | |
731 WebIDBDatabaseImpl::IOThreadHelper::GetCallbacksProxy( | |
732 std::unique_ptr<IndexedDBCallbacksImpl> callbacks) { | |
733 CallbacksAssociatedPtrInfo ptr_info; | |
734 indexed_db::mojom::CallbacksAssociatedRequest request; | |
735 database_.associated_group()->CreateAssociatedInterface( | |
736 mojo::AssociatedGroup::WILL_PASS_PTR, &ptr_info, &request); | |
737 mojo::MakeStrongAssociatedBinding(std::move(callbacks), std::move(request)); | |
738 return ptr_info; | |
338 } | 739 } |
339 | 740 |
340 } // namespace content | 741 } // namespace content |
OLD | NEW |