OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Represents the browser side of the browser <--> renderer communication | 5 // Represents the browser side of the browser <--> renderer communication |
6 // channel. There will be one RenderProcessHost per renderer process. | 6 // channel. There will be one RenderProcessHost per renderer process. |
7 | 7 |
8 #include "content/browser/renderer_host/render_process_host_impl.h" | 8 #include "content/browser/renderer_host/render_process_host_impl.h" |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 // This static member variable holds the zygote communication information for | 371 // This static member variable holds the zygote communication information for |
372 // the renderer. | 372 // the renderer. |
373 ZygoteHandle g_render_zygote; | 373 ZygoteHandle g_render_zygote; |
374 #endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) | 374 #endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) |
375 | 375 |
376 // NOTE: changes to this class need to be reviewed by the security team. | 376 // NOTE: changes to this class need to be reviewed by the security team. |
377 class RendererSandboxedProcessLauncherDelegate | 377 class RendererSandboxedProcessLauncherDelegate |
378 : public SandboxedProcessLauncherDelegate { | 378 : public SandboxedProcessLauncherDelegate { |
379 public: | 379 public: |
380 explicit RendererSandboxedProcessLauncherDelegate(IPC::ChannelProxy* channel) | 380 explicit RendererSandboxedProcessLauncherDelegate(IPC::ChannelProxy* channel) |
381 #if defined(OS_POSIX) | 381 {} |
382 : ipc_fd_(channel->TakeClientFileDescriptor()) | |
383 #endif // OS_POSIX | |
384 { | |
385 } | |
386 | 382 |
387 ~RendererSandboxedProcessLauncherDelegate() override {} | 383 ~RendererSandboxedProcessLauncherDelegate() override {} |
388 | 384 |
389 #if defined(OS_WIN) | 385 #if defined(OS_WIN) |
390 bool PreSpawnTarget(sandbox::TargetPolicy* policy) override { | 386 bool PreSpawnTarget(sandbox::TargetPolicy* policy) override { |
391 AddBaseHandleClosePolicy(policy); | 387 AddBaseHandleClosePolicy(policy); |
392 | 388 |
393 const base::string16& sid = | 389 const base::string16& sid = |
394 GetContentClient()->browser()->GetAppContainerSidForSandboxType( | 390 GetContentClient()->browser()->GetAppContainerSidForSandboxType( |
395 GetSandboxType()); | 391 GetSandboxType()); |
396 if (!sid.empty()) | 392 if (!sid.empty()) |
397 AddAppContainerPolicy(policy, sid.c_str()); | 393 AddAppContainerPolicy(policy, sid.c_str()); |
398 | 394 |
399 return GetContentClient()->browser()->PreSpawnRenderer(policy); | 395 return GetContentClient()->browser()->PreSpawnRenderer(policy); |
400 } | 396 } |
401 | 397 |
402 #elif defined(OS_POSIX) | 398 #elif defined(OS_POSIX) |
403 #if !defined(OS_MACOSX) && !defined(OS_ANDROID) | 399 #if !defined(OS_MACOSX) && !defined(OS_ANDROID) |
404 ZygoteHandle* GetZygote() override { | 400 ZygoteHandle* GetZygote() override { |
405 const base::CommandLine& browser_command_line = | 401 const base::CommandLine& browser_command_line = |
406 *base::CommandLine::ForCurrentProcess(); | 402 *base::CommandLine::ForCurrentProcess(); |
407 base::CommandLine::StringType renderer_prefix = | 403 base::CommandLine::StringType renderer_prefix = |
408 browser_command_line.GetSwitchValueNative(switches::kRendererCmdPrefix); | 404 browser_command_line.GetSwitchValueNative(switches::kRendererCmdPrefix); |
409 if (!renderer_prefix.empty()) | 405 if (!renderer_prefix.empty()) |
410 return nullptr; | 406 return nullptr; |
411 return GetGenericZygote(); | 407 return GetGenericZygote(); |
412 } | 408 } |
413 #endif // !defined(OS_MACOSX) && !defined(OS_ANDROID) | 409 #endif // !defined(OS_MACOSX) && !defined(OS_ANDROID) |
414 base::ScopedFD TakeIpcFd() override { return std::move(ipc_fd_); } | |
415 #endif // OS_WIN | 410 #endif // OS_WIN |
416 | 411 |
417 SandboxType GetSandboxType() override { return SANDBOX_TYPE_RENDERER; } | 412 SandboxType GetSandboxType() override { return SANDBOX_TYPE_RENDERER; } |
418 | |
419 private: | |
420 #if defined(OS_POSIX) | |
421 base::ScopedFD ipc_fd_; | |
422 #endif // OS_POSIX | |
423 }; | 413 }; |
424 | 414 |
425 const char kSessionStorageHolderKey[] = "kSessionStorageHolderKey"; | 415 const char kSessionStorageHolderKey[] = "kSessionStorageHolderKey"; |
426 | 416 |
427 class SessionStorageHolder : public base::SupportsUserData::Data { | 417 class SessionStorageHolder : public base::SupportsUserData::Data { |
428 public: | 418 public: |
429 SessionStorageHolder() {} | 419 SessionStorageHolder() {} |
430 ~SessionStorageHolder() override {} | 420 ~SessionStorageHolder() override {} |
431 | 421 |
432 void Hold(const SessionStorageNamespaceMap& sessions, int view_route_id) { | 422 void Hold(const SessionStorageNamespaceMap& sessions, int view_route_id) { |
(...skipping 2368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2801 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; | 2791 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; |
2802 | 2792 |
2803 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. Alias | 2793 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. Alias |
2804 // enough information here so that we can determine what the bad message was. | 2794 // enough information here so that we can determine what the bad message was. |
2805 base::debug::Alias(&error); | 2795 base::debug::Alias(&error); |
2806 bad_message::ReceivedBadMessage(process.get(), | 2796 bad_message::ReceivedBadMessage(process.get(), |
2807 bad_message::RPH_MOJO_PROCESS_ERROR); | 2797 bad_message::RPH_MOJO_PROCESS_ERROR); |
2808 } | 2798 } |
2809 | 2799 |
2810 } // namespace content | 2800 } // namespace content |
OLD | NEW |