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 15 namespace content { 16 17 class EmbeddedWorkerRegistry; 18 class ServiceWorkerContextCore; 19 class ServiceWorkerJobCoordinator; 20 class ServiceWorkerRegistration; 21 class 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. 28 class 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