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)#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CACHE_LISTENER_H_ 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CACHE_LISTENER_H_ 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/memory/weak_ptr.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/strings/string16.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/browser/service_worker/embedded_worker_instance.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/browser/service_worker/service_worker_cache_storage.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace content { 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct ServiceWorkerBatchOperation; 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct ServiceWorkerCacheQueryParams; 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct ServiceWorkerFetchRequest; 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ServiceWorkerVersion; 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// This class listens for requests on the Cache APIs, and sends response 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// messages to the renderer process. There is one instance per 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// ServiceWorkerVersion instance. 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ServiceWorkerCacheListener : public EmbeddedWorkerInstance::Listener { 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerCacheListener(ServiceWorkerVersion* version, 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::WeakPtr<ServiceWorkerContextCore> context); 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~ServiceWorkerCacheListener(); 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // From EmbeddedWorkerInstance::Listener: 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The message receiver functions for the CacheStorage API: 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnCacheStorageGet(int request_id, const base::string16& cache_name); 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnCacheStorageHas(int request_id, const base::string16& cache_name); 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnCacheStorageCreate(int request_id, 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const base::string16& cache_name); 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnCacheStorageDelete(int request_id, 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const base::string16& cache_name); 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnCacheStorageKeys(int request_id); 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The message receiver functions for the Cache API: 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnCacheMatch(int request_id, 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int cache_id, 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServiceWorkerFetchRequest& request, 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServiceWorkerCacheQueryParams& match_params); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnCacheMatchAll(int request_id, 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int cache_id, 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServiceWorkerFetchRequest& request, 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServiceWorkerCacheQueryParams& match_params); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnCacheKeys(int request_id, 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int cache_id, 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServiceWorkerFetchRequest& request, 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServiceWorkerCacheQueryParams& match_params); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnCacheBatch(int request_id, 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int cache_id, 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<ServiceWorkerBatchOperation>& operations); 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnCacheClosed(int cache_id); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef int32_t CacheID; // TODO(jkarlin): Bump to 64 bit. 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef std::map<CacheID, scoped_refptr<ServiceWorkerCache> > IDToCacheMap; 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void Send(const IPC::Message& message); 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnCacheStorageGetCallback( 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_refptr<ServiceWorkerCache>& cache, 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerCacheStorage::CacheStorageError error); 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnCacheStorageHasCallback( 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool has_cache, 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerCacheStorage::CacheStorageError error); 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnCacheStorageCreateCallback( 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_refptr<ServiceWorkerCache>& cache, 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerCacheStorage::CacheStorageError error); 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnCacheStorageDeleteCallback( 796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool deleted, 816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerCacheStorage::CacheStorageError error); 826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnCacheStorageKeysCallback( 836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const std::vector<std::string>& strings, 856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerCacheStorage::CacheStorageError error); 866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Hangs onto a scoped_refptr for the cache if it isn't already doing so. 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns a unique cache_id. Call DropCacheReference when the client is done 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // with this cache. 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CacheID StoreCacheReference(const scoped_refptr<ServiceWorkerCache>& cache); 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void DropCacheReference(CacheID cache_id); 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // The ServiceWorkerVersion to use for messaging back to the renderer thread. 946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceWorkerVersion* version_; 956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // The ServiceWorkerContextCore should always outlive this. 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::WeakPtr<ServiceWorkerContextCore> context_; 986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IDToCacheMap id_to_cache_map_; 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CacheID next_cache_id_; 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::WeakPtrFactory<ServiceWorkerCacheListener> weak_factory_; 1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ServiceWorkerCacheListener); 1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace content 1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CACHE_LISTENER_H_ 110