| 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..1cf0696f8495dd1ddbef23b481c6deff024733fa 100644
|
| --- a/content/browser/service_worker/service_worker_cache.h
|
| +++ b/content/browser/service_worker/service_worker_cache.h
|
| @@ -8,28 +8,52 @@
|
| #include "base/callback.h"
|
| #include "base/files/file_path.h"
|
| #include "base/memory/weak_ptr.h"
|
| +#include "content/browser/service_worker/service_worker_cache.pb.h"
|
| +#include "content/common/service_worker/service_worker_types.h"
|
| +#include "net/base/completion_callback.h"
|
| +
|
| +namespace disk_cache {
|
| +class Backend;
|
| +class Entry;
|
| +}
|
|
|
| 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,
|
| + ErrorNotFound
|
| + };
|
| + enum EntryIndex { INDEX_HEADERS = 0, INDEX_RESPONSE_BODY };
|
| + typedef base::Callback<void(ErrorType)> ErrorCallback;
|
| + typedef base::Callback<void(bool)> BoolCallback;
|
| + 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 +69,17 @@ 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);
|
| +
|
| + // ServiceWorker Cache API
|
| + void Put(ServiceWorkerFetchRequest* request,
|
| + ServiceWorkerResponse* response,
|
| + const ErrorCallback& callback);
|
| +
|
| + // Returns ErrorNotFound if not found. It is the responsibility of the caller
|
| + // to call RemoveBlob() once the returned blob uuid is no longer needed.
|
| + void Match(ServiceWorkerFetchRequest* request,
|
| + const ResponseCallback& callback);
|
|
|
| void set_name(const std::string& name) { name_ = name; }
|
| const std::string& name() const { return name_; }
|
| @@ -55,12 +89,58 @@ class ServiceWorkerCache {
|
| base::WeakPtr<ServiceWorkerCache> AsWeakPtr();
|
|
|
| private:
|
| + 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, int rv);
|
| +
|
| + // Put callbacks
|
| + void PutDidCreateEntry(ServiceWorkerFetchRequest* request,
|
| + ServiceWorkerResponse* response,
|
| + const ErrorCallback& callback,
|
| + scoped_ptr<disk_cache::Entry*> entry,
|
| + int error);
|
| + void PutDidWriteHeaders(ServiceWorkerFetchRequest* request,
|
| + ServiceWorkerResponse* response,
|
| + const ErrorCallback& callback,
|
| + disk_cache::Entry* entry,
|
| + int expected_bytes,
|
| + int rv);
|
| + void PutDidWriteBlobToCache(const ErrorCallback& callback,
|
| + disk_cache::Entry* entry,
|
| + scoped_ptr<BlobReader> blob_reader,
|
| + 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::Entry* entry,
|
| + const scoped_refptr<net::IOBufferWithSize>& buffer,
|
| + int rv);
|
| + void MatchDidReadResponseBodyData(
|
| + ServiceWorkerFetchRequest* request,
|
| + const ResponseCallback& callback,
|
| + disk_cache::Entry* 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);
|
| +
|
| + scoped_ptr<disk_cache::Backend> backend_;
|
| base::FilePath path_;
|
| std::string name_;
|
| net::URLRequestContext* request_context_;
|
|
|