Index: content/browser/service_worker/service_worker_cache_storage.cc |
diff --git a/content/browser/service_worker/service_worker_cache_storage.cc b/content/browser/service_worker/service_worker_cache_storage.cc |
index 0b17ae3673887f098b1ef17b94977540f7d0616d..4c59a0eed1fb4d3854cff8c267db425b0349f22f 100644 |
--- a/content/browser/service_worker/service_worker_cache_storage.cc |
+++ b/content/browser/service_worker/service_worker_cache_storage.cc |
@@ -57,7 +57,7 @@ class ServiceWorkerCacheStorage::CacheLoader { |
const BoolCallback& callback) = 0; |
// Writes the cache names (and sizes) to disk if applicable. |
- virtual void WriteIndex(const CacheMap& caches, |
+ virtual void WriteIndex(const ServiceWorkerCacheStorage::Strings& cache_names, |
const BoolCallback& callback) = 0; |
// Loads the cache names from disk if applicable. |
@@ -104,7 +104,7 @@ class ServiceWorkerCacheStorage::MemoryLoader |
callback.Run(true); |
} |
- virtual void WriteIndex(const CacheMap& caches, |
+ virtual void WriteIndex(const ServiceWorkerCacheStorage::Strings& cache_names, |
const BoolCallback& callback) OVERRIDE { |
callback.Run(false); |
} |
@@ -208,7 +208,7 @@ class ServiceWorkerCacheStorage::SimpleCacheLoader |
original_loop->PostTask(FROM_HERE, base::Bind(callback, rv)); |
} |
- virtual void WriteIndex(const CacheMap& caches, |
+ virtual void WriteIndex(const ServiceWorkerCacheStorage::Strings& cache_names, |
michaeln
2014/09/12 21:45:32
is the fully qualification needed given that Cache
jkarlin
2014/09/15 14:14:29
Done.
|
const BoolCallback& callback) OVERRIDE { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
@@ -217,10 +217,9 @@ class ServiceWorkerCacheStorage::SimpleCacheLoader |
ServiceWorkerCacheStorageIndex index; |
- for (CacheMap::const_iterator it = caches.begin(); it != caches.end(); |
- ++it) { |
+ for (size_t i = 0u, max = cache_names.size(); i < max; ++i) { |
ServiceWorkerCacheStorageIndex::Cache* index_cache = index.add_cache(); |
- index_cache->set_name(it->first); |
+ index_cache->set_name(cache_names[i]); |
index_cache->set_size(0); // TODO(jkarlin): Make this real. |
} |
@@ -442,9 +441,15 @@ void ServiceWorkerCacheStorage::DeleteCache( |
cache_map_.erase(it); |
+ // Delete the name from ordered_cache_names_. |
+ Strings::iterator iter = std::find( |
+ ordered_cache_names_.begin(), ordered_cache_names_.end(), cache_name); |
+ DCHECK(iter != ordered_cache_names_.end()); |
+ ordered_cache_names_.erase(iter); |
+ |
// Update the Index |
cache_loader_->WriteIndex( |
- cache_map_, |
+ ordered_cache_names_, |
base::Bind(&ServiceWorkerCacheStorage::DeleteCacheDidWriteIndex, |
weak_factory_.GetWeakPtr(), |
cache_name, |
@@ -462,13 +467,7 @@ void ServiceWorkerCacheStorage::EnumerateCaches( |
return; |
} |
- std::vector<std::string> names; |
- for (CacheMap::const_iterator it = cache_map_.begin(); it != cache_map_.end(); |
- ++it) { |
- names.push_back(it->first); |
- } |
- |
- callback.Run(names, CACHE_STORAGE_ERROR_NO_ERROR); |
+ callback.Run(ordered_cache_names_, CACHE_STORAGE_ERROR_NO_ERROR); |
} |
// Init is run lazily so that it is called on the proper MessageLoop. |
@@ -506,6 +505,7 @@ void ServiceWorkerCacheStorage::LazyInitDidLoadIndex( |
for (size_t i = 0u, max = indexed_cache_names->size(); i < max; ++i) { |
cache_map_.insert(std::make_pair(indexed_cache_names->at(i), |
base::WeakPtr<ServiceWorkerCache>())); |
+ ordered_cache_names_.push_back(indexed_cache_names->at(i)); |
} |
initialized_ = true; |
@@ -530,9 +530,10 @@ void ServiceWorkerCacheStorage::CreateCacheDidCreateCache( |
} |
cache_map_.insert(std::make_pair(cache_name, cache->AsWeakPtr())); |
+ ordered_cache_names_.push_back(cache_name); |
cache_loader_->WriteIndex( |
- cache_map_, |
+ ordered_cache_names_, |
base::Bind(&ServiceWorkerCacheStorage::CreateCacheDidWriteIndex, |
weak_factory_.GetWeakPtr(), |
callback, |