| 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 df16bce5d9655443698009f1fc8820c89bc1a94f..8555aab6ada708b02cbccd2d85d83c5eb49fbf07 100644
|
| --- a/content/browser/renderer_host/media/audio_renderer_host.cc
|
| +++ b/content/browser/renderer_host/media/audio_renderer_host.cc
|
| @@ -104,6 +104,16 @@
|
| : device_id;
|
| }
|
|
|
| +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
|
| @@ -756,11 +766,27 @@
|
| !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()) {
|
|
|