OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/browser/indexed_db/indexed_db_callbacks.h" | 5 #include "content/browser/indexed_db/indexed_db_callbacks.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <utility> | 10 #include <utility> |
11 | 11 |
12 #include "base/metrics/histogram_macros.h" | 12 #include "base/metrics/histogram_macros.h" |
13 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
14 #include "base/time/time.h" | 14 #include "base/time/time.h" |
15 #include "content/browser/child_process_security_policy_impl.h" | 15 #include "content/browser/child_process_security_policy_impl.h" |
16 #include "content/browser/fileapi/fileapi_message_filter.h" | 16 #include "content/browser/fileapi/fileapi_message_filter.h" |
17 #include "content/browser/indexed_db/cursor_impl.h" | 17 #include "content/browser/indexed_db/cursor_impl.h" |
18 #include "content/browser/indexed_db/database_impl.h" | 18 #include "content/browser/indexed_db/database_impl.h" |
19 #include "content/browser/indexed_db/indexed_db_blob_info.h" | 19 #include "content/browser/indexed_db/indexed_db_blob_info.h" |
20 #include "content/browser/indexed_db/indexed_db_connection.h" | 20 #include "content/browser/indexed_db/indexed_db_connection.h" |
21 #include "content/browser/indexed_db/indexed_db_context_impl.h" | 21 #include "content/browser/indexed_db/indexed_db_context_impl.h" |
22 #include "content/browser/indexed_db/indexed_db_cursor.h" | 22 #include "content/browser/indexed_db/indexed_db_cursor.h" |
23 #include "content/browser/indexed_db/indexed_db_database_error.h" | 23 #include "content/browser/indexed_db/indexed_db_database_error.h" |
24 #include "content/browser/indexed_db/indexed_db_return_value.h" | 24 #include "content/browser/indexed_db/indexed_db_return_value.h" |
25 #include "content/browser/indexed_db/indexed_db_tracing.h" | 25 #include "content/browser/indexed_db/indexed_db_tracing.h" |
26 #include "content/browser/indexed_db/indexed_db_transaction.h" | |
26 #include "content/browser/indexed_db/indexed_db_value.h" | 27 #include "content/browser/indexed_db/indexed_db_value.h" |
27 #include "content/common/indexed_db/indexed_db_constants.h" | 28 #include "content/common/indexed_db/indexed_db_constants.h" |
28 #include "content/common/indexed_db/indexed_db_metadata.h" | 29 #include "content/common/indexed_db/indexed_db_metadata.h" |
29 #include "mojo/public/cpp/bindings/strong_associated_binding.h" | 30 #include "mojo/public/cpp/bindings/strong_associated_binding.h" |
30 #include "storage/browser/blob/blob_storage_context.h" | 31 #include "storage/browser/blob/blob_storage_context.h" |
31 #include "storage/browser/blob/shareable_file_reference.h" | 32 #include "storage/browser/blob/shareable_file_reference.h" |
32 #include "storage/browser/quota/quota_manager.h" | 33 #include "storage/browser/quota/quota_manager.h" |
33 | 34 |
34 using indexed_db::mojom::CallbacksAssociatedPtrInfo; | 35 using indexed_db::mojom::CallbacksAssociatedPtrInfo; |
35 using std::swap; | 36 using std::swap; |
36 using storage::ShareableFileReference; | 37 using storage::ShareableFileReference; |
37 | 38 |
38 namespace content { | 39 namespace content { |
39 | 40 |
40 namespace { | 41 namespace { |
41 const int64_t kNoTransaction = -1; | |
42 | 42 |
43 void ConvertBlobInfo( | 43 void ConvertBlobInfo( |
44 const std::vector<IndexedDBBlobInfo>& blob_info, | 44 const std::vector<IndexedDBBlobInfo>& blob_info, |
45 std::vector<::indexed_db::mojom::BlobInfoPtr>* blob_or_file_info) { | 45 std::vector<::indexed_db::mojom::BlobInfoPtr>* blob_or_file_info) { |
46 blob_or_file_info->reserve(blob_info.size()); | 46 blob_or_file_info->reserve(blob_info.size()); |
47 for (const auto& iter : blob_info) { | 47 for (const auto& iter : blob_info) { |
48 if (!iter.mark_used_callback().is_null()) | 48 if (!iter.mark_used_callback().is_null()) |
49 iter.mark_used_callback().Run(); | 49 iter.mark_used_callback().Run(); |
50 | 50 |
51 auto info = ::indexed_db::mojom::BlobInfo::New(); | 51 auto info = ::indexed_db::mojom::BlobInfo::New(); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
137 ::indexed_db::mojom::CallbacksAssociatedPtr callbacks_; | 137 ::indexed_db::mojom::CallbacksAssociatedPtr callbacks_; |
138 | 138 |
139 DISALLOW_COPY_AND_ASSIGN(IOThreadHelper); | 139 DISALLOW_COPY_AND_ASSIGN(IOThreadHelper); |
140 }; | 140 }; |
141 | 141 |
142 IndexedDBCallbacks::IndexedDBCallbacks( | 142 IndexedDBCallbacks::IndexedDBCallbacks( |
143 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host, | 143 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host, |
144 const url::Origin& origin, | 144 const url::Origin& origin, |
145 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) | 145 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) |
146 : dispatcher_host_(std::move(dispatcher_host)), | 146 : dispatcher_host_(std::move(dispatcher_host)), |
147 host_transaction_id_(kNoTransaction), | |
148 origin_(origin), | 147 origin_(origin), |
149 data_loss_(blink::WebIDBDataLossNone), | 148 data_loss_(blink::WebIDBDataLossNone), |
150 sent_blocked_(false), | 149 sent_blocked_(false), |
151 io_helper_( | 150 io_helper_( |
152 new IOThreadHelper(std::move(callbacks_info), dispatcher_host_)) { | 151 new IOThreadHelper(std::move(callbacks_info), dispatcher_host_)) { |
153 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 152 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
154 thread_checker_.DetachFromThread(); | 153 thread_checker_.DetachFromThread(); |
155 } | 154 } |
156 | 155 |
157 IndexedDBCallbacks::~IndexedDBCallbacks() { | 156 IndexedDBCallbacks::~IndexedDBCallbacks() { |
(...skipping 15 matching lines...) Expand all Loading... | |
173 "WebCore.IndexedDB.OpenTime.Error", | 172 "WebCore.IndexedDB.OpenTime.Error", |
174 base::TimeTicks::Now() - connection_open_start_time_); | 173 base::TimeTicks::Now() - connection_open_start_time_); |
175 connection_open_start_time_ = base::TimeTicks(); | 174 connection_open_start_time_ = base::TimeTicks(); |
176 } | 175 } |
177 } | 176 } |
178 | 177 |
179 void IndexedDBCallbacks::OnSuccess(const std::vector<base::string16>& value) { | 178 void IndexedDBCallbacks::OnSuccess(const std::vector<base::string16>& value) { |
180 DCHECK(thread_checker_.CalledOnValidThread()); | 179 DCHECK(thread_checker_.CalledOnValidThread()); |
181 DCHECK(dispatcher_host_); | 180 DCHECK(dispatcher_host_); |
182 DCHECK(io_helper_); | 181 DCHECK(io_helper_); |
183 DCHECK_EQ(kNoTransaction, host_transaction_id_); | |
184 | 182 |
185 BrowserThread::PostTask( | 183 BrowserThread::PostTask( |
186 BrowserThread::IO, FROM_HERE, | 184 BrowserThread::IO, FROM_HERE, |
187 base::Bind(&IOThreadHelper::SendSuccessStringList, | 185 base::Bind(&IOThreadHelper::SendSuccessStringList, |
188 base::Unretained(io_helper_.get()), value)); | 186 base::Unretained(io_helper_.get()), value)); |
189 dispatcher_host_ = nullptr; | 187 dispatcher_host_ = nullptr; |
190 } | 188 } |
191 | 189 |
192 void IndexedDBCallbacks::OnBlocked(int64_t existing_version) { | 190 void IndexedDBCallbacks::OnBlocked(int64_t existing_version) { |
193 DCHECK(thread_checker_.CalledOnValidThread()); | 191 DCHECK(thread_checker_.CalledOnValidThread()); |
(...skipping 14 matching lines...) Expand all Loading... | |
208 UMA_HISTOGRAM_MEDIUM_TIMES( | 206 UMA_HISTOGRAM_MEDIUM_TIMES( |
209 "WebCore.IndexedDB.OpenTime.Blocked", | 207 "WebCore.IndexedDB.OpenTime.Blocked", |
210 base::TimeTicks::Now() - connection_open_start_time_); | 208 base::TimeTicks::Now() - connection_open_start_time_); |
211 connection_open_start_time_ = base::TimeTicks(); | 209 connection_open_start_time_ = base::TimeTicks(); |
212 } | 210 } |
213 } | 211 } |
214 | 212 |
215 void IndexedDBCallbacks::OnUpgradeNeeded( | 213 void IndexedDBCallbacks::OnUpgradeNeeded( |
216 int64_t old_version, | 214 int64_t old_version, |
217 std::unique_ptr<IndexedDBConnection> connection, | 215 std::unique_ptr<IndexedDBConnection> connection, |
216 IndexedDBTransaction* transaction, | |
cmumford
2016/12/01 19:14:51
transaction unused in this function.
dmurph
2016/12/01 21:12:23
Done.
| |
218 const IndexedDBDatabaseMetadata& metadata, | 217 const IndexedDBDatabaseMetadata& metadata, |
219 const IndexedDBDataLossInfo& data_loss_info) { | 218 const IndexedDBDataLossInfo& data_loss_info) { |
220 DCHECK(thread_checker_.CalledOnValidThread()); | 219 DCHECK(thread_checker_.CalledOnValidThread()); |
221 DCHECK(dispatcher_host_); | 220 DCHECK(dispatcher_host_); |
222 DCHECK(io_helper_); | 221 DCHECK(io_helper_); |
223 | 222 |
224 DCHECK_NE(kNoTransaction, host_transaction_id_); | |
225 DCHECK(!database_sent_); | 223 DCHECK(!database_sent_); |
226 | 224 |
227 data_loss_ = data_loss_info.status; | 225 data_loss_ = data_loss_info.status; |
228 dispatcher_host_->RegisterTransactionId(host_transaction_id_, origin_); | |
229 database_sent_ = true; | 226 database_sent_ = true; |
230 auto database = base::MakeUnique<DatabaseImpl>(std::move(connection), origin_, | 227 auto database = base::MakeUnique<DatabaseImpl>(std::move(connection), origin_, |
231 dispatcher_host_); | 228 dispatcher_host_); |
232 | 229 |
233 BrowserThread::PostTask( | 230 BrowserThread::PostTask( |
234 BrowserThread::IO, FROM_HERE, | 231 BrowserThread::IO, FROM_HERE, |
235 base::Bind(&IOThreadHelper::SendUpgradeNeeded, | 232 base::Bind(&IOThreadHelper::SendUpgradeNeeded, |
236 base::Unretained(io_helper_.get()), base::Passed(&database), | 233 base::Unretained(io_helper_.get()), base::Passed(&database), |
237 old_version, data_loss_info.status, data_loss_info.message, | 234 old_version, data_loss_info.status, data_loss_info.message, |
238 metadata)); | 235 metadata)); |
239 | 236 |
240 if (!connection_open_start_time_.is_null()) { | 237 if (!connection_open_start_time_.is_null()) { |
241 UMA_HISTOGRAM_MEDIUM_TIMES( | 238 UMA_HISTOGRAM_MEDIUM_TIMES( |
242 "WebCore.IndexedDB.OpenTime.UpgradeNeeded", | 239 "WebCore.IndexedDB.OpenTime.UpgradeNeeded", |
243 base::TimeTicks::Now() - connection_open_start_time_); | 240 base::TimeTicks::Now() - connection_open_start_time_); |
244 connection_open_start_time_ = base::TimeTicks(); | 241 connection_open_start_time_ = base::TimeTicks(); |
245 } | 242 } |
246 } | 243 } |
247 | 244 |
248 void IndexedDBCallbacks::OnSuccess( | 245 void IndexedDBCallbacks::OnSuccess( |
249 std::unique_ptr<IndexedDBConnection> connection, | 246 std::unique_ptr<IndexedDBConnection> connection, |
250 const IndexedDBDatabaseMetadata& metadata) { | 247 const IndexedDBDatabaseMetadata& metadata) { |
251 DCHECK(thread_checker_.CalledOnValidThread()); | 248 DCHECK(thread_checker_.CalledOnValidThread()); |
252 DCHECK(dispatcher_host_); | 249 DCHECK(dispatcher_host_); |
253 DCHECK(io_helper_); | 250 DCHECK(io_helper_); |
254 | 251 |
255 DCHECK_NE(kNoTransaction, host_transaction_id_); | |
256 DCHECK_EQ(database_sent_, !connection); | 252 DCHECK_EQ(database_sent_, !connection); |
257 | 253 |
258 scoped_refptr<IndexedDBCallbacks> self(this); | 254 scoped_refptr<IndexedDBCallbacks> self(this); |
259 | 255 |
260 // Only send a new Database if the connection was not previously sent in | 256 // Only send a new Database if the connection was not previously sent in |
261 // OnUpgradeNeeded. | 257 // OnUpgradeNeeded. |
262 std::unique_ptr<DatabaseImpl> database; | 258 std::unique_ptr<DatabaseImpl> database; |
263 if (!database_sent_) | 259 if (!database_sent_) |
264 database.reset( | 260 database.reset( |
265 new DatabaseImpl(std::move(connection), origin_, dispatcher_host_)); | 261 new DatabaseImpl(std::move(connection), origin_, dispatcher_host_)); |
266 | 262 |
267 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 263 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
268 base::Bind(&IOThreadHelper::SendSuccessDatabase, | 264 base::Bind(&IOThreadHelper::SendSuccessDatabase, |
269 base::Unretained(io_helper_.get()), | 265 base::Unretained(io_helper_.get()), |
270 base::Passed(&database), metadata)); | 266 base::Passed(&database), metadata)); |
271 dispatcher_host_ = nullptr; | 267 dispatcher_host_ = nullptr; |
272 | 268 |
273 if (!connection_open_start_time_.is_null()) { | 269 if (!connection_open_start_time_.is_null()) { |
274 UMA_HISTOGRAM_MEDIUM_TIMES( | 270 UMA_HISTOGRAM_MEDIUM_TIMES( |
275 "WebCore.IndexedDB.OpenTime.Success", | 271 "WebCore.IndexedDB.OpenTime.Success", |
276 base::TimeTicks::Now() - connection_open_start_time_); | 272 base::TimeTicks::Now() - connection_open_start_time_); |
277 connection_open_start_time_ = base::TimeTicks(); | 273 connection_open_start_time_ = base::TimeTicks(); |
278 } | 274 } |
279 } | 275 } |
280 | 276 |
281 void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor, | 277 void IndexedDBCallbacks::OnSuccess(std::unique_ptr<IndexedDBCursor> cursor, |
282 const IndexedDBKey& key, | 278 const IndexedDBKey& key, |
283 const IndexedDBKey& primary_key, | 279 const IndexedDBKey& primary_key, |
284 IndexedDBValue* value) { | 280 IndexedDBValue* value) { |
285 DCHECK(thread_checker_.CalledOnValidThread()); | 281 DCHECK(thread_checker_.CalledOnValidThread()); |
286 DCHECK(dispatcher_host_); | 282 DCHECK(dispatcher_host_); |
287 DCHECK(io_helper_); | 283 DCHECK(io_helper_); |
288 | 284 |
289 DCHECK_EQ(kNoTransaction, host_transaction_id_); | |
290 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 285 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
291 | 286 |
292 auto cursor_impl = | 287 auto cursor_impl = base::MakeUnique<CursorImpl>(std::move(cursor), origin_, |
293 base::MakeUnique<CursorImpl>(cursor, origin_, dispatcher_host_); | 288 dispatcher_host_); |
294 | 289 |
295 ::indexed_db::mojom::ValuePtr mojo_value; | 290 ::indexed_db::mojom::ValuePtr mojo_value; |
296 std::vector<IndexedDBBlobInfo> blob_info; | 291 std::vector<IndexedDBBlobInfo> blob_info; |
297 if (value) { | 292 if (value) { |
298 mojo_value = ConvertValue(value); | 293 mojo_value = ConvertValue(value); |
299 blob_info.swap(value->blob_info); | 294 blob_info.swap(value->blob_info); |
300 } | 295 } |
301 | 296 |
302 BrowserThread::PostTask( | 297 BrowserThread::PostTask( |
303 BrowserThread::IO, FROM_HERE, | 298 BrowserThread::IO, FROM_HERE, |
304 base::Bind(&IOThreadHelper::SendSuccessCursor, | 299 base::Bind(&IOThreadHelper::SendSuccessCursor, |
305 base::Unretained(io_helper_.get()), base::Passed(&cursor_impl), | 300 base::Unretained(io_helper_.get()), base::Passed(&cursor_impl), |
306 key, primary_key, base::Passed(&mojo_value), | 301 key, primary_key, base::Passed(&mojo_value), |
307 base::Passed(&blob_info))); | 302 base::Passed(&blob_info))); |
308 dispatcher_host_ = nullptr; | 303 dispatcher_host_ = nullptr; |
309 } | 304 } |
310 | 305 |
311 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key, | 306 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key, |
312 const IndexedDBKey& primary_key, | 307 const IndexedDBKey& primary_key, |
313 IndexedDBValue* value) { | 308 IndexedDBValue* value) { |
314 DCHECK(thread_checker_.CalledOnValidThread()); | 309 DCHECK(thread_checker_.CalledOnValidThread()); |
315 DCHECK(dispatcher_host_); | 310 DCHECK(dispatcher_host_); |
316 DCHECK(io_helper_); | 311 DCHECK(io_helper_); |
317 | 312 |
318 DCHECK_EQ(kNoTransaction, host_transaction_id_); | |
319 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 313 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
320 | 314 |
321 ::indexed_db::mojom::ValuePtr mojo_value; | 315 ::indexed_db::mojom::ValuePtr mojo_value; |
322 std::vector<IndexedDBBlobInfo> blob_info; | 316 std::vector<IndexedDBBlobInfo> blob_info; |
323 if (value) { | 317 if (value) { |
324 mojo_value = ConvertValue(value); | 318 mojo_value = ConvertValue(value); |
325 blob_info.swap(value->blob_info); | 319 blob_info.swap(value->blob_info); |
326 } | 320 } |
327 | 321 |
328 BrowserThread::PostTask( | 322 BrowserThread::PostTask( |
329 BrowserThread::IO, FROM_HERE, | 323 BrowserThread::IO, FROM_HERE, |
330 base::Bind(&IOThreadHelper::SendSuccessCursorContinue, | 324 base::Bind(&IOThreadHelper::SendSuccessCursorContinue, |
331 base::Unretained(io_helper_.get()), key, primary_key, | 325 base::Unretained(io_helper_.get()), key, primary_key, |
332 base::Passed(&mojo_value), base::Passed(&blob_info))); | 326 base::Passed(&mojo_value), base::Passed(&blob_info))); |
333 dispatcher_host_ = nullptr; | 327 dispatcher_host_ = nullptr; |
334 } | 328 } |
335 | 329 |
336 void IndexedDBCallbacks::OnSuccessWithPrefetch( | 330 void IndexedDBCallbacks::OnSuccessWithPrefetch( |
337 const std::vector<IndexedDBKey>& keys, | 331 const std::vector<IndexedDBKey>& keys, |
338 const std::vector<IndexedDBKey>& primary_keys, | 332 const std::vector<IndexedDBKey>& primary_keys, |
339 std::vector<IndexedDBValue>* values) { | 333 std::vector<IndexedDBValue>* values) { |
340 DCHECK(thread_checker_.CalledOnValidThread()); | 334 DCHECK(thread_checker_.CalledOnValidThread()); |
341 DCHECK(dispatcher_host_); | 335 DCHECK(dispatcher_host_); |
342 DCHECK(io_helper_); | 336 DCHECK(io_helper_); |
343 DCHECK_EQ(keys.size(), primary_keys.size()); | 337 DCHECK_EQ(keys.size(), primary_keys.size()); |
344 DCHECK_EQ(keys.size(), values->size()); | 338 DCHECK_EQ(keys.size(), values->size()); |
345 | 339 |
346 DCHECK_EQ(kNoTransaction, host_transaction_id_); | |
347 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 340 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
348 | 341 |
349 std::vector<::indexed_db::mojom::ValuePtr> mojo_values; | 342 std::vector<::indexed_db::mojom::ValuePtr> mojo_values; |
350 mojo_values.reserve(values->size()); | 343 mojo_values.reserve(values->size()); |
351 for (size_t i = 0; i < values->size(); ++i) | 344 for (size_t i = 0; i < values->size(); ++i) |
352 mojo_values.push_back(ConvertValue(&(*values)[i])); | 345 mojo_values.push_back(ConvertValue(&(*values)[i])); |
353 | 346 |
354 BrowserThread::PostTask( | 347 BrowserThread::PostTask( |
355 BrowserThread::IO, FROM_HERE, | 348 BrowserThread::IO, FROM_HERE, |
356 base::Bind(&IOThreadHelper::SendSuccessCursorPrefetch, | 349 base::Bind(&IOThreadHelper::SendSuccessCursorPrefetch, |
357 base::Unretained(io_helper_.get()), keys, primary_keys, | 350 base::Unretained(io_helper_.get()), keys, primary_keys, |
358 base::Passed(&mojo_values), *values)); | 351 base::Passed(&mojo_values), *values)); |
359 dispatcher_host_ = nullptr; | 352 dispatcher_host_ = nullptr; |
360 } | 353 } |
361 | 354 |
362 void IndexedDBCallbacks::OnSuccess(IndexedDBReturnValue* value) { | 355 void IndexedDBCallbacks::OnSuccess(IndexedDBReturnValue* value) { |
363 DCHECK(thread_checker_.CalledOnValidThread()); | 356 DCHECK(thread_checker_.CalledOnValidThread()); |
364 DCHECK(dispatcher_host_); | 357 DCHECK(dispatcher_host_); |
365 | 358 |
366 DCHECK_EQ(kNoTransaction, host_transaction_id_); | |
367 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 359 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
368 | 360 |
369 ::indexed_db::mojom::ReturnValuePtr mojo_value; | 361 ::indexed_db::mojom::ReturnValuePtr mojo_value; |
370 std::vector<IndexedDBBlobInfo> blob_info; | 362 std::vector<IndexedDBBlobInfo> blob_info; |
371 if (value) { | 363 if (value) { |
372 mojo_value = ConvertReturnValue(value); | 364 mojo_value = ConvertReturnValue(value); |
373 blob_info = value->blob_info; | 365 blob_info = value->blob_info; |
374 } | 366 } |
375 | 367 |
376 BrowserThread::PostTask( | 368 BrowserThread::PostTask( |
377 BrowserThread::IO, FROM_HERE, | 369 BrowserThread::IO, FROM_HERE, |
378 base::Bind(&IOThreadHelper::SendSuccessValue, | 370 base::Bind(&IOThreadHelper::SendSuccessValue, |
379 base::Unretained(io_helper_.get()), base::Passed(&mojo_value), | 371 base::Unretained(io_helper_.get()), base::Passed(&mojo_value), |
380 base::Passed(&blob_info))); | 372 base::Passed(&blob_info))); |
381 dispatcher_host_ = nullptr; | 373 dispatcher_host_ = nullptr; |
382 } | 374 } |
383 | 375 |
384 void IndexedDBCallbacks::OnSuccessArray( | 376 void IndexedDBCallbacks::OnSuccessArray( |
385 std::vector<IndexedDBReturnValue>* values) { | 377 std::vector<IndexedDBReturnValue>* values) { |
386 DCHECK(thread_checker_.CalledOnValidThread()); | 378 DCHECK(thread_checker_.CalledOnValidThread()); |
387 DCHECK(dispatcher_host_); | 379 DCHECK(dispatcher_host_); |
388 DCHECK(io_helper_); | 380 DCHECK(io_helper_); |
389 | 381 |
390 DCHECK_EQ(kNoTransaction, host_transaction_id_); | |
391 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 382 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
392 | 383 |
393 std::vector<::indexed_db::mojom::ReturnValuePtr> mojo_values; | 384 std::vector<::indexed_db::mojom::ReturnValuePtr> mojo_values; |
394 mojo_values.reserve(values->size()); | 385 mojo_values.reserve(values->size()); |
395 for (size_t i = 0; i < values->size(); ++i) | 386 for (size_t i = 0; i < values->size(); ++i) |
396 mojo_values.push_back(ConvertReturnValue(&(*values)[i])); | 387 mojo_values.push_back(ConvertReturnValue(&(*values)[i])); |
397 | 388 |
398 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 389 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
399 base::Bind(&IOThreadHelper::SendSuccessArray, | 390 base::Bind(&IOThreadHelper::SendSuccessArray, |
400 base::Unretained(io_helper_.get()), | 391 base::Unretained(io_helper_.get()), |
401 base::Passed(&mojo_values), *values)); | 392 base::Passed(&mojo_values), *values)); |
402 dispatcher_host_ = nullptr; | 393 dispatcher_host_ = nullptr; |
403 } | 394 } |
404 | 395 |
405 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) { | 396 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) { |
406 DCHECK(thread_checker_.CalledOnValidThread()); | 397 DCHECK(thread_checker_.CalledOnValidThread()); |
407 DCHECK(dispatcher_host_); | 398 DCHECK(dispatcher_host_); |
408 DCHECK(io_helper_); | 399 DCHECK(io_helper_); |
409 | 400 |
410 DCHECK_EQ(kNoTransaction, host_transaction_id_); | |
411 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 401 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
412 | 402 |
413 BrowserThread::PostTask( | 403 BrowserThread::PostTask( |
414 BrowserThread::IO, FROM_HERE, | 404 BrowserThread::IO, FROM_HERE, |
415 base::Bind(&IOThreadHelper::SendSuccessKey, | 405 base::Bind(&IOThreadHelper::SendSuccessKey, |
416 base::Unretained(io_helper_.get()), value)); | 406 base::Unretained(io_helper_.get()), value)); |
417 dispatcher_host_ = nullptr; | 407 dispatcher_host_ = nullptr; |
418 } | 408 } |
419 | 409 |
420 void IndexedDBCallbacks::OnSuccess(int64_t value) { | 410 void IndexedDBCallbacks::OnSuccess(int64_t value) { |
421 DCHECK(thread_checker_.CalledOnValidThread()); | 411 DCHECK(thread_checker_.CalledOnValidThread()); |
422 DCHECK(dispatcher_host_); | 412 DCHECK(dispatcher_host_); |
423 | 413 |
424 BrowserThread::PostTask( | 414 BrowserThread::PostTask( |
425 BrowserThread::IO, FROM_HERE, | 415 BrowserThread::IO, FROM_HERE, |
426 base::Bind(&IOThreadHelper::SendSuccessInteger, | 416 base::Bind(&IOThreadHelper::SendSuccessInteger, |
427 base::Unretained(io_helper_.get()), value)); | 417 base::Unretained(io_helper_.get()), value)); |
428 dispatcher_host_ = nullptr; | 418 dispatcher_host_ = nullptr; |
429 } | 419 } |
430 | 420 |
431 void IndexedDBCallbacks::OnSuccess() { | 421 void IndexedDBCallbacks::OnSuccess() { |
432 DCHECK(thread_checker_.CalledOnValidThread()); | 422 DCHECK(thread_checker_.CalledOnValidThread()); |
433 DCHECK(dispatcher_host_); | 423 DCHECK(dispatcher_host_); |
434 DCHECK(io_helper_); | 424 DCHECK(io_helper_); |
435 | 425 |
436 DCHECK_EQ(kNoTransaction, host_transaction_id_); | |
437 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 426 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
438 | 427 |
439 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 428 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
440 base::Bind(&IOThreadHelper::SendSuccess, | 429 base::Bind(&IOThreadHelper::SendSuccess, |
441 base::Unretained(io_helper_.get()))); | 430 base::Unretained(io_helper_.get()))); |
442 dispatcher_host_ = nullptr; | 431 dispatcher_host_ = nullptr; |
443 } | 432 } |
444 | 433 |
445 bool IndexedDBCallbacks::IsValid() const { | 434 bool IndexedDBCallbacks::IsValid() const { |
446 DCHECK(dispatcher_host_.get()); | 435 DCHECK(dispatcher_host_.get()); |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
607 IDB_TRACE("IndexedDBCallbacks::CreateAllBlobs"); | 596 IDB_TRACE("IndexedDBCallbacks::CreateAllBlobs"); |
608 DCHECK_EQ(blob_info.size(), blob_or_file_info->size()); | 597 DCHECK_EQ(blob_info.size(), blob_or_file_info->size()); |
609 if (!dispatcher_host_->blob_storage_context()) | 598 if (!dispatcher_host_->blob_storage_context()) |
610 return false; | 599 return false; |
611 for (size_t i = 0; i < blob_info.size(); ++i) | 600 for (size_t i = 0; i < blob_info.size(); ++i) |
612 (*blob_or_file_info)[i]->uuid = CreateBlobData(blob_info[i]); | 601 (*blob_or_file_info)[i]->uuid = CreateBlobData(blob_info[i]); |
613 return true; | 602 return true; |
614 } | 603 } |
615 | 604 |
616 } // namespace content | 605 } // namespace content |
OLD | NEW |