1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_UNREGISTER_JOB_H_
6#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_UNREGISTER_JOB_H_
7
8#include <vector>
9
10#include "base/memory/weak_ptr.h"
11#include "content/browser/service_worker/service_worker_register_job_base.h"
12#include "content/common/service_worker/service_worker_status_code.h"
13#include "url/gurl.h"
14
15namespace content {
16
17class EmbeddedWorkerRegistry;
18class ServiceWorkerContextCore;
19class ServiceWorkerJobCoordinator;
20class ServiceWorkerRegistration;
21class ServiceWorkerStorage;
22
23// Handles the unregistration of a Service Worker.
24//
25// The unregistration process is primarily cleanup, removing everything that was
26// created during the registration process, including the
27// ServiceWorkerRegistration itself.
28class ServiceWorkerUnregisterJob : public ServiceWorkerRegisterJobBase {
29 public:
30  typedef base::Callback<void(ServiceWorkerStatusCode status)>
31      UnregistrationCallback;
32
33  ServiceWorkerUnregisterJob(base::WeakPtr<ServiceWorkerContextCore> context,
34                             const GURL& pattern);
35  virtual ~ServiceWorkerUnregisterJob();
36
37  // Registers a callback to be called when the job completes (whether
38  // successfully or not). Multiple callbacks may be registered.
39  void AddCallback(const UnregistrationCallback& callback);
40
41  // ServiceWorkerRegisterJobBase implementation:
42  virtual void Start() OVERRIDE;
43  virtual void Abort() OVERRIDE;
44  virtual bool Equals(ServiceWorkerRegisterJobBase* job) OVERRIDE;
45  virtual RegistrationJobType GetType() OVERRIDE;
46
47 private:
48  void OnRegistrationFound(
49      ServiceWorkerStatusCode status,
50      const scoped_refptr<ServiceWorkerRegistration>& registration);
51  void Complete(ServiceWorkerStatusCode status);
52  void CompleteInternal(ServiceWorkerStatusCode status);
53  void ResolvePromise(ServiceWorkerStatusCode status);
54
55  base::WeakPtr<ServiceWorkerContextCore> context_;
56  const GURL pattern_;
57  std::vector<UnregistrationCallback> callbacks_;
58  bool is_promise_resolved_;
59  base::WeakPtrFactory<ServiceWorkerUnregisterJob> weak_factory_;
60
61  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerUnregisterJob);
62};
63}  // namespace content
64
65#endif  // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_UNREGISTER_JOB_H_
66