| Index: content/browser/renderer_host/media/audio_renderer_host.cc
|
| diff --git a/content/browser/renderer_host/media/audio_renderer_host.cc b/content/browser/renderer_host/media/audio_renderer_host.cc
|
| index dddeee21626a31f30aff5b4f749c396fcd5024b8..ffd51674d209a1bd5b99240dd7bd0327fbfca1f9 100644
|
| --- a/content/browser/renderer_host/media/audio_renderer_host.cc
|
| +++ b/content/browser/renderer_host/media/audio_renderer_host.cc
|
| @@ -61,6 +61,16 @@ void NotifyResourceDispatcherOfAudioStateChange(int render_process_id,
|
| render_process_id, render_view_id, is_playing);
|
| }
|
|
|
| +void NotifyRenderProcessHostThatAudioStateChanged(int render_process_id) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| +
|
| + RenderProcessHost* render_process_host =
|
| + RenderProcessHost::FromID(render_process_id);
|
| +
|
| + if (render_process_host)
|
| + render_process_host->AudioStateChanged();
|
| +}
|
| +
|
| } // namespace
|
|
|
| class AudioRendererHost::AudioEntry
|
| @@ -651,11 +661,27 @@ void AudioRendererHost::UpdateNumPlayingStreams(AudioEntry* entry,
|
| !RenderFrameHasActiveAudio(entry->render_frame_id());
|
| entry->set_playing(true);
|
| base::AtomicRefCountInc(&num_playing_streams_);
|
| +
|
| + // Inform the RenderProcessHost when audio starts playing for the first
|
| + // time.
|
| + if (base::AtomicRefCountIsOne(&num_playing_streams_)) {
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&NotifyRenderProcessHostThatAudioStateChanged,
|
| + render_process_id_));
|
| + }
|
| } else {
|
| entry->set_playing(false);
|
| should_alert_resource_scheduler =
|
| !RenderFrameHasActiveAudio(entry->render_frame_id());
|
| - base::AtomicRefCountDec(&num_playing_streams_);
|
| +
|
| + // Inform the RenderProcessHost when there is no more audio playing.
|
| + if (!base::AtomicRefCountDec(&num_playing_streams_)) {
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&NotifyRenderProcessHostThatAudioStateChanged,
|
| + render_process_id_));
|
| + }
|
| }
|
|
|
| if (should_alert_resource_scheduler && ResourceDispatcherHostImpl::Get()) {
|
|
|