Index: chrome/browser/worker_host/worker_process_host.h |
diff --git a/chrome/browser/worker_host/worker_process_host.h b/chrome/browser/worker_host/worker_process_host.h |
index 1834725e4df9e99d88218a7c3c059102a6f0b396..b5a8d74f3c0b98e62f50a54194d98b8f897204ae 100644 |
--- a/chrome/browser/worker_host/worker_process_host.h |
+++ b/chrome/browser/worker_host/worker_process_host.h |
@@ -9,12 +9,16 @@ |
#include "base/basictypes.h" |
#include "base/task.h" |
+#include "chrome/browser/worker_host/worker_document_set.h" |
#include "chrome/common/child_process_host.h" |
#include "googleurl/src/gurl.h" |
#include "ipc/ipc_channel.h" |
+struct ViewHostMsg_CreateWorker_Params; |
+ |
class WorkerProcessHost : public ChildProcessHost { |
public: |
+ |
// Contains information about each worker instance, needed to forward messages |
// between the renderer and worker processes. |
class WorkerInstance { |
@@ -23,8 +27,6 @@ class WorkerProcessHost : public ChildProcessHost { |
bool shared, |
bool off_the_record, |
const string16& name, |
- int renderer_id, |
- int render_view_route_id, |
int worker_route_id); |
// Unique identifier for a worker client. |
@@ -35,6 +37,7 @@ class WorkerProcessHost : public ChildProcessHost { |
void RemoveSender(IPC::Message::Sender* sender, int sender_route_id); |
void RemoveSenders(IPC::Message::Sender* sender); |
bool HasSender(IPC::Message::Sender* sender, int sender_route_id) const; |
+ bool RendererIsParent(int renderer_id, int render_view_route_id) const; |
int NumSenders() const { return senders_.size(); } |
// Returns the single sender (must only be one). |
SenderInfo GetSender() const; |
@@ -45,31 +48,13 @@ class WorkerProcessHost : public ChildProcessHost { |
bool Matches( |
const GURL& url, const string16& name, bool off_the_record) const; |
- // Adds a document to a shared worker's document set. |
- void AddToDocumentSet(IPC::Message::Sender* parent, |
- unsigned long long document_id); |
- |
- // Checks to see if a document is in a shared worker's document set. |
- bool IsInDocumentSet(IPC::Message::Sender* parent, |
- unsigned long long document_id) const; |
- |
- // Removes a specific document from a shared worker's document set when |
- // that document is detached. |
- void RemoveFromDocumentSet(IPC::Message::Sender* parent, |
- unsigned long long document_id); |
- |
- // Copies the document set from one instance to another |
- void CopyDocumentSet(const WorkerInstance& instance) { |
- document_set_ = instance.document_set_; |
+ // Shares the passed instance's WorkerDocumentSet with this instance. This |
+ // instance's current WorkerDocumentSet is dereferenced (and freed if this |
+ // is the only reference) as a result. |
+ void ShareDocumentSet(const WorkerInstance& instance) { |
+ worker_document_set_ = instance.worker_document_set_; |
}; |
- // Invoked when a render process exits, to remove all associated documents |
- // from a shared worker's document set. |
- void RemoveAllAssociatedDocuments(IPC::Message::Sender* parent); |
- |
- bool IsDocumentSetEmpty() const { return document_set_.empty(); } |
- |
- |
// Accessors |
bool shared() const { return shared_; } |
bool off_the_record() const { return off_the_record_; } |
@@ -77,14 +62,12 @@ class WorkerProcessHost : public ChildProcessHost { |
void set_closed(bool closed) { closed_ = closed; } |
const GURL& url() const { return url_; } |
const string16 name() const { return name_; } |
- int renderer_id() const { return renderer_id_; } |
- int render_view_route_id() const { return render_view_route_id_; } |
int worker_route_id() const { return worker_route_id_; } |
+ WorkerDocumentSet* worker_document_set() const { |
+ return worker_document_set_; |
+ } |
private: |
- // Unique identifier for an associated document. |
- typedef std::pair<IPC::Message::Sender*, unsigned long long> DocumentInfo; |
- typedef std::list<DocumentInfo> DocumentSet; |
// Set of all senders (clients) associated with this worker. |
typedef std::list<SenderInfo> SenderList; |
GURL url_; |
@@ -92,11 +75,9 @@ class WorkerProcessHost : public ChildProcessHost { |
bool off_the_record_; |
bool closed_; |
string16 name_; |
- int renderer_id_; |
- int render_view_route_id_; |
int worker_route_id_; |
SenderList senders_; |
- DocumentSet document_set_; |
+ scoped_refptr<WorkerDocumentSet> worker_document_set_; |
}; |
explicit WorkerProcessHost(ResourceDispatcherHost* resource_dispatcher_host); |
@@ -142,6 +123,7 @@ class WorkerProcessHost : public ChildProcessHost { |
void OnLookupSharedWorker(const GURL& url, |
const string16& name, |
unsigned long long document_id, |
+ int render_view_route_id, |
int* route_id, |
bool* url_error); |
@@ -161,10 +143,7 @@ class WorkerProcessHost : public ChildProcessHost { |
// Updates the title shown in the task manager. |
void UpdateTitle(); |
- void OnCreateWorker(const GURL& url, |
- bool shared, |
- const string16& name, |
- int render_view_route_id, |
+ void OnCreateWorker(const ViewHostMsg_CreateWorker_Params& params, |
int* route_id); |
void OnCancelCreateDedicatedWorker(int route_id); |
void OnForwardToWorker(const IPC::Message& message); |