diff options
Diffstat (limited to 'chrome/browser/browser_child_process_host.h')
-rw-r--r-- | chrome/browser/browser_child_process_host.h | 67 |
1 files changed, 50 insertions, 17 deletions
diff --git a/chrome/browser/browser_child_process_host.h b/chrome/browser/browser_child_process_host.h index cf30973..f917a4d 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,23 +83,47 @@ class BrowserChildProcessHost : public ResourceDispatcherHost::Receiver, #endif CommandLine* cmd_line); + // 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; + // ChildProcessLauncher::Client implementation. - virtual void OnProcessLaunched() { } + virtual void OnProcessLaunched() {} // Derived classes can override this to know if the process crashed. - virtual void OnProcessCrashed() {} - - virtual bool DidChildCrash(); + // |exit_code| is the status returned when the process crashed (for + // posix, as returned from waitpid(), for Windows, as returned from + // GetExitCodeProcess()). + virtual void OnProcessCrashed(int exit_code) {} + + // Derived classes can override this to know if the process was + // killed. |exit_code| is the status returned when the process + // was killed (for posix, as returned from waitpid(), for Windows, + // as returned from GetExitCodeProcess()). + virtual void OnProcessWasKilled(int exit_code) {} + + // Returns the termination status of a child. |exit_code| is the + // status returned when the process exited (for posix, as returned + // from waitpid(), for Windows, as returned from + // GetExitCodeProcess()). |exit_code| may be NULL. + virtual base::TerminationStatus GetChildTerminationStatus(int* exit_code); // 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(); + ResourceDispatcherHost* resource_dispatcher_host() { + return resource_dispatcher_host_; + } + 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. @@ -107,4 +141,3 @@ class BrowserChildProcessHost : public ResourceDispatcherHost::Receiver, }; #endif // CHROME_BROWSER_BROWSER_CHILD_PROCESS_HOST_H_ - |