| Index: content/browser/cache_storage/cache_storage_listener.cc
|
| diff --git a/content/browser/cache_storage/cache_storage_listener.cc b/content/browser/cache_storage/cache_storage_listener.cc
|
| index 4b98b3c841b7d058565c9ce0b6719cfe73c04831..7392df611556ae945fdd5daf5d2949f37153f97f 100644
|
| --- a/content/browser/cache_storage/cache_storage_listener.cc
|
| +++ b/content/browser/cache_storage/cache_storage_listener.cc
|
| @@ -21,9 +21,33 @@
|
|
|
| namespace {
|
|
|
| -// TODO(nhiroki): The same function exists in cache_storage_dispatcher_host.cc.
|
| -// This should be removed when this listenr class is merged into the dispatcher.
|
| -// (http://crbug.com/474233)
|
| +WebServiceWorkerCacheError ToWebServiceWorkerCacheError(
|
| + CacheStorage::CacheStorageError err) {
|
| + switch (err) {
|
| + case CacheStorage::CACHE_STORAGE_ERROR_NO_ERROR:
|
| + NOTREACHED();
|
| + return blink::WebServiceWorkerCacheErrorNotImplemented;
|
| + case CacheStorage::CACHE_STORAGE_ERROR_NOT_IMPLEMENTED:
|
| + return blink::WebServiceWorkerCacheErrorNotImplemented;
|
| + case CacheStorage::CACHE_STORAGE_ERROR_NOT_FOUND:
|
| + return blink::WebServiceWorkerCacheErrorNotFound;
|
| + case CacheStorage::CACHE_STORAGE_ERROR_EXISTS:
|
| + return blink::WebServiceWorkerCacheErrorExists;
|
| + case CacheStorage::CACHE_STORAGE_ERROR_STORAGE:
|
| + // TODO(jkarlin): Change this to CACHE_STORAGE_ERROR_STORAGE once that's
|
| + // added.
|
| + return blink::WebServiceWorkerCacheErrorNotFound;
|
| + case CacheStorage::CACHE_STORAGE_ERROR_CLOSING:
|
| + // TODO(jkarlin): Update this to CACHE_STORAGE_ERROR_CLOSING once that's
|
| + // added.
|
| + return blink::WebServiceWorkerCacheErrorNotFound;
|
| + }
|
| + NOTREACHED();
|
| + return blink::WebServiceWorkerCacheErrorNotImplemented;
|
| +}
|
| +
|
| +// TODO(jkarlin): CacheStorageCache and CacheStorage should share
|
| +// an error enum type.
|
| WebServiceWorkerCacheError CacheErrorToWebServiceWorkerCacheError(
|
| CacheStorageCache::ErrorType err) {
|
| switch (err) {
|
| @@ -57,6 +81,16 @@
|
| bool CacheStorageListener::OnMessageReceived(const IPC::Message& message) {
|
| bool handled = true;
|
| IPC_BEGIN_MESSAGE_MAP(CacheStorageListener, message)
|
| + IPC_MESSAGE_HANDLER(CacheStorageHostMsg_CacheStorageHas,
|
| + OnCacheStorageHas)
|
| + IPC_MESSAGE_HANDLER(CacheStorageHostMsg_CacheStorageOpen,
|
| + OnCacheStorageOpen)
|
| + IPC_MESSAGE_HANDLER(CacheStorageHostMsg_CacheStorageDelete,
|
| + OnCacheStorageDelete)
|
| + IPC_MESSAGE_HANDLER(CacheStorageHostMsg_CacheStorageKeys,
|
| + OnCacheStorageKeys)
|
| + IPC_MESSAGE_HANDLER(CacheStorageHostMsg_CacheStorageMatch,
|
| + OnCacheStorageMatch)
|
| IPC_MESSAGE_HANDLER(CacheStorageHostMsg_CacheMatch, OnCacheMatch)
|
| IPC_MESSAGE_HANDLER(CacheStorageHostMsg_CacheMatchAll, OnCacheMatchAll)
|
| IPC_MESSAGE_HANDLER(CacheStorageHostMsg_CacheKeys, OnCacheKeys)
|
| @@ -68,6 +102,76 @@
|
| IPC_END_MESSAGE_MAP()
|
|
|
| return handled;
|
| +}
|
| +
|
| +void CacheStorageListener::OnCacheStorageHas(int thread_id,
|
| + int request_id,
|
| + const GURL& origin,
|
| + const base::string16& cache_name) {
|
| + TRACE_EVENT0("CacheStorage", "CacheStorageListener::OnCacheStorageHas");
|
| + context_->cache_manager()->HasCache(
|
| + origin, base::UTF16ToUTF8(cache_name),
|
| + base::Bind(&CacheStorageListener::OnCacheStorageHasCallback,
|
| + weak_factory_.GetWeakPtr(), thread_id, request_id));
|
| +}
|
| +
|
| +void CacheStorageListener::OnCacheStorageOpen(
|
| + int thread_id,
|
| + int request_id,
|
| + const GURL& origin,
|
| + const base::string16& cache_name) {
|
| + TRACE_EVENT0("CacheStorage", "CacheStorageListener::OnCacheStorageOpen");
|
| + context_->cache_manager()->OpenCache(
|
| + origin, base::UTF16ToUTF8(cache_name),
|
| + base::Bind(&CacheStorageListener::OnCacheStorageOpenCallback,
|
| + weak_factory_.GetWeakPtr(), thread_id, request_id));
|
| +}
|
| +
|
| +void CacheStorageListener::OnCacheStorageDelete(
|
| + int thread_id,
|
| + int request_id,
|
| + const GURL& origin,
|
| + const base::string16& cache_name) {
|
| + TRACE_EVENT0("CacheStorage", "CacheStorageListener::OnCacheStorageDelete");
|
| + context_->cache_manager()->DeleteCache(
|
| + origin, base::UTF16ToUTF8(cache_name),
|
| + base::Bind(&CacheStorageListener::OnCacheStorageDeleteCallback,
|
| + weak_factory_.GetWeakPtr(), thread_id, request_id));
|
| +}
|
| +
|
| +void CacheStorageListener::OnCacheStorageKeys(int thread_id,
|
| + int request_id,
|
| + const GURL& origin) {
|
| + TRACE_EVENT0("CacheStorage", "CacheStorageListener::OnCacheStorageKeys");
|
| + context_->cache_manager()->EnumerateCaches(
|
| + origin, base::Bind(&CacheStorageListener::OnCacheStorageKeysCallback,
|
| + weak_factory_.GetWeakPtr(), thread_id, request_id));
|
| +}
|
| +
|
| +void CacheStorageListener::OnCacheStorageMatch(
|
| + int thread_id,
|
| + int request_id,
|
| + const GURL& origin,
|
| + const ServiceWorkerFetchRequest& request,
|
| + const CacheStorageCacheQueryParams& match_params) {
|
| + TRACE_EVENT0("CacheStorage", "CacheStorageListener::OnCacheStorageMatch");
|
| +
|
| + scoped_ptr<ServiceWorkerFetchRequest> scoped_request(
|
| + new ServiceWorkerFetchRequest(request.url, request.method,
|
| + request.headers, request.referrer,
|
| + request.is_reload));
|
| +
|
| + if (match_params.cache_name.empty()) {
|
| + context_->cache_manager()->MatchAllCaches(
|
| + origin, scoped_request.Pass(),
|
| + base::Bind(&CacheStorageListener::OnCacheStorageMatchCallback,
|
| + weak_factory_.GetWeakPtr(), thread_id, request_id));
|
| + return;
|
| + }
|
| + context_->cache_manager()->MatchCache(
|
| + origin, base::UTF16ToUTF8(match_params.cache_name), scoped_request.Pass(),
|
| + base::Bind(&CacheStorageListener::OnCacheStorageMatchCallback,
|
| + weak_factory_.GetWeakPtr(), thread_id, request_id));
|
| }
|
|
|
| void CacheStorageListener::OnCacheMatch(
|
| @@ -193,6 +297,90 @@
|
| dispatcher_->Send(message);
|
| }
|
|
|
| +void CacheStorageListener::OnCacheStorageHasCallback(
|
| + int thread_id,
|
| + int request_id,
|
| + bool has_cache,
|
| + CacheStorage::CacheStorageError error) {
|
| + if (error != CacheStorage::CACHE_STORAGE_ERROR_NO_ERROR) {
|
| + Send(new CacheStorageMsg_CacheStorageHasError(
|
| + thread_id, request_id, ToWebServiceWorkerCacheError(error)));
|
| + return;
|
| + }
|
| + if (!has_cache) {
|
| + Send(new CacheStorageMsg_CacheStorageHasError(
|
| + thread_id, request_id, blink::WebServiceWorkerCacheErrorNotFound));
|
| + return;
|
| + }
|
| + Send(new CacheStorageMsg_CacheStorageHasSuccess(thread_id, request_id));
|
| +}
|
| +
|
| +void CacheStorageListener::OnCacheStorageOpenCallback(
|
| + int thread_id,
|
| + int request_id,
|
| + const scoped_refptr<CacheStorageCache>& cache,
|
| + CacheStorage::CacheStorageError error) {
|
| + if (error != CacheStorage::CACHE_STORAGE_ERROR_NO_ERROR) {
|
| + Send(new CacheStorageMsg_CacheStorageOpenError(
|
| + thread_id, request_id, ToWebServiceWorkerCacheError(error)));
|
| + return;
|
| + }
|
| + CacheID cache_id = StoreCacheReference(cache);
|
| + Send(new CacheStorageMsg_CacheStorageOpenSuccess(thread_id, request_id,
|
| + cache_id));
|
| +}
|
| +
|
| +void CacheStorageListener::OnCacheStorageDeleteCallback(
|
| + int thread_id,
|
| + int request_id,
|
| + bool deleted,
|
| + CacheStorage::CacheStorageError error) {
|
| + if (!deleted || error != CacheStorage::CACHE_STORAGE_ERROR_NO_ERROR) {
|
| + Send(new CacheStorageMsg_CacheStorageDeleteError(
|
| + thread_id, request_id, ToWebServiceWorkerCacheError(error)));
|
| + return;
|
| + }
|
| + Send(new CacheStorageMsg_CacheStorageDeleteSuccess(thread_id, request_id));
|
| +}
|
| +
|
| +void CacheStorageListener::OnCacheStorageKeysCallback(
|
| + int thread_id,
|
| + int request_id,
|
| + const std::vector<std::string>& strings,
|
| + CacheStorage::CacheStorageError error) {
|
| + if (error != CacheStorage::CACHE_STORAGE_ERROR_NO_ERROR) {
|
| + Send(new CacheStorageMsg_CacheStorageKeysError(
|
| + thread_id, request_id, ToWebServiceWorkerCacheError(error)));
|
| + return;
|
| + }
|
| +
|
| + std::vector<base::string16> string16s;
|
| + for (size_t i = 0, max = strings.size(); i < max; ++i) {
|
| + string16s.push_back(base::UTF8ToUTF16(strings[i]));
|
| + }
|
| + Send(new CacheStorageMsg_CacheStorageKeysSuccess(thread_id, request_id,
|
| + string16s));
|
| +}
|
| +
|
| +void CacheStorageListener::OnCacheStorageMatchCallback(
|
| + int thread_id,
|
| + int request_id,
|
| + CacheStorageCache::ErrorType error,
|
| + scoped_ptr<ServiceWorkerResponse> response,
|
| + scoped_ptr<storage::BlobDataHandle> blob_data_handle) {
|
| + if (error != CacheStorageCache::ERROR_TYPE_OK) {
|
| + Send(new CacheStorageMsg_CacheStorageMatchError(
|
| + thread_id, request_id, CacheErrorToWebServiceWorkerCacheError(error)));
|
| + return;
|
| + }
|
| +
|
| + if (blob_data_handle)
|
| + StoreBlobDataHandle(blob_data_handle.Pass());
|
| +
|
| + Send(new CacheStorageMsg_CacheStorageMatchSuccess(thread_id, request_id,
|
| + *response));
|
| +}
|
| +
|
| void CacheStorageListener::OnCacheMatchCallback(
|
| int thread_id,
|
| int request_id,
|
|
|