Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8573)

Unified Diff: chrome/browser/worker_host/worker_process_host.h

Issue 6055002: Create a message filter for message port messages. This allows a nice cleanu... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/worker_host/worker_process_host.h
===================================================================
--- chrome/browser/worker_host/worker_process_host.h (revision 69724)
+++ chrome/browser/worker_host/worker_process_host.h (working copy)
@@ -9,26 +9,19 @@
#include <list>
#include "base/basictypes.h"
-#include "base/callback.h"
#include "base/file_path.h"
#include "chrome/browser/browser_child_process_host.h"
#include "chrome/browser/net/chrome_url_request_context.h"
#include "chrome/browser/worker_host/worker_document_set.h"
#include "googleurl/src/gurl.h"
-class ChromeURLRequestContext;
-class ChromeURLRequestContextGetter;
-namespace webkit_database {
-class DatabaseTracker;
-} // namespace webkit_database
+class URLRequestContextGetter;
-struct ViewHostMsg_CreateWorker_Params;
-
// The WorkerProcessHost is the interface that represents the browser side of
// the browser <-> worker communication channel. There will be one
// WorkerProcessHost per worker process. Currently each worker runs in its own
// process, but that may change. However, we do assume [by storing a
-// ChromeURLRequestContext] that a WorkerProcessHost serves a single Profile.
+// URLRequestContext] that a WorkerProcessHost serves a single Profile.
class WorkerProcessHost : public BrowserChildProcessHost {
public:
@@ -44,24 +37,24 @@
int parent_process_id,
int parent_appcache_host_id,
int64 main_resource_appcache_id,
- ChromeURLRequestContext* request_context);
+ URLRequestContextGetter* request_context);
~WorkerInstance();
// Unique identifier for a worker client.
- typedef std::pair<IPC::Message::Sender*, int> SenderInfo;
+ typedef std::pair<WorkerMessageFilter*, int> FilterInfo;
- // APIs to manage the sender list for a given instance.
- void AddSender(IPC::Message::Sender* sender, int sender_route_id);
- 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;
+ // APIs to manage the filter list for a given instance.
+ void AddFilter(WorkerMessageFilter* filter, int route_id);
+ void RemoveFilter(WorkerMessageFilter* filter, int route_id);
+ void RemoveFilters(WorkerMessageFilter* filter);
+ bool HasFilter(WorkerMessageFilter* filter, int route_id) const;
+ bool RendererIsParent(int render_process_id, int render_view_id) const;
+ int NumFilters() const { return filters_.size(); }
+ // Returns the single filter (must only be one).
+ FilterInfo GetFilter() const;
- typedef std::list<SenderInfo> SenderList;
- const SenderList& senders() const { return senders_; }
+ typedef std::list<FilterInfo> FilterList;
+ const FilterList& filters() const { return filters_; }
// Checks if this WorkerInstance matches the passed url/name params
// (per the comparison algorithm in the WebWorkers spec). This API only
@@ -92,12 +85,12 @@
WorkerDocumentSet* worker_document_set() const {
return worker_document_set_;
}
- ChromeURLRequestContext* request_context() const {
+ URLRequestContextGetter* request_context() const {
return request_context_;
}
private:
- // Set of all senders (clients) associated with this worker.
+ // Set of all filters (clients) associated with this worker.
GURL url_;
bool shared_;
bool off_the_record_;
@@ -107,34 +100,36 @@
int parent_process_id_;
int parent_appcache_host_id_;
int64 main_resource_appcache_id_;
- scoped_refptr<ChromeURLRequestContext> request_context_;
- SenderList senders_;
+ scoped_refptr<URLRequestContextGetter> request_context_;
+ FilterList filters_;
scoped_refptr<WorkerDocumentSet> worker_document_set_;
};
WorkerProcessHost(
ResourceDispatcherHost* resource_dispatcher_host,
- ChromeURLRequestContext* request_context);
+ URLRequestContextGetter* request_context);
~WorkerProcessHost();
// Starts the process. Returns true iff it succeeded.
- bool Init();
+ // |render_process_id| is the renderer process responsible for starting this
+ // worker.
+ bool Init(int render_process_id);
// Creates a worker object in the process.
void CreateWorker(const WorkerInstance& instance);
// Returns true iff the given message from a renderer process was forwarded to
// the worker.
- bool FilterMessage(const IPC::Message& message, IPC::Message::Sender* sender);
+ bool FilterMessage(const IPC::Message& message, WorkerMessageFilter* filter);
- void SenderShutdown(IPC::Message::Sender* sender);
+ void FilterShutdown(WorkerMessageFilter* filter);
// Shuts down any shared workers that are no longer referenced by active
// documents.
- void DocumentDetached(IPC::Message::Sender* sender,
+ void DocumentDetached(WorkerMessageFilter* filter,
unsigned long long document_id);
- ChromeURLRequestContext* request_context() const {
+ URLRequestContextGetter* request_context() const {
return request_context_;
}
@@ -146,61 +141,45 @@
Instances& mutable_instances() { return instances_; }
private:
+ // Called when the process has been launched successfully.
+ virtual void OnProcessLaunched();
+
+ // Creates and adds the message filters.
+ void CreateMessageFilters(int render_process_id);
+
// IPC::Channel::Listener implementation:
// Called when a message arrives from the worker process.
virtual void OnMessageReceived(const IPC::Message& message);
- // Creates and adds the message filters.
- void CreateMessageFilters();
-
- // Called when the process has been launched successfully.
- virtual void OnProcessLaunched();
-
- // Called when the app invokes close() from within worker context.
void OnWorkerContextClosed(int worker_route_id);
+ void OnAllowDatabase(int worker_route_id,
+ const GURL& url,
+ const string16& name,
+ const string16& display_name,
+ unsigned long estimated_size,
+ bool* result);
- // Called if a worker tries to connect to a shared worker.
- void OnLookupSharedWorker(const ViewHostMsg_CreateWorker_Params& params,
- bool* exists,
- int* route_id,
- bool* url_error);
-
- // Given a Sender, returns the callback that generates a new routing id.
- static CallbackWithReturnValue<int>::Type* GetNextRouteIdCallback(
- IPC::Message::Sender* sender);
-
// Relays a message to the given endpoint. Takes care of parsing the message
// if it contains a message port and sending it a valid route id.
static void RelayMessage(const IPC::Message& message,
- IPC::Message::Sender* sender,
- int route_id,
- CallbackWithReturnValue<int>::Type* next_route_id);
+ WorkerMessageFilter* filter,
+ int route_id);
virtual bool CanShutdown();
// Updates the title shown in the task manager.
void UpdateTitle();
- void OnCreateWorker(const ViewHostMsg_CreateWorker_Params& params,
- int* route_id);
- void OnCancelCreateDedicatedWorker(int route_id);
- void OnForwardToWorker(const IPC::Message& message);
+ ChromeURLRequestContext* GetChromeURLRequestContext();
- // Checks the content settings whether access to web databases is enabled and
- // relays the WebDatabaseAccessed message to all documents attached to a
- // worker.
- void OnAllowDatabase(const GURL& url,
- const string16& name,
- const string16& display_name,
- unsigned long estimated_size,
- IPC::Message* reply_msg);
-
Instances instances_;
- scoped_refptr<ChromeURLRequestContext> request_context_;
+ scoped_refptr<URLRequestContextGetter> request_context_;
- // A callback to create a routing id for the associated worker process.
- scoped_ptr<CallbackWithReturnValue<int>::Type> next_route_id_callback_;
+ // A reference to the filter associated with this worker process. We need to
+ // keep this around since we'll use it when forward messages to the worker
+ // process.
+ scoped_refptr<WorkerMessageFilter> worker_message_filter_;
DISALLOW_COPY_AND_ASSIGN(WorkerProcessHost);
};

Powered by Google App Engine
This is Rietveld 408576698