OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_database.h" | 5 #include "content/browser/service_worker/service_worker_database.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 863 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
874 if (status != STATUS_OK) { | 874 if (status != STATUS_OK) { |
875 user_data_values->clear(); | 875 user_data_values->clear(); |
876 break; | 876 break; |
877 } | 877 } |
878 } | 878 } |
879 HandleReadResult(FROM_HERE, | 879 HandleReadResult(FROM_HERE, |
880 status == STATUS_ERROR_NOT_FOUND ? STATUS_OK : status); | 880 status == STATUS_ERROR_NOT_FOUND ? STATUS_OK : status); |
881 return status; | 881 return status; |
882 } | 882 } |
883 | 883 |
| 884 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadUserDataByKeyPrefix( |
| 885 int64_t registration_id, |
| 886 const std::string key_prefix, |
| 887 std::vector<std::string>* user_data_values) { |
| 888 DCHECK(sequence_checker_.CalledOnValidSequence()); |
| 889 DCHECK_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
| 890 DCHECK(user_data_values); |
| 891 |
| 892 Status status = LazyOpen(false); |
| 893 if (IsNewOrNonexistentDatabase(status)) |
| 894 return STATUS_ERROR_NOT_FOUND; |
| 895 if (status != STATUS_OK) |
| 896 return status; |
| 897 |
| 898 std::string prefix = CreateUserDataKey(registration_id, key_prefix); |
| 899 { |
| 900 std::unique_ptr<leveldb::Iterator> itr( |
| 901 db_->NewIterator(leveldb::ReadOptions())); |
| 902 for (itr->Seek(prefix); itr->Valid(); itr->Next()) { |
| 903 status = LevelDBStatusToStatus(itr->status()); |
| 904 if (status != STATUS_OK) { |
| 905 user_data_values->clear(); |
| 906 break; |
| 907 } |
| 908 |
| 909 if (!itr->key().starts_with(prefix)) |
| 910 break; |
| 911 |
| 912 std::string user_data_value; |
| 913 status = LevelDBStatusToStatus( |
| 914 db_->Get(leveldb::ReadOptions(), itr->key(), &user_data_value)); |
| 915 if (status != STATUS_OK) { |
| 916 user_data_values->clear(); |
| 917 break; |
| 918 } |
| 919 |
| 920 user_data_values->push_back(user_data_value); |
| 921 } |
| 922 } |
| 923 |
| 924 HandleReadResult(FROM_HERE, status); |
| 925 return status; |
| 926 } |
| 927 |
884 ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteUserData( | 928 ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteUserData( |
885 int64_t registration_id, | 929 int64_t registration_id, |
886 const GURL& origin, | 930 const GURL& origin, |
887 const std::vector<std::pair<std::string, std::string>>& name_value_pairs) { | 931 const std::vector<std::pair<std::string, std::string>>& name_value_pairs) { |
888 DCHECK(sequence_checker_.CalledOnValidSequence()); | 932 DCHECK(sequence_checker_.CalledOnValidSequence()); |
889 DCHECK_NE(kInvalidServiceWorkerRegistrationId, registration_id); | 933 DCHECK_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
890 DCHECK(!name_value_pairs.empty()); | 934 DCHECK(!name_value_pairs.empty()); |
891 | 935 |
892 Status status = LazyOpen(false); | 936 Status status = LazyOpen(false); |
893 if (IsNewOrNonexistentDatabase(status)) | 937 if (IsNewOrNonexistentDatabase(status)) |
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1720 if (status != STATUS_OK) | 1764 if (status != STATUS_OK) |
1721 Disable(from_here, status); | 1765 Disable(from_here, status); |
1722 ServiceWorkerMetrics::CountWriteDatabaseResult(status); | 1766 ServiceWorkerMetrics::CountWriteDatabaseResult(status); |
1723 } | 1767 } |
1724 | 1768 |
1725 bool ServiceWorkerDatabase::IsDatabaseInMemory() const { | 1769 bool ServiceWorkerDatabase::IsDatabaseInMemory() const { |
1726 return path_.empty(); | 1770 return path_.empty(); |
1727 } | 1771 } |
1728 | 1772 |
1729 } // namespace content | 1773 } // namespace content |
OLD | NEW |