#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_JOB_COORDINATOR_H_
#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_JOB_COORDINATOR_H_
#include <deque>
#include <map>
#include "content/browser/service_worker/service_worker_register_job.h"
#include "content/browser/service_worker/service_worker_unregister_job.h"
#include "content/common/content_export.h"
#include "url/gurl.h"
namespace content {
class EmbeddedWorkerRegistry;
class ServiceWorkerRegistration;
class ServiceWorkerStorage;
class CONTENT_EXPORT ServiceWorkerJobCoordinator {
public:
explicit ServiceWorkerJobCoordinator(
base::WeakPtr<ServiceWorkerContextCore> context);
~ServiceWorkerJobCoordinator();
void Register(const GURL& pattern,
const GURL& script_url,
int source_process_id,
const ServiceWorkerRegisterJob::RegistrationCallback& callback);
void Unregister(
const GURL& pattern,
int source_process_id,
const ServiceWorkerUnregisterJob::UnregistrationCallback& callback);
void FinishJob(const GURL& pattern, ServiceWorkerRegisterJobBase* job);
private:
class JobQueue {
public:
JobQueue();
~JobQueue();
ServiceWorkerRegisterJobBase* Push(
scoped_ptr<ServiceWorkerRegisterJobBase> job);
void Pop(ServiceWorkerRegisterJobBase* job);
bool empty() { return jobs_.empty(); }
private:
std::deque<ServiceWorkerRegisterJobBase*> jobs_;
};
typedef std::map<GURL, JobQueue> RegistrationJobMap;
base::WeakPtr<ServiceWorkerContextCore> context_;
RegistrationJobMap jobs_;
DISALLOW_COPY_AND_ASSIGN(ServiceWorkerJobCoordinator);
};
}
#endif