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 948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
959 base::CommandLine* cmd_line = new base::CommandLine(renderer_path); | 959 base::CommandLine* cmd_line = new base::CommandLine(renderer_path); |
960 if (!renderer_prefix.empty()) | 960 if (!renderer_prefix.empty()) |
961 cmd_line->PrependWrapper(renderer_prefix); | 961 cmd_line->PrependWrapper(renderer_prefix); |
962 AppendRendererCommandLine(cmd_line); | 962 AppendRendererCommandLine(cmd_line); |
963 | 963 |
964 // Spawn the child process asynchronously to avoid blocking the UI thread. | 964 // Spawn the child process asynchronously to avoid blocking the UI thread. |
965 // As long as there's no renderer prefix, we can use the zygote process | 965 // As long as there's no renderer prefix, we can use the zygote process |
966 // at this stage. | 966 // at this stage. |
967 child_process_launcher_.reset(new ChildProcessLauncher( | 967 child_process_launcher_.reset(new ChildProcessLauncher( |
968 new RendererSandboxedProcessLauncherDelegate(channel_.get()), cmd_line, | 968 new RendererSandboxedProcessLauncherDelegate(channel_.get()), cmd_line, |
969 GetID(), this, child_token_, | 969 GetID(), this, field_trial_state_.get(), child_token_, |
970 base::Bind(&RenderProcessHostImpl::OnMojoError, id_))); | 970 base::Bind(&RenderProcessHostImpl::OnMojoError, id_))); |
971 channel_->Pause(); | 971 channel_->Pause(); |
972 | 972 |
973 fast_shutdown_started_ = false; | 973 fast_shutdown_started_ = false; |
974 } | 974 } |
975 | 975 |
976 // Push any pending messages to the channel now. Note that if the child | 976 // Push any pending messages to the channel now. Note that if the child |
977 // process is still launching, the channel will be paused and outgoing | 977 // process is still launching, the channel will be paused and outgoing |
978 // messages will be queued internally by the channel. | 978 // messages will be queued internally by the channel. |
979 while (!queued_messages_.empty()) { | 979 while (!queued_messages_.empty()) { |
(...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1572 gpu_data_manager->AppendRendererCommandLine(command_line); | 1572 gpu_data_manager->AppendRendererCommandLine(command_line); |
1573 | 1573 |
1574 // Slimming Paint v2 implies layer lists in the renderer. | 1574 // Slimming Paint v2 implies layer lists in the renderer. |
1575 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1575 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
1576 switches::kEnableSlimmingPaintV2)) { | 1576 switches::kEnableSlimmingPaintV2)) { |
1577 command_line->AppendSwitch(cc::switches::kEnableLayerLists); | 1577 command_line->AppendSwitch(cc::switches::kEnableLayerLists); |
1578 } | 1578 } |
1579 } | 1579 } |
1580 | 1580 |
1581 void RenderProcessHostImpl::AppendRendererCommandLine( | 1581 void RenderProcessHostImpl::AppendRendererCommandLine( |
1582 base::CommandLine* command_line) const { | 1582 base::CommandLine* command_line) { |
1583 // Pass the process type first, so it shows first in process listings. | 1583 // Pass the process type first, so it shows first in process listings. |
1584 command_line->AppendSwitchASCII(switches::kProcessType, | 1584 command_line->AppendSwitchASCII(switches::kProcessType, |
1585 switches::kRendererProcess); | 1585 switches::kRendererProcess); |
1586 | 1586 |
1587 #if defined(OS_WIN) | 1587 #if defined(OS_WIN) |
1588 command_line->AppendArg(switches::kPrefetchArgumentRenderer); | 1588 command_line->AppendArg(switches::kPrefetchArgumentRenderer); |
1589 #endif // defined(OS_WIN) | 1589 #endif // defined(OS_WIN) |
1590 | 1590 |
1591 // Now send any options from our own command line we want to propagate. | 1591 // Now send any options from our own command line we want to propagate. |
1592 const base::CommandLine& browser_command_line = | 1592 const base::CommandLine& browser_command_line = |
(...skipping 18 matching lines...) Expand all Loading... |
1611 #endif | 1611 #endif |
1612 | 1612 |
1613 AppendCompositorCommandLineFlags(command_line); | 1613 AppendCompositorCommandLineFlags(command_line); |
1614 | 1614 |
1615 command_line->AppendSwitchASCII(switches::kServiceRequestChannelToken, | 1615 command_line->AppendSwitchASCII(switches::kServiceRequestChannelToken, |
1616 child_connection_->service_token()); | 1616 child_connection_->service_token()); |
1617 } | 1617 } |
1618 | 1618 |
1619 void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( | 1619 void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( |
1620 const base::CommandLine& browser_cmd, | 1620 const base::CommandLine& browser_cmd, |
1621 base::CommandLine* renderer_cmd) const { | 1621 base::CommandLine* renderer_cmd) { |
1622 // Propagate the following switches to the renderer command line (along | 1622 // Propagate the following switches to the renderer command line (along |
1623 // with any associated values) if present in the browser command line. | 1623 // with any associated values) if present in the browser command line. |
1624 static const char* const kSwitchNames[] = { | 1624 static const char* const kSwitchNames[] = { |
1625 switches::kAgcStartupMinVolume, | 1625 switches::kAgcStartupMinVolume, |
1626 switches::kAecRefinedAdaptiveFilter, | 1626 switches::kAecRefinedAdaptiveFilter, |
1627 switches::kAllowLoopbackInPeerConnection, | 1627 switches::kAllowLoopbackInPeerConnection, |
1628 switches::kAndroidFontsPath, | 1628 switches::kAndroidFontsPath, |
1629 switches::kAudioBufferSize, | 1629 switches::kAudioBufferSize, |
1630 switches::kBlinkSettings, | 1630 switches::kBlinkSettings, |
1631 switches::kDefaultTileWidth, | 1631 switches::kDefaultTileWidth, |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1821 #endif | 1821 #endif |
1822 #if defined(ENABLE_IPC_FUZZER) | 1822 #if defined(ENABLE_IPC_FUZZER) |
1823 switches::kIpcDumpDirectory, | 1823 switches::kIpcDumpDirectory, |
1824 switches::kIpcFuzzerTestcase, | 1824 switches::kIpcFuzzerTestcase, |
1825 #endif | 1825 #endif |
1826 switches::kUseMusInRenderer, | 1826 switches::kUseMusInRenderer, |
1827 }; | 1827 }; |
1828 renderer_cmd->CopySwitchesFrom(browser_cmd, kSwitchNames, | 1828 renderer_cmd->CopySwitchesFrom(browser_cmd, kSwitchNames, |
1829 arraysize(kSwitchNames)); | 1829 arraysize(kSwitchNames)); |
1830 | 1830 |
1831 BrowserChildProcessHostImpl::CopyFeatureAndFieldTrialFlags(renderer_cmd); | 1831 field_trial_state_ = |
| 1832 BrowserChildProcessHostImpl::CopyFeatureAndFieldTrialFlags(renderer_cmd); |
1832 | 1833 |
1833 if (browser_cmd.HasSwitch(switches::kTraceStartup) && | 1834 if (browser_cmd.HasSwitch(switches::kTraceStartup) && |
1834 BrowserMainLoop::GetInstance()->is_tracing_startup_for_duration()) { | 1835 BrowserMainLoop::GetInstance()->is_tracing_startup_for_duration()) { |
1835 // Pass kTraceStartup switch to renderer only if startup tracing has not | 1836 // Pass kTraceStartup switch to renderer only if startup tracing has not |
1836 // finished. | 1837 // finished. |
1837 renderer_cmd->AppendSwitchASCII( | 1838 renderer_cmd->AppendSwitchASCII( |
1838 switches::kTraceStartup, | 1839 switches::kTraceStartup, |
1839 browser_cmd.GetSwitchValueASCII(switches::kTraceStartup)); | 1840 browser_cmd.GetSwitchValueASCII(switches::kTraceStartup)); |
1840 } | 1841 } |
1841 | 1842 |
(...skipping 1187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3029 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; | 3030 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; |
3030 | 3031 |
3031 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. Alias | 3032 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. Alias |
3032 // enough information here so that we can determine what the bad message was. | 3033 // enough information here so that we can determine what the bad message was. |
3033 base::debug::Alias(&error); | 3034 base::debug::Alias(&error); |
3034 bad_message::ReceivedBadMessage(render_process_id, | 3035 bad_message::ReceivedBadMessage(render_process_id, |
3035 bad_message::RPH_MOJO_PROCESS_ERROR); | 3036 bad_message::RPH_MOJO_PROCESS_ERROR); |
3036 } | 3037 } |
3037 | 3038 |
3038 } // namespace content | 3039 } // namespace content |
OLD | NEW |