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

Unified Diff: content/common/child_process_host_impl.cc

Issue 8787004: Make ChildProcessHost be used through an interface in content/public, instead of by inheritence. (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
« no previous file with comments | « content/common/child_process_host_impl.h ('k') | content/content_common.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/child_process_host_impl.cc
===================================================================
--- content/common/child_process_host_impl.cc (revision 112775)
+++ content/common/child_process_host_impl.cc (working copy)
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/common/child_process_host.h"
+#include "content/common/child_process_host_impl.h"
#include <limits>
@@ -74,31 +74,13 @@
} // namespace
#endif // OS_MACOSX
-ChildProcessHost::ChildProcessHost(content::ChildProcessHostDelegate* delegate)
- : delegate_(delegate),
- peer_handle_(base::kNullProcessHandle),
- opening_channel_(false) {
-#if defined(OS_WIN)
- AddFilter(new FontCacheDispatcher());
-#endif
-}
+namespace content {
-ChildProcessHost::~ChildProcessHost() {
- for (size_t i = 0; i < filters_.size(); ++i) {
- filters_[i]->OnChannelClosing();
- filters_[i]->OnFilterRemoved();
- }
-
- base::CloseProcessHandle(peer_handle_);
+// static
+ChildProcessHost* ChildProcessHost::Create(ChildProcessHostDelegate* delegate) {
+ return new ChildProcessHostImpl(delegate);
}
-void ChildProcessHost::AddFilter(IPC::ChannelProxy::MessageFilter* filter) {
- filters_.push_back(filter);
-
- if (channel_.get())
- filter->OnFilterAdded(channel_.get());
-}
-
// static
FilePath ChildProcessHost::GetChildPath(int flags) {
FilePath child_path;
@@ -143,16 +125,41 @@
return child_path;
}
-void ChildProcessHost::ForceShutdown() {
+ChildProcessHostImpl::ChildProcessHostImpl(ChildProcessHostDelegate* delegate)
+ : delegate_(delegate),
+ peer_handle_(base::kNullProcessHandle),
+ opening_channel_(false) {
+#if defined(OS_WIN)
+ AddFilter(new FontCacheDispatcher());
+#endif
+}
+
+ChildProcessHostImpl::~ChildProcessHostImpl() {
+ for (size_t i = 0; i < filters_.size(); ++i) {
+ filters_[i]->OnChannelClosing();
+ filters_[i]->OnFilterRemoved();
+ }
+
+ base::CloseProcessHandle(peer_handle_);
+}
+
+void ChildProcessHostImpl::AddFilter(IPC::ChannelProxy::MessageFilter* filter) {
+ filters_.push_back(filter);
+
+ if (channel_.get())
+ filter->OnFilterAdded(channel_.get());
+}
+
+void ChildProcessHostImpl::ForceShutdown() {
Send(new ChildProcessMsg_Shutdown());
}
-bool ChildProcessHost::CreateChannel() {
+std::string ChildProcessHostImpl::CreateChannel() {
channel_id_ = GenerateRandomChannelID(this);
channel_.reset(new IPC::Channel(
channel_id_, IPC::Channel::MODE_SERVER, this));
if (!channel_->Connect())
- return false;
+ return std::string();
for (size_t i = 0; i < filters_.size(); ++i)
filters_[i]->OnFilterAdded(channel_.get());
@@ -167,10 +174,20 @@
opening_channel_ = true;
- return true;
+ return channel_id_;
}
-bool ChildProcessHost::Send(IPC::Message* message) {
+bool ChildProcessHostImpl::IsChannelOpening() {
+ return opening_channel_;
+}
+
+#if defined(OS_POSIX)
+int ChildProcessHostImpl::TakeClientFileDescriptor() {
+ return channel_->TakeClientFileDescriptor();
+}
+#endif
+
+bool ChildProcessHostImpl::Send(IPC::Message* message) {
if (!channel_.get()) {
delete message;
return false;
@@ -178,7 +195,7 @@
return channel_->Send(message);
}
-void ChildProcessHost::AllocateSharedMemory(
+void ChildProcessHostImpl::AllocateSharedMemory(
uint32 buffer_size, base::ProcessHandle child_process_handle,
base::SharedMemoryHandle* shared_memory_handle) {
base::SharedMemory shared_buf;
@@ -190,7 +207,7 @@
shared_buf.GiveToProcess(child_process_handle, shared_memory_handle);
}
-std::string ChildProcessHost::GenerateRandomChannelID(void* instance) {
+std::string ChildProcessHostImpl::GenerateRandomChannelID(void* instance) {
// Note: the string must start with the current process id, this is how
// child processes determine the pid of the parent.
// Build the channel ID. This is composed of a unique identifier for the
@@ -202,13 +219,13 @@
base::RandInt(0, std::numeric_limits<int>::max()));
}
-int ChildProcessHost::GenerateChildProcessUniqueId() {
+int ChildProcessHostImpl::GenerateChildProcessUniqueId() {
// This function must be threadsafe.
static base::subtle::Atomic32 last_unique_child_id = 0;
return base::subtle::NoBarrier_AtomicIncrement(&last_unique_child_id, 1);
}
-bool ChildProcessHost::OnMessageReceived(const IPC::Message& msg) {
+bool ChildProcessHostImpl::OnMessageReceived(const IPC::Message& msg) {
#ifdef IPC_MESSAGE_LOG_ENABLED
IPC::Logging* logger = IPC::Logging::GetInstance();
if (msg.type() == IPC_LOGGING_ID) {
@@ -230,7 +247,7 @@
if (!handled) {
handled = true;
- IPC_BEGIN_MESSAGE_MAP(ChildProcessHost, msg)
+ IPC_BEGIN_MESSAGE_MAP(ChildProcessHostImpl, msg)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_ShutdownRequest,
OnShutdownRequest)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_SyncAllocateSharedMemory,
@@ -249,7 +266,7 @@
return handled;
}
-void ChildProcessHost::OnChannelConnected(int32 peer_pid) {
+void ChildProcessHostImpl::OnChannelConnected(int32 peer_pid) {
if (!base::OpenProcessHandle(peer_pid, &peer_handle_)) {
NOTREACHED();
}
@@ -259,7 +276,7 @@
filters_[i]->OnChannelConnected(peer_pid);
}
-void ChildProcessHost::OnChannelError() {
+void ChildProcessHostImpl::OnChannelError() {
opening_channel_ = false;
delegate_->OnChannelError();
@@ -270,13 +287,15 @@
delegate_->OnChildDisconnected();
}
-void ChildProcessHost::OnAllocateSharedMemory(
+void ChildProcessHostImpl::OnAllocateSharedMemory(
uint32 buffer_size,
base::SharedMemoryHandle* handle) {
AllocateSharedMemory(buffer_size, peer_handle_, handle);
}
-void ChildProcessHost::OnShutdownRequest() {
+void ChildProcessHostImpl::OnShutdownRequest() {
if (delegate_->CanShutdown())
Send(new ChildProcessMsg_Shutdown());
}
+
+} // namespace content
« no previous file with comments | « content/common/child_process_host_impl.h ('k') | content/content_common.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698