1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_FETCH_DISPATCHER_H_ 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_FETCH_DISPATCHER_H_ 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/basictypes.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/callback.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/weak_ptr.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/common/service_worker/service_worker_status_code.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/common/service_worker/service_worker_types.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace content { 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ServiceWorkerVersion; 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// A helper class to dispatch fetch event to a service worker. 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ServiceWorkerFetchDispatcher { 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) typedef base::Callback<void(ServiceWorkerStatusCode, 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ServiceWorkerFetchEventResult, 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ServiceWorkerResponse&)> FetchCallback; 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ServiceWorkerFetchDispatcher(scoped_ptr<ServiceWorkerFetchRequest> request, 2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ServiceWorkerVersion* version, 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::Closure& prepare_callback, 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const FetchCallback& fetch_callback); 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ~ServiceWorkerFetchDispatcher(); 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Dispatches a fetch event to the |version| given in ctor, and fires 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // |callback| (also given in ctor) when finishes. 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void Run(); 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private: 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void DidWaitActivation(); 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void DidFailActivation(); 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void DispatchFetchEvent(); 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void DidPrepare(); 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void DidFinish(ServiceWorkerStatusCode status, 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ServiceWorkerFetchEventResult fetch_result, 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ServiceWorkerResponse& response); 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_refptr<ServiceWorkerVersion> version_; 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Closure prepare_callback_; 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FetchCallback fetch_callback_; 4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<ServiceWorkerFetchRequest> request_; 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::WeakPtrFactory<ServiceWorkerFetchDispatcher> weak_factory_; 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ServiceWorkerFetchDispatcher); 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace content 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_FETCH_DISPATCHER_H_ 56