diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-15 22:19:48 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-15 22:19:48 +0000 |
commit | 8e2b6472071f38c065a3d00adb136ef259ef68a1 (patch) | |
tree | 8a05864f6463e4948c6468139998a59eb6b54899 /chrome/browser/browser_child_process_host.h | |
parent | 10a4a0aa5e9a1754752454ee2d4d8aff872a61a3 (diff) | |
download | chromium_src-8e2b6472071f38c065a3d00adb136ef259ef68a1.zip chromium_src-8e2b6472071f38c065a3d00adb136ef259ef68a1.tar.gz chromium_src-8e2b6472071f38c065a3d00adb136ef259ef68a1.tar.bz2 |
Create a ResourceMessageFilter to filter resource related IPCs. This gets rid of the awkward ResourceDispatcherHost::Receiver interface and allows a bunch of cleanup. I've also generalized the filtering done in WorkerProcessHost and moved it to ChildProcessHost (since it's now used to add the ResourceMessageFilter).
Review URL: http://codereview.chromium.org/5874002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69335 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser_child_process_host.h')
-rw-r--r-- | chrome/browser/browser_child_process_host.h | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/chrome/browser/browser_child_process_host.h b/chrome/browser/browser_child_process_host.h index b7bd39a..7524018 100644 --- a/chrome/browser/browser_child_process_host.h +++ b/chrome/browser/browser_child_process_host.h @@ -9,17 +9,19 @@ #include <list> #include "chrome/browser/child_process_launcher.h" -#include "chrome/browser/renderer_host/resource_dispatcher_host.h" +#include "chrome/browser/renderer_host/resource_message_filter.h" #include "chrome/common/child_process_host.h" +#include "chrome/common/child_process_info.h" +class ResourceDispatcherHost; // Plugins/workers and other child processes that live on the IO thread should // derive from this class. // // [Browser]RenderProcessHost is the main exception that doesn't derive from // this class. That project lives on the UI thread. -class BrowserChildProcessHost : public ResourceDispatcherHost::Receiver, - public ChildProcessHost, +class BrowserChildProcessHost : public ChildProcessHost, + public ChildProcessInfo, public ChildProcessLauncher::Client { public: virtual ~BrowserChildProcessHost(); @@ -34,9 +36,6 @@ class BrowserChildProcessHost : public ResourceDispatcherHost::Receiver, // Terminates all child processes and deletes each ChildProcessHost instance. static void TerminateAll(); - // ResourceDispatcherHost::Receiver implementation: - virtual bool Send(IPC::Message* msg); - // The Iterator class allows iteration through either all child processes, or // ones of a specific type, depending on which constructor is used. Note that // this should be done from the IO thread and that the iterator should not be @@ -45,7 +44,7 @@ class BrowserChildProcessHost : public ResourceDispatcherHost::Receiver, class Iterator { public: Iterator(); - explicit Iterator(ProcessType type); + explicit Iterator(ChildProcessInfo::ProcessType type); BrowserChildProcessHost* operator->() { return *iterator_; } BrowserChildProcessHost* operator*() { return *iterator_; } BrowserChildProcessHost* operator++(); @@ -53,15 +52,26 @@ class BrowserChildProcessHost : public ResourceDispatcherHost::Receiver, private: bool all_; - ProcessType type_; + ChildProcessInfo::ProcessType type_; std::list<BrowserChildProcessHost*>::iterator iterator_; }; protected: - // The resource_dispatcher_host may be NULL to indicate none is needed for + // |resource_dispatcher_host| may be NULL to indicate none is needed for // this process type. - BrowserChildProcessHost(ProcessType type, - ResourceDispatcherHost* resource_dispatcher_host); + // |url_request_context_getter| allows derived classes to override the + // URLRequestContext. + BrowserChildProcessHost( + ChildProcessInfo::ProcessType type, + ResourceDispatcherHost* resource_dispatcher_host, + ResourceMessageFilter::URLRequestContextOverride* + url_request_context_override); + + // A convenient constructor for those classes that want to use the default + // URLRequestContext. + BrowserChildProcessHost( + ChildProcessInfo::ProcessType type, + ResourceDispatcherHost* resource_dispatcher_host); // Derived classes call this to launch the child process asynchronously. void Launch( @@ -73,7 +83,7 @@ class BrowserChildProcessHost : public ResourceDispatcherHost::Receiver, #endif CommandLine* cmd_line); - // Returns the handle of the child process. This must be called only after + // Returns the handle of the child process. This can be called only after // OnProcessLaunched is called or it will be invalid and may crash. base::ProcessHandle GetChildProcessHandle() const; @@ -100,13 +110,16 @@ class BrowserChildProcessHost : public ResourceDispatcherHost::Receiver, // Overrides from ChildProcessHost virtual void OnChildDied(); - virtual bool InterceptMessageFromChild(const IPC::Message& msg); + virtual void ShutdownStarted(); virtual void Notify(NotificationType type); // Extends the base class implementation and removes this host from // the host list. Calls ChildProcessHost::ForceShutdown virtual void ForceShutdown(); private: + void Initialize(ResourceMessageFilter::URLRequestContextOverride* + url_request_context_override); + // By using an internal class as the ChildProcessLauncher::Client, we can // intercept OnProcessLaunched and do our own processing before // calling the subclass' implementation. |