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 |