| Index: content/browser/renderer_host/render_process_host_impl.cc
|
| diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
|
| index 610e2a344e39da8957a116312f23f2fd8ae76045..301bf6bc18e4b9c5b6a992346f3a74658aa4d988 100644
|
| --- a/content/browser/renderer_host/render_process_host_impl.cc
|
| +++ b/content/browser/renderer_host/render_process_host_impl.cc
|
| @@ -201,6 +201,12 @@
|
| #include "content/browser/mach_broker_mac.h"
|
| #endif
|
|
|
| +#if defined(OS_POSIX)
|
| +#include "content/browser/zygote_host/zygote_communication_linux.h"
|
| +#include "content/browser/zygote_host/zygote_host_impl_linux.h"
|
| +#include "content/public/browser/zygote_handle_linux.h"
|
| +#endif // defined(OS_POSIX)
|
| +
|
| #if defined(USE_OZONE)
|
| #include "ui/ozone/public/client_native_pixmap_factory.h"
|
| #include "ui/ozone/public/ozone_platform.h"
|
| @@ -362,6 +368,12 @@ SiteProcessMap* GetSiteProcessMapForBrowserContext(BrowserContext* context) {
|
| return map;
|
| }
|
|
|
| +#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
|
| +// This static member variable holds the zygote communication information for
|
| +// the renderer.
|
| +ZygoteHandle g_render_zygote;
|
| +#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
|
| +
|
| // NOTE: changes to this class need to be reviewed by the security team.
|
| class RendererSandboxedProcessLauncherDelegate
|
| : public SandboxedProcessLauncherDelegate {
|
| @@ -389,13 +401,17 @@ class RendererSandboxedProcessLauncherDelegate
|
| }
|
|
|
| #elif defined(OS_POSIX)
|
| - bool ShouldUseZygote() override {
|
| +#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
|
| + ZygoteHandle* GetZygote() override {
|
| const base::CommandLine& browser_command_line =
|
| *base::CommandLine::ForCurrentProcess();
|
| base::CommandLine::StringType renderer_prefix =
|
| browser_command_line.GetSwitchValueNative(switches::kRendererCmdPrefix);
|
| - return renderer_prefix.empty();
|
| + if (!renderer_prefix.empty())
|
| + return nullptr;
|
| + return &g_render_zygote;
|
| }
|
| +#endif // !defined(OS_MACOSX) && !defined(OS_ANDROID)
|
| base::ScopedFD TakeIpcFd() override { return std::move(ipc_fd_); }
|
| #endif // OS_WIN
|
|
|
| @@ -525,6 +541,19 @@ void RenderProcessHost::SetMaxRendererProcessCount(size_t count) {
|
| g_max_renderer_count_override = count;
|
| }
|
|
|
| +#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
|
| +// static
|
| +void RenderProcessHostImpl::EarlyZygoteLaunch() {
|
| + DCHECK(!g_render_zygote);
|
| + g_render_zygote = zygote_handle::CreateZygote();
|
| + // TODO(kerrnel): Investigate doing this without the ZygoteHostImpl as a
|
| + // proxy. It is currently done this way due to concerns about race
|
| + // conditions.
|
| + ZygoteHostImpl::GetInstance()->SetRendererSandboxStatus(
|
| + g_render_zygote->GetSandboxStatus());
|
| +}
|
| +#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
|
| +
|
| RenderProcessHostImpl::RenderProcessHostImpl(
|
| BrowserContext* browser_context,
|
| StoragePartitionImpl* storage_partition_impl,
|
|
|