| Index: content/renderer/service_worker/service_worker_cache_storage_dispatcher.cc
|
| diff --git a/content/renderer/service_worker/service_worker_cache_storage_dispatcher.cc b/content/renderer/service_worker/service_worker_cache_storage_dispatcher.cc
|
| deleted file mode 100644
|
| index c7466cbaf7ae2faa3bcb9d5954d70d86f73f43f3..0000000000000000000000000000000000000000
|
| --- a/content/renderer/service_worker/service_worker_cache_storage_dispatcher.cc
|
| +++ /dev/null
|
| @@ -1,692 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "content/renderer/service_worker/service_worker_cache_storage_dispatcher.h"
|
| -
|
| -#include <map>
|
| -#include <string>
|
| -#include <utility>
|
| -
|
| -#include "base/lazy_instance.h"
|
| -#include "base/logging.h"
|
| -#include "base/metrics/histogram_macros.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "base/threading/thread_local.h"
|
| -#include "content/child/thread_safe_sender.h"
|
| -#include "content/common/service_worker/cache_storage_messages.h"
|
| -#include "content/public/common/referrer.h"
|
| -#include "content/public/renderer/render_thread.h"
|
| -#include "content/renderer/service_worker/service_worker_type_util.h"
|
| -#include "third_party/WebKit/public/platform/WebServiceWorkerCache.h"
|
| -#include "third_party/WebKit/public/platform/WebServiceWorkerRequest.h"
|
| -#include "third_party/WebKit/public/platform/WebServiceWorkerResponse.h"
|
| -
|
| -using base::TimeTicks;
|
| -
|
| -namespace content {
|
| -
|
| -using blink::WebServiceWorkerCacheStorage;
|
| -using blink::WebServiceWorkerCacheError;
|
| -using blink::WebServiceWorkerRequest;
|
| -
|
| -static base::LazyInstance<
|
| - base::ThreadLocalPointer<ServiceWorkerCacheStorageDispatcher>>::Leaky
|
| - g_cache_storage_dispatcher_tls = LAZY_INSTANCE_INITIALIZER;
|
| -
|
| -namespace {
|
| -
|
| -ServiceWorkerCacheStorageDispatcher* const kHasBeenDeleted =
|
| - reinterpret_cast<ServiceWorkerCacheStorageDispatcher*>(0x1);
|
| -
|
| -ServiceWorkerFetchRequest FetchRequestFromWebRequest(
|
| - const blink::WebServiceWorkerRequest& web_request) {
|
| - ServiceWorkerHeaderMap headers;
|
| - GetServiceWorkerHeaderMapFromWebRequest(web_request, &headers);
|
| -
|
| - return ServiceWorkerFetchRequest(
|
| - web_request.url(), base::UTF16ToASCII(web_request.method()), headers,
|
| - Referrer(web_request.referrerUrl(), web_request.referrerPolicy()),
|
| - web_request.isReload());
|
| -}
|
| -
|
| -void PopulateWebRequestFromFetchRequest(
|
| - const ServiceWorkerFetchRequest& request,
|
| - blink::WebServiceWorkerRequest* web_request) {
|
| - web_request->setURL(request.url);
|
| - web_request->setMethod(base::ASCIIToUTF16(request.method));
|
| - for (ServiceWorkerHeaderMap::const_iterator i = request.headers.begin(),
|
| - end = request.headers.end();
|
| - i != end; ++i) {
|
| - web_request->setHeader(base::ASCIIToUTF16(i->first),
|
| - base::ASCIIToUTF16(i->second));
|
| - }
|
| - web_request->setReferrer(base::ASCIIToUTF16(request.referrer.url.spec()),
|
| - request.referrer.policy);
|
| - web_request->setIsReload(request.is_reload);
|
| -}
|
| -
|
| -blink::WebVector<blink::WebServiceWorkerRequest> WebRequestsFromRequests(
|
| - const std::vector<ServiceWorkerFetchRequest>& requests) {
|
| - blink::WebVector<blink::WebServiceWorkerRequest>
|
| - web_requests(requests.size());
|
| - for (size_t i = 0; i < requests.size(); ++i)
|
| - PopulateWebRequestFromFetchRequest(requests[i], &(web_requests[i]));
|
| - return web_requests;
|
| -}
|
| -
|
| -ServiceWorkerResponse ResponseFromWebResponse(
|
| - const blink::WebServiceWorkerResponse& web_response) {
|
| - ServiceWorkerHeaderMap headers;
|
| - GetServiceWorkerHeaderMapFromWebResponse(web_response, &headers);
|
| - // We don't support streaming for cache.
|
| - DCHECK(web_response.streamURL().isEmpty());
|
| - return ServiceWorkerResponse(web_response.url(),
|
| - web_response.status(),
|
| - base::UTF16ToASCII(web_response.statusText()),
|
| - web_response.responseType(),
|
| - headers,
|
| - base::UTF16ToASCII(web_response.blobUUID()),
|
| - web_response.blobSize(),
|
| - web_response.streamURL());
|
| -}
|
| -
|
| -ServiceWorkerCacheQueryParams QueryParamsFromWebQueryParams(
|
| - const blink::WebServiceWorkerCache::QueryParams& web_query_params) {
|
| - ServiceWorkerCacheQueryParams query_params;
|
| - query_params.ignore_search = web_query_params.ignoreSearch;
|
| - query_params.ignore_method = web_query_params.ignoreMethod;
|
| - query_params.ignore_vary = web_query_params.ignoreVary;
|
| - query_params.cache_name = web_query_params.cacheName;
|
| - return query_params;
|
| -}
|
| -
|
| -ServiceWorkerCacheOperationType CacheOperationTypeFromWebCacheOperationType(
|
| - blink::WebServiceWorkerCache::OperationType operation_type) {
|
| - switch (operation_type) {
|
| - case blink::WebServiceWorkerCache::OperationTypePut:
|
| - return SERVICE_WORKER_CACHE_OPERATION_TYPE_PUT;
|
| - case blink::WebServiceWorkerCache::OperationTypeDelete:
|
| - return SERVICE_WORKER_CACHE_OPERATION_TYPE_DELETE;
|
| - default:
|
| - return SERVICE_WORKER_CACHE_OPERATION_TYPE_UNDEFINED;
|
| - }
|
| -}
|
| -
|
| -ServiceWorkerBatchOperation BatchOperationFromWebBatchOperation(
|
| - const blink::WebServiceWorkerCache::BatchOperation& web_operation) {
|
| - ServiceWorkerBatchOperation operation;
|
| - operation.operation_type =
|
| - CacheOperationTypeFromWebCacheOperationType(web_operation.operationType);
|
| - operation.request = FetchRequestFromWebRequest(web_operation.request);
|
| - operation.response = ResponseFromWebResponse(web_operation.response);
|
| - operation.match_params =
|
| - QueryParamsFromWebQueryParams(web_operation.matchParams);
|
| - return operation;
|
| -}
|
| -
|
| -template<typename T>
|
| -void ClearCallbacksMapWithErrors(T* callbacks_map) {
|
| - typename T::iterator iter(callbacks_map);
|
| - while (!iter.IsAtEnd()) {
|
| - blink::WebServiceWorkerCacheError reason =
|
| - blink::WebServiceWorkerCacheErrorNotFound;
|
| - iter.GetCurrentValue()->onError(&reason);
|
| - callbacks_map->Remove(iter.GetCurrentKey());
|
| - iter.Advance();
|
| - }
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// The WebCache object is the Chromium side implementation of the Blink
|
| -// WebServiceWorkerCache API. Most of its methods delegate directly to the
|
| -// ServiceWorkerStorage object, which is able to assign unique IDs as well
|
| -// as have a lifetime longer than the requests.
|
| -class ServiceWorkerCacheStorageDispatcher::WebCache
|
| - : public blink::WebServiceWorkerCache {
|
| - public:
|
| - WebCache(base::WeakPtr<ServiceWorkerCacheStorageDispatcher> dispatcher,
|
| - int cache_id)
|
| - : dispatcher_(dispatcher),
|
| - cache_id_(cache_id) {}
|
| -
|
| - virtual ~WebCache() {
|
| - if (dispatcher_)
|
| - dispatcher_->OnWebCacheDestruction(cache_id_);
|
| - }
|
| -
|
| - // From blink::WebServiceWorkerCache:
|
| - virtual void dispatchMatch(CacheMatchCallbacks* callbacks,
|
| - const blink::WebServiceWorkerRequest& request,
|
| - const QueryParams& query_params) {
|
| - if (!dispatcher_)
|
| - return;
|
| - dispatcher_->dispatchMatchForCache(cache_id_, callbacks, request,
|
| - query_params);
|
| - }
|
| - virtual void dispatchMatchAll(CacheWithResponsesCallbacks* callbacks,
|
| - const blink::WebServiceWorkerRequest& request,
|
| - const QueryParams& query_params) {
|
| - if (!dispatcher_)
|
| - return;
|
| - dispatcher_->dispatchMatchAllForCache(cache_id_, callbacks, request,
|
| - query_params);
|
| - }
|
| - virtual void dispatchKeys(CacheWithRequestsCallbacks* callbacks,
|
| - const blink::WebServiceWorkerRequest* request,
|
| - const QueryParams& query_params) {
|
| - if (!dispatcher_)
|
| - return;
|
| - dispatcher_->dispatchKeysForCache(cache_id_, callbacks, request,
|
| - query_params);
|
| - }
|
| - virtual void dispatchBatch(
|
| - CacheWithResponsesCallbacks* callbacks,
|
| - const blink::WebVector<BatchOperation>& batch_operations) {
|
| - if (!dispatcher_)
|
| - return;
|
| - dispatcher_->dispatchBatchForCache(cache_id_, callbacks, batch_operations);
|
| - }
|
| -
|
| - private:
|
| - const base::WeakPtr<ServiceWorkerCacheStorageDispatcher> dispatcher_;
|
| - const int cache_id_;
|
| -};
|
| -
|
| -ServiceWorkerCacheStorageDispatcher::ServiceWorkerCacheStorageDispatcher(
|
| - ThreadSafeSender* thread_safe_sender)
|
| - : thread_safe_sender_(thread_safe_sender), weak_factory_(this) {
|
| - g_cache_storage_dispatcher_tls.Pointer()->Set(this);
|
| -}
|
| -
|
| -ServiceWorkerCacheStorageDispatcher::~ServiceWorkerCacheStorageDispatcher() {
|
| - ClearCallbacksMapWithErrors(&has_callbacks_);
|
| - ClearCallbacksMapWithErrors(&open_callbacks_);
|
| - ClearCallbacksMapWithErrors(&delete_callbacks_);
|
| - ClearCallbacksMapWithErrors(&keys_callbacks_);
|
| - ClearCallbacksMapWithErrors(&match_callbacks_);
|
| -
|
| - ClearCallbacksMapWithErrors(&cache_match_callbacks_);
|
| - ClearCallbacksMapWithErrors(&cache_match_all_callbacks_);
|
| - ClearCallbacksMapWithErrors(&cache_keys_callbacks_);
|
| - ClearCallbacksMapWithErrors(&cache_batch_callbacks_);
|
| -
|
| - g_cache_storage_dispatcher_tls.Pointer()->Set(kHasBeenDeleted);
|
| -}
|
| -
|
| -ServiceWorkerCacheStorageDispatcher*
|
| -ServiceWorkerCacheStorageDispatcher::ThreadSpecificInstance(
|
| - ThreadSafeSender* thread_safe_sender) {
|
| - if (g_cache_storage_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted) {
|
| - NOTREACHED() << "Re-instantiating TLS ServiceWorkerCacheStorageDispatcher.";
|
| - g_cache_storage_dispatcher_tls.Pointer()->Set(NULL);
|
| - }
|
| - if (g_cache_storage_dispatcher_tls.Pointer()->Get())
|
| - return g_cache_storage_dispatcher_tls.Pointer()->Get();
|
| -
|
| - ServiceWorkerCacheStorageDispatcher* dispatcher =
|
| - new ServiceWorkerCacheStorageDispatcher(thread_safe_sender);
|
| - if (WorkerTaskRunner::Instance()->CurrentWorkerId())
|
| - WorkerTaskRunner::Instance()->AddStopObserver(dispatcher);
|
| - return dispatcher;
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnWorkerRunLoopStopped() {
|
| - delete this;
|
| -}
|
| -
|
| -bool ServiceWorkerCacheStorageDispatcher::Send(IPC::Message* msg) {
|
| - return thread_safe_sender_->Send(msg);
|
| -}
|
| -
|
| -bool ServiceWorkerCacheStorageDispatcher::OnMessageReceived(
|
| - const IPC::Message& message) {
|
| - bool handled = true;
|
| - IPC_BEGIN_MESSAGE_MAP(ServiceWorkerCacheStorageDispatcher, message)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageHasSuccess,
|
| - OnCacheStorageHasSuccess)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageOpenSuccess,
|
| - OnCacheStorageOpenSuccess)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageDeleteSuccess,
|
| - OnCacheStorageDeleteSuccess)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageKeysSuccess,
|
| - OnCacheStorageKeysSuccess)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageMatchSuccess,
|
| - OnCacheStorageMatchSuccess)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageHasError,
|
| - OnCacheStorageHasError)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageOpenError,
|
| - OnCacheStorageOpenError)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageDeleteError,
|
| - OnCacheStorageDeleteError)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageKeysError,
|
| - OnCacheStorageKeysError)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageMatchError,
|
| - OnCacheStorageMatchError)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheMatchSuccess,
|
| - OnCacheMatchSuccess)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheMatchAllSuccess,
|
| - OnCacheMatchAllSuccess)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheKeysSuccess,
|
| - OnCacheKeysSuccess)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheBatchSuccess,
|
| - OnCacheBatchSuccess)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheMatchError,
|
| - OnCacheMatchError)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheMatchAllError,
|
| - OnCacheMatchAllError)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheKeysError,
|
| - OnCacheKeysError)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheBatchError,
|
| - OnCacheBatchError)
|
| - IPC_MESSAGE_UNHANDLED(handled = false)
|
| - IPC_END_MESSAGE_MAP()
|
| -
|
| - return handled;
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheStorageHasSuccess(
|
| - int thread_id,
|
| - int request_id) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - UMA_HISTOGRAM_TIMES("ServiceWorkerCache.CacheStorage.Has",
|
| - TimeTicks::Now() - has_times_[request_id]);
|
| - WebServiceWorkerCacheStorage::CacheStorageCallbacks* callbacks =
|
| - has_callbacks_.Lookup(request_id);
|
| - callbacks->onSuccess();
|
| - has_callbacks_.Remove(request_id);
|
| - has_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheStorageOpenSuccess(
|
| - int thread_id,
|
| - int request_id,
|
| - int cache_id) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - WebCache* web_cache = new WebCache(weak_factory_.GetWeakPtr(), cache_id);
|
| - web_caches_.AddWithID(web_cache, cache_id);
|
| - UMA_HISTOGRAM_TIMES("ServiceWorkerCache.CacheStorage.Open",
|
| - TimeTicks::Now() - open_times_[request_id]);
|
| - WebServiceWorkerCacheStorage::CacheStorageWithCacheCallbacks* callbacks =
|
| - open_callbacks_.Lookup(request_id);
|
| - callbacks->onSuccess(web_cache);
|
| - open_callbacks_.Remove(request_id);
|
| - open_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheStorageDeleteSuccess(
|
| - int thread_id,
|
| - int request_id) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - UMA_HISTOGRAM_TIMES("ServiceWorkerCache.CacheStorage.Delete",
|
| - TimeTicks::Now() - delete_times_[request_id]);
|
| - WebServiceWorkerCacheStorage::CacheStorageCallbacks* callbacks =
|
| - delete_callbacks_.Lookup(request_id);
|
| - callbacks->onSuccess();
|
| - delete_callbacks_.Remove(request_id);
|
| - delete_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheStorageKeysSuccess(
|
| - int thread_id,
|
| - int request_id,
|
| - const std::vector<base::string16>& keys) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - blink::WebVector<blink::WebString> webKeys(keys.size());
|
| - for (size_t i = 0; i < keys.size(); ++i)
|
| - webKeys[i] = keys[i];
|
| -
|
| - UMA_HISTOGRAM_TIMES("ServiceWorkerCache.CacheStorage.Keys",
|
| - TimeTicks::Now() - keys_times_[request_id]);
|
| - WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks* callbacks =
|
| - keys_callbacks_.Lookup(request_id);
|
| - callbacks->onSuccess(&webKeys);
|
| - keys_callbacks_.Remove(request_id);
|
| - keys_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheStorageMatchSuccess(
|
| - int thread_id,
|
| - int request_id,
|
| - const ServiceWorkerResponse& response) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - blink::WebServiceWorkerResponse web_response;
|
| - PopulateWebResponseFromResponse(response, &web_response);
|
| -
|
| - UMA_HISTOGRAM_TIMES("ServiceWorkerCache.CacheStorage.Match",
|
| - TimeTicks::Now() - match_times_[request_id]);
|
| - WebServiceWorkerCacheStorage::CacheStorageMatchCallbacks* callbacks =
|
| - match_callbacks_.Lookup(request_id);
|
| - callbacks->onSuccess(&web_response);
|
| - match_callbacks_.Remove(request_id);
|
| - match_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheStorageHasError(
|
| - int thread_id,
|
| - int request_id,
|
| - blink::WebServiceWorkerCacheError reason) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - WebServiceWorkerCacheStorage::CacheStorageCallbacks* callbacks =
|
| - has_callbacks_.Lookup(request_id);
|
| - callbacks->onError(&reason);
|
| - has_callbacks_.Remove(request_id);
|
| - has_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheStorageOpenError(
|
| - int thread_id,
|
| - int request_id,
|
| - blink::WebServiceWorkerCacheError reason) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - WebServiceWorkerCacheStorage::CacheStorageWithCacheCallbacks* callbacks =
|
| - open_callbacks_.Lookup(request_id);
|
| - callbacks->onError(&reason);
|
| - open_callbacks_.Remove(request_id);
|
| - open_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheStorageDeleteError(
|
| - int thread_id,
|
| - int request_id,
|
| - blink::WebServiceWorkerCacheError reason) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - WebServiceWorkerCacheStorage::CacheStorageCallbacks* callbacks =
|
| - delete_callbacks_.Lookup(request_id);
|
| - callbacks->onError(&reason);
|
| - delete_callbacks_.Remove(request_id);
|
| - delete_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheStorageKeysError(
|
| - int thread_id,
|
| - int request_id,
|
| - blink::WebServiceWorkerCacheError reason) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks* callbacks =
|
| - keys_callbacks_.Lookup(request_id);
|
| - callbacks->onError(&reason);
|
| - keys_callbacks_.Remove(request_id);
|
| - keys_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheStorageMatchError(
|
| - int thread_id,
|
| - int request_id,
|
| - blink::WebServiceWorkerCacheError reason) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - WebServiceWorkerCacheStorage::CacheStorageMatchCallbacks* callbacks =
|
| - match_callbacks_.Lookup(request_id);
|
| - callbacks->onError(&reason);
|
| - match_callbacks_.Remove(request_id);
|
| - match_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheMatchSuccess(
|
| - int thread_id,
|
| - int request_id,
|
| - const ServiceWorkerResponse& response) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - blink::WebServiceWorkerResponse web_response;
|
| - PopulateWebResponseFromResponse(response, &web_response);
|
| -
|
| - UMA_HISTOGRAM_TIMES("ServiceWorkerCache.Cache.Match",
|
| - TimeTicks::Now() - cache_match_times_[request_id]);
|
| - blink::WebServiceWorkerCache::CacheMatchCallbacks* callbacks =
|
| - cache_match_callbacks_.Lookup(request_id);
|
| - callbacks->onSuccess(&web_response);
|
| - cache_match_callbacks_.Remove(request_id);
|
| - cache_match_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheMatchAllSuccess(
|
| - int thread_id,
|
| - int request_id,
|
| - const std::vector<ServiceWorkerResponse>& responses) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - blink::WebVector<blink::WebServiceWorkerResponse>
|
| - web_responses = WebResponsesFromResponses(responses);
|
| -
|
| - UMA_HISTOGRAM_TIMES("ServiceWorkerCache.Cache.MatchAll",
|
| - TimeTicks::Now() - cache_match_all_times_[request_id]);
|
| - blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks =
|
| - cache_match_all_callbacks_.Lookup(request_id);
|
| - callbacks->onSuccess(&web_responses);
|
| - cache_match_all_callbacks_.Remove(request_id);
|
| - cache_match_all_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheKeysSuccess(
|
| - int thread_id,
|
| - int request_id,
|
| - const std::vector<ServiceWorkerFetchRequest>& requests) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - blink::WebVector<blink::WebServiceWorkerRequest>
|
| - web_requests = WebRequestsFromRequests(requests);
|
| -
|
| - UMA_HISTOGRAM_TIMES("ServiceWorkerCache.Cache.Keys",
|
| - TimeTicks::Now() - cache_keys_times_[request_id]);
|
| - blink::WebServiceWorkerCache::CacheWithRequestsCallbacks* callbacks =
|
| - cache_keys_callbacks_.Lookup(request_id);
|
| - callbacks->onSuccess(&web_requests);
|
| - cache_keys_callbacks_.Remove(request_id);
|
| - cache_keys_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheBatchSuccess(
|
| - int thread_id,
|
| - int request_id,
|
| - const std::vector<ServiceWorkerResponse>& responses) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - blink::WebVector<blink::WebServiceWorkerResponse>
|
| - web_responses = WebResponsesFromResponses(responses);
|
| -
|
| - UMA_HISTOGRAM_TIMES("ServiceWorkerCache.Cache.Batch",
|
| - TimeTicks::Now() - cache_batch_times_[request_id]);
|
| - blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks =
|
| - cache_batch_callbacks_.Lookup(request_id);
|
| - callbacks->onSuccess(&web_responses);
|
| - cache_batch_callbacks_.Remove(request_id);
|
| - cache_batch_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheMatchError(
|
| - int thread_id,
|
| - int request_id,
|
| - blink::WebServiceWorkerCacheError reason) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - blink::WebServiceWorkerCache::CacheMatchCallbacks* callbacks =
|
| - cache_match_callbacks_.Lookup(request_id);
|
| - callbacks->onError(&reason);
|
| - cache_match_callbacks_.Remove(request_id);
|
| - cache_match_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheMatchAllError(
|
| - int thread_id,
|
| - int request_id,
|
| - blink::WebServiceWorkerCacheError reason) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks =
|
| - cache_match_all_callbacks_.Lookup(request_id);
|
| - callbacks->onError(&reason);
|
| - cache_match_all_callbacks_.Remove(request_id);
|
| - cache_match_all_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheKeysError(
|
| - int thread_id,
|
| - int request_id,
|
| - blink::WebServiceWorkerCacheError reason) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - blink::WebServiceWorkerCache::CacheWithRequestsCallbacks* callbacks =
|
| - cache_keys_callbacks_.Lookup(request_id);
|
| - callbacks->onError(&reason);
|
| - cache_keys_callbacks_.Remove(request_id);
|
| - cache_keys_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnCacheBatchError(
|
| - int thread_id,
|
| - int request_id,
|
| - blink::WebServiceWorkerCacheError reason) {
|
| - DCHECK_EQ(thread_id, CurrentWorkerId());
|
| - blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks =
|
| - cache_batch_callbacks_.Lookup(request_id);
|
| - callbacks->onError(&reason);
|
| - cache_batch_callbacks_.Remove(request_id);
|
| - cache_batch_times_.erase(request_id);
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::dispatchHas(
|
| - WebServiceWorkerCacheStorage::CacheStorageCallbacks* callbacks,
|
| - const GURL& origin,
|
| - const blink::WebString& cacheName) {
|
| - int request_id = has_callbacks_.Add(callbacks);
|
| - has_times_[request_id] = base::TimeTicks::Now();
|
| - Send(new ServiceWorkerHostMsg_CacheStorageHas(CurrentWorkerId(), request_id,
|
| - origin, cacheName));
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::dispatchOpen(
|
| - WebServiceWorkerCacheStorage::CacheStorageWithCacheCallbacks* callbacks,
|
| - const GURL& origin,
|
| - const blink::WebString& cacheName) {
|
| - int request_id = open_callbacks_.Add(callbacks);
|
| - open_times_[request_id] = base::TimeTicks::Now();
|
| - Send(new ServiceWorkerHostMsg_CacheStorageOpen(CurrentWorkerId(), request_id,
|
| - origin, cacheName));
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::dispatchDelete(
|
| - WebServiceWorkerCacheStorage::CacheStorageCallbacks* callbacks,
|
| - const GURL& origin,
|
| - const blink::WebString& cacheName) {
|
| - int request_id = delete_callbacks_.Add(callbacks);
|
| - delete_times_[request_id] = base::TimeTicks::Now();
|
| - Send(new ServiceWorkerHostMsg_CacheStorageDelete(
|
| - CurrentWorkerId(), request_id, origin, cacheName));
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::dispatchKeys(
|
| - WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks* callbacks,
|
| - const GURL& origin) {
|
| - int request_id = keys_callbacks_.Add(callbacks);
|
| - keys_times_[request_id] = base::TimeTicks::Now();
|
| - Send(new ServiceWorkerHostMsg_CacheStorageKeys(CurrentWorkerId(), request_id,
|
| - origin));
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::dispatchMatch(
|
| - WebServiceWorkerCacheStorage::CacheStorageMatchCallbacks* callbacks,
|
| - const GURL& origin,
|
| - const blink::WebServiceWorkerRequest& request,
|
| - const blink::WebServiceWorkerCache::QueryParams& query_params) {
|
| - int request_id = match_callbacks_.Add(callbacks);
|
| - match_times_[request_id] = base::TimeTicks::Now();
|
| - Send(new ServiceWorkerHostMsg_CacheStorageMatch(
|
| - CurrentWorkerId(), request_id, origin,
|
| - FetchRequestFromWebRequest(request),
|
| - QueryParamsFromWebQueryParams(query_params)));
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::dispatchMatchForCache(
|
| - int cache_id,
|
| - blink::WebServiceWorkerCache::CacheMatchCallbacks* callbacks,
|
| - const blink::WebServiceWorkerRequest& request,
|
| - const blink::WebServiceWorkerCache::QueryParams& query_params) {
|
| - int request_id = cache_match_callbacks_.Add(callbacks);
|
| - cache_match_times_[request_id] = base::TimeTicks::Now();
|
| -
|
| - Send(new ServiceWorkerHostMsg_CacheMatch(
|
| - CurrentWorkerId(), request_id, cache_id,
|
| - FetchRequestFromWebRequest(request),
|
| - QueryParamsFromWebQueryParams(query_params)));
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::dispatchMatchAllForCache(
|
| - int cache_id,
|
| - blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks,
|
| - const blink::WebServiceWorkerRequest& request,
|
| - const blink::WebServiceWorkerCache::QueryParams& query_params) {
|
| - int request_id = cache_match_all_callbacks_.Add(callbacks);
|
| - cache_match_all_times_[request_id] = base::TimeTicks::Now();
|
| -
|
| - Send(new ServiceWorkerHostMsg_CacheMatchAll(
|
| - CurrentWorkerId(), request_id, cache_id,
|
| - FetchRequestFromWebRequest(request),
|
| - QueryParamsFromWebQueryParams(query_params)));
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::dispatchKeysForCache(
|
| - int cache_id,
|
| - blink::WebServiceWorkerCache::CacheWithRequestsCallbacks* callbacks,
|
| - const blink::WebServiceWorkerRequest* request,
|
| - const blink::WebServiceWorkerCache::QueryParams& query_params) {
|
| - int request_id = cache_keys_callbacks_.Add(callbacks);
|
| - cache_keys_times_[request_id] = base::TimeTicks::Now();
|
| -
|
| - Send(new ServiceWorkerHostMsg_CacheKeys(
|
| - CurrentWorkerId(), request_id, cache_id,
|
| - request ? FetchRequestFromWebRequest(*request)
|
| - : ServiceWorkerFetchRequest(),
|
| - QueryParamsFromWebQueryParams(query_params)));
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::dispatchBatchForCache(
|
| - int cache_id,
|
| - blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks,
|
| - const blink::WebVector<
|
| - blink::WebServiceWorkerCache::BatchOperation>& web_operations) {
|
| - int request_id = cache_batch_callbacks_.Add(callbacks);
|
| - cache_batch_times_[request_id] = base::TimeTicks::Now();
|
| -
|
| - std::vector<ServiceWorkerBatchOperation> operations;
|
| - operations.reserve(web_operations.size());
|
| - for (size_t i = 0; i < web_operations.size(); ++i) {
|
| - operations.push_back(
|
| - BatchOperationFromWebBatchOperation(web_operations[i]));
|
| - }
|
| -
|
| - Send(new ServiceWorkerHostMsg_CacheBatch(CurrentWorkerId(), request_id,
|
| - cache_id, operations));
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::OnWebCacheDestruction(int cache_id) {
|
| - web_caches_.Remove(cache_id);
|
| - Send(new ServiceWorkerHostMsg_CacheClosed(cache_id));
|
| -}
|
| -
|
| -void ServiceWorkerCacheStorageDispatcher::PopulateWebResponseFromResponse(
|
| - const ServiceWorkerResponse& response,
|
| - blink::WebServiceWorkerResponse* web_response) {
|
| - web_response->setURL(response.url);
|
| - web_response->setStatus(response.status_code);
|
| - web_response->setStatusText(base::ASCIIToUTF16(response.status_text));
|
| - web_response->setResponseType(response.response_type);
|
| -
|
| - for (const auto& i : response.headers) {
|
| - web_response->setHeader(base::ASCIIToUTF16(i.first),
|
| - base::ASCIIToUTF16(i.second));
|
| - }
|
| -
|
| - if (!response.blob_uuid.empty()) {
|
| - web_response->setBlob(blink::WebString::fromUTF8(response.blob_uuid),
|
| - response.blob_size);
|
| - // Let the host know that it can release its reference to the blob.
|
| - Send(new ServiceWorkerHostMsg_BlobDataHandled(response.blob_uuid));
|
| - }
|
| -}
|
| -
|
| -blink::WebVector<blink::WebServiceWorkerResponse>
|
| -ServiceWorkerCacheStorageDispatcher::WebResponsesFromResponses(
|
| - const std::vector<ServiceWorkerResponse>& responses) {
|
| - blink::WebVector<blink::WebServiceWorkerResponse> web_responses(
|
| - responses.size());
|
| - for (size_t i = 0; i < responses.size(); ++i)
|
| - PopulateWebResponseFromResponse(responses[i], &(web_responses[i]));
|
| - return web_responses;
|
| -}
|
| -
|
| -} // namespace content
|
|
|