| 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 |