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/browser/service_worker/service_worker_storage.h" | 5 #include "content/browser/service_worker/service_worker_storage.h" |
6 | 6 |
7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/sequenced_task_runner.h" | 10 #include "base/sequenced_task_runner.h" |
11 #include "base/single_thread_task_runner.h" | 11 #include "base/single_thread_task_runner.h" |
12 #include "base/task_runner_util.h" | 12 #include "base/task_runner_util.h" |
| 13 #include "base/thread_task_runner_handle.h" |
13 #include "base/trace_event/trace_event.h" | 14 #include "base/trace_event/trace_event.h" |
14 #include "content/browser/service_worker/service_worker_context_core.h" | 15 #include "content/browser/service_worker/service_worker_context_core.h" |
15 #include "content/browser/service_worker/service_worker_disk_cache.h" | 16 #include "content/browser/service_worker/service_worker_disk_cache.h" |
16 #include "content/browser/service_worker/service_worker_info.h" | 17 #include "content/browser/service_worker/service_worker_info.h" |
17 #include "content/browser/service_worker/service_worker_metrics.h" | 18 #include "content/browser/service_worker/service_worker_metrics.h" |
18 #include "content/browser/service_worker/service_worker_registration.h" | 19 #include "content/browser/service_worker/service_worker_registration.h" |
19 #include "content/browser/service_worker/service_worker_utils.h" | 20 #include "content/browser/service_worker/service_worker_utils.h" |
20 #include "content/browser/service_worker/service_worker_version.h" | 21 #include "content/browser/service_worker/service_worker_version.h" |
21 #include "content/common/service_worker/service_worker_types.h" | 22 #include "content/common/service_worker/service_worker_types.h" |
22 #include "content/public/browser/browser_thread.h" | 23 #include "content/public/browser/browser_thread.h" |
23 #include "net/base/completion_callback.h" | 24 #include "net/base/completion_callback.h" |
24 #include "net/base/io_buffer.h" | 25 #include "net/base/io_buffer.h" |
25 #include "net/base/net_errors.h" | 26 #include "net/base/net_errors.h" |
26 #include "storage/browser/quota/quota_manager_proxy.h" | 27 #include "storage/browser/quota/quota_manager_proxy.h" |
27 #include "storage/browser/quota/special_storage_policy.h" | 28 #include "storage/browser/quota/special_storage_policy.h" |
28 | 29 |
29 namespace content { | 30 namespace content { |
30 | 31 |
31 namespace { | 32 namespace { |
32 | 33 |
33 void RunSoon(const tracked_objects::Location& from_here, | 34 void RunSoon(const tracked_objects::Location& from_here, |
34 const base::Closure& closure) { | 35 const base::Closure& closure) { |
35 base::MessageLoop::current()->PostTask(from_here, closure); | 36 base::ThreadTaskRunnerHandle::Get()->PostTask(from_here, closure); |
36 } | 37 } |
37 | 38 |
38 void CompleteFindNow( | 39 void CompleteFindNow( |
39 const scoped_refptr<ServiceWorkerRegistration>& registration, | 40 const scoped_refptr<ServiceWorkerRegistration>& registration, |
40 ServiceWorkerStatusCode status, | 41 ServiceWorkerStatusCode status, |
41 const ServiceWorkerStorage::FindRegistrationCallback& callback) { | 42 const ServiceWorkerStorage::FindRegistrationCallback& callback) { |
42 if (registration && registration->is_deleted()) { | 43 if (registration && registration->is_deleted()) { |
43 // It's past the point of no return and no longer findable. | 44 // It's past the point of no return and no longer findable. |
44 callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND, nullptr); | 45 callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND, nullptr); |
45 return; | 46 return; |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 TRACE_EVENT_ASYNC_BEGIN1( | 303 TRACE_EVENT_ASYNC_BEGIN1( |
303 "ServiceWorker", | 304 "ServiceWorker", |
304 "ServiceWorkerStorage::FindRegistrationForDocument", | 305 "ServiceWorkerStorage::FindRegistrationForDocument", |
305 callback_id, | 306 callback_id, |
306 "URL", document_url.spec()); | 307 "URL", document_url.spec()); |
307 database_task_manager_->GetTaskRunner()->PostTask( | 308 database_task_manager_->GetTaskRunner()->PostTask( |
308 FROM_HERE, | 309 FROM_HERE, |
309 base::Bind( | 310 base::Bind( |
310 &FindForDocumentInDB, | 311 &FindForDocumentInDB, |
311 database_.get(), | 312 database_.get(), |
312 base::MessageLoopProxy::current(), | 313 base::ThreadTaskRunnerHandle::Get(), |
313 document_url, | 314 document_url, |
314 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForDocument, | 315 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForDocument, |
315 weak_factory_.GetWeakPtr(), | 316 weak_factory_.GetWeakPtr(), |
316 document_url, | 317 document_url, |
317 callback, | 318 callback, |
318 callback_id))); | 319 callback_id))); |
319 } | 320 } |
320 | 321 |
321 void ServiceWorkerStorage::FindRegistrationForPattern( | 322 void ServiceWorkerStorage::FindRegistrationForPattern( |
322 const GURL& scope, | 323 const GURL& scope, |
(...skipping 21 matching lines...) Expand all Loading... |
344 : SERVICE_WORKER_ERROR_NOT_FOUND, | 345 : SERVICE_WORKER_ERROR_NOT_FOUND, |
345 callback); | 346 callback); |
346 return; | 347 return; |
347 } | 348 } |
348 | 349 |
349 database_task_manager_->GetTaskRunner()->PostTask( | 350 database_task_manager_->GetTaskRunner()->PostTask( |
350 FROM_HERE, | 351 FROM_HERE, |
351 base::Bind( | 352 base::Bind( |
352 &FindForPatternInDB, | 353 &FindForPatternInDB, |
353 database_.get(), | 354 database_.get(), |
354 base::MessageLoopProxy::current(), | 355 base::ThreadTaskRunnerHandle::Get(), |
355 scope, | 356 scope, |
356 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForPattern, | 357 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForPattern, |
357 weak_factory_.GetWeakPtr(), scope, callback))); | 358 weak_factory_.GetWeakPtr(), |
| 359 scope, |
| 360 callback))); |
358 } | 361 } |
359 | 362 |
360 ServiceWorkerRegistration* ServiceWorkerStorage::GetUninstallingRegistration( | 363 ServiceWorkerRegistration* ServiceWorkerStorage::GetUninstallingRegistration( |
361 const GURL& scope) { | 364 const GURL& scope) { |
362 if (state_ != INITIALIZED || !context_) | 365 if (state_ != INITIALIZED || !context_) |
363 return NULL; | 366 return NULL; |
364 for (RegistrationRefsById::const_iterator it = | 367 for (RegistrationRefsById::const_iterator it = |
365 uninstalling_registrations_.begin(); | 368 uninstalling_registrations_.begin(); |
366 it != uninstalling_registrations_.end(); | 369 it != uninstalling_registrations_.end(); |
367 ++it) { | 370 ++it) { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 context_->GetLiveRegistration(registration_id); | 408 context_->GetLiveRegistration(registration_id); |
406 if (registration.get()) { | 409 if (registration.get()) { |
407 CompleteFindNow(registration, SERVICE_WORKER_OK, callback); | 410 CompleteFindNow(registration, SERVICE_WORKER_OK, callback); |
408 return; | 411 return; |
409 } | 412 } |
410 | 413 |
411 database_task_manager_->GetTaskRunner()->PostTask( | 414 database_task_manager_->GetTaskRunner()->PostTask( |
412 FROM_HERE, | 415 FROM_HERE, |
413 base::Bind(&FindForIdInDB, | 416 base::Bind(&FindForIdInDB, |
414 database_.get(), | 417 database_.get(), |
415 base::MessageLoopProxy::current(), | 418 base::ThreadTaskRunnerHandle::Get(), |
416 registration_id, origin, | 419 registration_id, |
| 420 origin, |
417 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForId, | 421 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForId, |
418 weak_factory_.GetWeakPtr(), callback))); | 422 weak_factory_.GetWeakPtr(), |
| 423 callback))); |
419 } | 424 } |
420 | 425 |
421 void ServiceWorkerStorage::FindRegistrationForIdOnly( | 426 void ServiceWorkerStorage::FindRegistrationForIdOnly( |
422 int64 registration_id, | 427 int64 registration_id, |
423 const FindRegistrationCallback& callback) { | 428 const FindRegistrationCallback& callback) { |
424 if (!LazyInitialize( | 429 if (!LazyInitialize( |
425 base::Bind(&ServiceWorkerStorage::FindRegistrationForIdOnly, | 430 base::Bind(&ServiceWorkerStorage::FindRegistrationForIdOnly, |
426 weak_factory_.GetWeakPtr(), registration_id, callback))) { | 431 weak_factory_.GetWeakPtr(), registration_id, callback))) { |
427 if (state_ != INITIALIZING || !context_) { | 432 if (state_ != INITIALIZING || !context_) { |
428 CompleteFindNow(nullptr, SERVICE_WORKER_ERROR_FAILED, callback); | 433 CompleteFindNow(nullptr, SERVICE_WORKER_ERROR_FAILED, callback); |
429 } | 434 } |
430 return; | 435 return; |
431 } | 436 } |
432 DCHECK_EQ(INITIALIZED, state_); | 437 DCHECK_EQ(INITIALIZED, state_); |
433 | 438 |
434 scoped_refptr<ServiceWorkerRegistration> registration = | 439 scoped_refptr<ServiceWorkerRegistration> registration = |
435 context_->GetLiveRegistration(registration_id); | 440 context_->GetLiveRegistration(registration_id); |
436 if (registration) { | 441 if (registration) { |
437 // Delegate to FindRegistrationForId to make sure the same subset of live | 442 // Delegate to FindRegistrationForId to make sure the same subset of live |
438 // registrations is returned. | 443 // registrations is returned. |
439 // TODO(mek): CompleteFindNow should really do all the required checks, so | 444 // TODO(mek): CompleteFindNow should really do all the required checks, so |
440 // calling that directly here should be enough. | 445 // calling that directly here should be enough. |
441 FindRegistrationForId(registration_id, registration->pattern().GetOrigin(), | 446 FindRegistrationForId(registration_id, registration->pattern().GetOrigin(), |
442 callback); | 447 callback); |
443 return; | 448 return; |
444 } | 449 } |
445 | 450 |
446 database_task_manager_->GetTaskRunner()->PostTask( | 451 database_task_manager_->GetTaskRunner()->PostTask( |
447 FROM_HERE, | 452 FROM_HERE, |
448 base::Bind(&FindForIdOnlyInDB, database_.get(), | 453 base::Bind(&FindForIdOnlyInDB, |
449 base::MessageLoopProxy::current(), registration_id, | 454 database_.get(), |
| 455 base::ThreadTaskRunnerHandle::Get(), |
| 456 registration_id, |
450 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForId, | 457 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForId, |
451 weak_factory_.GetWeakPtr(), callback))); | 458 weak_factory_.GetWeakPtr(), |
| 459 callback))); |
452 } | 460 } |
453 | 461 |
454 void ServiceWorkerStorage::GetRegistrationsForOrigin( | 462 void ServiceWorkerStorage::GetRegistrationsForOrigin( |
455 const GURL& origin, const GetRegistrationsInfosCallback& callback) { | 463 const GURL& origin, const GetRegistrationsInfosCallback& callback) { |
456 if (!LazyInitialize(base::Bind( | 464 if (!LazyInitialize(base::Bind( |
457 &ServiceWorkerStorage::GetRegistrationsForOrigin, | 465 &ServiceWorkerStorage::GetRegistrationsForOrigin, |
458 weak_factory_.GetWeakPtr(), origin, callback))) { | 466 weak_factory_.GetWeakPtr(), origin, callback))) { |
459 if (state_ != INITIALIZING || !context_) { | 467 if (state_ != INITIALIZING || !context_) { |
460 RunSoon(FROM_HERE, base::Bind( | 468 RunSoon(FROM_HERE, base::Bind( |
461 callback, std::vector<ServiceWorkerRegistrationInfo>())); | 469 callback, std::vector<ServiceWorkerRegistrationInfo>())); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 } | 545 } |
538 data.resources_total_size_bytes = resources_total_size_bytes; | 546 data.resources_total_size_bytes = resources_total_size_bytes; |
539 | 547 |
540 if (!has_checked_for_stale_resources_) | 548 if (!has_checked_for_stale_resources_) |
541 DeleteStaleResources(); | 549 DeleteStaleResources(); |
542 | 550 |
543 database_task_manager_->GetTaskRunner()->PostTask( | 551 database_task_manager_->GetTaskRunner()->PostTask( |
544 FROM_HERE, | 552 FROM_HERE, |
545 base::Bind(&WriteRegistrationInDB, | 553 base::Bind(&WriteRegistrationInDB, |
546 database_.get(), | 554 database_.get(), |
547 base::MessageLoopProxy::current(), | 555 base::ThreadTaskRunnerHandle::Get(), |
548 data, | 556 data, |
549 resources, | 557 resources, |
550 base::Bind(&ServiceWorkerStorage::DidStoreRegistration, | 558 base::Bind(&ServiceWorkerStorage::DidStoreRegistration, |
551 weak_factory_.GetWeakPtr(), | 559 weak_factory_.GetWeakPtr(), |
552 callback, | 560 callback, |
553 data))); | 561 data))); |
554 | 562 |
555 registration->set_is_deleted(false); | 563 registration->set_is_deleted(false); |
556 } | 564 } |
557 | 565 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 | 619 |
612 DidDeleteRegistrationParams params; | 620 DidDeleteRegistrationParams params; |
613 params.registration_id = registration_id; | 621 params.registration_id = registration_id; |
614 params.origin = origin; | 622 params.origin = origin; |
615 params.callback = callback; | 623 params.callback = callback; |
616 | 624 |
617 database_task_manager_->GetTaskRunner()->PostTask( | 625 database_task_manager_->GetTaskRunner()->PostTask( |
618 FROM_HERE, | 626 FROM_HERE, |
619 base::Bind(&DeleteRegistrationFromDB, | 627 base::Bind(&DeleteRegistrationFromDB, |
620 database_.get(), | 628 database_.get(), |
621 base::MessageLoopProxy::current(), | 629 base::ThreadTaskRunnerHandle::Get(), |
622 registration_id, origin, | 630 registration_id, |
| 631 origin, |
623 base::Bind(&ServiceWorkerStorage::DidDeleteRegistration, | 632 base::Bind(&ServiceWorkerStorage::DidDeleteRegistration, |
624 weak_factory_.GetWeakPtr(), params))); | 633 weak_factory_.GetWeakPtr(), |
| 634 params))); |
625 | 635 |
626 // The registration should no longer be findable. | 636 // The registration should no longer be findable. |
627 pending_deletions_.insert(registration_id); | 637 pending_deletions_.insert(registration_id); |
628 ServiceWorkerRegistration* registration = | 638 ServiceWorkerRegistration* registration = |
629 context_->GetLiveRegistration(registration_id); | 639 context_->GetLiveRegistration(registration_id); |
630 if (registration) | 640 if (registration) |
631 registration->set_is_deleted(true); | 641 registration->set_is_deleted(true); |
632 } | 642 } |
633 | 643 |
634 scoped_ptr<ServiceWorkerResponseReader> | 644 scoped_ptr<ServiceWorkerResponseReader> |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
729 if (registration_id == kInvalidServiceWorkerRegistrationId || key.empty()) { | 739 if (registration_id == kInvalidServiceWorkerRegistrationId || key.empty()) { |
730 RunSoon(FROM_HERE, | 740 RunSoon(FROM_HERE, |
731 base::Bind(callback, std::string(), SERVICE_WORKER_ERROR_FAILED)); | 741 base::Bind(callback, std::string(), SERVICE_WORKER_ERROR_FAILED)); |
732 return; | 742 return; |
733 } | 743 } |
734 | 744 |
735 database_task_manager_->GetTaskRunner()->PostTask( | 745 database_task_manager_->GetTaskRunner()->PostTask( |
736 FROM_HERE, | 746 FROM_HERE, |
737 base::Bind(&ServiceWorkerStorage::GetUserDataInDB, | 747 base::Bind(&ServiceWorkerStorage::GetUserDataInDB, |
738 database_.get(), | 748 database_.get(), |
739 base::MessageLoopProxy::current(), | 749 base::ThreadTaskRunnerHandle::Get(), |
740 registration_id, | 750 registration_id, |
741 key, | 751 key, |
742 base::Bind(&ServiceWorkerStorage::DidGetUserData, | 752 base::Bind(&ServiceWorkerStorage::DidGetUserData, |
743 weak_factory_.GetWeakPtr(), callback))); | 753 weak_factory_.GetWeakPtr(), |
| 754 callback))); |
744 } | 755 } |
745 | 756 |
746 void ServiceWorkerStorage::ClearUserData( | 757 void ServiceWorkerStorage::ClearUserData( |
747 int64 registration_id, | 758 int64 registration_id, |
748 const std::string& key, | 759 const std::string& key, |
749 const StatusCallback& callback) { | 760 const StatusCallback& callback) { |
750 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; | 761 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; |
751 if (IsDisabled() || !context_) { | 762 if (IsDisabled() || !context_) { |
752 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); | 763 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); |
753 return; | 764 return; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
789 RunSoon(FROM_HERE, | 800 RunSoon(FROM_HERE, |
790 base::Bind(callback, std::vector<std::pair<int64, std::string>>(), | 801 base::Bind(callback, std::vector<std::pair<int64, std::string>>(), |
791 SERVICE_WORKER_ERROR_FAILED)); | 802 SERVICE_WORKER_ERROR_FAILED)); |
792 return; | 803 return; |
793 } | 804 } |
794 | 805 |
795 database_task_manager_->GetTaskRunner()->PostTask( | 806 database_task_manager_->GetTaskRunner()->PostTask( |
796 FROM_HERE, | 807 FROM_HERE, |
797 base::Bind( | 808 base::Bind( |
798 &ServiceWorkerStorage::GetUserDataForAllRegistrationsInDB, | 809 &ServiceWorkerStorage::GetUserDataForAllRegistrationsInDB, |
799 database_.get(), base::MessageLoopProxy::current(), key, | 810 database_.get(), |
| 811 base::ThreadTaskRunnerHandle::Get(), |
| 812 key, |
800 base::Bind(&ServiceWorkerStorage::DidGetUserDataForAllRegistrations, | 813 base::Bind(&ServiceWorkerStorage::DidGetUserDataForAllRegistrations, |
801 weak_factory_.GetWeakPtr(), callback))); | 814 weak_factory_.GetWeakPtr(), |
| 815 callback))); |
802 } | 816 } |
803 | 817 |
804 void ServiceWorkerStorage::DeleteAndStartOver(const StatusCallback& callback) { | 818 void ServiceWorkerStorage::DeleteAndStartOver(const StatusCallback& callback) { |
805 Disable(); | 819 Disable(); |
806 | 820 |
807 // Delete the database on the database thread. | 821 // Delete the database on the database thread. |
808 PostTaskAndReplyWithResult( | 822 PostTaskAndReplyWithResult( |
809 database_task_manager_->GetTaskRunner(), | 823 database_task_manager_->GetTaskRunner(), |
810 FROM_HERE, | 824 FROM_HERE, |
811 base::Bind(&ServiceWorkerDatabase::DestroyDatabase, | 825 base::Bind(&ServiceWorkerDatabase::DestroyDatabase, |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
945 case UNINITIALIZED: | 959 case UNINITIALIZED: |
946 pending_tasks_.push_back(callback); | 960 pending_tasks_.push_back(callback); |
947 // Fall-through. | 961 // Fall-through. |
948 } | 962 } |
949 | 963 |
950 state_ = INITIALIZING; | 964 state_ = INITIALIZING; |
951 database_task_manager_->GetTaskRunner()->PostTask( | 965 database_task_manager_->GetTaskRunner()->PostTask( |
952 FROM_HERE, | 966 FROM_HERE, |
953 base::Bind(&ReadInitialDataFromDB, | 967 base::Bind(&ReadInitialDataFromDB, |
954 database_.get(), | 968 database_.get(), |
955 base::MessageLoopProxy::current(), | 969 base::ThreadTaskRunnerHandle::Get(), |
956 base::Bind(&ServiceWorkerStorage::DidReadInitialData, | 970 base::Bind(&ServiceWorkerStorage::DidReadInitialData, |
957 weak_factory_.GetWeakPtr()))); | 971 weak_factory_.GetWeakPtr()))); |
958 return false; | 972 return false; |
959 } | 973 } |
960 | 974 |
961 void ServiceWorkerStorage::DidReadInitialData( | 975 void ServiceWorkerStorage::DidReadInitialData( |
962 InitialData* data, | 976 InitialData* data, |
963 ServiceWorkerDatabase::Status status) { | 977 ServiceWorkerDatabase::Status status) { |
964 DCHECK(data); | 978 DCHECK(data); |
965 DCHECK_EQ(INITIALIZING, state_); | 979 DCHECK_EQ(INITIALIZING, state_); |
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1436 ContinuePurgingResources(); | 1450 ContinuePurgingResources(); |
1437 } | 1451 } |
1438 | 1452 |
1439 void ServiceWorkerStorage::DeleteStaleResources() { | 1453 void ServiceWorkerStorage::DeleteStaleResources() { |
1440 DCHECK(!has_checked_for_stale_resources_); | 1454 DCHECK(!has_checked_for_stale_resources_); |
1441 has_checked_for_stale_resources_ = true; | 1455 has_checked_for_stale_resources_ = true; |
1442 database_task_manager_->GetTaskRunner()->PostTask( | 1456 database_task_manager_->GetTaskRunner()->PostTask( |
1443 FROM_HERE, | 1457 FROM_HERE, |
1444 base::Bind(&ServiceWorkerStorage::CollectStaleResourcesFromDB, | 1458 base::Bind(&ServiceWorkerStorage::CollectStaleResourcesFromDB, |
1445 database_.get(), | 1459 database_.get(), |
1446 base::MessageLoopProxy::current(), | 1460 base::ThreadTaskRunnerHandle::Get(), |
1447 base::Bind(&ServiceWorkerStorage::DidCollectStaleResources, | 1461 base::Bind(&ServiceWorkerStorage::DidCollectStaleResources, |
1448 weak_factory_.GetWeakPtr()))); | 1462 weak_factory_.GetWeakPtr()))); |
1449 } | 1463 } |
1450 | 1464 |
1451 void ServiceWorkerStorage::DidCollectStaleResources( | 1465 void ServiceWorkerStorage::DidCollectStaleResources( |
1452 const std::vector<int64>& stale_resource_ids, | 1466 const std::vector<int64>& stale_resource_ids, |
1453 ServiceWorkerDatabase::Status status) { | 1467 ServiceWorkerDatabase::Status status) { |
1454 if (status != ServiceWorkerDatabase::STATUS_OK) { | 1468 if (status != ServiceWorkerDatabase::STATUS_OK) { |
1455 DCHECK_NE(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, status); | 1469 DCHECK_NE(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, status); |
1456 ScheduleDeleteAndStartOver(); | 1470 ScheduleDeleteAndStartOver(); |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1793 callback.Run(SERVICE_WORKER_ERROR_FAILED); | 1807 callback.Run(SERVICE_WORKER_ERROR_FAILED); |
1794 return; | 1808 return; |
1795 } | 1809 } |
1796 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; | 1810 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; |
1797 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( | 1811 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( |
1798 ServiceWorkerMetrics::DELETE_OK); | 1812 ServiceWorkerMetrics::DELETE_OK); |
1799 callback.Run(SERVICE_WORKER_OK); | 1813 callback.Run(SERVICE_WORKER_OK); |
1800 } | 1814 } |
1801 | 1815 |
1802 } // namespace content | 1816 } // namespace content |
OLD | NEW |