Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Side by Side Diff: content/browser/service_worker/service_worker_database.cc

Issue 2867693004: Snapshot of all changes to get jumbo in blink and content.
Patch Set: Exclude certain files from jumbo because of a Windows problem Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
11 #include "base/location.h" 11 #include "base/location.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/metrics/histogram_macros.h" 13 #include "base/metrics/histogram_macros.h"
14 #include "base/stl_util.h" 14 #include "base/stl_util.h"
15 #include "base/strings/string_number_conversions.h" 15 #include "base/strings/string_number_conversions.h"
16 #include "base/strings/string_split.h" 16 #include "base/strings/string_split.h"
17 #include "base/strings/string_util.h" 17 #include "base/strings/string_util.h"
18 #include "base/strings/stringprintf.h" 18 #include "base/strings/stringprintf.h"
19 #include "content/browser/service_worker/service_worker_database.pb.h" 19 #include "content/browser/service_worker/service_worker_database.pb.h"
20 #include "content/browser/service_worker/service_worker_metrics.h" 20 #include "content/browser/service_worker/service_worker_metrics.h"
21 #include "content/common/service_worker/service_worker_utils.h" 21 #include "content/common/service_worker/service_worker_utils.h"
22 #include "third_party/leveldatabase/env_chromium.h" 22 #include "third_party/leveldatabase/env_chromium.h"
23 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h" 23 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
24 #include "third_party/leveldatabase/src/include/leveldb/db.h" 24 #include "third_party/leveldatabase/src/include/leveldb/db.h"
25 #include "third_party/leveldatabase/src/include/leveldb/env.h" 25 #include "third_party/leveldatabase/src/include/leveldb/env.h"
26 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" 26 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
27 // third_party/webrtc/base/thread_checker.h leaks the define
28 // EXCLUSIVE_LOCKS_REQUIRED and more which collide with the same define in
29 // third_party/leveldatabase/src/port/thread_annotations.
30 #undef EXCLUSIVE_LOCKS_REQUIRED
31 #undef SHARED_LOCKS_REQUIRED
32 #undef LOCKS_EXCLUDED
33 #undef LOCK_RETURNED
34 #undef LOCKABLE
35 #undef SCOPED_LOCKABLE
36 #undef EXCLUSIVE_LOCK_FUNCTION
37 #undef SHARED_LOCK_FUNCTION
38 #undef EXCLUSIVE_TRYLOCK_FUNCTION
39 #undef SHARED_TRYLOCK_FUNCTION
40 #undef UNLOCK_FUNCTION
41 #undef NO_THREAD_SAFETY_ANALYSIS
27 #include "url/origin.h" 42 #include "url/origin.h"
28 43
29 // LevelDB database schema 44 // LevelDB database schema
30 // ======================= 45 // =======================
31 // 46 //
32 // NOTE 47 // NOTE
33 // - int64_t value is serialized as a string by base::Int64ToString(). 48 // - int64_t value is serialized as a string by base::Int64ToString().
34 // - GURL value is serialized as a string by GURL::spec(). 49 // - GURL value is serialized as a string by GURL::spec().
35 // 50 //
36 // Version 1 (in sorted order) 51 // Version 1 (in sorted order)
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 const char kNextResIdKey[] = "INITDATA_NEXT_RESOURCE_ID"; 115 const char kNextResIdKey[] = "INITDATA_NEXT_RESOURCE_ID";
101 const char kNextVerIdKey[] = "INITDATA_NEXT_VERSION_ID"; 116 const char kNextVerIdKey[] = "INITDATA_NEXT_VERSION_ID";
102 const char kUniqueOriginKey[] = "INITDATA_UNIQUE_ORIGIN:"; 117 const char kUniqueOriginKey[] = "INITDATA_UNIQUE_ORIGIN:";
103 const char kForeignFetchOriginKey[] = "INITDATA_FOREIGN_FETCH_ORIGIN:"; 118 const char kForeignFetchOriginKey[] = "INITDATA_FOREIGN_FETCH_ORIGIN:";
104 119
105 const char kRegKeyPrefix[] = "REG:"; 120 const char kRegKeyPrefix[] = "REG:";
106 const char kRegUserDataKeyPrefix[] = "REG_USER_DATA:"; 121 const char kRegUserDataKeyPrefix[] = "REG_USER_DATA:";
107 const char kRegHasUserDataKeyPrefix[] = "REG_HAS_USER_DATA:"; 122 const char kRegHasUserDataKeyPrefix[] = "REG_HAS_USER_DATA:";
108 const char kRegIdToOriginKeyPrefix[] = "REGID_TO_ORIGIN:"; 123 const char kRegIdToOriginKeyPrefix[] = "REGID_TO_ORIGIN:";
109 const char kResKeyPrefix[] = "RES:"; 124 const char kResKeyPrefix[] = "RES:";
110 const char kKeySeparator = '\x00'; 125 const char kSWKeySeparator = '\x00';
111 126
112 const char kUncommittedResIdKeyPrefix[] = "URES:"; 127 const char kUncommittedResIdKeyPrefix[] = "URES:";
113 const char kPurgeableResIdKeyPrefix[] = "PRES:"; 128 const char kPurgeableResIdKeyPrefix[] = "PRES:";
114 129
115 const int64_t kCurrentSchemaVersion = 2; 130 const int64_t kSWCurrentSchemaVersion = 2;
116 131
117 class ServiceWorkerEnv : public leveldb_env::ChromiumEnv { 132 class ServiceWorkerEnv : public leveldb_env::ChromiumEnv {
118 public: 133 public:
119 ServiceWorkerEnv() : ChromiumEnv("LevelDBEnv.ServiceWorker") {} 134 ServiceWorkerEnv() : ChromiumEnv("LevelDBEnv.ServiceWorker") {}
120 }; 135 };
121 136
122 base::LazyInstance<ServiceWorkerEnv>::Leaky g_service_worker_env = 137 base::LazyInstance<ServiceWorkerEnv>::Leaky g_service_worker_env =
123 LAZY_INSTANCE_INITIALIZER; 138 LAZY_INSTANCE_INITIALIZER;
124 139
125 bool RemovePrefix(const std::string& str, 140 bool RemovePrefix(const std::string& str,
126 const std::string& prefix, 141 const std::string& prefix,
127 std::string* out) { 142 std::string* out) {
128 if (!base::StartsWith(str, prefix, base::CompareCase::SENSITIVE)) 143 if (!base::StartsWith(str, prefix, base::CompareCase::SENSITIVE))
129 return false; 144 return false;
130 if (out) 145 if (out)
131 *out = str.substr(prefix.size()); 146 *out = str.substr(prefix.size());
132 return true; 147 return true;
133 } 148 }
134 149
135 std::string CreateRegistrationKeyPrefix(const GURL& origin) { 150 std::string CreateRegistrationKeyPrefix(const GURL& origin) {
136 return base::StringPrintf("%s%s%c", kRegKeyPrefix, 151 return base::StringPrintf("%s%s%c", kRegKeyPrefix,
137 origin.GetOrigin().spec().c_str(), kKeySeparator); 152 origin.GetOrigin().spec().c_str(), kSWKeySeparator);
138 } 153 }
139 154
140 std::string CreateRegistrationKey(int64_t registration_id, const GURL& origin) { 155 std::string CreateRegistrationKey(int64_t registration_id, const GURL& origin) {
141 return CreateRegistrationKeyPrefix(origin) 156 return CreateRegistrationKeyPrefix(origin)
142 .append(base::Int64ToString(registration_id)); 157 .append(base::Int64ToString(registration_id));
143 } 158 }
144 159
145 std::string CreateResourceRecordKeyPrefix(int64_t version_id) { 160 std::string CreateResourceRecordKeyPrefix(int64_t version_id) {
146 return base::StringPrintf("%s%s%c", 161 return base::StringPrintf("%s%s%c",
147 kResKeyPrefix, 162 kResKeyPrefix,
148 base::Int64ToString(version_id).c_str(), 163 base::Int64ToString(version_id).c_str(),
149 kKeySeparator); 164 kSWKeySeparator);
150 } 165 }
151 166
152 std::string CreateResourceRecordKey(int64_t version_id, int64_t resource_id) { 167 std::string CreateResourceRecordKey(int64_t version_id, int64_t resource_id) {
153 return CreateResourceRecordKeyPrefix(version_id).append( 168 return CreateResourceRecordKeyPrefix(version_id).append(
154 base::Int64ToString(resource_id)); 169 base::Int64ToString(resource_id));
155 } 170 }
156 171
157 std::string CreateUniqueOriginKey(const GURL& origin) { 172 std::string CreateUniqueOriginKey(const GURL& origin) {
158 return base::StringPrintf("%s%s", kUniqueOriginKey, 173 return base::StringPrintf("%s%s", kUniqueOriginKey,
159 origin.GetOrigin().spec().c_str()); 174 origin.GetOrigin().spec().c_str());
160 } 175 }
161 176
162 std::string CreateForeignFetchOriginKey(const GURL& origin) { 177 std::string CreateForeignFetchOriginKey(const GURL& origin) {
163 return base::StringPrintf("%s%s", kForeignFetchOriginKey, 178 return base::StringPrintf("%s%s", kForeignFetchOriginKey,
164 origin.GetOrigin().spec().c_str()); 179 origin.GetOrigin().spec().c_str());
165 } 180 }
166 181
167 std::string CreateResourceIdKey(const char* key_prefix, int64_t resource_id) { 182 std::string CreateResourceIdKey(const char* key_prefix, int64_t resource_id) {
168 return base::StringPrintf( 183 return base::StringPrintf(
169 "%s%s", key_prefix, base::Int64ToString(resource_id).c_str()); 184 "%s%s", key_prefix, base::Int64ToString(resource_id).c_str());
170 } 185 }
171 186
172 std::string CreateUserDataKeyPrefix(int64_t registration_id) { 187 std::string CreateUserDataKeyPrefix(int64_t registration_id) {
173 return base::StringPrintf("%s%s%c", 188 return base::StringPrintf("%s%s%c",
174 kRegUserDataKeyPrefix, 189 kRegUserDataKeyPrefix,
175 base::Int64ToString(registration_id).c_str(), 190 base::Int64ToString(registration_id).c_str(),
176 kKeySeparator); 191 kSWKeySeparator);
177 } 192 }
178 193
179 std::string CreateUserDataKey(int64_t registration_id, 194 std::string CreateUserDataKey(int64_t registration_id,
180 const std::string& user_data_name) { 195 const std::string& user_data_name) {
181 return CreateUserDataKeyPrefix(registration_id).append(user_data_name); 196 return CreateUserDataKeyPrefix(registration_id).append(user_data_name);
182 } 197 }
183 198
184 std::string CreateHasUserDataKeyPrefix(const std::string& user_data_name) { 199 std::string CreateHasUserDataKeyPrefix(const std::string& user_data_name) {
185 return base::StringPrintf("%s%s%c", kRegHasUserDataKeyPrefix, 200 return base::StringPrintf("%s%s%c", kRegHasUserDataKeyPrefix,
186 user_data_name.c_str(), kKeySeparator); 201 user_data_name.c_str(), kSWKeySeparator);
187 } 202 }
188 203
189 std::string CreateHasUserDataKey(int64_t registration_id, 204 std::string CreateHasUserDataKey(int64_t registration_id,
190 const std::string& user_data_name) { 205 const std::string& user_data_name) {
191 return CreateHasUserDataKeyPrefix(user_data_name) 206 return CreateHasUserDataKeyPrefix(user_data_name)
192 .append(base::Int64ToString(registration_id)); 207 .append(base::Int64ToString(registration_id));
193 } 208 }
194 209
195 std::string CreateRegistrationIdToOriginKey(int64_t registration_id) { 210 std::string CreateRegistrationIdToOriginKey(int64_t registration_id) {
196 return base::StringPrintf("%s%s", kRegIdToOriginKeyPrefix, 211 return base::StringPrintf("%s%s", kRegIdToOriginKeyPrefix,
(...skipping 21 matching lines...) Expand all
218 ServiceWorkerDatabase::Status ParseId(const std::string& serialized, 233 ServiceWorkerDatabase::Status ParseId(const std::string& serialized,
219 int64_t* out) { 234 int64_t* out) {
220 DCHECK(out); 235 DCHECK(out);
221 int64_t id; 236 int64_t id;
222 if (!base::StringToInt64(serialized, &id) || id < 0) 237 if (!base::StringToInt64(serialized, &id) || id < 0)
223 return ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED; 238 return ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED;
224 *out = id; 239 *out = id;
225 return ServiceWorkerDatabase::STATUS_OK; 240 return ServiceWorkerDatabase::STATUS_OK;
226 } 241 }
227 242
228 ServiceWorkerDatabase::Status LevelDBStatusToStatus( 243 ServiceWorkerDatabase::Status LevelDBStatusToSWStatus(
229 const leveldb::Status& status) { 244 const leveldb::Status& status) {
230 if (status.ok()) 245 if (status.ok())
231 return ServiceWorkerDatabase::STATUS_OK; 246 return ServiceWorkerDatabase::STATUS_OK;
232 else if (status.IsNotFound()) 247 else if (status.IsNotFound())
233 return ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND; 248 return ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND;
234 else if (status.IsIOError()) 249 else if (status.IsIOError())
235 return ServiceWorkerDatabase::STATUS_ERROR_IO_ERROR; 250 return ServiceWorkerDatabase::STATUS_ERROR_IO_ERROR;
236 else if (status.IsCorruption()) 251 else if (status.IsCorruption())
237 return ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED; 252 return ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED;
238 else if (status.IsNotSupportedError()) 253 else if (status.IsNotSupportedError())
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 Status status = LazyOpen(false); 360 Status status = LazyOpen(false);
346 if (IsNewOrNonexistentDatabase(status)) 361 if (IsNewOrNonexistentDatabase(status))
347 return STATUS_OK; 362 return STATUS_OK;
348 if (status != STATUS_OK) 363 if (status != STATUS_OK)
349 return status; 364 return status;
350 365
351 { 366 {
352 std::unique_ptr<leveldb::Iterator> itr( 367 std::unique_ptr<leveldb::Iterator> itr(
353 db_->NewIterator(leveldb::ReadOptions())); 368 db_->NewIterator(leveldb::ReadOptions()));
354 for (itr->Seek(kUniqueOriginKey); itr->Valid(); itr->Next()) { 369 for (itr->Seek(kUniqueOriginKey); itr->Valid(); itr->Next()) {
355 status = LevelDBStatusToStatus(itr->status()); 370 status = LevelDBStatusToSWStatus(itr->status());
356 if (status != STATUS_OK) { 371 if (status != STATUS_OK) {
357 origins->clear(); 372 origins->clear();
358 break; 373 break;
359 } 374 }
360 375
361 std::string origin_str; 376 std::string origin_str;
362 if (!RemovePrefix(itr->key().ToString(), kUniqueOriginKey, &origin_str)) 377 if (!RemovePrefix(itr->key().ToString(), kUniqueOriginKey, &origin_str))
363 break; 378 break;
364 379
365 GURL origin(origin_str); 380 GURL origin(origin_str);
(...skipping 20 matching lines...) Expand all
386 Status status = LazyOpen(false); 401 Status status = LazyOpen(false);
387 if (IsNewOrNonexistentDatabase(status)) 402 if (IsNewOrNonexistentDatabase(status))
388 return STATUS_OK; 403 return STATUS_OK;
389 if (status != STATUS_OK) 404 if (status != STATUS_OK)
390 return status; 405 return status;
391 406
392 { 407 {
393 std::unique_ptr<leveldb::Iterator> itr( 408 std::unique_ptr<leveldb::Iterator> itr(
394 db_->NewIterator(leveldb::ReadOptions())); 409 db_->NewIterator(leveldb::ReadOptions()));
395 for (itr->Seek(kForeignFetchOriginKey); itr->Valid(); itr->Next()) { 410 for (itr->Seek(kForeignFetchOriginKey); itr->Valid(); itr->Next()) {
396 status = LevelDBStatusToStatus(itr->status()); 411 status = LevelDBStatusToSWStatus(itr->status());
397 if (status != STATUS_OK) { 412 if (status != STATUS_OK) {
398 origins->clear(); 413 origins->clear();
399 break; 414 break;
400 } 415 }
401 416
402 std::string origin_str; 417 std::string origin_str;
403 if (!RemovePrefix(itr->key().ToString(), kForeignFetchOriginKey, 418 if (!RemovePrefix(itr->key().ToString(), kForeignFetchOriginKey,
404 &origin_str)) 419 &origin_str))
405 break; 420 break;
406 421
(...skipping 23 matching lines...) Expand all
430 if (IsNewOrNonexistentDatabase(status)) 445 if (IsNewOrNonexistentDatabase(status))
431 return STATUS_OK; 446 return STATUS_OK;
432 if (status != STATUS_OK) 447 if (status != STATUS_OK)
433 return status; 448 return status;
434 449
435 std::string prefix = CreateRegistrationKeyPrefix(origin); 450 std::string prefix = CreateRegistrationKeyPrefix(origin);
436 { 451 {
437 std::unique_ptr<leveldb::Iterator> itr( 452 std::unique_ptr<leveldb::Iterator> itr(
438 db_->NewIterator(leveldb::ReadOptions())); 453 db_->NewIterator(leveldb::ReadOptions()));
439 for (itr->Seek(prefix); itr->Valid(); itr->Next()) { 454 for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
440 status = LevelDBStatusToStatus(itr->status()); 455 status = LevelDBStatusToSWStatus(itr->status());
441 if (status != STATUS_OK) { 456 if (status != STATUS_OK) {
442 registrations->clear(); 457 registrations->clear();
443 if (opt_resources_list) 458 if (opt_resources_list)
444 opt_resources_list->clear(); 459 opt_resources_list->clear();
445 break; 460 break;
446 } 461 }
447 462
448 if (!RemovePrefix(itr->key().ToString(), prefix, NULL)) 463 if (!RemovePrefix(itr->key().ToString(), prefix, NULL))
449 break; 464 break;
450 465
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 Status status = LazyOpen(false); 498 Status status = LazyOpen(false);
484 if (IsNewOrNonexistentDatabase(status)) 499 if (IsNewOrNonexistentDatabase(status))
485 return STATUS_OK; 500 return STATUS_OK;
486 if (status != STATUS_OK) 501 if (status != STATUS_OK)
487 return status; 502 return status;
488 503
489 { 504 {
490 std::unique_ptr<leveldb::Iterator> itr( 505 std::unique_ptr<leveldb::Iterator> itr(
491 db_->NewIterator(leveldb::ReadOptions())); 506 db_->NewIterator(leveldb::ReadOptions()));
492 for (itr->Seek(kRegKeyPrefix); itr->Valid(); itr->Next()) { 507 for (itr->Seek(kRegKeyPrefix); itr->Valid(); itr->Next()) {
493 status = LevelDBStatusToStatus(itr->status()); 508 status = LevelDBStatusToSWStatus(itr->status());
494 if (status != STATUS_OK) { 509 if (status != STATUS_OK) {
495 registrations->clear(); 510 registrations->clear();
496 break; 511 break;
497 } 512 }
498 513
499 if (!RemovePrefix(itr->key().ToString(), kRegKeyPrefix, NULL)) 514 if (!RemovePrefix(itr->key().ToString(), kRegKeyPrefix, NULL))
500 break; 515 break;
501 516
502 RegistrationData registration; 517 RegistrationData registration;
503 status = ParseRegistrationData(itr->value().ToString(), &registration); 518 status = ParseRegistrationData(itr->value().ToString(), &registration);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 DCHECK(sequence_checker_.CalledOnValidSequence()); 566 DCHECK(sequence_checker_.CalledOnValidSequence());
552 DCHECK(origin); 567 DCHECK(origin);
553 568
554 Status status = LazyOpen(true); 569 Status status = LazyOpen(true);
555 if (IsNewOrNonexistentDatabase(status)) 570 if (IsNewOrNonexistentDatabase(status))
556 return STATUS_ERROR_NOT_FOUND; 571 return STATUS_ERROR_NOT_FOUND;
557 if (status != STATUS_OK) 572 if (status != STATUS_OK)
558 return status; 573 return status;
559 574
560 std::string value; 575 std::string value;
561 status = LevelDBStatusToStatus( 576 status = LevelDBStatusToSWStatus(
562 db_->Get(leveldb::ReadOptions(), 577 db_->Get(leveldb::ReadOptions(),
563 CreateRegistrationIdToOriginKey(registration_id), &value)); 578 CreateRegistrationIdToOriginKey(registration_id), &value));
564 if (status != STATUS_OK) { 579 if (status != STATUS_OK) {
565 HandleReadResult(FROM_HERE, 580 HandleReadResult(FROM_HERE,
566 status == STATUS_ERROR_NOT_FOUND ? STATUS_OK : status); 581 status == STATUS_ERROR_NOT_FOUND ? STATUS_OK : status);
567 return status; 582 return status;
568 } 583 }
569 584
570 GURL parsed(value); 585 GURL parsed(value);
571 if (!parsed.is_valid()) { 586 if (!parsed.is_valid()) {
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 Status status = LazyOpen(false); 876 Status status = LazyOpen(false);
862 if (IsNewOrNonexistentDatabase(status)) 877 if (IsNewOrNonexistentDatabase(status))
863 return STATUS_ERROR_NOT_FOUND; 878 return STATUS_ERROR_NOT_FOUND;
864 if (status != STATUS_OK) 879 if (status != STATUS_OK)
865 return status; 880 return status;
866 881
867 user_data_values->resize(user_data_names.size()); 882 user_data_values->resize(user_data_names.size());
868 for (size_t i = 0; i < user_data_names.size(); i++) { 883 for (size_t i = 0; i < user_data_names.size(); i++) {
869 const std::string key = 884 const std::string key =
870 CreateUserDataKey(registration_id, user_data_names[i]); 885 CreateUserDataKey(registration_id, user_data_names[i]);
871 status = LevelDBStatusToStatus( 886 status = LevelDBStatusToSWStatus(
872 db_->Get(leveldb::ReadOptions(), key, &(*user_data_values)[i])); 887 db_->Get(leveldb::ReadOptions(), key, &(*user_data_values)[i]));
873 if (status != STATUS_OK) { 888 if (status != STATUS_OK) {
874 user_data_values->clear(); 889 user_data_values->clear();
875 break; 890 break;
876 } 891 }
877 } 892 }
878 HandleReadResult(FROM_HERE, 893 HandleReadResult(FROM_HERE,
879 status == STATUS_ERROR_NOT_FOUND ? STATUS_OK : status); 894 status == STATUS_ERROR_NOT_FOUND ? STATUS_OK : status);
880 return status; 895 return status;
881 } 896 }
(...skipping 11 matching lines...) Expand all
893 return STATUS_ERROR_NOT_FOUND; 908 return STATUS_ERROR_NOT_FOUND;
894 if (status != STATUS_OK) 909 if (status != STATUS_OK)
895 return status; 910 return status;
896 911
897 std::string prefix = 912 std::string prefix =
898 CreateUserDataKey(registration_id, user_data_name_prefix); 913 CreateUserDataKey(registration_id, user_data_name_prefix);
899 { 914 {
900 std::unique_ptr<leveldb::Iterator> itr( 915 std::unique_ptr<leveldb::Iterator> itr(
901 db_->NewIterator(leveldb::ReadOptions())); 916 db_->NewIterator(leveldb::ReadOptions()));
902 for (itr->Seek(prefix); itr->Valid(); itr->Next()) { 917 for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
903 status = LevelDBStatusToStatus(itr->status()); 918 status = LevelDBStatusToSWStatus(itr->status());
904 if (status != STATUS_OK) { 919 if (status != STATUS_OK) {
905 user_data_values->clear(); 920 user_data_values->clear();
906 break; 921 break;
907 } 922 }
908 923
909 if (!itr->key().starts_with(prefix)) 924 if (!itr->key().starts_with(prefix))
910 break; 925 break;
911 926
912 std::string user_data_value; 927 std::string user_data_value;
913 status = LevelDBStatusToStatus( 928 status = LevelDBStatusToSWStatus(
914 db_->Get(leveldb::ReadOptions(), itr->key(), &user_data_value)); 929 db_->Get(leveldb::ReadOptions(), itr->key(), &user_data_value));
915 if (status != STATUS_OK) { 930 if (status != STATUS_OK) {
916 user_data_values->clear(); 931 user_data_values->clear();
917 break; 932 break;
918 } 933 }
919 934
920 user_data_values->push_back(user_data_value); 935 user_data_values->push_back(user_data_value);
921 } 936 }
922 } 937 }
923 938
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
997 1012
998 leveldb::WriteBatch batch; 1013 leveldb::WriteBatch batch;
999 1014
1000 for (const std::string& user_data_name_prefix : user_data_name_prefixes) { 1015 for (const std::string& user_data_name_prefix : user_data_name_prefixes) {
1001 // Example |key_prefix| is "REG_USER_DATA:123456\x00abc". 1016 // Example |key_prefix| is "REG_USER_DATA:123456\x00abc".
1002 std::string key_prefix = 1017 std::string key_prefix =
1003 CreateUserDataKey(registration_id, user_data_name_prefix); 1018 CreateUserDataKey(registration_id, user_data_name_prefix);
1004 std::unique_ptr<leveldb::Iterator> itr( 1019 std::unique_ptr<leveldb::Iterator> itr(
1005 db_->NewIterator(leveldb::ReadOptions())); 1020 db_->NewIterator(leveldb::ReadOptions()));
1006 for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) { 1021 for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) {
1007 status = LevelDBStatusToStatus(itr->status()); 1022 status = LevelDBStatusToSWStatus(itr->status());
1008 if (status != STATUS_OK) 1023 if (status != STATUS_OK)
1009 return status; 1024 return status;
1010 1025
1011 // Example |itr->key()| is "REG_USER_DATA:123456\x00abcdef". 1026 // Example |itr->key()| is "REG_USER_DATA:123456\x00abcdef".
1012 if (!itr->key().starts_with(key_prefix)) { 1027 if (!itr->key().starts_with(key_prefix)) {
1013 // |itr| reached the end of the range of keys prefixed by |key_prefix|. 1028 // |itr| reached the end of the range of keys prefixed by |key_prefix|.
1014 break; 1029 break;
1015 } 1030 }
1016 1031
1017 // Example |user_data_name| is "abcdef". 1032 // Example |user_data_name| is "abcdef".
(...skipping 23 matching lines...) Expand all
1041 if (IsNewOrNonexistentDatabase(status)) 1056 if (IsNewOrNonexistentDatabase(status))
1042 return STATUS_OK; 1057 return STATUS_OK;
1043 if (status != STATUS_OK) 1058 if (status != STATUS_OK)
1044 return status; 1059 return status;
1045 1060
1046 std::string key_prefix = CreateHasUserDataKeyPrefix(user_data_name); 1061 std::string key_prefix = CreateHasUserDataKeyPrefix(user_data_name);
1047 { 1062 {
1048 std::unique_ptr<leveldb::Iterator> itr( 1063 std::unique_ptr<leveldb::Iterator> itr(
1049 db_->NewIterator(leveldb::ReadOptions())); 1064 db_->NewIterator(leveldb::ReadOptions()));
1050 for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) { 1065 for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) {
1051 status = LevelDBStatusToStatus(itr->status()); 1066 status = LevelDBStatusToSWStatus(itr->status());
1052 if (status != STATUS_OK) { 1067 if (status != STATUS_OK) {
1053 user_data->clear(); 1068 user_data->clear();
1054 break; 1069 break;
1055 } 1070 }
1056 1071
1057 std::string registration_id_string; 1072 std::string registration_id_string;
1058 if (!RemovePrefix(itr->key().ToString(), key_prefix, 1073 if (!RemovePrefix(itr->key().ToString(), key_prefix,
1059 &registration_id_string)) { 1074 &registration_id_string)) {
1060 break; 1075 break;
1061 } 1076 }
1062 1077
1063 int64_t registration_id; 1078 int64_t registration_id;
1064 status = ParseId(registration_id_string, &registration_id); 1079 status = ParseId(registration_id_string, &registration_id);
1065 if (status != STATUS_OK) { 1080 if (status != STATUS_OK) {
1066 user_data->clear(); 1081 user_data->clear();
1067 break; 1082 break;
1068 } 1083 }
1069 1084
1070 std::string value; 1085 std::string value;
1071 status = LevelDBStatusToStatus( 1086 status = LevelDBStatusToSWStatus(
1072 db_->Get(leveldb::ReadOptions(), 1087 db_->Get(leveldb::ReadOptions(),
1073 CreateUserDataKey(registration_id, user_data_name), &value)); 1088 CreateUserDataKey(registration_id, user_data_name), &value));
1074 if (status != STATUS_OK) { 1089 if (status != STATUS_OK) {
1075 user_data->clear(); 1090 user_data->clear();
1076 break; 1091 break;
1077 } 1092 }
1078 user_data->push_back(std::make_pair(registration_id, value)); 1093 user_data->push_back(std::make_pair(registration_id, value));
1079 } 1094 }
1080 } 1095 }
1081 1096
(...skipping 12 matching lines...) Expand all
1094 if (IsNewOrNonexistentDatabase(status)) 1109 if (IsNewOrNonexistentDatabase(status))
1095 return STATUS_OK; 1110 return STATUS_OK;
1096 if (status != STATUS_OK) 1111 if (status != STATUS_OK)
1097 return status; 1112 return status;
1098 1113
1099 std::string key_prefix = kRegHasUserDataKeyPrefix + user_data_name_prefix; 1114 std::string key_prefix = kRegHasUserDataKeyPrefix + user_data_name_prefix;
1100 { 1115 {
1101 std::unique_ptr<leveldb::Iterator> itr( 1116 std::unique_ptr<leveldb::Iterator> itr(
1102 db_->NewIterator(leveldb::ReadOptions())); 1117 db_->NewIterator(leveldb::ReadOptions()));
1103 for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) { 1118 for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) {
1104 status = LevelDBStatusToStatus(itr->status()); 1119 status = LevelDBStatusToSWStatus(itr->status());
1105 if (status != STATUS_OK) { 1120 if (status != STATUS_OK) {
1106 user_data->clear(); 1121 user_data->clear();
1107 break; 1122 break;
1108 } 1123 }
1109 1124
1110 if (!itr->key().starts_with(key_prefix)) 1125 if (!itr->key().starts_with(key_prefix))
1111 break; 1126 break;
1112 1127
1113 std::string user_data_name_with_id; 1128 std::string user_data_name_with_id;
1114 if (!RemovePrefix(itr->key().ToString(), kRegHasUserDataKeyPrefix, 1129 if (!RemovePrefix(itr->key().ToString(), kRegHasUserDataKeyPrefix,
1115 &user_data_name_with_id)) { 1130 &user_data_name_with_id)) {
1116 break; 1131 break;
1117 } 1132 }
1118 1133
1119 std::vector<std::string> parts = base::SplitString( 1134 std::vector<std::string> parts = base::SplitString(
1120 user_data_name_with_id, base::StringPrintf("%c", kKeySeparator), 1135 user_data_name_with_id, base::StringPrintf("%c", kSWKeySeparator),
1121 base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); 1136 base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
1122 if (parts.size() != 2) { 1137 if (parts.size() != 2) {
1123 status = STATUS_ERROR_CORRUPTED; 1138 status = STATUS_ERROR_CORRUPTED;
1124 user_data->clear(); 1139 user_data->clear();
1125 break; 1140 break;
1126 } 1141 }
1127 1142
1128 int64_t registration_id; 1143 int64_t registration_id;
1129 status = ParseId(parts[1], &registration_id); 1144 status = ParseId(parts[1], &registration_id);
1130 if (status != STATUS_OK) { 1145 if (status != STATUS_OK) {
1131 user_data->clear(); 1146 user_data->clear();
1132 break; 1147 break;
1133 } 1148 }
1134 1149
1135 std::string value; 1150 std::string value;
1136 status = LevelDBStatusToStatus( 1151 status = LevelDBStatusToSWStatus(
1137 db_->Get(leveldb::ReadOptions(), 1152 db_->Get(leveldb::ReadOptions(),
1138 CreateUserDataKey(registration_id, parts[0]), &value)); 1153 CreateUserDataKey(registration_id, parts[0]), &value));
1139 if (status != STATUS_OK) { 1154 if (status != STATUS_OK) {
1140 user_data->clear(); 1155 user_data->clear();
1141 break; 1156 break;
1142 } 1157 }
1143 user_data->push_back(std::make_pair(registration_id, value)); 1158 user_data->push_back(std::make_pair(registration_id, value));
1144 } 1159 }
1145 } 1160 }
1146 1161
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1277 1292
1278 leveldb_env::Options options; 1293 leveldb_env::Options options;
1279 options.create_if_missing = create_if_missing; 1294 options.create_if_missing = create_if_missing;
1280 if (IsDatabaseInMemory()) { 1295 if (IsDatabaseInMemory()) {
1281 env_.reset(leveldb::NewMemEnv(leveldb::Env::Default())); 1296 env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
1282 options.env = env_.get(); 1297 options.env = env_.get();
1283 } else { 1298 } else {
1284 options.env = g_service_worker_env.Pointer(); 1299 options.env = g_service_worker_env.Pointer();
1285 } 1300 }
1286 1301
1287 Status status = LevelDBStatusToStatus( 1302 Status status = LevelDBStatusToSWStatus(
1288 leveldb_env::OpenDB(options, path_.AsUTF8Unsafe(), &db_)); 1303 leveldb_env::OpenDB(options, path_.AsUTF8Unsafe(), &db_));
1289 HandleOpenResult(FROM_HERE, status); 1304 HandleOpenResult(FROM_HERE, status);
1290 if (status != STATUS_OK) { 1305 if (status != STATUS_OK) {
1291 // TODO(nhiroki): Should we retry to open the database? 1306 // TODO(nhiroki): Should we retry to open the database?
1292 return status; 1307 return status;
1293 } 1308 }
1294 1309
1295 int64_t db_version; 1310 int64_t db_version;
1296 status = ReadDatabaseVersion(&db_version); 1311 status = ReadDatabaseVersion(&db_version);
1297 if (status != STATUS_OK) 1312 if (status != STATUS_OK)
1298 return status; 1313 return status;
1299 1314
1300 switch (db_version) { 1315 switch (db_version) {
1301 case 0: 1316 case 0:
1302 // This database is new. It will be initialized when something is written. 1317 // This database is new. It will be initialized when something is written.
1303 DCHECK_EQ(UNINITIALIZED, state_); 1318 DCHECK_EQ(UNINITIALIZED, state_);
1304 return STATUS_OK; 1319 return STATUS_OK;
1305 case 1: 1320 case 1:
1306 // This database has an obsolete schema version. ServiceWorkerStorage 1321 // This database has an obsolete schema version. ServiceWorkerStorage
1307 // should recreate it. 1322 // should recreate it.
1308 status = STATUS_ERROR_FAILED; 1323 status = STATUS_ERROR_FAILED;
1309 Disable(FROM_HERE, status); 1324 Disable(FROM_HERE, status);
1310 return status; 1325 return status;
1311 case 2: 1326 case 2:
1312 DCHECK_EQ(db_version, kCurrentSchemaVersion); 1327 DCHECK_EQ(db_version, kSWCurrentSchemaVersion);
1313 state_ = INITIALIZED; 1328 state_ = INITIALIZED;
1314 return STATUS_OK; 1329 return STATUS_OK;
1315 default: 1330 default:
1316 // Other cases should be handled in ReadDatabaseVersion. 1331 // Other cases should be handled in ReadDatabaseVersion.
1317 NOTREACHED(); 1332 NOTREACHED();
1318 return STATUS_ERROR_CORRUPTED; 1333 return STATUS_ERROR_CORRUPTED;
1319 } 1334 }
1320 } 1335 }
1321 1336
1322 bool ServiceWorkerDatabase::IsNewOrNonexistentDatabase( 1337 bool ServiceWorkerDatabase::IsNewOrNonexistentDatabase(
1323 ServiceWorkerDatabase::Status status) { 1338 ServiceWorkerDatabase::Status status) {
1324 if (status == STATUS_ERROR_NOT_FOUND) 1339 if (status == STATUS_ERROR_NOT_FOUND)
1325 return true; 1340 return true;
1326 if (status == STATUS_OK && state_ == UNINITIALIZED) 1341 if (status == STATUS_OK && state_ == UNINITIALIZED)
1327 return true; 1342 return true;
1328 return false; 1343 return false;
1329 } 1344 }
1330 1345
1331 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadNextAvailableId( 1346 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadNextAvailableId(
1332 const char* id_key, 1347 const char* id_key,
1333 int64_t* next_avail_id) { 1348 int64_t* next_avail_id) {
1334 DCHECK(id_key); 1349 DCHECK(id_key);
1335 DCHECK(next_avail_id); 1350 DCHECK(next_avail_id);
1336 1351
1337 std::string value; 1352 std::string value;
1338 Status status = LevelDBStatusToStatus( 1353 Status status = LevelDBStatusToSWStatus(
1339 db_->Get(leveldb::ReadOptions(), id_key, &value)); 1354 db_->Get(leveldb::ReadOptions(), id_key, &value));
1340 if (status == STATUS_ERROR_NOT_FOUND) { 1355 if (status == STATUS_ERROR_NOT_FOUND) {
1341 // Nobody has gotten the next resource id for |id_key|. 1356 // Nobody has gotten the next resource id for |id_key|.
1342 *next_avail_id = 0; 1357 *next_avail_id = 0;
1343 HandleReadResult(FROM_HERE, STATUS_OK); 1358 HandleReadResult(FROM_HERE, STATUS_OK);
1344 return STATUS_OK; 1359 return STATUS_OK;
1345 } else if (status != STATUS_OK) { 1360 } else if (status != STATUS_OK) {
1346 HandleReadResult(FROM_HERE, status); 1361 HandleReadResult(FROM_HERE, status);
1347 return status; 1362 return status;
1348 } 1363 }
1349 1364
1350 status = ParseId(value, next_avail_id); 1365 status = ParseId(value, next_avail_id);
1351 HandleReadResult(FROM_HERE, status); 1366 HandleReadResult(FROM_HERE, status);
1352 return status; 1367 return status;
1353 } 1368 }
1354 1369
1355 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadRegistrationData( 1370 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadRegistrationData(
1356 int64_t registration_id, 1371 int64_t registration_id,
1357 const GURL& origin, 1372 const GURL& origin,
1358 RegistrationData* registration) { 1373 RegistrationData* registration) {
1359 DCHECK(registration); 1374 DCHECK(registration);
1360 1375
1361 const std::string key = CreateRegistrationKey(registration_id, origin); 1376 const std::string key = CreateRegistrationKey(registration_id, origin);
1362 std::string value; 1377 std::string value;
1363 Status status = LevelDBStatusToStatus( 1378 Status status = LevelDBStatusToSWStatus(
1364 db_->Get(leveldb::ReadOptions(), key, &value)); 1379 db_->Get(leveldb::ReadOptions(), key, &value));
1365 if (status != STATUS_OK) { 1380 if (status != STATUS_OK) {
1366 HandleReadResult( 1381 HandleReadResult(
1367 FROM_HERE, 1382 FROM_HERE,
1368 status == STATUS_ERROR_NOT_FOUND ? STATUS_OK : status); 1383 status == STATUS_ERROR_NOT_FOUND ? STATUS_OK : status);
1369 return status; 1384 return status;
1370 } 1385 }
1371 1386
1372 status = ParseRegistrationData(value, registration); 1387 status = ParseRegistrationData(value, registration);
1373 HandleReadResult(FROM_HERE, status); 1388 HandleReadResult(FROM_HERE, status);
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1515 DCHECK(resources->empty()); 1530 DCHECK(resources->empty());
1516 1531
1517 Status status = STATUS_OK; 1532 Status status = STATUS_OK;
1518 bool has_main_resource = false; 1533 bool has_main_resource = false;
1519 const std::string prefix = 1534 const std::string prefix =
1520 CreateResourceRecordKeyPrefix(registration.version_id); 1535 CreateResourceRecordKeyPrefix(registration.version_id);
1521 { 1536 {
1522 std::unique_ptr<leveldb::Iterator> itr( 1537 std::unique_ptr<leveldb::Iterator> itr(
1523 db_->NewIterator(leveldb::ReadOptions())); 1538 db_->NewIterator(leveldb::ReadOptions()));
1524 for (itr->Seek(prefix); itr->Valid(); itr->Next()) { 1539 for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
1525 Status status = LevelDBStatusToStatus(itr->status()); 1540 Status status = LevelDBStatusToSWStatus(itr->status());
1526 if (status != STATUS_OK) { 1541 if (status != STATUS_OK) {
1527 resources->clear(); 1542 resources->clear();
1528 break; 1543 break;
1529 } 1544 }
1530 1545
1531 if (!RemovePrefix(itr->key().ToString(), prefix, NULL)) 1546 if (!RemovePrefix(itr->key().ToString(), prefix, NULL))
1532 break; 1547 break;
1533 1548
1534 ResourceRecord resource; 1549 ResourceRecord resource;
1535 status = ParseResourceRecord(itr->value().ToString(), &resource); 1550 status = ParseResourceRecord(itr->value().ToString(), &resource);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1616 leveldb::WriteBatch* batch) { 1631 leveldb::WriteBatch* batch) {
1617 DCHECK(batch); 1632 DCHECK(batch);
1618 1633
1619 Status status = STATUS_OK; 1634 Status status = STATUS_OK;
1620 const std::string prefix = CreateResourceRecordKeyPrefix(version_id); 1635 const std::string prefix = CreateResourceRecordKeyPrefix(version_id);
1621 1636
1622 { 1637 {
1623 std::unique_ptr<leveldb::Iterator> itr( 1638 std::unique_ptr<leveldb::Iterator> itr(
1624 db_->NewIterator(leveldb::ReadOptions())); 1639 db_->NewIterator(leveldb::ReadOptions()));
1625 for (itr->Seek(prefix); itr->Valid(); itr->Next()) { 1640 for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
1626 status = LevelDBStatusToStatus(itr->status()); 1641 status = LevelDBStatusToSWStatus(itr->status());
1627 if (status != STATUS_OK) 1642 if (status != STATUS_OK)
1628 break; 1643 break;
1629 1644
1630 const std::string key = itr->key().ToString(); 1645 const std::string key = itr->key().ToString();
1631 std::string unprefixed; 1646 std::string unprefixed;
1632 if (!RemovePrefix(key, prefix, &unprefixed)) 1647 if (!RemovePrefix(key, prefix, &unprefixed))
1633 break; 1648 break;
1634 1649
1635 int64_t resource_id; 1650 int64_t resource_id;
1636 status = ParseId(unprefixed, &resource_id); 1651 status = ParseId(unprefixed, &resource_id);
(...skipping 24 matching lines...) Expand all
1661 Status status = LazyOpen(false); 1676 Status status = LazyOpen(false);
1662 if (IsNewOrNonexistentDatabase(status)) 1677 if (IsNewOrNonexistentDatabase(status))
1663 return STATUS_OK; 1678 return STATUS_OK;
1664 if (status != STATUS_OK) 1679 if (status != STATUS_OK)
1665 return status; 1680 return status;
1666 1681
1667 { 1682 {
1668 std::unique_ptr<leveldb::Iterator> itr( 1683 std::unique_ptr<leveldb::Iterator> itr(
1669 db_->NewIterator(leveldb::ReadOptions())); 1684 db_->NewIterator(leveldb::ReadOptions()));
1670 for (itr->Seek(id_key_prefix); itr->Valid(); itr->Next()) { 1685 for (itr->Seek(id_key_prefix); itr->Valid(); itr->Next()) {
1671 status = LevelDBStatusToStatus(itr->status()); 1686 status = LevelDBStatusToSWStatus(itr->status());
1672 if (status != STATUS_OK) { 1687 if (status != STATUS_OK) {
1673 ids->clear(); 1688 ids->clear();
1674 break; 1689 break;
1675 } 1690 }
1676 1691
1677 std::string unprefixed; 1692 std::string unprefixed;
1678 if (!RemovePrefix(itr->key().ToString(), id_key_prefix, &unprefixed)) 1693 if (!RemovePrefix(itr->key().ToString(), id_key_prefix, &unprefixed))
1679 break; 1694 break;
1680 1695
1681 int64_t resource_id; 1696 int64_t resource_id;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1740 int64_t registration_id, 1755 int64_t registration_id,
1741 leveldb::WriteBatch* batch) { 1756 leveldb::WriteBatch* batch) {
1742 DCHECK(batch); 1757 DCHECK(batch);
1743 Status status = STATUS_OK; 1758 Status status = STATUS_OK;
1744 const std::string prefix = CreateUserDataKeyPrefix(registration_id); 1759 const std::string prefix = CreateUserDataKeyPrefix(registration_id);
1745 1760
1746 { 1761 {
1747 std::unique_ptr<leveldb::Iterator> itr( 1762 std::unique_ptr<leveldb::Iterator> itr(
1748 db_->NewIterator(leveldb::ReadOptions())); 1763 db_->NewIterator(leveldb::ReadOptions()));
1749 for (itr->Seek(prefix); itr->Valid(); itr->Next()) { 1764 for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
1750 status = LevelDBStatusToStatus(itr->status()); 1765 status = LevelDBStatusToSWStatus(itr->status());
1751 if (status != STATUS_OK) 1766 if (status != STATUS_OK)
1752 break; 1767 break;
1753 1768
1754 const std::string key = itr->key().ToString(); 1769 const std::string key = itr->key().ToString();
1755 std::string user_data_name; 1770 std::string user_data_name;
1756 if (!RemovePrefix(key, prefix, &user_data_name)) 1771 if (!RemovePrefix(key, prefix, &user_data_name))
1757 break; 1772 break;
1758 batch->Delete(key); 1773 batch->Delete(key);
1759 batch->Delete(CreateHasUserDataKey(registration_id, user_data_name)); 1774 batch->Delete(CreateHasUserDataKey(registration_id, user_data_name));
1760 } 1775 }
1761 } 1776 }
1762 1777
1763 HandleReadResult(FROM_HERE, status); 1778 HandleReadResult(FROM_HERE, status);
1764 return status; 1779 return status;
1765 } 1780 }
1766 1781
1767 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadDatabaseVersion( 1782 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadDatabaseVersion(
1768 int64_t* db_version) { 1783 int64_t* db_version) {
1769 std::string value; 1784 std::string value;
1770 Status status = LevelDBStatusToStatus( 1785 Status status = LevelDBStatusToSWStatus(
1771 db_->Get(leveldb::ReadOptions(), kDatabaseVersionKey, &value)); 1786 db_->Get(leveldb::ReadOptions(), kDatabaseVersionKey, &value));
1772 if (status == STATUS_ERROR_NOT_FOUND) { 1787 if (status == STATUS_ERROR_NOT_FOUND) {
1773 // The database hasn't been initialized yet. 1788 // The database hasn't been initialized yet.
1774 *db_version = 0; 1789 *db_version = 0;
1775 HandleReadResult(FROM_HERE, STATUS_OK); 1790 HandleReadResult(FROM_HERE, STATUS_OK);
1776 return STATUS_OK; 1791 return STATUS_OK;
1777 } 1792 }
1778 1793
1779 if (status != STATUS_OK) { 1794 if (status != STATUS_OK) {
1780 HandleReadResult(FROM_HERE, status); 1795 HandleReadResult(FROM_HERE, status);
1781 return status; 1796 return status;
1782 } 1797 }
1783 1798
1784 const int kFirstValidVersion = 1; 1799 const int kFirstValidVersion = 1;
1785 if (!base::StringToInt64(value, db_version) || 1800 if (!base::StringToInt64(value, db_version) ||
1786 *db_version < kFirstValidVersion || kCurrentSchemaVersion < *db_version) { 1801 *db_version < kFirstValidVersion || kSWCurrentSchemaVersion < *db_version) {
1787 status = STATUS_ERROR_CORRUPTED; 1802 status = STATUS_ERROR_CORRUPTED;
1788 HandleReadResult(FROM_HERE, status); 1803 HandleReadResult(FROM_HERE, status);
1789 return status; 1804 return status;
1790 } 1805 }
1791 1806
1792 status = STATUS_OK; 1807 status = STATUS_OK;
1793 HandleReadResult(FROM_HERE, status); 1808 HandleReadResult(FROM_HERE, status);
1794 return status; 1809 return status;
1795 } 1810 }
1796 1811
1797 ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteBatch( 1812 ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteBatch(
1798 leveldb::WriteBatch* batch) { 1813 leveldb::WriteBatch* batch) {
1799 DCHECK(batch); 1814 DCHECK(batch);
1800 DCHECK_NE(DISABLED, state_); 1815 DCHECK_NE(DISABLED, state_);
1801 1816
1802 if (state_ == UNINITIALIZED) { 1817 if (state_ == UNINITIALIZED) {
1803 // Write database default values. 1818 // Write database default values.
1804 batch->Put(kDatabaseVersionKey, base::Int64ToString(kCurrentSchemaVersion)); 1819 batch->Put(kDatabaseVersionKey, base::Int64ToString(kSWCurrentSchemaVersion) );
1805 state_ = INITIALIZED; 1820 state_ = INITIALIZED;
1806 } 1821 }
1807 1822
1808 Status status = LevelDBStatusToStatus( 1823 Status status = LevelDBStatusToSWStatus(
1809 db_->Write(leveldb::WriteOptions(), batch)); 1824 db_->Write(leveldb::WriteOptions(), batch));
1810 HandleWriteResult(FROM_HERE, status); 1825 HandleWriteResult(FROM_HERE, status);
1811 return status; 1826 return status;
1812 } 1827 }
1813 1828
1814 void ServiceWorkerDatabase::BumpNextRegistrationIdIfNeeded( 1829 void ServiceWorkerDatabase::BumpNextRegistrationIdIfNeeded(
1815 int64_t used_id, 1830 int64_t used_id,
1816 leveldb::WriteBatch* batch) { 1831 leveldb::WriteBatch* batch) {
1817 DCHECK(batch); 1832 DCHECK(batch);
1818 if (next_avail_registration_id_ <= used_id) { 1833 if (next_avail_registration_id_ <= used_id) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1879 if (status != STATUS_OK) 1894 if (status != STATUS_OK)
1880 Disable(from_here, status); 1895 Disable(from_here, status);
1881 ServiceWorkerMetrics::CountWriteDatabaseResult(status); 1896 ServiceWorkerMetrics::CountWriteDatabaseResult(status);
1882 } 1897 }
1883 1898
1884 bool ServiceWorkerDatabase::IsDatabaseInMemory() const { 1899 bool ServiceWorkerDatabase::IsDatabaseInMemory() const {
1885 return path_.empty(); 1900 return path_.empty();
1886 } 1901 }
1887 1902
1888 } // namespace content 1903 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698