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

Unified Diff: content/browser/browser_child_process_host.cc

Issue 8774040: Don't make classes derive from ChildProcessHost, and instead have them use it through composition... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 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: content/browser/browser_child_process_host.cc
===================================================================
--- content/browser/browser_child_process_host.cc (revision 112597)
+++ content/browser/browser_child_process_host.cc (working copy)
@@ -17,6 +17,7 @@
#include "content/browser/profiler_message_filter.h"
#include "content/browser/renderer_host/resource_message_filter.h"
#include "content/browser/trace_message_filter.h"
+#include "content/common/child_process_host.h"
#include "content/common/plugin_messages.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/child_process_data.h"
@@ -59,10 +60,11 @@
#endif
disconnect_was_alive_(false) {
data_.type = type;
- data_.id = GenerateChildProcessUniqueId();
+ data_.id = ChildProcessHost::GenerateChildProcessUniqueId();
- AddFilter(new TraceMessageFilter);
- AddFilter(new ProfilerMessageFilter);
+ child_process_host_.reset(new ChildProcessHost(this));
+ child_process_host_->AddFilter(new TraceMessageFilter);
+ child_process_host_->AddFilter(new ProfilerMessageFilter);
g_child_process_list.Get().push_back(this);
}
@@ -96,7 +98,7 @@
#elif defined(OS_POSIX)
use_zygote,
environ,
- channel()->TakeClientFileDescriptor(),
+ child_process_host()->channel()->TakeClientFileDescriptor(),
#endif
cmd_line,
&client_));
@@ -112,7 +114,7 @@
void BrowserChildProcessHost::ForceShutdown() {
g_child_process_list.Get().remove(this);
- ChildProcessHost::ForceShutdown();
+ child_process_host_->ForceShutdown();
}
void BrowserChildProcessHost::SetTerminateChildOnShutdown(
@@ -132,11 +134,20 @@
return child_process_->GetChildTerminationStatus(exit_code);
}
+bool BrowserChildProcessHost::OnMessageReceived(const IPC::Message& message) {
+ return false;
+}
+
+
void BrowserChildProcessHost::OnChannelConnected(int32 peer_pid) {
Notify(content::NOTIFICATION_CHILD_PROCESS_HOST_CONNECTED);
}
-// The ChildProcessHost default implementation calls OnChildDied() always but at
+bool BrowserChildProcessHost::CanShutdown() {
+ return true;
+}
+
+// Normally a ChildProcessHostDelegate deletes itself from this callback, but at
// this layer and below we need to have the final child process exit code to
// properly bucket crashes vs kills. On Windows we can do this if we wait until
// the process handle is signaled; on the rest of the platforms, we schedule a
@@ -212,7 +223,7 @@
content::PROCESS_TYPE_MAX);
// Notify in the main loop of the disconnection.
Notify(content::NOTIFICATION_CHILD_PROCESS_HOST_DISCONNECTED);
- OnChildDied();
+ delete this;
}
// The child process handle has been signaled so the exit code is finally
@@ -225,12 +236,18 @@
unsigned long exit_code = 0;
GetExitCodeProcess(waitable_event->Release(), &exit_code);
delete waitable_event;
- if (exit_code == STILL_ACTIVE)
- OnChildDied();
- BrowserChildProcessHost::OnChildDisconnected();
+ if (exit_code == STILL_ACTIVE) {
+ delete this;
+ } else {
+ BrowserChildProcessHost::OnChildDisconnected();
+ }
#endif
}
+bool BrowserChildProcessHost::Send(IPC::Message* message) {
+ return child_process_host_->Send(message);
+}
+
void BrowserChildProcessHost::ShutdownStarted() {
// Must remove the process from the list now, in case it gets used for a
// new instance before our watcher tells us that the process terminated.
@@ -243,7 +260,7 @@
void BrowserChildProcessHost::ClientHook::OnProcessLaunched() {
if (!host_->child_process_->GetHandle()) {
- host_->OnChildDied();
+ delete host_;
return;
}
host_->data_.handle = host_->child_process_->GetHandle();

Powered by Google App Engine
This is Rietveld 408576698