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

Unified Diff: content/common/child_process_host_impl.h

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.cc ('k') | content/common/child_process_host_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/child_process_host_impl.h
===================================================================
--- content/common/child_process_host_impl.h (revision 112775)
+++ content/common/child_process_host_impl.h (working copy)
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_COMMON_CHILD_PROCESS_HOST_H_
-#define CONTENT_COMMON_CHILD_PROCESS_HOST_H_
+#ifndef CONTENT_COMMON_CHILD_PROCESS_HOST_IMPL_H_
+#define CONTENT_COMMON_CHILD_PROCESS_HOST_IMPL_H_
#pragma once
#include <string>
@@ -16,78 +16,21 @@
#include "base/memory/singleton.h"
#include "base/shared_memory.h"
#include "base/string16.h"
-#include "content/common/content_export.h"
-#include "ipc/ipc_channel_proxy.h"
+#include "content/public/common/child_process_host.h"
class FilePath;
namespace content {
class ChildProcessHostDelegate;
-}
// Provides common functionality for hosting a child process and processing IPC
// messages between the host and the child process. Users are responsible
// for the actual launching and terminating of the child processes.
-class CONTENT_EXPORT ChildProcessHost : public IPC::Channel::Listener,
- public IPC::Message::Sender {
+class CONTENT_EXPORT ChildProcessHostImpl : public ChildProcessHost,
+ public IPC::Channel::Listener {
public:
- // These flags may be passed to GetChildPath in order to alter its behavior,
- // causing it to return a child path more suited to a specific task.
- enum {
- // No special behavior requested.
- CHILD_NORMAL = 0,
+ virtual ~ChildProcessHostImpl();
-#if defined(OS_LINUX)
- // Indicates that the child execed after forking may be execced from
- // /proc/self/exe rather than using the "real" app path. This prevents
- // autoupdate from confusing us if it changes the file out from under us.
- // You will generally want to set this on Linux, except when there is an
- // override to the command line (for example, we're forking a renderer in
- // gdb). In this case, you'd use GetChildPath to get the real executable
- // file name, and then prepend the GDB command to the command line.
- CHILD_ALLOW_SELF = 1 << 0,
-#elif defined(OS_MACOSX)
-
- // Requests that the child run in a process that does not have the
- // PIE (position-independent executable) bit set, effectively disabling
- // ASLR. For process types that need to allocate a large contiguous
- // region, ASLR may not leave a large enough "hole" for the purpose. This
- // option should be used sparingly, and only when absolutely necessary.
- // This option is currently incompatible with CHILD_ALLOW_HEAP_EXECUTION.
- CHILD_NO_PIE = 1 << 1,
-
- // Requests that the child run in a process that does not protect the
- // heap against execution. Normally, heap pages may be made executable
- // with mprotect, so this mode should be used sparingly. It is intended
- // for processes that may host plug-ins that expect an executable heap
- // without having to call mprotect. This option is currently incompatible
- // with CHILD_NO_PIE.
- CHILD_ALLOW_HEAP_EXECUTION = 1 << 2,
-#endif
- };
-
- virtual ~ChildProcessHost();
-
- // Returns the pathname to be used for a child process. If a subprocess
- // pathname was specified on the command line, that will be used. Otherwise,
- // the default child process pathname will be returned. On most platforms,
- // this will be the same as the currently-executing process.
- //
- // The |flags| argument accepts one or more flags such as CHILD_ALLOW_SELF
- // and CHILD_ALLOW_HEAP_EXECUTION as defined above. Pass only CHILD_NORMAL
- // if none of these special behaviors are required.
- //
- // On failure, returns an empty FilePath.
- static FilePath GetChildPath(int flags);
-
- explicit ChildProcessHost(content::ChildProcessHostDelegate* delegate);
-
- // IPC::Message::Sender implementation.
- virtual bool Send(IPC::Message* message) OVERRIDE;
-
- // Adds an IPC message filter. A reference will be kept to the filter.
- void AddFilter(IPC::ChannelProxy::MessageFilter* filter);
-
// Public and static for reuse by RenderMessageFilter.
static void AllocateSharedMemory(
uint32 buffer_size, base::ProcessHandle child_process,
@@ -106,18 +49,21 @@
// but normally this will be used on the IO thread.
static int GenerateChildProcessUniqueId();
- // Send the shutdown message to the child process.
- // Does not check if CanShutdown is true.
- void ForceShutdown();
+ // ChildProcessHost implementation
+ virtual bool Send(IPC::Message* message) OVERRIDE;
+ virtual void ForceShutdown() OVERRIDE;
+ virtual std::string CreateChannel() OVERRIDE;
+ virtual bool IsChannelOpening() OVERRIDE;
+ virtual void AddFilter(IPC::ChannelProxy::MessageFilter* filter) OVERRIDE;
+#if defined(OS_POSIX)
+ virtual int TakeClientFileDescriptor() OVERRIDE;
+#endif
- // Creates the IPC channel. Returns true iff it succeeded.
- bool CreateChannel();
+ private:
+ friend class ChildProcessHost;
- bool opening_channel() { return opening_channel_; }
- const std::string& channel_id() { return channel_id_; }
- IPC::Channel* channel() { return channel_.get(); }
+ explicit ChildProcessHostImpl(ChildProcessHostDelegate* delegate);
- private:
// IPC::Channel::Listener methods:
virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
@@ -128,7 +74,7 @@
void OnAllocateSharedMemory(uint32 buffer_size,
base::SharedMemoryHandle* handle);
- content::ChildProcessHostDelegate* delegate_;
+ ChildProcessHostDelegate* delegate_;
base::ProcessHandle peer_handle_;
bool opening_channel_; // True while we're waiting the channel to be opened.
scoped_ptr<IPC::Channel> channel_;
@@ -139,7 +85,9 @@
// manually.
std::vector<scoped_refptr<IPC::ChannelProxy::MessageFilter> > filters_;
- DISALLOW_COPY_AND_ASSIGN(ChildProcessHost);
+ DISALLOW_COPY_AND_ASSIGN(ChildProcessHostImpl);
};
-#endif // CONTENT_COMMON_CHILD_PROCESS_HOST_H_
+} // namespace content
+
+#endif // CONTENT_COMMON_CHILD_PROCESS_HOST_IMPL_H_
« no previous file with comments | « content/common/child_process_host.cc ('k') | content/common/child_process_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698