Chromium Code Reviews| Index: content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc |
| diff --git a/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc b/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc |
| index 060f391c23f6fedd020e612b72cfd099ad2e480f..2f29ce48c6c7a1d1be9e86b7225e763877710e28 100644 |
| --- a/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc |
| +++ b/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc |
| @@ -7,8 +7,11 @@ |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| #include "base/location.h" |
| +#include "base/power_monitor/power_monitor.h" |
| +#include "base/power_monitor/power_monitor_source.h" |
| #include "base/run_loop.h" |
| #include "base/single_thread_task_runner.h" |
| +#include "base/test/histogram_tester.h" |
| #include "base/test/simple_test_tick_clock.h" |
| #include "base/threading/thread_task_runner_handle.h" |
| #include "content/common/media/media_player_delegate_messages.h" |
| @@ -40,6 +43,21 @@ class MockWebMediaPlayerDelegateObserver |
| MOCK_METHOD1(OnVolumeMultiplierUpdate, void(double)); |
| }; |
| +class DummyPowerMonitorSource : public base::PowerMonitorSource { |
| + public: |
| + DummyPowerMonitorSource() {} |
| + ~DummyPowerMonitorSource() override {} |
|
mlamouri (slow - plz ping)
2016/08/08 13:19:31
nit: `= default;` FTW
|
| + |
| + void Suspend() { ProcessPowerEvent(SUSPEND_EVENT); } |
| + void Resume() { ProcessPowerEvent(RESUME_EVENT); } |
| + |
| + private: |
| + // base::PowerMonitorSource implementation. |
| + bool IsOnBatteryPowerImpl() override { return false; } |
| + |
| + DISALLOW_COPY_AND_ASSIGN(DummyPowerMonitorSource); |
| +}; |
| + |
| class RendererWebMediaPlayerDelegateTest : public content::RenderViewTest { |
| public: |
| RendererWebMediaPlayerDelegateTest() {} |
| @@ -47,6 +65,10 @@ class RendererWebMediaPlayerDelegateTest : public content::RenderViewTest { |
| void SetUp() override { |
| RenderViewTest::SetUp(); |
| + |
| + power_monitor_source_ = new DummyPowerMonitorSource(); |
| + power_monitor_.reset(new base::PowerMonitor( |
| + base::WrapUnique(power_monitor_source_))); |
| delegate_manager_.reset( |
| new RendererWebMediaPlayerDelegate(view_->GetMainRenderFrame())); |
| } |
| @@ -55,6 +77,7 @@ class RendererWebMediaPlayerDelegateTest : public content::RenderViewTest { |
| // Destruct the controller prior to any other tear down to avoid out of |
| // order destruction relative to the test render frame. |
| delegate_manager_.reset(); |
| + power_monitor_.reset(); |
| RenderViewTest::TearDown(); |
| } |
| @@ -77,6 +100,16 @@ class RendererWebMediaPlayerDelegateTest : public content::RenderViewTest { |
| delegate_manager_->OnMediaDelegatePause(delegate_id); |
| } |
| + void CallSetIsPlayingBackgroundVideo(bool is_playing) { |
| + delegate_manager_->SetIsPlayingBackgroundVideo(is_playing); |
| + } |
| + |
| + base::TimeTicks GetBackgroundVideoPlayingStartTime() { |
| + return delegate_manager_->background_video_playing_start_time_; |
| + } |
| + |
| + DummyPowerMonitorSource* power_monitor_source_ = nullptr; |
| + std::unique_ptr<base::PowerMonitor> power_monitor_; |
| std::unique_ptr<RendererWebMediaPlayerDelegate> delegate_manager_; |
| private: |
| @@ -366,5 +399,47 @@ TEST_F(RendererWebMediaPlayerDelegateTest, IsPlayingBackgroundVideo) { |
| EXPECT_NE(old_value, delegate_manager_->IsPlayingBackgroundVideo()); |
| } |
| +TEST_F(RendererWebMediaPlayerDelegateTest, Histograms) { |
| + MockWebMediaPlayerDelegateObserver observer; |
| + int delegate_id = delegate_manager_->AddObserver(&observer); |
| + base::HistogramTester histogram_tester; |
| + histogram_tester.ExpectTotalCount("Media.Session.BackgroundTime", 0); |
| + |
| + // Pausing or showing doesn't record anything as background playback |
| + // hasn't started yet. |
| + delegate_manager_->DidPlay( |
| + delegate_id, true, true, false, base::TimeDelta()); |
| + CallOnMediaDelegatePause(delegate_id); |
| + histogram_tester.ExpectTotalCount("Media.Session.BackgroundTime", 0); |
| + |
| + delegate_manager_->DidPlay( |
| + delegate_id, true, true, false, base::TimeDelta()); |
| + delegate_manager_->WasShown(); |
| + histogram_tester.ExpectTotalCount("Media.Session.BackgroundTime", 0); |
| + |
| + // Doing this things after the background playback has started should record |
| + // the time. |
| + delegate_manager_->DidPlay( |
| + delegate_id, true, true, false, base::TimeDelta()); |
| + SetPlayingBackgroundVideo(true); |
| + CallOnMediaDelegatePause(delegate_id); |
| + histogram_tester.ExpectTotalCount("Media.Session.BackgroundTime", 1); |
| + |
| + delegate_manager_->DidPlay( |
| + delegate_id, true, true, false, base::TimeDelta()); |
| + SetPlayingBackgroundVideo(true); |
| + delegate_manager_->WasShown(); |
| + histogram_tester.ExpectTotalCount("Media.Session.BackgroundTime", 2); |
| +} |
| + |
| +TEST_F(RendererWebMediaPlayerDelegateTest, PowerObserver) { |
| + CallSetIsPlayingBackgroundVideo(true); |
| + base::TimeTicks time_before_suspend = GetBackgroundVideoPlayingStartTime(); |
| + |
| + power_monitor_source_->Suspend(); |
| + power_monitor_source_->Resume(); |
| + |
| + EXPECT_GE(GetBackgroundVideoPlayingStartTime(), time_before_suspend); |
| +} |
| } // namespace media |