Index: content/browser/service_worker/service_worker_database.cc |
diff --git a/content/browser/service_worker/service_worker_database.cc b/content/browser/service_worker/service_worker_database.cc |
index 2e69f621fe41e7be321c86f47f2e439cd5673091..51b4cb3414377cfecfdfa906db66f06f90009925 100644 |
--- a/content/browser/service_worker/service_worker_database.cc |
+++ b/content/browser/service_worker/service_worker_database.cc |
@@ -968,11 +968,15 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteResourceIdsInBatch( |
if (status != STATUS_OK) |
return status; |
+ if (ids.empty()) |
+ return STATUS_OK; |
for (std::set<int64>::const_iterator itr = ids.begin(); |
itr != ids.end(); ++itr) { |
// Value should be empty. |
batch->Put(CreateResourceIdKey(id_key_prefix, *itr), ""); |
} |
+ // std::set is sorted, so the last element is the largest. |
+ BumpNextResourceIdIfNeeded(*ids.rbegin(), batch); |
return STATUS_OK; |
} |
@@ -1054,6 +1058,15 @@ void ServiceWorkerDatabase::BumpNextRegistrationIdIfNeeded( |
} |
} |
+void ServiceWorkerDatabase::BumpNextResourceIdIfNeeded( |
+ int64 used_id, leveldb::WriteBatch* batch) { |
+ DCHECK(batch); |
+ if (next_avail_resource_id_ <= used_id) { |
+ next_avail_resource_id_ = used_id + 1; |
+ batch->Put(kNextResIdKey, base::Int64ToString(next_avail_resource_id_)); |
+ } |
+} |
+ |
void ServiceWorkerDatabase::BumpNextVersionIdIfNeeded( |
int64 used_id, leveldb::WriteBatch* batch) { |
DCHECK(batch); |