Index: content/browser/service_worker/service_worker_cache_storage.h |
diff --git a/content/browser/service_worker/service_worker_cache_storage.h b/content/browser/service_worker/service_worker_cache_storage.h |
index 52c602d3cfc1054264d73112e9a57514feb3fb11..7e0c39e1381032a4822c891fc395f0535fd63ec8 100644 |
--- a/content/browser/service_worker/service_worker_cache_storage.h |
+++ b/content/browser/service_worker/service_worker_cache_storage.h |
@@ -10,7 +10,6 @@ |
#include "base/callback.h" |
#include "base/files/file_path.h" |
-#include "base/id_map.h" |
#include "base/memory/weak_ptr.h" |
#include "content/browser/service_worker/service_worker_cache.h" |
@@ -33,8 +32,15 @@ namespace content { |
// ServiceWorkerCacheStorage holds the set of caches for a given origin. It is |
// owned by the ServiceWorkerCacheStorageManager. This class expects to be run |
// on the IO thread. |
-class ServiceWorkerCacheStorage { |
+class CONTENT_EXPORT ServiceWorkerCacheStorage { |
public: |
+ // TODO(jkarlin): Convert this (and everything that uses it) to int64_t so |
+ // that we don't run out of id space. |
+ typedef int32_t CacheID; |
+ |
+ // The CacheID returned on failed cache operations. |
+ const static int kInvalidCacheID; |
+ |
enum CacheStorageError { |
CACHE_STORAGE_ERROR_NO_ERROR, |
CACHE_STORAGE_ERROR_NOT_IMPLEMENTED, |
@@ -42,6 +48,7 @@ class ServiceWorkerCacheStorage { |
CACHE_STORAGE_ERROR_EXISTS, |
CACHE_STORAGE_ERROR_STORAGE, |
CACHE_STORAGE_ERROR_EMPTY_KEY, |
+ CACHE_STORAGE_ERROR_CLOSING |
}; |
typedef base::Callback<void(bool, CacheStorageError)> BoolAndErrorCallback; |
@@ -87,12 +94,12 @@ class ServiceWorkerCacheStorage { |
class MemoryLoader; |
class SimpleCacheLoader; |
class CacheLoader; |
+ struct CacheContext; |
- typedef IDMap<ServiceWorkerCache, IDMapOwnPointer> CacheMap; |
- typedef CacheMap::KeyType CacheID; |
+ typedef std::map<CacheID, CacheContext*> CacheMap; |
typedef std::map<std::string, CacheID> NameMap; |
- ServiceWorkerCache* GetLoadedCache(const std::string& cache_name) const; |
+ CacheContext* GetLoadedCache(const std::string& cache_name) const; |
// Initializer and its callback are below. |
void LazyInit(const base::Closure& closure); |
@@ -103,14 +110,17 @@ class ServiceWorkerCacheStorage { |
const base::Closure& callback, |
scoped_ptr<std::vector<std::string> > indexed_cache_names, |
const std::vector<std::string>::const_iterator& iter, |
+ const std::string& cache_name, |
scoped_ptr<ServiceWorkerCache> cache); |
void LazyInitDone(); |
void DidCreateBackend(base::WeakPtr<ServiceWorkerCache> cache, |
+ CacheID cache_id, |
const CacheAndErrorCallback& callback, |
ServiceWorkerCache::ErrorType error); |
- void AddCacheToMaps(scoped_ptr<ServiceWorkerCache> cache); |
+ CacheContext* AddCacheToMaps(const std::string& cache_name, |
+ scoped_ptr<ServiceWorkerCache> cache); |
// The CreateCache callbacks are below. |
void CreateCacheDidCreateCache(const std::string& cache_name, |
@@ -118,6 +128,7 @@ class ServiceWorkerCacheStorage { |
scoped_ptr<ServiceWorkerCache> cache); |
void CreateCacheDidWriteIndex(const CacheAndErrorCallback& callback, |
base::WeakPtr<ServiceWorkerCache> cache, |
+ CacheID id, |
bool success); |
// The DeleteCache callbacks are below. |
@@ -133,9 +144,11 @@ class ServiceWorkerCacheStorage { |
// The list of operations waiting on initialization. |
std::vector<base::Closure> init_callbacks_; |
- // The map of ServiceWorkerCache objects to their integer ids that |
- // ServiceWorkers reference. Owns the cache objects. |
+ // The map of CacheIDs to their CacheContext objects. Owns the CacheContext |
+ // object. The CacheIDs are used by JavaScript to reference a |
+ // ServiceWorkerCache. |
CacheMap cache_map_; |
+ CacheID next_cache_id_; // The next CacheID to use in cache_map_ |
// The map of cache names to their integer ids. |
NameMap name_map_; |