#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_REGISTER_JOB_H_
#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_REGISTER_JOB_H_
#include <vector>
#include "base/memory/weak_ptr.h"
#include "content/browser/service_worker/service_worker_register_job_base.h"
#include "content/browser/service_worker/service_worker_registration.h"
#include "content/common/service_worker/service_worker_status_code.h"
#include "url/gurl.h"
namespace content {
class ServiceWorkerJobCoordinator;
class ServiceWorkerStorage;
class ServiceWorkerRegisterJob : public ServiceWorkerRegisterJobBase {
public:
typedef base::Callback<void(ServiceWorkerStatusCode status,
const scoped_refptr<ServiceWorkerRegistration>&
registration)> RegistrationCallback;
ServiceWorkerRegisterJob(base::WeakPtr<ServiceWorkerContextCore> context,
const GURL& pattern,
const GURL& script_url);
virtual ~ServiceWorkerRegisterJob();
void AddCallback(const RegistrationCallback& callback, int process_id);
virtual void Start() OVERRIDE;
virtual bool Equals(ServiceWorkerRegisterJobBase* job) OVERRIDE;
virtual RegistrationJobType GetType() OVERRIDE;
private:
void HandleExistingRegistrationAndContinue(
ServiceWorkerStatusCode status,
const scoped_refptr<ServiceWorkerRegistration>& registration);
void RegisterAndContinue(ServiceWorkerStatusCode status);
void UpdateAndContinue(ServiceWorkerStatusCode status);
void OnStartWorkerFinished(ServiceWorkerStatusCode status);
void InstallAndContinue();
void OnInstallFinished(ServiceWorkerStatusCode status);
void ActivateAndContinue();
void Complete(ServiceWorkerStatusCode status);
void RunCallbacks(ServiceWorkerStatusCode status);
base::WeakPtr<ServiceWorkerContextCore> context_;
scoped_refptr<ServiceWorkerRegistration> registration_;
scoped_refptr<ServiceWorkerVersion> pending_version_;
const GURL pattern_;
const GURL script_url_;
std::vector<RegistrationCallback> callbacks_;
std::vector<int> pending_process_ids_;
base::WeakPtrFactory<ServiceWorkerRegisterJob> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRegisterJob);
};
}
#endif