summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser_child_process_host.h
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-15 22:19:48 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-15 22:19:48 +0000
commit8e2b6472071f38c065a3d00adb136ef259ef68a1 (patch)
tree8a05864f6463e4948c6468139998a59eb6b54899 /chrome/browser/browser_child_process_host.h
parent10a4a0aa5e9a1754752454ee2d4d8aff872a61a3 (diff)
downloadchromium_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.h39
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.