| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
| 10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
| (...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 base::Unretained(database_.get()), resource_ids), | 620 base::Unretained(database_.get()), resource_ids), |
| 621 base::Bind(&ServiceWorkerStorage::DidPurgeUncommittedResourceIds, | 621 base::Bind(&ServiceWorkerStorage::DidPurgeUncommittedResourceIds, |
| 622 weak_factory_.GetWeakPtr(), resource_ids)); | 622 weak_factory_.GetWeakPtr(), resource_ids)); |
| 623 } | 623 } |
| 624 | 624 |
| 625 void ServiceWorkerStorage::StoreUserData( | 625 void ServiceWorkerStorage::StoreUserData( |
| 626 int64_t registration_id, | 626 int64_t registration_id, |
| 627 const GURL& origin, | 627 const GURL& origin, |
| 628 const std::vector<std::pair<std::string, std::string>>& key_value_pairs, | 628 const std::vector<std::pair<std::string, std::string>>& key_value_pairs, |
| 629 const StatusCallback& callback) { | 629 const StatusCallback& callback) { |
| 630 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; | 630 if (!LazyInitialize(base::Bind(&ServiceWorkerStorage::StoreUserData, |
| 631 if (IsDisabled()) { | 631 weak_factory_.GetWeakPtr(), registration_id, |
| 632 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_ABORT)); | 632 origin, key_value_pairs, callback))) { |
| 633 if (state_ != INITIALIZING) |
| 634 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_ABORT)); |
| 633 return; | 635 return; |
| 634 } | 636 } |
| 637 DCHECK_EQ(INITIALIZED, state_); |
| 635 | 638 |
| 636 if (registration_id == kInvalidServiceWorkerRegistrationId || | 639 if (registration_id == kInvalidServiceWorkerRegistrationId || |
| 637 key_value_pairs.empty()) { | 640 key_value_pairs.empty()) { |
| 638 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); | 641 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); |
| 639 return; | 642 return; |
| 640 } | 643 } |
| 641 for (const auto& kv : key_value_pairs) { | 644 for (const auto& kv : key_value_pairs) { |
| 642 if (kv.first.empty()) { | 645 if (kv.first.empty()) { |
| 643 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); | 646 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); |
| 644 return; | 647 return; |
| 645 } | 648 } |
| 646 } | 649 } |
| 647 | 650 |
| 648 PostTaskAndReplyWithResult( | 651 PostTaskAndReplyWithResult( |
| 649 database_task_manager_->GetTaskRunner(), FROM_HERE, | 652 database_task_manager_->GetTaskRunner(), FROM_HERE, |
| 650 base::Bind(&ServiceWorkerDatabase::WriteUserData, | 653 base::Bind(&ServiceWorkerDatabase::WriteUserData, |
| 651 base::Unretained(database_.get()), registration_id, origin, | 654 base::Unretained(database_.get()), registration_id, origin, |
| 652 key_value_pairs), | 655 key_value_pairs), |
| 653 base::Bind(&ServiceWorkerStorage::DidStoreUserData, | 656 base::Bind(&ServiceWorkerStorage::DidStoreUserData, |
| 654 weak_factory_.GetWeakPtr(), callback)); | 657 weak_factory_.GetWeakPtr(), callback)); |
| 655 } | 658 } |
| 656 | 659 |
| 657 void ServiceWorkerStorage::GetUserData(int64_t registration_id, | 660 void ServiceWorkerStorage::GetUserData(int64_t registration_id, |
| 658 const std::vector<std::string>& keys, | 661 const std::vector<std::string>& keys, |
| 659 const GetUserDataCallback& callback) { | 662 const GetUserDataCallback& callback) { |
| 660 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; | 663 if (!LazyInitialize(base::Bind(&ServiceWorkerStorage::GetUserData, |
| 661 if (IsDisabled()) { | 664 weak_factory_.GetWeakPtr(), registration_id, |
| 662 RunSoon(FROM_HERE, base::Bind(callback, std::vector<std::string>(), | 665 keys, callback))) { |
| 663 SERVICE_WORKER_ERROR_ABORT)); | 666 if (state_ != INITIALIZING) { |
| 667 RunSoon(FROM_HERE, base::Bind(callback, std::vector<std::string>(), |
| 668 SERVICE_WORKER_ERROR_ABORT)); |
| 669 } |
| 664 return; | 670 return; |
| 665 } | 671 } |
| 672 DCHECK_EQ(INITIALIZED, state_); |
| 666 | 673 |
| 667 if (registration_id == kInvalidServiceWorkerRegistrationId || keys.empty()) { | 674 if (registration_id == kInvalidServiceWorkerRegistrationId || keys.empty()) { |
| 668 RunSoon(FROM_HERE, base::Bind(callback, std::vector<std::string>(), | 675 RunSoon(FROM_HERE, base::Bind(callback, std::vector<std::string>(), |
| 669 SERVICE_WORKER_ERROR_FAILED)); | 676 SERVICE_WORKER_ERROR_FAILED)); |
| 670 return; | 677 return; |
| 671 } | 678 } |
| 672 for (const std::string& key : keys) { | 679 for (const std::string& key : keys) { |
| 673 if (key.empty()) { | 680 if (key.empty()) { |
| 674 RunSoon(FROM_HERE, base::Bind(callback, std::vector<std::string>(), | 681 RunSoon(FROM_HERE, base::Bind(callback, std::vector<std::string>(), |
| 675 SERVICE_WORKER_ERROR_FAILED)); | 682 SERVICE_WORKER_ERROR_FAILED)); |
| 676 return; | 683 return; |
| 677 } | 684 } |
| 678 } | 685 } |
| 679 | 686 |
| 680 database_task_manager_->GetTaskRunner()->PostTask( | 687 database_task_manager_->GetTaskRunner()->PostTask( |
| 681 FROM_HERE, | 688 FROM_HERE, |
| 682 base::Bind(&ServiceWorkerStorage::GetUserDataInDB, database_.get(), | 689 base::Bind(&ServiceWorkerStorage::GetUserDataInDB, database_.get(), |
| 683 base::ThreadTaskRunnerHandle::Get(), registration_id, keys, | 690 base::ThreadTaskRunnerHandle::Get(), registration_id, keys, |
| 684 base::Bind(&ServiceWorkerStorage::DidGetUserData, | 691 base::Bind(&ServiceWorkerStorage::DidGetUserData, |
| 685 weak_factory_.GetWeakPtr(), callback))); | 692 weak_factory_.GetWeakPtr(), callback))); |
| 686 } | 693 } |
| 687 | 694 |
| 688 void ServiceWorkerStorage::ClearUserData(int64_t registration_id, | 695 void ServiceWorkerStorage::ClearUserData(int64_t registration_id, |
| 689 const std::vector<std::string>& keys, | 696 const std::vector<std::string>& keys, |
| 690 const StatusCallback& callback) { | 697 const StatusCallback& callback) { |
| 691 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; | 698 if (!LazyInitialize(base::Bind(&ServiceWorkerStorage::ClearUserData, |
| 699 weak_factory_.GetWeakPtr(), registration_id, |
| 700 keys, callback))) { |
| 701 if (state_ != INITIALIZING) |
| 702 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_ABORT)); |
| 703 return; |
| 704 } |
| 705 DCHECK_EQ(INITIALIZED, state_); |
| 706 |
| 692 if (IsDisabled()) { | 707 if (IsDisabled()) { |
| 693 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_ABORT)); | 708 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_ABORT)); |
| 694 return; | 709 return; |
| 695 } | 710 } |
| 696 | 711 |
| 697 if (registration_id == kInvalidServiceWorkerRegistrationId || keys.empty()) { | 712 if (registration_id == kInvalidServiceWorkerRegistrationId || keys.empty()) { |
| 698 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); | 713 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); |
| 699 return; | 714 return; |
| 700 } | 715 } |
| 701 for (const std::string& key : keys) { | 716 for (const std::string& key : keys) { |
| (...skipping 1131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1833 callback.Run(SERVICE_WORKER_ERROR_FAILED); | 1848 callback.Run(SERVICE_WORKER_ERROR_FAILED); |
| 1834 return; | 1849 return; |
| 1835 } | 1850 } |
| 1836 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; | 1851 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; |
| 1837 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( | 1852 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( |
| 1838 ServiceWorkerMetrics::DELETE_OK); | 1853 ServiceWorkerMetrics::DELETE_OK); |
| 1839 callback.Run(SERVICE_WORKER_OK); | 1854 callback.Run(SERVICE_WORKER_OK); |
| 1840 } | 1855 } |
| 1841 | 1856 |
| 1842 } // namespace content | 1857 } // namespace content |
| OLD | NEW |