| Index: content/renderer/media/renderer_webmediaplayer_delegate.cc
|
| diff --git a/content/renderer/media/renderer_webmediaplayer_delegate.cc b/content/renderer/media/renderer_webmediaplayer_delegate.cc
|
| index 9966382c37291edb9e3ccef5c9b8359f136c9682..310c9bbdc1c16d617b4ab4f697648b11e1e3414d 100644
|
| --- a/content/renderer/media/renderer_webmediaplayer_delegate.cc
|
| +++ b/content/renderer/media/renderer_webmediaplayer_delegate.cc
|
| @@ -18,13 +18,8 @@ RendererWebMediaPlayerDelegate::RendererWebMediaPlayerDelegate(
|
| : RenderFrameObserver(render_frame),
|
| default_tick_clock_(new base::DefaultTickClock()),
|
| tick_clock_(default_tick_clock_.get()) {
|
| -#if defined(OS_ANDROID)
|
| - // On Android the idle cleanup timer is enabled by default.
|
| - // TODO(dalecurtis): Eventually this should be enabled on all platforms.
|
| - idle_cleanup_enabled_ = true;
|
| idle_cleanup_interval_ = base::TimeDelta::FromSeconds(5);
|
| idle_timeout_ = base::TimeDelta::FromSeconds(15);
|
| -#endif
|
| }
|
|
|
| RendererWebMediaPlayerDelegate::~RendererWebMediaPlayerDelegate() {}
|
| @@ -56,8 +51,7 @@ void RendererWebMediaPlayerDelegate::DidPlay(int delegate_id,
|
| void RendererWebMediaPlayerDelegate::DidPause(int delegate_id,
|
| bool reached_end_of_stream) {
|
| DCHECK(id_map_.Lookup(delegate_id));
|
| - if (reached_end_of_stream)
|
| - AddIdleDelegate(delegate_id);
|
| + AddIdleDelegate(delegate_id);
|
| Send(new MediaPlayerDelegateHostMsg_OnMediaPaused(routing_id(), delegate_id,
|
| reached_end_of_stream));
|
| }
|
| @@ -75,7 +69,7 @@ bool RendererWebMediaPlayerDelegate::IsHidden() {
|
|
|
| void RendererWebMediaPlayerDelegate::WasHidden() {
|
| for (IDMap<Observer>::iterator it(&id_map_); !it.IsAtEnd(); it.Advance())
|
| - it.GetCurrentValue()->OnHidden(false);
|
| + it.GetCurrentValue()->OnHidden();
|
| }
|
|
|
| void RendererWebMediaPlayerDelegate::WasShown() {
|
| @@ -98,10 +92,9 @@ bool RendererWebMediaPlayerDelegate::OnMessageReceived(
|
| return handled;
|
| }
|
|
|
| -void RendererWebMediaPlayerDelegate::EnableInstantIdleCleanupForTesting(
|
| +void RendererWebMediaPlayerDelegate::SetIdleCleanupParamsForTesting(
|
| base::TimeDelta idle_timeout,
|
| base::TickClock* tick_clock) {
|
| - idle_cleanup_enabled_ = true;
|
| idle_cleanup_interval_ = base::TimeDelta();
|
| idle_timeout_ = idle_timeout;
|
| tick_clock_ = tick_clock;
|
| @@ -121,7 +114,7 @@ void RendererWebMediaPlayerDelegate::OnMediaDelegatePlay(int delegate_id) {
|
|
|
| void RendererWebMediaPlayerDelegate::OnMediaDelegateSuspendAllMediaPlayers() {
|
| for (IDMap<Observer>::iterator it(&id_map_); !it.IsAtEnd(); it.Advance())
|
| - it.GetCurrentValue()->OnHidden(true);
|
| + it.GetCurrentValue()->OnSuspendRequested(true);
|
| }
|
|
|
| void RendererWebMediaPlayerDelegate::OnMediaDelegateVolumeMultiplierUpdate(
|
| @@ -133,9 +126,6 @@ void RendererWebMediaPlayerDelegate::OnMediaDelegateVolumeMultiplierUpdate(
|
| }
|
|
|
| void RendererWebMediaPlayerDelegate::AddIdleDelegate(int delegate_id) {
|
| - if (!idle_cleanup_enabled_)
|
| - return;
|
| -
|
| idle_delegate_map_[delegate_id] = tick_clock_->NowTicks();
|
| if (!idle_cleanup_timer_.IsRunning()) {
|
| idle_cleanup_timer_.Start(
|
| @@ -145,9 +135,6 @@ void RendererWebMediaPlayerDelegate::AddIdleDelegate(int delegate_id) {
|
| }
|
|
|
| void RendererWebMediaPlayerDelegate::RemoveIdleDelegate(int delegate_id) {
|
| - if (!idle_cleanup_enabled_)
|
| - return;
|
| -
|
| // To avoid invalidating the iterator, just mark the delegate for deletion
|
| // using a sentinel value of an empty TimeTicks.
|
| if (idle_cleanup_running_) {
|
| @@ -166,9 +153,14 @@ void RendererWebMediaPlayerDelegate::CleanupIdleDelegates() {
|
| // validity we set |idle_cleanup_running_| to true and defer deletions.
|
| base::AutoReset<bool> scoper(&idle_cleanup_running_, true);
|
| const base::TimeTicks now = tick_clock_->NowTicks();
|
| - for (const auto& kv : idle_delegate_map_) {
|
| - if (now - kv.second > idle_timeout_)
|
| - id_map_.Lookup(kv.first)->OnHidden(true);
|
| + for (auto& idle_delegate_entry : idle_delegate_map_) {
|
| + if (now - idle_delegate_entry.second > idle_timeout_) {
|
| + id_map_.Lookup(idle_delegate_entry.first)->OnSuspendRequested(false);
|
| +
|
| + // Whether or not the player accepted the suspension, mark it for removal
|
| + // from future polls to avoid running the timer forever.
|
| + idle_delegate_entry.second = base::TimeTicks();
|
| + }
|
| }
|
|
|
| // Take care of any removals that happened during the above iteration.
|
|
|