Chromium Code Reviews| 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 |
| index b5b44b2c449a9af236bd83ae65918900db4c2394..575e2a224afe625c1af82351eb9ce2bcab952bb7 100644 |
| --- a/content/renderer/service_worker/service_worker_cache_storage_dispatcher.cc |
| +++ b/content/renderer/service_worker/service_worker_cache_storage_dispatcher.cc |
| @@ -4,15 +4,152 @@ |
| #include "content/renderer/service_worker/service_worker_cache_storage_dispatcher.h" |
| +#include <map> |
| +#include <string> |
| +#include <utility> |
| + |
| #include "base/logging.h" |
| +#include "base/strings/utf_string_conversions.h" |
| #include "content/common/service_worker/service_worker_messages.h" |
| #include "content/public/renderer/render_thread.h" |
| #include "content/renderer/service_worker/service_worker_script_context.h" |
| +#include "third_party/WebKit/public/platform/WebHTTPHeaderVisitor.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" |
| namespace content { |
| +using blink::WebServiceWorkerCacheError; |
| +using blink::WebServiceWorkerRequest; |
| + |
| namespace { |
| +class HeaderVisitor : public blink::WebHTTPHeaderVisitor { |
| + public: |
| + HeaderVisitor(ServiceWorkerHeaderMap* headers) : headers_(headers) {} |
| + virtual ~HeaderVisitor() {} |
| + |
| + virtual void visitHeader(const blink::WebString& name, |
| + const blink::WebString& value) { |
| + headers_->insert(ServiceWorkerHeaderMap::value_type( |
| + base::UTF16ToASCII(name), base::UTF16ToASCII(value))); |
| + } |
| + |
| + private: |
| + ServiceWorkerHeaderMap* headers_; |
| +}; |
| + |
| +scoped_ptr<HeaderVisitor> MakeHeaderVisitor(ServiceWorkerHeaderMap* headers) { |
| + return scoped_ptr<HeaderVisitor>(new HeaderVisitor(headers)).Pass(); |
| +} |
| + |
| +ServiceWorkerFetchRequest FetchRequestFromWebRequest( |
| + const blink::WebServiceWorkerRequest& web_request) { |
| + ServiceWorkerHeaderMap headers; |
| + web_request.visitHTTPHeaderFields(MakeHeaderVisitor(&headers).get()); |
| + |
| + return ServiceWorkerFetchRequest(web_request.url(), |
| + base::UTF16ToASCII(web_request.method()), |
| + headers, web_request.referrerUrl(), |
| + 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.spec()), |
| + blink::WebReferrerPolicy::WebReferrerPolicyNever); |
|
jochen (gone - plz use gerrit)
2015/01/21 13:55:14
this is not correct. You can't set a referrer and
jochen (gone - plz use gerrit)
2015/01/21 13:58:27
The fact that referrer is a URL is also a bug :-/
|
| + 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; |
| + web_response.visitHTTPHeaderFields(MakeHeaderVisitor(&headers).get()); |
| + |
| + return ServiceWorkerResponse( |
| + web_response.url(), web_response.status(), |
| + base::UTF16ToASCII(web_response.statusText()), headers, |
| + base::UTF16ToASCII(web_response.blobUUID())); |
| +} |
| + |
| +void 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)); |
| + for (ServiceWorkerHeaderMap::const_iterator i = response.headers.begin(), |
| + end = response.headers.end(); |
| + i != end; ++i) { |
| + web_response->setHeader(base::ASCIIToUTF16(i->first), |
| + base::ASCIIToUTF16(i->second)); |
| + } |
| + // TODO(gavinp): set blob here. |
| +} |
| + |
| +blink::WebVector<blink::WebServiceWorkerResponse> 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; |
| +} |
| + |
| +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.prefix_match = web_query_params.prefixMatch; |
| + |
| + 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); |
| @@ -27,9 +164,65 @@ void ClearCallbacksMapWithErrors(T* callbacks_map) { |
| } // 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( |
| ServiceWorkerScriptContext* script_context) |
| - : script_context_(script_context) {} |
| + : script_context_(script_context), |
| + weak_factory_(this) {} |
| ServiceWorkerCacheStorageDispatcher::~ServiceWorkerCacheStorageDispatcher() { |
| ClearCallbacksMapWithErrors(&get_callbacks_); |
| @@ -37,32 +230,53 @@ ServiceWorkerCacheStorageDispatcher::~ServiceWorkerCacheStorageDispatcher() { |
| ClearCallbacksMapWithErrors(&create_callbacks_); |
| ClearCallbacksMapWithErrors(&delete_callbacks_); |
| ClearCallbacksMapWithErrors(&keys_callbacks_); |
| + |
| + ClearCallbacksMapWithErrors(&cache_match_callbacks_); |
| + ClearCallbacksMapWithErrors(&cache_match_all_callbacks_); |
| + ClearCallbacksMapWithErrors(&cache_keys_callbacks_); |
| + ClearCallbacksMapWithErrors(&cache_batch_callbacks_); |
| } |
| bool ServiceWorkerCacheStorageDispatcher::OnMessageReceived( |
| const IPC::Message& message) { |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP(ServiceWorkerCacheStorageDispatcher, message) |
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageGetSuccess, |
| - OnCacheStorageGetSuccess) |
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageHasSuccess, |
| - OnCacheStorageHasSuccess) |
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageCreateSuccess, |
| - OnCacheStorageCreateSuccess) |
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageDeleteSuccess, |
| - OnCacheStorageDeleteSuccess) |
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageKeysSuccess, |
| - OnCacheStorageKeysSuccess) |
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageGetError, |
| - OnCacheStorageGetError) |
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageHasError, |
| - OnCacheStorageHasError) |
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageCreateError, |
| - OnCacheStorageCreateError) |
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageDeleteError, |
| - OnCacheStorageDeleteError) |
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageKeysError, |
| - OnCacheStorageKeysError) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageGetSuccess, |
| + OnCacheStorageGetSuccess) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageHasSuccess, |
| + OnCacheStorageHasSuccess) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageCreateSuccess, |
| + OnCacheStorageCreateSuccess) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageDeleteSuccess, |
| + OnCacheStorageDeleteSuccess) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageKeysSuccess, |
| + OnCacheStorageKeysSuccess) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageGetError, |
| + OnCacheStorageGetError) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageHasError, |
| + OnCacheStorageHasError) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageCreateError, |
| + OnCacheStorageCreateError) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageDeleteError, |
| + OnCacheStorageDeleteError) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CacheStorageKeysError, |
| + OnCacheStorageKeysError) |
| + 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() |
| @@ -72,9 +286,10 @@ bool ServiceWorkerCacheStorageDispatcher::OnMessageReceived( |
| void ServiceWorkerCacheStorageDispatcher::OnCacheStorageGetSuccess( |
| int request_id, |
| int cache_id) { |
| - CacheStorageWithCacheCallbacks* callbacks = |
| - get_callbacks_.Lookup(request_id); |
| - callbacks->onSuccess(NULL); |
| + WebCache* web_cache = new WebCache(weak_factory_.GetWeakPtr(), cache_id); |
| + web_caches_.AddWithID(web_cache, cache_id); |
| + CacheStorageWithCacheCallbacks* callbacks = get_callbacks_.Lookup(request_id); |
| + callbacks->onSuccess(web_cache); |
| get_callbacks_.Remove(request_id); |
| } |
| @@ -88,9 +303,11 @@ void ServiceWorkerCacheStorageDispatcher::OnCacheStorageHasSuccess( |
| void ServiceWorkerCacheStorageDispatcher::OnCacheStorageCreateSuccess( |
| int request_id, |
| int cache_id) { |
| + WebCache* web_cache = new WebCache(weak_factory_.GetWeakPtr(), cache_id); |
| + web_caches_.AddWithID(web_cache, cache_id); |
| CacheStorageWithCacheCallbacks* callbacks = |
| create_callbacks_.Lookup(request_id); |
| - callbacks->onSuccess(NULL); |
| + callbacks->onSuccess(web_cache); |
| create_callbacks_.Remove(request_id); |
| } |
| @@ -155,6 +372,91 @@ void ServiceWorkerCacheStorageDispatcher::OnCacheStorageKeysError( |
| keys_callbacks_.Remove(request_id); |
| } |
| +void ServiceWorkerCacheStorageDispatcher::OnCacheMatchSuccess( |
| + int request_id, |
| + const ServiceWorkerResponse& response) { |
| + blink::WebServiceWorkerCache::CacheMatchCallbacks* callbacks = |
| + cache_match_callbacks_.Lookup(request_id); |
| + |
| + blink::WebServiceWorkerResponse web_response; |
| + PopulateWebResponseFromResponse(response, &web_response); |
| + callbacks->onSuccess(&web_response); |
| + cache_match_callbacks_.Remove(request_id); |
| +} |
| + |
| +void ServiceWorkerCacheStorageDispatcher::OnCacheMatchAllSuccess( |
| + int request_id, |
| + const std::vector<ServiceWorkerResponse>& responses) { |
| + blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks = |
| + cache_match_all_callbacks_.Lookup(request_id); |
| + |
| + blink::WebVector<blink::WebServiceWorkerResponse> |
| + web_responses = WebResponsesFromResponses(responses); |
| + callbacks->onSuccess(&web_responses); |
| + cache_match_all_callbacks_.Remove(request_id); |
| +} |
| + |
| +void ServiceWorkerCacheStorageDispatcher::OnCacheKeysSuccess( |
| + |
| + int request_id, |
| + const std::vector<ServiceWorkerFetchRequest>& requests) { |
| + blink::WebServiceWorkerCache::CacheWithRequestsCallbacks* callbacks = |
| + cache_keys_callbacks_.Lookup(request_id); |
| + |
| + blink::WebVector<blink::WebServiceWorkerRequest> |
| + web_requests = WebRequestsFromRequests(requests); |
| + callbacks->onSuccess(&web_requests); |
| + cache_keys_callbacks_.Remove(request_id); |
| +} |
| + |
| +void ServiceWorkerCacheStorageDispatcher::OnCacheBatchSuccess( |
| + int request_id, |
| + const std::vector<ServiceWorkerResponse>& responses) { |
| + blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks = |
| + cache_batch_callbacks_.Lookup(request_id); |
| + |
| + blink::WebVector<blink::WebServiceWorkerResponse> |
| + web_responses = WebResponsesFromResponses(responses); |
| + callbacks->onSuccess(&web_responses); |
| + cache_batch_callbacks_.Remove(request_id); |
| +} |
| + |
| +void ServiceWorkerCacheStorageDispatcher::OnCacheMatchError( |
| + int request_id, |
| + blink::WebServiceWorkerCacheError reason) { |
| + blink::WebServiceWorkerCache::CacheMatchCallbacks* callbacks = |
| + cache_match_callbacks_.Lookup(request_id); |
| + callbacks->onError(&reason); |
| + cache_match_callbacks_.Remove(request_id); |
| +} |
| + |
| +void ServiceWorkerCacheStorageDispatcher::OnCacheMatchAllError( |
| + int request_id, |
| + blink::WebServiceWorkerCacheError reason) { |
| + blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks = |
| + cache_match_all_callbacks_.Lookup(request_id); |
| + callbacks->onError(&reason); |
| + cache_match_all_callbacks_.Remove(request_id); |
| +} |
| + |
| +void ServiceWorkerCacheStorageDispatcher::OnCacheKeysError( |
| + int request_id, |
| + blink::WebServiceWorkerCacheError reason) { |
| + blink::WebServiceWorkerCache::CacheWithRequestsCallbacks* callbacks = |
| + cache_keys_callbacks_.Lookup(request_id); |
| + callbacks->onError(&reason); |
| + cache_keys_callbacks_.Remove(request_id); |
| +} |
| + |
| +void ServiceWorkerCacheStorageDispatcher::OnCacheBatchError( |
| + int request_id, |
| + blink::WebServiceWorkerCacheError reason) { |
| + blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks = |
| + cache_batch_callbacks_.Lookup(request_id); |
| + callbacks->onError(&reason); |
| + cache_batch_callbacks_.Remove(request_id); |
| +} |
| + |
| void ServiceWorkerCacheStorageDispatcher::dispatchGet( |
| CacheStorageWithCacheCallbacks* callbacks, |
| const blink::WebString& cacheName) { |
| @@ -194,4 +496,68 @@ void ServiceWorkerCacheStorageDispatcher::dispatchKeys( |
| script_context_->GetRoutingID(), request_id)); |
| } |
| +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); |
| + |
| + script_context_->Send(new ServiceWorkerHostMsg_CacheMatch( |
| + script_context_->GetRoutingID(), 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); |
| + |
| + script_context_->Send(new ServiceWorkerHostMsg_CacheMatchAll( |
| + script_context_->GetRoutingID(), 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); |
| + |
| + script_context_->Send(new ServiceWorkerHostMsg_CacheKeys( |
| + script_context_->GetRoutingID(), 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); |
| + |
| + 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])); |
| + } |
| + |
| + script_context_->Send(new ServiceWorkerHostMsg_CacheBatch( |
| + script_context_->GetRoutingID(), request_id, cache_id, operations)); |
| +} |
| + |
| +void ServiceWorkerCacheStorageDispatcher::OnWebCacheDestruction(int cache_id) { |
| + web_caches_.Remove(cache_id); |
| + script_context_->Send(new ServiceWorkerHostMsg_CacheClosed( |
| + script_context_->GetRoutingID(), cache_id)); |
| +} |
| + |
| } // namespace content |