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 <memory> | 10 #include <memory> |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 | 46 |
47 // The following two objects protect the given objects from being destructed on | 47 // The following two objects protect the given objects from being destructed on |
48 // the IO thread if we have a shutdown or an error. | 48 // the IO thread if we have a shutdown or an error. |
49 struct SafeIOThreadConnectionWrapper { | 49 struct SafeIOThreadConnectionWrapper { |
50 SafeIOThreadConnectionWrapper(std::unique_ptr<IndexedDBConnection> connection) | 50 SafeIOThreadConnectionWrapper(std::unique_ptr<IndexedDBConnection> connection) |
51 : connection(std::move(connection)), | 51 : connection(std::move(connection)), |
52 idb_runner(base::SequencedTaskRunnerHandle::Get()) {} | 52 idb_runner(base::SequencedTaskRunnerHandle::Get()) {} |
53 ~SafeIOThreadConnectionWrapper() { | 53 ~SafeIOThreadConnectionWrapper() { |
54 if (connection) { | 54 if (connection) { |
55 idb_runner->PostTask( | 55 idb_runner->PostTask( |
56 FROM_HERE, base::Bind( | 56 FROM_HERE, base::BindOnce( |
57 [](std::unique_ptr<IndexedDBConnection> connection) { | 57 [](std::unique_ptr<IndexedDBConnection> connection) { |
58 connection->ForceClose(); | 58 connection->ForceClose(); |
59 }, | 59 }, |
60 base::Passed(&connection))); | 60 base::Passed(&connection))); |
61 } | 61 } |
62 } | 62 } |
63 SafeIOThreadConnectionWrapper(SafeIOThreadConnectionWrapper&& other) = | 63 SafeIOThreadConnectionWrapper(SafeIOThreadConnectionWrapper&& other) = |
64 default; | 64 default; |
65 | 65 |
66 std::unique_ptr<IndexedDBConnection> connection; | 66 std::unique_ptr<IndexedDBConnection> connection; |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 IndexedDBCallbacks::~IndexedDBCallbacks() { | 210 IndexedDBCallbacks::~IndexedDBCallbacks() { |
211 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 211 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
212 } | 212 } |
213 | 213 |
214 void IndexedDBCallbacks::OnError(const IndexedDBDatabaseError& error) { | 214 void IndexedDBCallbacks::OnError(const IndexedDBDatabaseError& error) { |
215 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 215 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
216 DCHECK(!complete_); | 216 DCHECK(!complete_); |
217 | 217 |
218 BrowserThread::PostTask( | 218 BrowserThread::PostTask( |
219 BrowserThread::IO, FROM_HERE, | 219 BrowserThread::IO, FROM_HERE, |
220 base::Bind(&IOThreadHelper::SendError, base::Unretained(io_helper_.get()), | 220 base::BindOnce(&IOThreadHelper::SendError, |
221 error)); | 221 base::Unretained(io_helper_.get()), error)); |
222 complete_ = true; | 222 complete_ = true; |
223 | 223 |
224 if (!connection_open_start_time_.is_null()) { | 224 if (!connection_open_start_time_.is_null()) { |
225 UMA_HISTOGRAM_MEDIUM_TIMES( | 225 UMA_HISTOGRAM_MEDIUM_TIMES( |
226 "WebCore.IndexedDB.OpenTime.Error", | 226 "WebCore.IndexedDB.OpenTime.Error", |
227 base::TimeTicks::Now() - connection_open_start_time_); | 227 base::TimeTicks::Now() - connection_open_start_time_); |
228 connection_open_start_time_ = base::TimeTicks(); | 228 connection_open_start_time_ = base::TimeTicks(); |
229 } | 229 } |
230 } | 230 } |
231 | 231 |
232 void IndexedDBCallbacks::OnSuccess(const std::vector<base::string16>& value) { | 232 void IndexedDBCallbacks::OnSuccess(const std::vector<base::string16>& value) { |
233 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 233 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
234 DCHECK(!complete_); | 234 DCHECK(!complete_); |
235 DCHECK(io_helper_); | 235 DCHECK(io_helper_); |
236 | 236 |
237 BrowserThread::PostTask( | 237 BrowserThread::PostTask( |
238 BrowserThread::IO, FROM_HERE, | 238 BrowserThread::IO, FROM_HERE, |
239 base::Bind(&IOThreadHelper::SendSuccessStringList, | 239 base::BindOnce(&IOThreadHelper::SendSuccessStringList, |
240 base::Unretained(io_helper_.get()), value)); | 240 base::Unretained(io_helper_.get()), value)); |
241 complete_ = true; | 241 complete_ = true; |
242 } | 242 } |
243 | 243 |
244 void IndexedDBCallbacks::OnBlocked(int64_t existing_version) { | 244 void IndexedDBCallbacks::OnBlocked(int64_t existing_version) { |
245 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 245 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
246 DCHECK(!complete_); | 246 DCHECK(!complete_); |
247 DCHECK(io_helper_); | 247 DCHECK(io_helper_); |
248 | 248 |
249 if (sent_blocked_) | 249 if (sent_blocked_) |
250 return; | 250 return; |
251 | 251 |
252 sent_blocked_ = true; | 252 sent_blocked_ = true; |
253 | 253 |
254 BrowserThread::PostTask( | 254 BrowserThread::PostTask( |
255 BrowserThread::IO, FROM_HERE, | 255 BrowserThread::IO, FROM_HERE, |
256 base::Bind(&IOThreadHelper::SendBlocked, | 256 base::BindOnce(&IOThreadHelper::SendBlocked, |
257 base::Unretained(io_helper_.get()), existing_version)); | 257 base::Unretained(io_helper_.get()), existing_version)); |
258 | 258 |
259 if (!connection_open_start_time_.is_null()) { | 259 if (!connection_open_start_time_.is_null()) { |
260 UMA_HISTOGRAM_MEDIUM_TIMES( | 260 UMA_HISTOGRAM_MEDIUM_TIMES( |
261 "WebCore.IndexedDB.OpenTime.Blocked", | 261 "WebCore.IndexedDB.OpenTime.Blocked", |
262 base::TimeTicks::Now() - connection_open_start_time_); | 262 base::TimeTicks::Now() - connection_open_start_time_); |
263 connection_open_start_time_ = base::TimeTicks(); | 263 connection_open_start_time_ = base::TimeTicks(); |
264 } | 264 } |
265 } | 265 } |
266 | 266 |
267 void IndexedDBCallbacks::OnUpgradeNeeded( | 267 void IndexedDBCallbacks::OnUpgradeNeeded( |
268 int64_t old_version, | 268 int64_t old_version, |
269 std::unique_ptr<IndexedDBConnection> connection, | 269 std::unique_ptr<IndexedDBConnection> connection, |
270 const IndexedDBDatabaseMetadata& metadata, | 270 const IndexedDBDatabaseMetadata& metadata, |
271 const IndexedDBDataLossInfo& data_loss_info) { | 271 const IndexedDBDataLossInfo& data_loss_info) { |
272 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 272 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
273 DCHECK(!complete_); | 273 DCHECK(!complete_); |
274 DCHECK(io_helper_); | 274 DCHECK(io_helper_); |
275 | 275 |
276 DCHECK(!connection_created_); | 276 DCHECK(!connection_created_); |
277 | 277 |
278 data_loss_ = data_loss_info.status; | 278 data_loss_ = data_loss_info.status; |
279 connection_created_ = true; | 279 connection_created_ = true; |
280 | 280 |
281 SafeIOThreadConnectionWrapper wrapper(std::move(connection)); | 281 SafeIOThreadConnectionWrapper wrapper(std::move(connection)); |
282 BrowserThread::PostTask( | 282 BrowserThread::PostTask( |
283 BrowserThread::IO, FROM_HERE, | 283 BrowserThread::IO, FROM_HERE, |
284 base::Bind(&IOThreadHelper::SendUpgradeNeeded, | 284 base::BindOnce(&IOThreadHelper::SendUpgradeNeeded, |
285 base::Unretained(io_helper_.get()), base::Passed(&wrapper), | 285 base::Unretained(io_helper_.get()), base::Passed(&wrapper), |
286 old_version, data_loss_info.status, data_loss_info.message, | 286 old_version, data_loss_info.status, data_loss_info.message, |
287 metadata)); | 287 metadata)); |
288 | 288 |
289 if (!connection_open_start_time_.is_null()) { | 289 if (!connection_open_start_time_.is_null()) { |
290 UMA_HISTOGRAM_MEDIUM_TIMES( | 290 UMA_HISTOGRAM_MEDIUM_TIMES( |
291 "WebCore.IndexedDB.OpenTime.UpgradeNeeded", | 291 "WebCore.IndexedDB.OpenTime.UpgradeNeeded", |
292 base::TimeTicks::Now() - connection_open_start_time_); | 292 base::TimeTicks::Now() - connection_open_start_time_); |
293 connection_open_start_time_ = base::TimeTicks(); | 293 connection_open_start_time_ = base::TimeTicks(); |
294 } | 294 } |
295 } | 295 } |
296 | 296 |
297 void IndexedDBCallbacks::OnSuccess( | 297 void IndexedDBCallbacks::OnSuccess( |
298 std::unique_ptr<IndexedDBConnection> connection, | 298 std::unique_ptr<IndexedDBConnection> connection, |
299 const IndexedDBDatabaseMetadata& metadata) { | 299 const IndexedDBDatabaseMetadata& metadata) { |
300 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 300 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
301 DCHECK(!complete_); | 301 DCHECK(!complete_); |
302 DCHECK(io_helper_); | 302 DCHECK(io_helper_); |
303 | 303 |
304 DCHECK_EQ(connection_created_, !connection); | 304 DCHECK_EQ(connection_created_, !connection); |
305 | 305 |
306 scoped_refptr<IndexedDBCallbacks> self(this); | 306 scoped_refptr<IndexedDBCallbacks> self(this); |
307 | 307 |
308 // Only create a new connection if one was not previously sent in | 308 // Only create a new connection if one was not previously sent in |
309 // OnUpgradeNeeded. | 309 // OnUpgradeNeeded. |
310 std::unique_ptr<IndexedDBConnection> database_connection; | 310 std::unique_ptr<IndexedDBConnection> database_connection; |
311 if (!connection_created_) | 311 if (!connection_created_) |
312 database_connection = std::move(connection); | 312 database_connection = std::move(connection); |
313 | 313 |
314 SafeIOThreadConnectionWrapper wrapper(std::move(database_connection)); | 314 SafeIOThreadConnectionWrapper wrapper(std::move(database_connection)); |
315 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 315 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
316 base::Bind(&IOThreadHelper::SendSuccessDatabase, | 316 base::BindOnce(&IOThreadHelper::SendSuccessDatabase, |
317 base::Unretained(io_helper_.get()), | 317 base::Unretained(io_helper_.get()), |
318 base::Passed(&wrapper), metadata)); | 318 base::Passed(&wrapper), metadata)); |
319 complete_ = true; | 319 complete_ = true; |
320 | 320 |
321 if (!connection_open_start_time_.is_null()) { | 321 if (!connection_open_start_time_.is_null()) { |
322 UMA_HISTOGRAM_MEDIUM_TIMES( | 322 UMA_HISTOGRAM_MEDIUM_TIMES( |
323 "WebCore.IndexedDB.OpenTime.Success", | 323 "WebCore.IndexedDB.OpenTime.Success", |
324 base::TimeTicks::Now() - connection_open_start_time_); | 324 base::TimeTicks::Now() - connection_open_start_time_); |
325 connection_open_start_time_ = base::TimeTicks(); | 325 connection_open_start_time_ = base::TimeTicks(); |
326 } | 326 } |
327 } | 327 } |
328 | 328 |
(...skipping 11 matching lines...) Expand all Loading... |
340 std::vector<IndexedDBBlobInfo> blob_info; | 340 std::vector<IndexedDBBlobInfo> blob_info; |
341 if (value) { | 341 if (value) { |
342 mojo_value = ConvertAndEraseValue(value); | 342 mojo_value = ConvertAndEraseValue(value); |
343 blob_info.swap(value->blob_info); | 343 blob_info.swap(value->blob_info); |
344 } | 344 } |
345 | 345 |
346 SafeIOThreadCursorWrapper cursor_wrapper(std::move(cursor)); | 346 SafeIOThreadCursorWrapper cursor_wrapper(std::move(cursor)); |
347 | 347 |
348 BrowserThread::PostTask( | 348 BrowserThread::PostTask( |
349 BrowserThread::IO, FROM_HERE, | 349 BrowserThread::IO, FROM_HERE, |
350 base::Bind(&IOThreadHelper::SendSuccessCursor, | 350 base::BindOnce(&IOThreadHelper::SendSuccessCursor, |
351 base::Unretained(io_helper_.get()), | 351 base::Unretained(io_helper_.get()), |
352 base::Passed(&cursor_wrapper), key, primary_key, | 352 base::Passed(&cursor_wrapper), key, primary_key, |
353 base::Passed(&mojo_value), base::Passed(&blob_info))); | 353 base::Passed(&mojo_value), base::Passed(&blob_info))); |
354 complete_ = true; | 354 complete_ = true; |
355 } | 355 } |
356 | 356 |
357 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key, | 357 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key, |
358 const IndexedDBKey& primary_key, | 358 const IndexedDBKey& primary_key, |
359 IndexedDBValue* value) { | 359 IndexedDBValue* value) { |
360 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 360 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
361 DCHECK(!complete_); | 361 DCHECK(!complete_); |
362 DCHECK(io_helper_); | 362 DCHECK(io_helper_); |
363 | 363 |
364 DCHECK_EQ(blink::kWebIDBDataLossNone, data_loss_); | 364 DCHECK_EQ(blink::kWebIDBDataLossNone, data_loss_); |
365 | 365 |
366 ::indexed_db::mojom::ValuePtr mojo_value; | 366 ::indexed_db::mojom::ValuePtr mojo_value; |
367 std::vector<IndexedDBBlobInfo> blob_info; | 367 std::vector<IndexedDBBlobInfo> blob_info; |
368 if (value) { | 368 if (value) { |
369 mojo_value = ConvertAndEraseValue(value); | 369 mojo_value = ConvertAndEraseValue(value); |
370 blob_info.swap(value->blob_info); | 370 blob_info.swap(value->blob_info); |
371 } | 371 } |
372 | 372 |
373 BrowserThread::PostTask( | 373 BrowserThread::PostTask( |
374 BrowserThread::IO, FROM_HERE, | 374 BrowserThread::IO, FROM_HERE, |
375 base::Bind(&IOThreadHelper::SendSuccessCursorContinue, | 375 base::BindOnce(&IOThreadHelper::SendSuccessCursorContinue, |
376 base::Unretained(io_helper_.get()), key, primary_key, | 376 base::Unretained(io_helper_.get()), key, primary_key, |
377 base::Passed(&mojo_value), base::Passed(&blob_info))); | 377 base::Passed(&mojo_value), base::Passed(&blob_info))); |
378 complete_ = true; | 378 complete_ = true; |
379 } | 379 } |
380 | 380 |
381 void IndexedDBCallbacks::OnSuccessWithPrefetch( | 381 void IndexedDBCallbacks::OnSuccessWithPrefetch( |
382 const std::vector<IndexedDBKey>& keys, | 382 const std::vector<IndexedDBKey>& keys, |
383 const std::vector<IndexedDBKey>& primary_keys, | 383 const std::vector<IndexedDBKey>& primary_keys, |
384 std::vector<IndexedDBValue>* values) { | 384 std::vector<IndexedDBValue>* values) { |
385 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 385 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
386 DCHECK(!complete_); | 386 DCHECK(!complete_); |
387 DCHECK(io_helper_); | 387 DCHECK(io_helper_); |
388 DCHECK_EQ(keys.size(), primary_keys.size()); | 388 DCHECK_EQ(keys.size(), primary_keys.size()); |
389 DCHECK_EQ(keys.size(), values->size()); | 389 DCHECK_EQ(keys.size(), values->size()); |
390 | 390 |
391 DCHECK_EQ(blink::kWebIDBDataLossNone, data_loss_); | 391 DCHECK_EQ(blink::kWebIDBDataLossNone, data_loss_); |
392 | 392 |
393 std::vector<::indexed_db::mojom::ValuePtr> mojo_values; | 393 std::vector<::indexed_db::mojom::ValuePtr> mojo_values; |
394 mojo_values.reserve(values->size()); | 394 mojo_values.reserve(values->size()); |
395 for (size_t i = 0; i < values->size(); ++i) | 395 for (size_t i = 0; i < values->size(); ++i) |
396 mojo_values.push_back(ConvertAndEraseValue(&(*values)[i])); | 396 mojo_values.push_back(ConvertAndEraseValue(&(*values)[i])); |
397 | 397 |
398 BrowserThread::PostTask( | 398 BrowserThread::PostTask( |
399 BrowserThread::IO, FROM_HERE, | 399 BrowserThread::IO, FROM_HERE, |
400 base::Bind(&IOThreadHelper::SendSuccessCursorPrefetch, | 400 base::BindOnce(&IOThreadHelper::SendSuccessCursorPrefetch, |
401 base::Unretained(io_helper_.get()), keys, primary_keys, | 401 base::Unretained(io_helper_.get()), keys, primary_keys, |
402 base::Passed(&mojo_values), *values)); | 402 base::Passed(&mojo_values), *values)); |
403 complete_ = true; | 403 complete_ = true; |
404 } | 404 } |
405 | 405 |
406 void IndexedDBCallbacks::OnSuccess(IndexedDBReturnValue* value) { | 406 void IndexedDBCallbacks::OnSuccess(IndexedDBReturnValue* value) { |
407 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 407 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
408 DCHECK(!complete_); | 408 DCHECK(!complete_); |
409 | 409 |
410 DCHECK_EQ(blink::kWebIDBDataLossNone, data_loss_); | 410 DCHECK_EQ(blink::kWebIDBDataLossNone, data_loss_); |
411 | 411 |
412 ::indexed_db::mojom::ReturnValuePtr mojo_value; | 412 ::indexed_db::mojom::ReturnValuePtr mojo_value; |
413 std::vector<IndexedDBBlobInfo> blob_info; | 413 std::vector<IndexedDBBlobInfo> blob_info; |
414 if (value) { | 414 if (value) { |
415 mojo_value = ConvertReturnValue(value); | 415 mojo_value = ConvertReturnValue(value); |
416 blob_info = value->blob_info; | 416 blob_info = value->blob_info; |
417 } | 417 } |
418 | 418 |
419 BrowserThread::PostTask( | 419 BrowserThread::PostTask( |
420 BrowserThread::IO, FROM_HERE, | 420 BrowserThread::IO, FROM_HERE, |
421 base::Bind(&IOThreadHelper::SendSuccessValue, | 421 base::BindOnce(&IOThreadHelper::SendSuccessValue, |
422 base::Unretained(io_helper_.get()), base::Passed(&mojo_value), | 422 base::Unretained(io_helper_.get()), |
423 base::Passed(&blob_info))); | 423 base::Passed(&mojo_value), base::Passed(&blob_info))); |
424 complete_ = true; | 424 complete_ = true; |
425 } | 425 } |
426 | 426 |
427 void IndexedDBCallbacks::OnSuccessArray( | 427 void IndexedDBCallbacks::OnSuccessArray( |
428 std::vector<IndexedDBReturnValue>* values) { | 428 std::vector<IndexedDBReturnValue>* values) { |
429 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 429 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
430 DCHECK(!complete_); | 430 DCHECK(!complete_); |
431 DCHECK(io_helper_); | 431 DCHECK(io_helper_); |
432 | 432 |
433 DCHECK_EQ(blink::kWebIDBDataLossNone, data_loss_); | 433 DCHECK_EQ(blink::kWebIDBDataLossNone, data_loss_); |
434 | 434 |
435 std::vector<::indexed_db::mojom::ReturnValuePtr> mojo_values; | 435 std::vector<::indexed_db::mojom::ReturnValuePtr> mojo_values; |
436 mojo_values.reserve(values->size()); | 436 mojo_values.reserve(values->size()); |
437 for (size_t i = 0; i < values->size(); ++i) | 437 for (size_t i = 0; i < values->size(); ++i) |
438 mojo_values.push_back(ConvertReturnValue(&(*values)[i])); | 438 mojo_values.push_back(ConvertReturnValue(&(*values)[i])); |
439 | 439 |
440 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 440 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
441 base::Bind(&IOThreadHelper::SendSuccessArray, | 441 base::BindOnce(&IOThreadHelper::SendSuccessArray, |
442 base::Unretained(io_helper_.get()), | 442 base::Unretained(io_helper_.get()), |
443 base::Passed(&mojo_values), *values)); | 443 base::Passed(&mojo_values), *values)); |
444 complete_ = true; | 444 complete_ = true; |
445 } | 445 } |
446 | 446 |
447 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) { | 447 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) { |
448 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 448 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
449 DCHECK(!complete_); | 449 DCHECK(!complete_); |
450 DCHECK(io_helper_); | 450 DCHECK(io_helper_); |
451 | 451 |
452 DCHECK_EQ(blink::kWebIDBDataLossNone, data_loss_); | 452 DCHECK_EQ(blink::kWebIDBDataLossNone, data_loss_); |
453 | 453 |
454 BrowserThread::PostTask( | 454 BrowserThread::PostTask( |
455 BrowserThread::IO, FROM_HERE, | 455 BrowserThread::IO, FROM_HERE, |
456 base::Bind(&IOThreadHelper::SendSuccessKey, | 456 base::BindOnce(&IOThreadHelper::SendSuccessKey, |
457 base::Unretained(io_helper_.get()), value)); | 457 base::Unretained(io_helper_.get()), value)); |
458 complete_ = true; | 458 complete_ = true; |
459 } | 459 } |
460 | 460 |
461 void IndexedDBCallbacks::OnSuccess(int64_t value) { | 461 void IndexedDBCallbacks::OnSuccess(int64_t value) { |
462 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 462 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
463 DCHECK(!complete_); | 463 DCHECK(!complete_); |
464 | 464 |
465 BrowserThread::PostTask( | 465 BrowserThread::PostTask( |
466 BrowserThread::IO, FROM_HERE, | 466 BrowserThread::IO, FROM_HERE, |
467 base::Bind(&IOThreadHelper::SendSuccessInteger, | 467 base::BindOnce(&IOThreadHelper::SendSuccessInteger, |
468 base::Unretained(io_helper_.get()), value)); | 468 base::Unretained(io_helper_.get()), value)); |
469 complete_ = true; | 469 complete_ = true; |
470 } | 470 } |
471 | 471 |
472 void IndexedDBCallbacks::OnSuccess() { | 472 void IndexedDBCallbacks::OnSuccess() { |
473 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); | 473 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
474 DCHECK(!complete_); | 474 DCHECK(!complete_); |
475 DCHECK(io_helper_); | 475 DCHECK(io_helper_); |
476 | 476 |
477 DCHECK_EQ(blink::kWebIDBDataLossNone, data_loss_); | 477 DCHECK_EQ(blink::kWebIDBDataLossNone, data_loss_); |
478 | 478 |
479 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 479 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
480 base::Bind(&IOThreadHelper::SendSuccess, | 480 base::BindOnce(&IOThreadHelper::SendSuccess, |
481 base::Unretained(io_helper_.get()))); | 481 base::Unretained(io_helper_.get()))); |
482 complete_ = true; | 482 complete_ = true; |
483 } | 483 } |
484 | 484 |
485 void IndexedDBCallbacks::SetConnectionOpenStartTime( | 485 void IndexedDBCallbacks::SetConnectionOpenStartTime( |
486 const base::TimeTicks& start_time) { | 486 const base::TimeTicks& start_time) { |
487 connection_open_start_time_ = start_time; | 487 connection_open_start_time_ = start_time; |
488 } | 488 } |
489 | 489 |
490 IndexedDBCallbacks::IOThreadHelper::IOThreadHelper( | 490 IndexedDBCallbacks::IOThreadHelper::IOThreadHelper( |
491 CallbacksAssociatedPtrInfo callbacks_info, | 491 CallbacksAssociatedPtrInfo callbacks_info, |
492 base::WeakPtr<IndexedDBDispatcherHost> dispatcher_host, | 492 base::WeakPtr<IndexedDBDispatcherHost> dispatcher_host, |
493 url::Origin origin, | 493 url::Origin origin, |
494 scoped_refptr<base::SequencedTaskRunner> idb_runner) | 494 scoped_refptr<base::SequencedTaskRunner> idb_runner) |
495 : dispatcher_host_(std::move(dispatcher_host)), | 495 : dispatcher_host_(std::move(dispatcher_host)), |
496 origin_(origin), | 496 origin_(origin), |
497 idb_runner_(idb_runner) { | 497 idb_runner_(idb_runner) { |
498 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 498 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
499 if (callbacks_info.is_valid()) { | 499 if (callbacks_info.is_valid()) { |
500 callbacks_.Bind(std::move(callbacks_info)); | 500 callbacks_.Bind(std::move(callbacks_info)); |
501 callbacks_.set_connection_error_handler( | 501 callbacks_.set_connection_error_handler(base::BindOnce( |
502 base::Bind(&IOThreadHelper::OnConnectionError, base::Unretained(this))); | 502 &IOThreadHelper::OnConnectionError, base::Unretained(this))); |
503 } | 503 } |
504 } | 504 } |
505 | 505 |
506 IndexedDBCallbacks::IOThreadHelper::~IOThreadHelper() { | 506 IndexedDBCallbacks::IOThreadHelper::~IOThreadHelper() { |
507 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 507 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
508 } | 508 } |
509 | 509 |
510 void IndexedDBCallbacks::IOThreadHelper::SendError( | 510 void IndexedDBCallbacks::IOThreadHelper::SendError( |
511 const IndexedDBDatabaseError& error) { | 511 const IndexedDBDatabaseError& error) { |
512 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 512 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
766 return true; | 766 return true; |
767 } | 767 } |
768 | 768 |
769 void IndexedDBCallbacks::IOThreadHelper::OnConnectionError() { | 769 void IndexedDBCallbacks::IOThreadHelper::OnConnectionError() { |
770 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 770 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
771 callbacks_.reset(); | 771 callbacks_.reset(); |
772 dispatcher_host_ = nullptr; | 772 dispatcher_host_ = nullptr; |
773 } | 773 } |
774 | 774 |
775 } // namespace content | 775 } // namespace content |
OLD | NEW |