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

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: Rebased again Created 3 years, 5 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 10 matching lines...) Expand all
892 if (IsNewOrNonexistentDatabase(status)) 907 if (IsNewOrNonexistentDatabase(status))
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 = CreateUserDataKey(registration_id, key_prefix); 912 std::string prefix = CreateUserDataKey(registration_id, key_prefix);
898 { 913 {
899 std::unique_ptr<leveldb::Iterator> itr( 914 std::unique_ptr<leveldb::Iterator> itr(
900 db_->NewIterator(leveldb::ReadOptions())); 915 db_->NewIterator(leveldb::ReadOptions()));
901 for (itr->Seek(prefix); itr->Valid(); itr->Next()) { 916 for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
902 status = LevelDBStatusToStatus(itr->status()); 917 status = LevelDBStatusToSWStatus(itr->status());
903 if (status != STATUS_OK) { 918 if (status != STATUS_OK) {
904 user_data_values->clear(); 919 user_data_values->clear();
905 break; 920 break;
906 } 921 }
907 922
908 if (!itr->key().starts_with(prefix)) 923 if (!itr->key().starts_with(prefix))
909 break; 924 break;
910 925
911 std::string user_data_value; 926 std::string user_data_value;
912 status = LevelDBStatusToStatus( 927 status = LevelDBStatusToSWStatus(
913 db_->Get(leveldb::ReadOptions(), itr->key(), &user_data_value)); 928 db_->Get(leveldb::ReadOptions(), itr->key(), &user_data_value));
914 if (status != STATUS_OK) { 929 if (status != STATUS_OK) {
915 user_data_values->clear(); 930 user_data_values->clear();
916 break; 931 break;
917 } 932 }
918 933
919 user_data_values->push_back(user_data_value); 934 user_data_values->push_back(user_data_value);
920 } 935 }
921 } 936 }
922 937
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 if (IsNewOrNonexistentDatabase(status)) 1001 if (IsNewOrNonexistentDatabase(status))
987 return STATUS_OK; 1002 return STATUS_OK;
988 if (status != STATUS_OK) 1003 if (status != STATUS_OK)
989 return status; 1004 return status;
990 1005
991 std::string key_prefix = CreateHasUserDataKeyPrefix(user_data_name); 1006 std::string key_prefix = CreateHasUserDataKeyPrefix(user_data_name);
992 { 1007 {
993 std::unique_ptr<leveldb::Iterator> itr( 1008 std::unique_ptr<leveldb::Iterator> itr(
994 db_->NewIterator(leveldb::ReadOptions())); 1009 db_->NewIterator(leveldb::ReadOptions()));
995 for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) { 1010 for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) {
996 status = LevelDBStatusToStatus(itr->status()); 1011 status = LevelDBStatusToSWStatus(itr->status());
997 if (status != STATUS_OK) { 1012 if (status != STATUS_OK) {
998 user_data->clear(); 1013 user_data->clear();
999 break; 1014 break;
1000 } 1015 }
1001 1016
1002 std::string registration_id_string; 1017 std::string registration_id_string;
1003 if (!RemovePrefix(itr->key().ToString(), key_prefix, 1018 if (!RemovePrefix(itr->key().ToString(), key_prefix,
1004 &registration_id_string)) { 1019 &registration_id_string)) {
1005 break; 1020 break;
1006 } 1021 }
1007 1022
1008 int64_t registration_id; 1023 int64_t registration_id;
1009 status = ParseId(registration_id_string, &registration_id); 1024 status = ParseId(registration_id_string, &registration_id);
1010 if (status != STATUS_OK) { 1025 if (status != STATUS_OK) {
1011 user_data->clear(); 1026 user_data->clear();
1012 break; 1027 break;
1013 } 1028 }
1014 1029
1015 std::string value; 1030 std::string value;
1016 status = LevelDBStatusToStatus( 1031 status = LevelDBStatusToSWStatus(
1017 db_->Get(leveldb::ReadOptions(), 1032 db_->Get(leveldb::ReadOptions(),
1018 CreateUserDataKey(registration_id, user_data_name), &value)); 1033 CreateUserDataKey(registration_id, user_data_name), &value));
1019 if (status != STATUS_OK) { 1034 if (status != STATUS_OK) {
1020 user_data->clear(); 1035 user_data->clear();
1021 break; 1036 break;
1022 } 1037 }
1023 user_data->push_back(std::make_pair(registration_id, value)); 1038 user_data->push_back(std::make_pair(registration_id, value));
1024 } 1039 }
1025 } 1040 }
1026 1041
(...skipping 12 matching lines...) Expand all
1039 if (IsNewOrNonexistentDatabase(status)) 1054 if (IsNewOrNonexistentDatabase(status))
1040 return STATUS_OK; 1055 return STATUS_OK;
1041 if (status != STATUS_OK) 1056 if (status != STATUS_OK)
1042 return status; 1057 return status;
1043 1058
1044 std::string key_prefix = kRegHasUserDataKeyPrefix + user_data_name_prefix; 1059 std::string key_prefix = kRegHasUserDataKeyPrefix + user_data_name_prefix;
1045 { 1060 {
1046 std::unique_ptr<leveldb::Iterator> itr( 1061 std::unique_ptr<leveldb::Iterator> itr(
1047 db_->NewIterator(leveldb::ReadOptions())); 1062 db_->NewIterator(leveldb::ReadOptions()));
1048 for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) { 1063 for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) {
1049 status = LevelDBStatusToStatus(itr->status()); 1064 status = LevelDBStatusToSWStatus(itr->status());
1050 if (status != STATUS_OK) { 1065 if (status != STATUS_OK) {
1051 user_data->clear(); 1066 user_data->clear();
1052 break; 1067 break;
1053 } 1068 }
1054 1069
1055 if (!itr->key().starts_with(key_prefix)) 1070 if (!itr->key().starts_with(key_prefix))
1056 break; 1071 break;
1057 1072
1058 std::string user_data_name_with_id; 1073 std::string user_data_name_with_id;
1059 if (!RemovePrefix(itr->key().ToString(), kRegHasUserDataKeyPrefix, 1074 if (!RemovePrefix(itr->key().ToString(), kRegHasUserDataKeyPrefix,
1060 &user_data_name_with_id)) { 1075 &user_data_name_with_id)) {
1061 break; 1076 break;
1062 } 1077 }
1063 1078
1064 std::vector<std::string> parts = base::SplitString( 1079 std::vector<std::string> parts = base::SplitString(
1065 user_data_name_with_id, base::StringPrintf("%c", kKeySeparator), 1080 user_data_name_with_id, base::StringPrintf("%c", kSWKeySeparator),
1066 base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); 1081 base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
1067 if (parts.size() != 2) { 1082 if (parts.size() != 2) {
1068 status = STATUS_ERROR_CORRUPTED; 1083 status = STATUS_ERROR_CORRUPTED;
1069 user_data->clear(); 1084 user_data->clear();
1070 break; 1085 break;
1071 } 1086 }
1072 1087
1073 int64_t registration_id; 1088 int64_t registration_id;
1074 status = ParseId(parts[1], &registration_id); 1089 status = ParseId(parts[1], &registration_id);
1075 if (status != STATUS_OK) { 1090 if (status != STATUS_OK) {
1076 user_data->clear(); 1091 user_data->clear();
1077 break; 1092 break;
1078 } 1093 }
1079 1094
1080 std::string value; 1095 std::string value;
1081 status = LevelDBStatusToStatus( 1096 status = LevelDBStatusToSWStatus(
1082 db_->Get(leveldb::ReadOptions(), 1097 db_->Get(leveldb::ReadOptions(),
1083 CreateUserDataKey(registration_id, parts[0]), &value)); 1098 CreateUserDataKey(registration_id, parts[0]), &value));
1084 if (status != STATUS_OK) { 1099 if (status != STATUS_OK) {
1085 user_data->clear(); 1100 user_data->clear();
1086 break; 1101 break;
1087 } 1102 }
1088 user_data->push_back(std::make_pair(registration_id, value)); 1103 user_data->push_back(std::make_pair(registration_id, value));
1089 } 1104 }
1090 } 1105 }
1091 1106
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
1224 options.create_if_missing = create_if_missing; 1239 options.create_if_missing = create_if_missing;
1225 options.reuse_logs = leveldb_env::kDefaultLogReuseOptionValue; 1240 options.reuse_logs = leveldb_env::kDefaultLogReuseOptionValue;
1226 if (IsDatabaseInMemory()) { 1241 if (IsDatabaseInMemory()) {
1227 env_.reset(leveldb::NewMemEnv(leveldb::Env::Default())); 1242 env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
1228 options.env = env_.get(); 1243 options.env = env_.get();
1229 } else { 1244 } else {
1230 options.env = g_service_worker_env.Pointer(); 1245 options.env = g_service_worker_env.Pointer();
1231 } 1246 }
1232 1247
1233 leveldb::DB* db = NULL; 1248 leveldb::DB* db = NULL;
1234 Status status = LevelDBStatusToStatus( 1249 Status status = LevelDBStatusToSWStatus(
1235 leveldb::DB::Open(options, path_.AsUTF8Unsafe(), &db)); 1250 leveldb::DB::Open(options, path_.AsUTF8Unsafe(), &db));
1236 HandleOpenResult(FROM_HERE, status); 1251 HandleOpenResult(FROM_HERE, status);
1237 if (status != STATUS_OK) { 1252 if (status != STATUS_OK) {
1238 DCHECK(!db); 1253 DCHECK(!db);
1239 // TODO(nhiroki): Should we retry to open the database? 1254 // TODO(nhiroki): Should we retry to open the database?
1240 return status; 1255 return status;
1241 } 1256 }
1242 db_.reset(db); 1257 db_.reset(db);
1243 1258
1244 int64_t db_version; 1259 int64_t db_version;
1245 status = ReadDatabaseVersion(&db_version); 1260 status = ReadDatabaseVersion(&db_version);
1246 if (status != STATUS_OK) 1261 if (status != STATUS_OK)
1247 return status; 1262 return status;
1248 1263
1249 switch (db_version) { 1264 switch (db_version) {
1250 case 0: 1265 case 0:
1251 // This database is new. It will be initialized when something is written. 1266 // This database is new. It will be initialized when something is written.
1252 DCHECK_EQ(UNINITIALIZED, state_); 1267 DCHECK_EQ(UNINITIALIZED, state_);
1253 return STATUS_OK; 1268 return STATUS_OK;
1254 case 1: 1269 case 1:
1255 // This database has an obsolete schema version. ServiceWorkerStorage 1270 // This database has an obsolete schema version. ServiceWorkerStorage
1256 // should recreate it. 1271 // should recreate it.
1257 status = STATUS_ERROR_FAILED; 1272 status = STATUS_ERROR_FAILED;
1258 Disable(FROM_HERE, status); 1273 Disable(FROM_HERE, status);
1259 return status; 1274 return status;
1260 case 2: 1275 case 2:
1261 DCHECK_EQ(db_version, kCurrentSchemaVersion); 1276 DCHECK_EQ(db_version, kSWCurrentSchemaVersion);
1262 state_ = INITIALIZED; 1277 state_ = INITIALIZED;
1263 return STATUS_OK; 1278 return STATUS_OK;
1264 default: 1279 default:
1265 // Other cases should be handled in ReadDatabaseVersion. 1280 // Other cases should be handled in ReadDatabaseVersion.
1266 NOTREACHED(); 1281 NOTREACHED();
1267 return STATUS_ERROR_CORRUPTED; 1282 return STATUS_ERROR_CORRUPTED;
1268 } 1283 }
1269 } 1284 }
1270 1285
1271 bool ServiceWorkerDatabase::IsNewOrNonexistentDatabase( 1286 bool ServiceWorkerDatabase::IsNewOrNonexistentDatabase(
1272 ServiceWorkerDatabase::Status status) { 1287 ServiceWorkerDatabase::Status status) {
1273 if (status == STATUS_ERROR_NOT_FOUND) 1288 if (status == STATUS_ERROR_NOT_FOUND)
1274 return true; 1289 return true;
1275 if (status == STATUS_OK && state_ == UNINITIALIZED) 1290 if (status == STATUS_OK && state_ == UNINITIALIZED)
1276 return true; 1291 return true;
1277 return false; 1292 return false;
1278 } 1293 }
1279 1294
1280 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadNextAvailableId( 1295 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadNextAvailableId(
1281 const char* id_key, 1296 const char* id_key,
1282 int64_t* next_avail_id) { 1297 int64_t* next_avail_id) {
1283 DCHECK(id_key); 1298 DCHECK(id_key);
1284 DCHECK(next_avail_id); 1299 DCHECK(next_avail_id);
1285 1300
1286 std::string value; 1301 std::string value;
1287 Status status = LevelDBStatusToStatus( 1302 Status status = LevelDBStatusToSWStatus(
1288 db_->Get(leveldb::ReadOptions(), id_key, &value)); 1303 db_->Get(leveldb::ReadOptions(), id_key, &value));
1289 if (status == STATUS_ERROR_NOT_FOUND) { 1304 if (status == STATUS_ERROR_NOT_FOUND) {
1290 // Nobody has gotten the next resource id for |id_key|. 1305 // Nobody has gotten the next resource id for |id_key|.
1291 *next_avail_id = 0; 1306 *next_avail_id = 0;
1292 HandleReadResult(FROM_HERE, STATUS_OK); 1307 HandleReadResult(FROM_HERE, STATUS_OK);
1293 return STATUS_OK; 1308 return STATUS_OK;
1294 } else if (status != STATUS_OK) { 1309 } else if (status != STATUS_OK) {
1295 HandleReadResult(FROM_HERE, status); 1310 HandleReadResult(FROM_HERE, status);
1296 return status; 1311 return status;
1297 } 1312 }
1298 1313
1299 status = ParseId(value, next_avail_id); 1314 status = ParseId(value, next_avail_id);
1300 HandleReadResult(FROM_HERE, status); 1315 HandleReadResult(FROM_HERE, status);
1301 return status; 1316 return status;
1302 } 1317 }
1303 1318
1304 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadRegistrationData( 1319 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadRegistrationData(
1305 int64_t registration_id, 1320 int64_t registration_id,
1306 const GURL& origin, 1321 const GURL& origin,
1307 RegistrationData* registration) { 1322 RegistrationData* registration) {
1308 DCHECK(registration); 1323 DCHECK(registration);
1309 1324
1310 const std::string key = CreateRegistrationKey(registration_id, origin); 1325 const std::string key = CreateRegistrationKey(registration_id, origin);
1311 std::string value; 1326 std::string value;
1312 Status status = LevelDBStatusToStatus( 1327 Status status = LevelDBStatusToSWStatus(
1313 db_->Get(leveldb::ReadOptions(), key, &value)); 1328 db_->Get(leveldb::ReadOptions(), key, &value));
1314 if (status != STATUS_OK) { 1329 if (status != STATUS_OK) {
1315 HandleReadResult( 1330 HandleReadResult(
1316 FROM_HERE, 1331 FROM_HERE,
1317 status == STATUS_ERROR_NOT_FOUND ? STATUS_OK : status); 1332 status == STATUS_ERROR_NOT_FOUND ? STATUS_OK : status);
1318 return status; 1333 return status;
1319 } 1334 }
1320 1335
1321 status = ParseRegistrationData(value, registration); 1336 status = ParseRegistrationData(value, registration);
1322 HandleReadResult(FROM_HERE, status); 1337 HandleReadResult(FROM_HERE, status);
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1464 DCHECK(resources->empty()); 1479 DCHECK(resources->empty());
1465 1480
1466 Status status = STATUS_OK; 1481 Status status = STATUS_OK;
1467 bool has_main_resource = false; 1482 bool has_main_resource = false;
1468 const std::string prefix = 1483 const std::string prefix =
1469 CreateResourceRecordKeyPrefix(registration.version_id); 1484 CreateResourceRecordKeyPrefix(registration.version_id);
1470 { 1485 {
1471 std::unique_ptr<leveldb::Iterator> itr( 1486 std::unique_ptr<leveldb::Iterator> itr(
1472 db_->NewIterator(leveldb::ReadOptions())); 1487 db_->NewIterator(leveldb::ReadOptions()));
1473 for (itr->Seek(prefix); itr->Valid(); itr->Next()) { 1488 for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
1474 Status status = LevelDBStatusToStatus(itr->status()); 1489 Status status = LevelDBStatusToSWStatus(itr->status());
1475 if (status != STATUS_OK) { 1490 if (status != STATUS_OK) {
1476 resources->clear(); 1491 resources->clear();
1477 break; 1492 break;
1478 } 1493 }
1479 1494
1480 if (!RemovePrefix(itr->key().ToString(), prefix, NULL)) 1495 if (!RemovePrefix(itr->key().ToString(), prefix, NULL))
1481 break; 1496 break;
1482 1497
1483 ResourceRecord resource; 1498 ResourceRecord resource;
1484 status = ParseResourceRecord(itr->value().ToString(), &resource); 1499 status = ParseResourceRecord(itr->value().ToString(), &resource);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1565 leveldb::WriteBatch* batch) { 1580 leveldb::WriteBatch* batch) {
1566 DCHECK(batch); 1581 DCHECK(batch);
1567 1582
1568 Status status = STATUS_OK; 1583 Status status = STATUS_OK;
1569 const std::string prefix = CreateResourceRecordKeyPrefix(version_id); 1584 const std::string prefix = CreateResourceRecordKeyPrefix(version_id);
1570 1585
1571 { 1586 {
1572 std::unique_ptr<leveldb::Iterator> itr( 1587 std::unique_ptr<leveldb::Iterator> itr(
1573 db_->NewIterator(leveldb::ReadOptions())); 1588 db_->NewIterator(leveldb::ReadOptions()));
1574 for (itr->Seek(prefix); itr->Valid(); itr->Next()) { 1589 for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
1575 status = LevelDBStatusToStatus(itr->status()); 1590 status = LevelDBStatusToSWStatus(itr->status());
1576 if (status != STATUS_OK) 1591 if (status != STATUS_OK)
1577 break; 1592 break;
1578 1593
1579 const std::string key = itr->key().ToString(); 1594 const std::string key = itr->key().ToString();
1580 std::string unprefixed; 1595 std::string unprefixed;
1581 if (!RemovePrefix(key, prefix, &unprefixed)) 1596 if (!RemovePrefix(key, prefix, &unprefixed))
1582 break; 1597 break;
1583 1598
1584 int64_t resource_id; 1599 int64_t resource_id;
1585 status = ParseId(unprefixed, &resource_id); 1600 status = ParseId(unprefixed, &resource_id);
(...skipping 24 matching lines...) Expand all
1610 Status status = LazyOpen(false); 1625 Status status = LazyOpen(false);
1611 if (IsNewOrNonexistentDatabase(status)) 1626 if (IsNewOrNonexistentDatabase(status))
1612 return STATUS_OK; 1627 return STATUS_OK;
1613 if (status != STATUS_OK) 1628 if (status != STATUS_OK)
1614 return status; 1629 return status;
1615 1630
1616 { 1631 {
1617 std::unique_ptr<leveldb::Iterator> itr( 1632 std::unique_ptr<leveldb::Iterator> itr(
1618 db_->NewIterator(leveldb::ReadOptions())); 1633 db_->NewIterator(leveldb::ReadOptions()));
1619 for (itr->Seek(id_key_prefix); itr->Valid(); itr->Next()) { 1634 for (itr->Seek(id_key_prefix); itr->Valid(); itr->Next()) {
1620 status = LevelDBStatusToStatus(itr->status()); 1635 status = LevelDBStatusToSWStatus(itr->status());
1621 if (status != STATUS_OK) { 1636 if (status != STATUS_OK) {
1622 ids->clear(); 1637 ids->clear();
1623 break; 1638 break;
1624 } 1639 }
1625 1640
1626 std::string unprefixed; 1641 std::string unprefixed;
1627 if (!RemovePrefix(itr->key().ToString(), id_key_prefix, &unprefixed)) 1642 if (!RemovePrefix(itr->key().ToString(), id_key_prefix, &unprefixed))
1628 break; 1643 break;
1629 1644
1630 int64_t resource_id; 1645 int64_t resource_id;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1689 int64_t registration_id, 1704 int64_t registration_id,
1690 leveldb::WriteBatch* batch) { 1705 leveldb::WriteBatch* batch) {
1691 DCHECK(batch); 1706 DCHECK(batch);
1692 Status status = STATUS_OK; 1707 Status status = STATUS_OK;
1693 const std::string prefix = CreateUserDataKeyPrefix(registration_id); 1708 const std::string prefix = CreateUserDataKeyPrefix(registration_id);
1694 1709
1695 { 1710 {
1696 std::unique_ptr<leveldb::Iterator> itr( 1711 std::unique_ptr<leveldb::Iterator> itr(
1697 db_->NewIterator(leveldb::ReadOptions())); 1712 db_->NewIterator(leveldb::ReadOptions()));
1698 for (itr->Seek(prefix); itr->Valid(); itr->Next()) { 1713 for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
1699 status = LevelDBStatusToStatus(itr->status()); 1714 status = LevelDBStatusToSWStatus(itr->status());
1700 if (status != STATUS_OK) 1715 if (status != STATUS_OK)
1701 break; 1716 break;
1702 1717
1703 const std::string key = itr->key().ToString(); 1718 const std::string key = itr->key().ToString();
1704 std::string user_data_name; 1719 std::string user_data_name;
1705 if (!RemovePrefix(key, prefix, &user_data_name)) 1720 if (!RemovePrefix(key, prefix, &user_data_name))
1706 break; 1721 break;
1707 batch->Delete(key); 1722 batch->Delete(key);
1708 batch->Delete(CreateHasUserDataKey(registration_id, user_data_name)); 1723 batch->Delete(CreateHasUserDataKey(registration_id, user_data_name));
1709 } 1724 }
1710 } 1725 }
1711 1726
1712 HandleReadResult(FROM_HERE, status); 1727 HandleReadResult(FROM_HERE, status);
1713 return status; 1728 return status;
1714 } 1729 }
1715 1730
1716 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadDatabaseVersion( 1731 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadDatabaseVersion(
1717 int64_t* db_version) { 1732 int64_t* db_version) {
1718 std::string value; 1733 std::string value;
1719 Status status = LevelDBStatusToStatus( 1734 Status status = LevelDBStatusToSWStatus(
1720 db_->Get(leveldb::ReadOptions(), kDatabaseVersionKey, &value)); 1735 db_->Get(leveldb::ReadOptions(), kDatabaseVersionKey, &value));
1721 if (status == STATUS_ERROR_NOT_FOUND) { 1736 if (status == STATUS_ERROR_NOT_FOUND) {
1722 // The database hasn't been initialized yet. 1737 // The database hasn't been initialized yet.
1723 *db_version = 0; 1738 *db_version = 0;
1724 HandleReadResult(FROM_HERE, STATUS_OK); 1739 HandleReadResult(FROM_HERE, STATUS_OK);
1725 return STATUS_OK; 1740 return STATUS_OK;
1726 } 1741 }
1727 1742
1728 if (status != STATUS_OK) { 1743 if (status != STATUS_OK) {
1729 HandleReadResult(FROM_HERE, status); 1744 HandleReadResult(FROM_HERE, status);
1730 return status; 1745 return status;
1731 } 1746 }
1732 1747
1733 const int kFirstValidVersion = 1; 1748 const int kFirstValidVersion = 1;
1734 if (!base::StringToInt64(value, db_version) || 1749 if (!base::StringToInt64(value, db_version) ||
1735 *db_version < kFirstValidVersion || kCurrentSchemaVersion < *db_version) { 1750 *db_version < kFirstValidVersion || kSWCurrentSchemaVersion < *db_version) {
1736 status = STATUS_ERROR_CORRUPTED; 1751 status = STATUS_ERROR_CORRUPTED;
1737 HandleReadResult(FROM_HERE, status); 1752 HandleReadResult(FROM_HERE, status);
1738 return status; 1753 return status;
1739 } 1754 }
1740 1755
1741 status = STATUS_OK; 1756 status = STATUS_OK;
1742 HandleReadResult(FROM_HERE, status); 1757 HandleReadResult(FROM_HERE, status);
1743 return status; 1758 return status;
1744 } 1759 }
1745 1760
1746 ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteBatch( 1761 ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteBatch(
1747 leveldb::WriteBatch* batch) { 1762 leveldb::WriteBatch* batch) {
1748 DCHECK(batch); 1763 DCHECK(batch);
1749 DCHECK_NE(DISABLED, state_); 1764 DCHECK_NE(DISABLED, state_);
1750 1765
1751 if (state_ == UNINITIALIZED) { 1766 if (state_ == UNINITIALIZED) {
1752 // Write database default values. 1767 // Write database default values.
1753 batch->Put(kDatabaseVersionKey, base::Int64ToString(kCurrentSchemaVersion)); 1768 batch->Put(kDatabaseVersionKey, base::Int64ToString(kSWCurrentSchemaVersion) );
1754 state_ = INITIALIZED; 1769 state_ = INITIALIZED;
1755 } 1770 }
1756 1771
1757 Status status = LevelDBStatusToStatus( 1772 Status status = LevelDBStatusToSWStatus(
1758 db_->Write(leveldb::WriteOptions(), batch)); 1773 db_->Write(leveldb::WriteOptions(), batch));
1759 HandleWriteResult(FROM_HERE, status); 1774 HandleWriteResult(FROM_HERE, status);
1760 return status; 1775 return status;
1761 } 1776 }
1762 1777
1763 void ServiceWorkerDatabase::BumpNextRegistrationIdIfNeeded( 1778 void ServiceWorkerDatabase::BumpNextRegistrationIdIfNeeded(
1764 int64_t used_id, 1779 int64_t used_id,
1765 leveldb::WriteBatch* batch) { 1780 leveldb::WriteBatch* batch) {
1766 DCHECK(batch); 1781 DCHECK(batch);
1767 if (next_avail_registration_id_ <= used_id) { 1782 if (next_avail_registration_id_ <= used_id) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1828 if (status != STATUS_OK) 1843 if (status != STATUS_OK)
1829 Disable(from_here, status); 1844 Disable(from_here, status);
1830 ServiceWorkerMetrics::CountWriteDatabaseResult(status); 1845 ServiceWorkerMetrics::CountWriteDatabaseResult(status);
1831 } 1846 }
1832 1847
1833 bool ServiceWorkerDatabase::IsDatabaseInMemory() const { 1848 bool ServiceWorkerDatabase::IsDatabaseInMemory() const {
1834 return path_.empty(); 1849 return path_.empty();
1835 } 1850 }
1836 1851
1837 } // namespace content 1852 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698