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 | |
928 ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteUserData( | 884 ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteUserData( |
929 int64_t registration_id, | 885 int64_t registration_id, |
930 const GURL& origin, | 886 const GURL& origin, |
931 const std::vector<std::pair<std::string, std::string>>& name_value_pairs) { | 887 const std::vector<std::pair<std::string, std::string>>& name_value_pairs) { |
932 DCHECK(sequence_checker_.CalledOnValidSequence()); | 888 DCHECK(sequence_checker_.CalledOnValidSequence()); |
933 DCHECK_NE(kInvalidServiceWorkerRegistrationId, registration_id); | 889 DCHECK_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
934 DCHECK(!name_value_pairs.empty()); | 890 DCHECK(!name_value_pairs.empty()); |
935 | 891 |
936 Status status = LazyOpen(false); | 892 Status status = LazyOpen(false); |
937 if (IsNewOrNonexistentDatabase(status)) | 893 if (IsNewOrNonexistentDatabase(status)) |
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1764 if (status != STATUS_OK) | 1720 if (status != STATUS_OK) |
1765 Disable(from_here, status); | 1721 Disable(from_here, status); |
1766 ServiceWorkerMetrics::CountWriteDatabaseResult(status); | 1722 ServiceWorkerMetrics::CountWriteDatabaseResult(status); |
1767 } | 1723 } |
1768 | 1724 |
1769 bool ServiceWorkerDatabase::IsDatabaseInMemory() const { | 1725 bool ServiceWorkerDatabase::IsDatabaseInMemory() const { |
1770 return path_.empty(); | 1726 return path_.empty(); |
1771 } | 1727 } |
1772 | 1728 |
1773 } // namespace content | 1729 } // namespace content |
OLD | NEW |