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