16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file. 46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/browser/service_worker/service_worker_cache_listener.h" 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/bind.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/debug/trace_event.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/browser/service_worker/service_worker_cache_storage_manager.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/browser/service_worker/service_worker_context_core.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/browser/service_worker/service_worker_version.h" 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/common/service_worker/service_worker_messages.h" 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebServiceWorkerCacheError.h" 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace content { 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)using blink::WebServiceWorkerCacheError; 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace { 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)WebServiceWorkerCacheError ToWebServiceWorkerCacheError( 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerCacheStorage::CacheStorageError err) { 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) switch (err) { 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_NO_ERROR: 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) NOTREACHED(); 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebServiceWorkerCacheErrorNotImplemented; 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_NOT_IMPLEMENTED: 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebServiceWorkerCacheErrorNotImplemented; 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_NOT_FOUND: 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebServiceWorkerCacheErrorNotFound; 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_EXISTS: 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebServiceWorkerCacheErrorExists; 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_STORAGE: 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // TODO(jkarlin): Changethis to CACHE_STORAGE_ERROR_STORAGE once that's 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // added. 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebServiceWorkerCacheErrorNotFound; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_CLOSING: 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(jkarlin): Update this to CACHE_STORAGE_ERROR_CLOSING once that's 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // added. 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebServiceWorkerCacheErrorNotFound; 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) NOTREACHED(); 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebServiceWorkerCacheErrorNotImplemented; 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)ServiceWorkerCacheListener::ServiceWorkerCacheListener( 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerVersion* version, 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::WeakPtr<ServiceWorkerContextCore> context) 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : version_(version), 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci context_(context), 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci next_cache_id_(0), 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci weak_factory_(this) { 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)ServiceWorkerCacheListener::~ServiceWorkerCacheListener() { 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool ServiceWorkerCacheListener::OnMessageReceived( 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const IPC::Message& message) { 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool handled = true; 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(ServiceWorkerCacheListener, message) 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_CacheStorageGet, 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) OnCacheStorageGet) 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_CacheStorageHas, 6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) OnCacheStorageHas) 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_CacheStorageCreate, 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) OnCacheStorageCreate) 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_CacheStorageDelete, 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) OnCacheStorageDelete) 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_CacheStorageKeys, 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) OnCacheStorageKeys) 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_CacheMatch, 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OnCacheMatch) 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_CacheMatchAll, 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OnCacheMatchAll) 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_CacheKeys, 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OnCacheKeys) 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_CacheBatch, 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OnCacheBatch) 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_CacheClosed, 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OnCacheClosed) 856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = false) 866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC_END_MESSAGE_MAP() 876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return handled; 896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ServiceWorkerCacheListener::OnCacheStorageGet( 926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const base::string16& cache_name) { 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TRACE_EVENT0("ServiceWorker", 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "ServiceWorkerCacheListener::OnCacheStorageGet"); 966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) context_->cache_manager()->GetCache( 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) version_->scope().GetOrigin(), 986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::UTF16ToUTF8(cache_name), 996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Bind(&ServiceWorkerCacheListener::OnCacheStorageGetCallback, 1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) weak_factory_.GetWeakPtr(), 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) request_id)); 1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ServiceWorkerCacheListener::OnCacheStorageHas( 1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const base::string16& cache_name) { 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TRACE_EVENT0("ServiceWorker", 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "ServiceWorkerCacheListener::OnCacheStorageHas"); 1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) context_->cache_manager()->HasCache( 1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) version_->scope().GetOrigin(), 1116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::UTF16ToUTF8(cache_name), 1126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Bind(&ServiceWorkerCacheListener::OnCacheStorageHasCallback, 1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) weak_factory_.GetWeakPtr(), 1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) request_id)); 1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ServiceWorkerCacheListener::OnCacheStorageCreate( 1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const base::string16& cache_name) { 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TRACE_EVENT0("ServiceWorker", 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "ServiceWorkerCacheListener::OnCacheStorageCreate"); 1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) context_->cache_manager()->CreateCache( 1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) version_->scope().GetOrigin(), 1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::UTF16ToUTF8(cache_name), 1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Bind(&ServiceWorkerCacheListener::OnCacheStorageCreateCallback, 1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) weak_factory_.GetWeakPtr(), 1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) request_id)); 1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ServiceWorkerCacheListener::OnCacheStorageDelete( 1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const base::string16& cache_name) { 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TRACE_EVENT0("ServiceWorker", 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "ServiceWorkerCacheListener::OnCacheStorageDelete"); 1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) context_->cache_manager()->DeleteCache( 1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) version_->scope().GetOrigin(), 1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::UTF16ToUTF8(cache_name), 1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Bind(&ServiceWorkerCacheListener::OnCacheStorageDeleteCallback, 1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) weak_factory_.GetWeakPtr(), 1406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) request_id)); 1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ServiceWorkerCacheListener::OnCacheStorageKeys(int request_id) { 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TRACE_EVENT0("ServiceWorker", 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "ServiceWorkerCacheListener::OnCacheStorageKeys"); 1466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) context_->cache_manager()->EnumerateCaches( 1476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) version_->scope().GetOrigin(), 1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Bind(&ServiceWorkerCacheListener::OnCacheStorageKeysCallback, 1496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) weak_factory_.GetWeakPtr(), 1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) request_id)); 1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ServiceWorkerCacheListener::OnCacheMatch( 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int request_id, 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int cache_id, 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServiceWorkerFetchRequest& request, 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServiceWorkerCacheQueryParams& match_params) { 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(gavinp,jkarlin): Implement this method. 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Send(ServiceWorkerMsg_CacheMatchError( 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci request_id, blink::WebServiceWorkerCacheErrorNotImplemented)); 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ServiceWorkerCacheListener::OnCacheMatchAll( 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int request_id, 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int cache_id, 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServiceWorkerFetchRequest& request, 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServiceWorkerCacheQueryParams& match_params) { 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(gavinp,jkarlin): Implement this method. 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Send(ServiceWorkerMsg_CacheMatchAllError( 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci request_id, blink::WebServiceWorkerCacheErrorNotImplemented)); 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ServiceWorkerCacheListener::OnCacheKeys( 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int request_id, 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int cache_id, 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServiceWorkerFetchRequest& request, 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServiceWorkerCacheQueryParams& match_params) { 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(gavinp,jkarlin): Implement this method. 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Send(ServiceWorkerMsg_CacheKeysError( 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci request_id, blink::WebServiceWorkerCacheErrorNotImplemented)); 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ServiceWorkerCacheListener::OnCacheBatch( 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int request_id, 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int cache_id, 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<ServiceWorkerBatchOperation>& operations) { 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(gavinp,jkarlin): Implement this method. 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Send(ServiceWorkerMsg_CacheBatchError( 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci request_id, blink::WebServiceWorkerCacheErrorNotImplemented)); 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ServiceWorkerCacheListener::OnCacheClosed(int cache_id) { 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(gavinp,jkarlin): Implement this method. 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ServiceWorkerCacheListener::Send(const IPC::Message& message) { 1976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) version_->embedded_worker()->SendMessage(message); 1986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ServiceWorkerCacheListener::OnCacheStorageGetCallback( 2016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_refptr<ServiceWorkerCache>& cache, 2036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerCacheStorage::CacheStorageError error) { 2046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (error != ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_NO_ERROR) { 2056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Send(ServiceWorkerMsg_CacheStorageGetError( 2066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) request_id, ToWebServiceWorkerCacheError(error))); 2076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 2086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CacheID cache_id = StoreCacheReference(cache); 2116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Send(ServiceWorkerMsg_CacheStorageGetSuccess(request_id, cache_id)); 2126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 2136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ServiceWorkerCacheListener::OnCacheStorageHasCallback( 2156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 2166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool has_cache, 2176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerCacheStorage::CacheStorageError error) { 2186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (error != ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_NO_ERROR) { 2196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Send(ServiceWorkerMsg_CacheStorageHasError( 2206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) request_id, ToWebServiceWorkerCacheError(error))); 2216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 2226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 2236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!has_cache) { 2246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Send(ServiceWorkerMsg_CacheStorageHasError( 2256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) request_id, 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebServiceWorkerCacheErrorNotFound)); 2276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 2286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 2296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Send(ServiceWorkerMsg_CacheStorageHasSuccess(request_id)); 2306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 2316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ServiceWorkerCacheListener::OnCacheStorageCreateCallback( 2336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_refptr<ServiceWorkerCache>& cache, 2356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerCacheStorage::CacheStorageError error) { 2366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (error != ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_NO_ERROR) { 2376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Send(ServiceWorkerMsg_CacheStorageCreateError( 2386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) request_id, ToWebServiceWorkerCacheError(error))); 2396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 2406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CacheID cache_id = StoreCacheReference(cache); 2426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Send(ServiceWorkerMsg_CacheStorageCreateSuccess(request_id, cache_id)); 2436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 2446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ServiceWorkerCacheListener::OnCacheStorageDeleteCallback( 2466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 2476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool deleted, 2486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerCacheStorage::CacheStorageError error) { 2496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!deleted || 2506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) error != ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_NO_ERROR) { 2516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Send(ServiceWorkerMsg_CacheStorageDeleteError( 2526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) request_id, ToWebServiceWorkerCacheError(error))); 2536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 2546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 2556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Send(ServiceWorkerMsg_CacheStorageDeleteSuccess(request_id)); 2566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 2576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ServiceWorkerCacheListener::OnCacheStorageKeysCallback( 2596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 2606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const std::vector<std::string>& strings, 2616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerCacheStorage::CacheStorageError error) { 2626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (error != ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_NO_ERROR) { 2636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Send(ServiceWorkerMsg_CacheStorageKeysError( 2646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) request_id, ToWebServiceWorkerCacheError(error))); 2656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 2666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 2676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::vector<base::string16> string16s; 2696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) for (size_t i = 0, max = strings.size(); i < max; ++i) { 2706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) string16s.push_back(base::UTF8ToUTF16(strings[i])); 2716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 2726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Send(ServiceWorkerMsg_CacheStorageKeysSuccess(request_id, string16s)); 2736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 2746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciServiceWorkerCacheListener::CacheID 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciServiceWorkerCacheListener::StoreCacheReference( 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_refptr<ServiceWorkerCache>& cache) { 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int cache_id = next_cache_id_++; 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci id_to_cache_map_[cache_id] = cache; 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return cache_id; 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ServiceWorkerCacheListener::DropCacheReference(CacheID cache_id) { 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci id_to_cache_map_.erase(cache_id); 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace content 288