Chromium Code Reviews| Index: content/browser/service_worker/service_worker_cache.h |
| diff --git a/content/browser/service_worker/service_worker_cache.h b/content/browser/service_worker/service_worker_cache.h |
| index d5ee7071e5cc07cb53c8cab493aca6c46d3a186b..31b4c60023c0304489134c0cd0b1ef7befbb6600 100644 |
| --- a/content/browser/service_worker/service_worker_cache.h |
| +++ b/content/browser/service_worker/service_worker_cache.h |
| @@ -8,28 +8,49 @@ |
| #include "base/callback.h" |
| #include "base/files/file_path.h" |
| #include "base/memory/weak_ptr.h" |
| +#include "content/common/service_worker/service_worker_types.h" |
| +#include "net/base/completion_callback.h" |
| +#include "net/disk_cache/disk_cache.h" |
| namespace net { |
| class URLRequestContext; |
| +class IOBufferWithSize; |
| } |
| namespace webkit_blob { |
| +class BlobData; |
| +class BlobDataHandle; |
| class BlobStorageContext; |
| } |
| namespace content { |
| +class ChromeBlobStorageContext; |
| -// TODO(jkarlin): Fill this in with a real Cache implementation as |
| -// specified in |
| -// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html. |
| // TODO(jkarlin): Unload cache backend from memory once the cache object is no |
| // longer referenced in javascript. |
| // Represents a ServiceWorker Cache as seen in |
| // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html. |
| // InitializeIfNeeded must be called before calling the other public members. |
| -class ServiceWorkerCache { |
| +class CONTENT_EXPORT ServiceWorkerCache { |
| public: |
| + enum ErrorType { |
| + ErrorTypeOK = 0, |
| + ErrorTypeExists, |
| + ErrorTypeStorage, |
| + ErrorTypeNotFound |
| + }; |
| + enum EntryIndex { INDEX_HEADERS = 0, INDEX_RESPONSE_BODY }; |
| + typedef base::Callback<void(ErrorType)> ErrorCallback; |
| + typedef base::Callback<void(bool)> BoolCallback; |
| + typedef base::Callback<void(disk_cache::ScopedEntryPtr, bool)> |
| + EntryBoolCallback; |
| + typedef base::Callback<void(ErrorType, |
| + scoped_ptr<ServiceWorkerResponse>, |
| + scoped_ptr<webkit_blob::BlobDataHandle>)> |
| + ResponseCallback; |
| + class BlobReader; |
| + |
| static scoped_ptr<ServiceWorkerCache> CreateMemoryCache( |
| const std::string& name, |
| net::URLRequestContext* request_context, |
| @@ -45,7 +66,26 @@ class ServiceWorkerCache { |
| // Loads the backend and calls the callback with the result (true for |
| // success). This must be called before member functions that require a |
| // backend are called. |
| - void CreateBackend(const base::Callback<void(bool)>& callback); |
| + void CreateBackend(const ErrorCallback& callback); |
| + |
| + // Returns ErrorTypeNotFound if not found. |
| + void Match(ServiceWorkerFetchRequest* request, |
| + const ResponseCallback& callback); |
| + |
| + // Puts the request and response object in the cache. The response body (if |
| + // present) is stored in the cache, but not the request body. Returns |
| + // ErrorTypeOK on success. |
| + void Put(ServiceWorkerFetchRequest* request, |
| + ServiceWorkerResponse* response, |
| + const ErrorCallback& callback); |
| + |
| + // Returns ErrorNotFound if not found. Otherwise deletes and returns |
| + // ErrorTypeOK. |
| + void Delete(ServiceWorkerFetchRequest* request, |
| + const ErrorCallback& callback); |
| + |
| + // Call to determine if CreateBackend must be called. |
| + bool HasCreatedBackend() const; |
| void set_name(const std::string& name) { name_ = name; } |
| const std::string& name() const { return name_; } |
| @@ -55,12 +95,71 @@ class ServiceWorkerCache { |
| base::WeakPtr<ServiceWorkerCache> AsWeakPtr(); |
| private: |
| + typedef scoped_ptr<disk_cache::Backend> ScopedBackendPtr; |
| + |
| + struct ResponseReadContext; |
| + |
| ServiceWorkerCache( |
| const base::FilePath& path, |
| const std::string& name, |
| net::URLRequestContext* request_context, |
| base::WeakPtr<webkit_blob::BlobStorageContext> blob_context); |
| + // CreateBackend callbacks |
| + void CreateBackendDidCreate(const ErrorCallback& callback, |
| + scoped_ptr<ScopedBackendPtr> backend_ptr, |
| + int rv); |
| + |
| + // Put callbacks |
| + void PutDidCreateEntry( |
| + ServiceWorkerFetchRequest* request, |
| + ServiceWorkerResponse* response, |
| + const ErrorCallback& callback, |
| + scoped_ptr<disk_cache::Entry*> entry, |
| + scoped_ptr<webkit_blob::BlobDataHandle> blob_data_handle, |
| + int error); |
| + void PutDidWriteHeaders( |
| + ServiceWorkerResponse* response, |
| + const ErrorCallback& callback, |
| + disk_cache::ScopedEntryPtr entry, |
| + scoped_ptr<webkit_blob::BlobDataHandle> blob_data_handle, |
| + int expected_bytes, |
| + int rv); |
| + void PutDidWriteBlobToCache(const ErrorCallback& callback, |
| + scoped_ptr<BlobReader> blob_reader, |
| + disk_cache::ScopedEntryPtr entry, |
| + bool success); |
| + |
| + // Match callbacks |
| + void MatchDidOpenEntry(ServiceWorkerFetchRequest* request, |
| + const ResponseCallback& callback, |
| + scoped_ptr<disk_cache::Entry*> entryptr, |
| + int rv); |
| + void MatchDidReadHeaderData( |
| + ServiceWorkerFetchRequest* request, |
| + const ResponseCallback& callback, |
| + disk_cache::ScopedEntryPtr entry, |
| + const scoped_refptr<net::IOBufferWithSize>& buffer, |
| + int rv); |
| + void MatchDidReadResponseBodyData( |
| + ServiceWorkerFetchRequest* request, |
| + const ResponseCallback& callback, |
| + disk_cache::ScopedEntryPtr entry, |
| + scoped_ptr<ServiceWorkerResponse> response, |
| + scoped_ptr<ResponseReadContext> response_context, |
| + int rv); |
| + void MatchDoneWithBody(ServiceWorkerFetchRequest* request, |
| + const ResponseCallback& callback, |
| + scoped_ptr<ServiceWorkerResponse> response, |
| + scoped_ptr<ResponseReadContext> response_context); |
| + |
| + // Delete callbacks |
| + void DeleteDidOpenEntry(ServiceWorkerFetchRequest* request, |
|
michaeln
2014/08/21 01:46:15
All of these DidSomething() async completion callb
jkarlin
2014/08/21 18:31:21
I've reworked ServiceWorkerCache so that its publi
|
| + const ErrorCallback& callback, |
| + scoped_ptr<disk_cache::Entry*> entryptr, |
| + int rv); |
| + |
| + scoped_ptr<disk_cache::Backend> backend_; |
| base::FilePath path_; |
| std::string name_; |
| net::URLRequestContext* request_context_; |