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 21c20c9fa3cb30f9d94e39ee60cda8f577ca6f4b..fae674d564cf5ac8b0a63425999bc4faafa9f45d 100644 |
--- a/content/browser/renderer_host/render_process_host_impl.cc |
+++ b/content/browser/renderer_host/render_process_host_impl.cc |
@@ -387,6 +387,7 @@ RenderProcessHostImpl::RenderProcessHostImpl( |
FROM_HERE, base::TimeDelta::FromSeconds(5), |
this, &RenderProcessHostImpl::ClearTransportDIBCache), |
is_initialized_(false), |
+ child_process_launcher_factory_(base::Bind(&NewChildProcessLauncher)), |
id_(ChildProcessHostImpl::GenerateChildProcessUniqueId()), |
browser_context_(browser_context), |
storage_partition_impl_(storage_partition_impl), |
@@ -539,7 +540,7 @@ bool RenderProcessHostImpl::Init() { |
// Spawn the child process asynchronously to avoid blocking the UI thread. |
// As long as there's no renderer prefix, we can use the zygote process |
// at this stage. |
- child_process_launcher_.reset(new ChildProcessLauncher( |
+ child_process_launcher_ = child_process_launcher_factory_.Run( |
#if defined(OS_WIN) |
new RendererSandboxedProcessLauncherDelegate, |
#elif defined(OS_POSIX) |
@@ -549,7 +550,7 @@ bool RenderProcessHostImpl::Init() { |
#endif |
cmd_line, |
GetID(), |
- this)); |
+ this); |
fast_shutdown_started_ = false; |
} |
@@ -603,11 +604,13 @@ void RenderProcessHostImpl::CreateMessageFilters() { |
media::AudioManager* audio_manager = BrowserMainLoop::GetAudioManager(); |
MediaStreamManager* media_stream_manager = |
BrowserMainLoop::GetMediaStreamManager(); |
- channel_->AddFilter(new AudioInputRendererHost(audio_manager, |
- media_stream_manager)); |
- channel_->AddFilter(new AudioRendererHost( |
- GetID(), audio_manager, BrowserMainLoop::GetAudioMirroringManager(), |
- media_internals, media_stream_manager)); |
+ if (audio_manager && media_stream_manager) { |
+ channel_->AddFilter(new AudioInputRendererHost(audio_manager, |
+ media_stream_manager)); |
+ channel_->AddFilter(new AudioRendererHost( |
+ GetID(), audio_manager, BrowserMainLoop::GetAudioMirroringManager(), |
+ media_internals, media_stream_manager)); |
+ } |
channel_->AddFilter(new VideoCaptureHost()); |
channel_->AddFilter(new AppCacheDispatcherHost( |
storage_partition_impl_->GetAppCacheService(), |
@@ -1683,11 +1686,11 @@ void RenderProcessHostImpl::EndFrameSubscription(int route_id) { |
} |
void RenderProcessHostImpl::OnShutdownRequest() { |
- // Don't shut down if there are more active RenderViews than the one asking |
- // to close, or if there are pending RenderViews being swapped back in. |
+ // Don't shut down if there are active RenderViews, or if there are pending |
+ // RenderViews being swapped back in. |
// In single process mode, we never shutdown the renderer. |
int num_active_views = GetActiveViewCount(); |
- if (pending_views_ || num_active_views > 1 || run_renderer_in_process()) |
+ if (pending_views_ || num_active_views > 0 || run_renderer_in_process()) |
return; |
// Notify any contents that might have swapped out renderers from this |