| Index: chrome/browser/worker_host/worker_service.h
|
| diff --git a/chrome/browser/worker_host/worker_service.h b/chrome/browser/worker_host/worker_service.h
|
| index 40267aace678b4cdc1772e684aeee470420f59c1..0de41210948add7fefcbcbc2a64cdd7187e51e0e 100644
|
| --- a/chrome/browser/worker_host/worker_service.h
|
| +++ b/chrome/browser/worker_host/worker_service.h
|
| @@ -32,15 +32,32 @@ class WorkerService : public NotificationObserver {
|
| int renderer_pid,
|
| int render_view_route_id,
|
| IPC::Message::Sender* sender,
|
| - int sender_id,
|
| int sender_route_id);
|
|
|
| + // Validates the passed URL and checks for the existence of matching shared
|
| + // worker. Returns true if the url was found, and sets the url_mismatch out
|
| + // param to true/false depending on whether there's a url mismatch with an
|
| + // existing shared worker with the same name.
|
| + bool LookupSharedWorker(const GURL &url,
|
| + const string16& name,
|
| + unsigned long long document_id,
|
| + IPC::Message::Sender* sender,
|
| + int sender_route_id,
|
| + bool* url_mismatch);
|
| +
|
| + // Notification from the renderer that a given document has detached, so any
|
| + // associated shared workers can be shut down.
|
| + void DocumentDetached(IPC::Message::Sender* sender,
|
| + unsigned long long document_id);
|
| +
|
| // Cancel creation of a dedicated worker that hasn't started yet.
|
| - void CancelCreateDedicatedWorker(int sender_id, int sender_route_id);
|
| + void CancelCreateDedicatedWorker(IPC::Message::Sender* sender,
|
| + int sender_route_id);
|
|
|
| // Called by the worker creator when a message arrives that should be
|
| // forwarded to the worker process.
|
| - void ForwardMessage(const IPC::Message& message, int sender_id);
|
| + void ForwardMessage(const IPC::Message& message,
|
| + IPC::Message::Sender* sender);
|
|
|
| int next_worker_route_id() { return ++next_worker_route_id_; }
|
|
|
| @@ -49,6 +66,9 @@ class WorkerService : public NotificationObserver {
|
| const WorkerProcessHost::WorkerInstance* FindWorkerInstance(
|
| int worker_process_id);
|
|
|
| + WorkerProcessHost::WorkerInstance* FindSharedWorkerInstance(
|
| + const GURL& url, const string16& name);
|
| +
|
| // Used when multiple workers can run in the same process.
|
| static const int kMaxWorkerProcessesWhenSharing;
|
|
|
| @@ -90,12 +110,24 @@ class WorkerService : public NotificationObserver {
|
| // Notifies us that a worker process has closed.
|
| void WorkerProcessDestroyed(WorkerProcessHost* process);
|
|
|
| + // APIs for manipulating our set of pending shared worker instances.
|
| + WorkerProcessHost::WorkerInstance* CreatePendingInstance(
|
| + const GURL& url, const string16& name);
|
| + WorkerProcessHost::WorkerInstance* FindPendingInstance(
|
| + const GURL& url, const string16& name);
|
| + void RemovePendingInstance(const GURL& url, const string16& name);
|
| +
|
| NotificationRegistrar registrar_;
|
| int next_worker_route_id_;
|
| ResourceDispatcherHost* resource_dispatcher_host_;
|
|
|
| WorkerProcessHost::Instances queued_workers_;
|
|
|
| + // These are shared workers that have been looked up, but not created yet.
|
| + // We need to keep a list of these to synchronously detect shared worker
|
| + // URL mismatches when two pages launch shared workers simultaneously.
|
| + WorkerProcessHost::Instances pending_shared_workers_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(WorkerService);
|
| };
|
|
|
|
|