| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/media/android/media_session.h" | 5 #include "content/browser/media/session/media_session.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <list> | 9 #include <list> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/metrics/histogram_samples.h" | 13 #include "base/metrics/histogram_samples.h" |
| 14 #include "base/test/histogram_tester.h" | 14 #include "base/test/histogram_tester.h" |
| 15 #include "base/test/simple_test_clock.h" | 15 #include "base/test/simple_test_clock.h" |
| 16 #include "content/browser/media/android/media_session_observer.h" | 16 #include "content/browser/media/session/media_session_delegate.h" |
| 17 #include "content/browser/media/session/mock_media_session_observer.h" |
| 17 #include "content/public/browser/web_contents.h" | 18 #include "content/public/browser/web_contents.h" |
| 18 #include "content/public/browser/web_contents_observer.h" | 19 #include "content/public/browser/web_contents_observer.h" |
| 19 #include "content/public/test/content_browser_test.h" | 20 #include "content/public/test/content_browser_test.h" |
| 20 #include "content/shell/browser/shell.h" | 21 #include "content/shell/browser/shell.h" |
| 21 #include "testing/gmock/include/gmock/gmock.h" | 22 #include "testing/gmock/include/gmock/gmock.h" |
| 22 | 23 |
| 23 using content::WebContents; | 24 using content::WebContents; |
| 24 using content::WebContentsObserver; | 25 using content::WebContentsObserver; |
| 25 using content::MediaSession; | 26 using content::MediaSession; |
| 27 using content::MediaSessionDelegate; |
| 26 using content::MediaSessionObserver; | 28 using content::MediaSessionObserver; |
| 27 using content::MediaSessionUmaHelper; | 29 using content::MediaSessionUmaHelper; |
| 30 using content::MockMediaSessionObserver; |
| 28 | 31 |
| 29 using ::testing::Expectation; | 32 using ::testing::Expectation; |
| 30 | 33 |
| 31 namespace { | 34 namespace { |
| 32 | 35 |
| 33 class MockMediaSessionObserver : public MediaSessionObserver { | 36 class MockMediaSessionDelegate : public MediaSessionDelegate { |
| 34 public: | 37 public: |
| 35 MockMediaSessionObserver() | 38 bool RequestAudioFocus(MediaSession::Type) override { |
| 36 : received_resume_calls_(0), | 39 return true; |
| 37 received_suspend_calls_(0) { | |
| 38 } | 40 } |
| 39 | 41 |
| 40 ~MockMediaSessionObserver() override = default; | 42 void AbandonAudioFocus() override { |
| 41 | |
| 42 // Implements MediaSessionObserver. | |
| 43 void OnSuspend(int player_id) override { | |
| 44 EXPECT_GE(player_id, 0); | |
| 45 EXPECT_GT(players_.size(), static_cast<size_t>(player_id)); | |
| 46 | |
| 47 ++received_suspend_calls_; | |
| 48 players_[player_id].is_playing_ = false; | |
| 49 } | 43 } |
| 50 | |
| 51 void OnResume(int player_id) override { | |
| 52 EXPECT_GE(player_id, 0); | |
| 53 EXPECT_GT(players_.size(), static_cast<size_t>(player_id)); | |
| 54 | |
| 55 ++received_resume_calls_; | |
| 56 players_[player_id].is_playing_ = true; | |
| 57 } | |
| 58 | |
| 59 void OnSetVolumeMultiplier(int player_id, double volume_multiplier) override { | |
| 60 EXPECT_GE(player_id, 0); | |
| 61 EXPECT_GT(players_.size(), static_cast<size_t>(player_id)); | |
| 62 | |
| 63 EXPECT_GE(volume_multiplier, 0.0f); | |
| 64 EXPECT_LE(volume_multiplier, 1.0f); | |
| 65 | |
| 66 players_[player_id].volume_multiplier_ = volume_multiplier; | |
| 67 } | |
| 68 | |
| 69 int StartNewPlayer() { | |
| 70 players_.push_back(MockPlayer(true, 1.0f)); | |
| 71 return players_.size() - 1; | |
| 72 } | |
| 73 | |
| 74 bool IsPlaying(size_t player_id) { | |
| 75 EXPECT_GT(players_.size(), player_id); | |
| 76 return players_[player_id].is_playing_; | |
| 77 } | |
| 78 | |
| 79 double GetVolumeMultiplier(size_t player_id) { | |
| 80 EXPECT_GT(players_.size(), player_id); | |
| 81 return players_[player_id].volume_multiplier_; | |
| 82 } | |
| 83 | |
| 84 void SetPlaying(size_t player_id, bool playing) { | |
| 85 EXPECT_GT(players_.size(), player_id); | |
| 86 players_[player_id].is_playing_ = playing; | |
| 87 } | |
| 88 | |
| 89 int received_suspend_calls() const { | |
| 90 return received_suspend_calls_; | |
| 91 } | |
| 92 | |
| 93 int received_resume_calls() const { | |
| 94 return received_resume_calls_; | |
| 95 } | |
| 96 | |
| 97 private: | |
| 98 struct MockPlayer { | |
| 99 public: | |
| 100 MockPlayer(bool is_playing = true, double volume_multiplier = 1.0f) | |
| 101 : is_playing_(is_playing), | |
| 102 volume_multiplier_(volume_multiplier) {} | |
| 103 bool is_playing_; | |
| 104 double volume_multiplier_; | |
| 105 }; | |
| 106 | |
| 107 // Basic representation of the players. The position in the vector is the | |
| 108 // player_id. The value of the vector is the playing status and volume. | |
| 109 std::vector<MockPlayer> players_; | |
| 110 | |
| 111 int received_resume_calls_; | |
| 112 int received_suspend_calls_; | |
| 113 }; | 44 }; |
| 114 | 45 |
| 115 class MockWebContentsObserver : public WebContentsObserver { | 46 class MockWebContentsObserver : public WebContentsObserver { |
| 116 public: | 47 public: |
| 117 MockWebContentsObserver(WebContents* web_contents) | 48 MockWebContentsObserver(WebContents* web_contents) |
| 118 : WebContentsObserver(web_contents) {} | 49 : WebContentsObserver(web_contents) {} |
| 119 | 50 |
| 120 MOCK_METHOD2(MediaSessionStateChanged, | 51 MOCK_METHOD2(MediaSessionStateChanged, |
| 121 void(bool is_controllable, bool is_suspended)); | 52 void(bool is_controllable, bool is_suspended)); |
| 122 }; | 53 }; |
| 123 | 54 |
| 124 } // namespace | 55 } // namespace |
| 125 | 56 |
| 126 class MediaSessionBrowserTest : public content::ContentBrowserTest { | 57 class MediaSessionBrowserTest : public content::ContentBrowserTest { |
| 127 protected: | 58 protected: |
| 128 MediaSessionBrowserTest() = default; | 59 MediaSessionBrowserTest() = default; |
| 129 | 60 |
| 130 void SetUpOnMainThread() override { | 61 void SetUpOnMainThread() override { |
| 131 ContentBrowserTest::SetUpOnMainThread(); | 62 ContentBrowserTest::SetUpOnMainThread(); |
| 132 | 63 |
| 133 mock_web_contents_observer_.reset( | 64 mock_web_contents_observer_.reset( |
| 134 new MockWebContentsObserver(shell()->web_contents())); | 65 new MockWebContentsObserver(shell()->web_contents())); |
| 135 media_session_ = MediaSession::Get(shell()->web_contents()); | 66 media_session_ = MediaSession::Get(shell()->web_contents()); |
| 136 media_session_->ResetJavaRefForTest(); | 67 media_session_->SetDelegateForTests( |
| 68 scoped_ptr<MediaSessionDelegate>(new MockMediaSessionDelegate())); |
| 137 ASSERT_TRUE(media_session_); | 69 ASSERT_TRUE(media_session_); |
| 138 } | 70 } |
| 139 | 71 |
| 140 void TearDownOnMainThread() override { | 72 void TearDownOnMainThread() override { |
| 141 mock_web_contents_observer_.reset(); | 73 mock_web_contents_observer_.reset(); |
| 142 | 74 |
| 143 media_session_->RemoveAllPlayersForTest(); | 75 media_session_->RemoveAllPlayersForTest(); |
| 144 media_session_ = nullptr; | 76 media_session_ = nullptr; |
| 145 | 77 |
| 146 ContentBrowserTest::TearDownOnMainThread(); | 78 ContentBrowserTest::TearDownOnMainThread(); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 | 111 |
| 180 MediaSession::Type GetSessionType() { | 112 MediaSession::Type GetSessionType() { |
| 181 return media_session_->audio_focus_type_for_test(); | 113 return media_session_->audio_focus_type_for_test(); |
| 182 } | 114 } |
| 183 | 115 |
| 184 bool IsControllable() { return media_session_->IsControllable(); } | 116 bool IsControllable() { return media_session_->IsControllable(); } |
| 185 | 117 |
| 186 bool IsSuspended() { return media_session_->IsSuspended(); } | 118 bool IsSuspended() { return media_session_->IsSuspended(); } |
| 187 | 119 |
| 188 void UIResume() { | 120 void UIResume() { |
| 189 media_session_->Resume(); | 121 media_session_->Resume(MediaSession::SuspendType::UI); |
| 190 } | 122 } |
| 191 | 123 |
| 192 void SystemResume() { | 124 void SystemResume() { |
| 193 media_session_->OnResume(nullptr, nullptr); | 125 media_session_->OnResumeInternal(MediaSession::SuspendType::SYSTEM); |
| 194 } | 126 } |
| 195 | 127 |
| 196 void UISuspend() { | 128 void UISuspend() { |
| 197 media_session_->Suspend(); | 129 media_session_->Suspend(MediaSession::SuspendType::UI); |
| 198 } | 130 } |
| 199 | 131 |
| 200 void SystemSuspend(bool temporary) { | 132 void SystemSuspend(bool temporary) { |
| 201 media_session_->OnSuspend(nullptr, nullptr, temporary); | 133 media_session_->OnSuspendInternal( |
| 134 MediaSession::SuspendType::SYSTEM, |
| 135 temporary ? MediaSession::State::SUSPENDED |
| 136 : MediaSession::State::INACTIVE); |
| 202 } | 137 } |
| 203 | 138 |
| 204 void SystemSetVolumeMultiplier(double volume_multiplier) { | 139 void SystemSetVolumeMultiplier(double volume_multiplier) { |
| 205 media_session_->OnSetVolumeMultiplier( | 140 media_session_->SetVolumeMultiplier(volume_multiplier); |
| 206 nullptr, nullptr, volume_multiplier); | |
| 207 } | 141 } |
| 208 | 142 |
| 209 MockWebContentsObserver* mock_web_contents_observer() { | 143 MockWebContentsObserver* mock_web_contents_observer() { |
| 210 return mock_web_contents_observer_.get(); | 144 return mock_web_contents_observer_.get(); |
| 211 } | 145 } |
| 212 | 146 |
| 213 scoped_ptr<MediaSession> CreateDummyMediaSession() { | 147 scoped_ptr<MediaSession> CreateDummyMediaSession() { |
| 214 return scoped_ptr<MediaSession>(new MediaSession(nullptr)); | 148 return scoped_ptr<MediaSession>(new MediaSession(nullptr)); |
| 215 } | 149 } |
| 216 | 150 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 | 291 |
| 358 EXPECT_FALSE(HasAudioFocus()); | 292 EXPECT_FALSE(HasAudioFocus()); |
| 359 } | 293 } |
| 360 | 294 |
| 361 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, StopGivesAwayAudioFocus) { | 295 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, StopGivesAwayAudioFocus) { |
| 362 scoped_ptr<MockMediaSessionObserver> media_session_observer( | 296 scoped_ptr<MockMediaSessionObserver> media_session_observer( |
| 363 new MockMediaSessionObserver); | 297 new MockMediaSessionObserver); |
| 364 | 298 |
| 365 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 299 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 366 | 300 |
| 367 media_session_->Stop(); | 301 media_session_->Stop(MediaSession::SuspendType::UI); |
| 368 | 302 |
| 369 EXPECT_FALSE(HasAudioFocus()); | 303 EXPECT_FALSE(HasAudioFocus()); |
| 370 } | 304 } |
| 371 | 305 |
| 372 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ResumeGivesBackAudioFocus) { | 306 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ResumeGivesBackAudioFocus) { |
| 373 scoped_ptr<MockMediaSessionObserver> media_session_observer( | 307 scoped_ptr<MockMediaSessionObserver> media_session_observer( |
| 374 new MockMediaSessionObserver); | 308 new MockMediaSessionObserver); |
| 375 | 309 |
| 376 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 310 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 377 | 311 |
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 790 .After(showControls); | 724 .After(showControls); |
| 791 EXPECT_CALL(*mock_web_contents_observer(), | 725 EXPECT_CALL(*mock_web_contents_observer(), |
| 792 MediaSessionStateChanged(false, true)) | 726 MediaSessionStateChanged(false, true)) |
| 793 .After(pauseControls); | 727 .After(pauseControls); |
| 794 | 728 |
| 795 scoped_ptr<MockMediaSessionObserver> media_session_observer( | 729 scoped_ptr<MockMediaSessionObserver> media_session_observer( |
| 796 new MockMediaSessionObserver); | 730 new MockMediaSessionObserver); |
| 797 | 731 |
| 798 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 732 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 799 | 733 |
| 800 media_session_->Stop(); | 734 media_session_->Stop(MediaSession::SuspendType::UI); |
| 801 | 735 |
| 802 EXPECT_FALSE(IsControllable()); | 736 EXPECT_FALSE(IsControllable()); |
| 803 EXPECT_TRUE(IsSuspended()); | 737 EXPECT_TRUE(IsSuspended()); |
| 804 } | 738 } |
| 805 | 739 |
| 806 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 740 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 807 ControlsHideWhenSessionChangesFromContentToTransient) { | 741 ControlsHideWhenSessionChangesFromContentToTransient) { |
| 808 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 742 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), |
| 809 MediaSessionStateChanged(true, false)); | 743 MediaSessionStateChanged(true, false)); |
| 810 Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(), | 744 Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(), |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1073 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent | 1007 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent |
| 1074 EXPECT_EQ(1, samples->GetCount(2)); // UI | 1008 EXPECT_EQ(1, samples->GetCount(2)); // UI |
| 1075 } | 1009 } |
| 1076 | 1010 |
| 1077 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, UMA_Suspended_Stop) { | 1011 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, UMA_Suspended_Stop) { |
| 1078 scoped_ptr<MockMediaSessionObserver> media_session_observer( | 1012 scoped_ptr<MockMediaSessionObserver> media_session_observer( |
| 1079 new MockMediaSessionObserver); | 1013 new MockMediaSessionObserver); |
| 1080 base::HistogramTester tester; | 1014 base::HistogramTester tester; |
| 1081 | 1015 |
| 1082 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 1016 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 1083 media_session_->Stop(); | 1017 media_session_->Stop(MediaSession::SuspendType::UI); |
| 1084 | 1018 |
| 1085 scoped_ptr<base::HistogramSamples> samples( | 1019 scoped_ptr<base::HistogramSamples> samples( |
| 1086 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended")); | 1020 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended")); |
| 1087 EXPECT_EQ(1, samples->TotalCount()); | 1021 EXPECT_EQ(1, samples->TotalCount()); |
| 1088 EXPECT_EQ(0, samples->GetCount(0)); // System Transient | 1022 EXPECT_EQ(0, samples->GetCount(0)); // System Transient |
| 1089 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent | 1023 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent |
| 1090 EXPECT_EQ(1, samples->GetCount(2)); // UI | 1024 EXPECT_EQ(1, samples->GetCount(2)); // UI |
| 1091 } | 1025 } |
| 1092 | 1026 |
| 1093 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, UMA_ActiveTime_NoActivation) { | 1027 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, UMA_ActiveTime_NoActivation) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1110 | 1044 |
| 1111 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); | 1045 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); |
| 1112 base::SimpleTestClock* clock = new base::SimpleTestClock(); | 1046 base::SimpleTestClock* clock = new base::SimpleTestClock(); |
| 1113 clock->SetNow(base::Time::Now()); | 1047 clock->SetNow(base::Time::Now()); |
| 1114 media_session_uma_helper->SetClockForTest( | 1048 media_session_uma_helper->SetClockForTest( |
| 1115 scoped_ptr<base::SimpleTestClock>(clock)); | 1049 scoped_ptr<base::SimpleTestClock>(clock)); |
| 1116 | 1050 |
| 1117 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 1051 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 1118 | 1052 |
| 1119 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); | 1053 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| 1120 media_session_->Stop(); | 1054 media_session_->Stop(MediaSession::SuspendType::UI); |
| 1121 | 1055 |
| 1122 scoped_ptr<base::HistogramSamples> samples( | 1056 scoped_ptr<base::HistogramSamples> samples( |
| 1123 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); | 1057 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); |
| 1124 EXPECT_EQ(1, samples->TotalCount()); | 1058 EXPECT_EQ(1, samples->TotalCount()); |
| 1125 EXPECT_EQ(1, samples->GetCount(1000)); | 1059 EXPECT_EQ(1, samples->GetCount(1000)); |
| 1126 } | 1060 } |
| 1127 | 1061 |
| 1128 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 1062 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 1129 UMA_ActiveTime_ActivationWithUISuspension) { | 1063 UMA_ActiveTime_ActivationWithUISuspension) { |
| 1130 scoped_ptr<MockMediaSessionObserver> media_session_observer( | 1064 scoped_ptr<MockMediaSessionObserver> media_session_observer( |
| 1131 new MockMediaSessionObserver); | 1065 new MockMediaSessionObserver); |
| 1132 base::HistogramTester tester; | 1066 base::HistogramTester tester; |
| 1133 | 1067 |
| 1134 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); | 1068 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); |
| 1135 base::SimpleTestClock* clock = new base::SimpleTestClock(); | 1069 base::SimpleTestClock* clock = new base::SimpleTestClock(); |
| 1136 clock->SetNow(base::Time::Now()); | 1070 clock->SetNow(base::Time::Now()); |
| 1137 media_session_uma_helper->SetClockForTest( | 1071 media_session_uma_helper->SetClockForTest( |
| 1138 scoped_ptr<base::SimpleTestClock>(clock)); | 1072 scoped_ptr<base::SimpleTestClock>(clock)); |
| 1139 | 1073 |
| 1140 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 1074 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 1141 | 1075 |
| 1142 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); | 1076 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| 1143 UISuspend(); | 1077 UISuspend(); |
| 1144 | 1078 |
| 1145 clock->Advance(base::TimeDelta::FromMilliseconds(2000)); | 1079 clock->Advance(base::TimeDelta::FromMilliseconds(2000)); |
| 1146 UIResume(); | 1080 UIResume(); |
| 1147 | 1081 |
| 1148 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); | 1082 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| 1149 media_session_->Stop(); | 1083 media_session_->Stop(MediaSession::SuspendType::UI); |
| 1150 | 1084 |
| 1151 scoped_ptr<base::HistogramSamples> samples( | 1085 scoped_ptr<base::HistogramSamples> samples( |
| 1152 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); | 1086 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); |
| 1153 EXPECT_EQ(1, samples->TotalCount()); | 1087 EXPECT_EQ(1, samples->TotalCount()); |
| 1154 EXPECT_EQ(1, samples->GetCount(2000)); | 1088 EXPECT_EQ(1, samples->GetCount(2000)); |
| 1155 } | 1089 } |
| 1156 | 1090 |
| 1157 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 1091 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 1158 UMA_ActiveTime_ActivationWithSystemSuspension) { | 1092 UMA_ActiveTime_ActivationWithSystemSuspension) { |
| 1159 scoped_ptr<MockMediaSessionObserver> media_session_observer( | 1093 scoped_ptr<MockMediaSessionObserver> media_session_observer( |
| 1160 new MockMediaSessionObserver); | 1094 new MockMediaSessionObserver); |
| 1161 base::HistogramTester tester; | 1095 base::HistogramTester tester; |
| 1162 | 1096 |
| 1163 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); | 1097 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); |
| 1164 base::SimpleTestClock* clock = new base::SimpleTestClock(); | 1098 base::SimpleTestClock* clock = new base::SimpleTestClock(); |
| 1165 clock->SetNow(base::Time::Now()); | 1099 clock->SetNow(base::Time::Now()); |
| 1166 media_session_uma_helper->SetClockForTest( | 1100 media_session_uma_helper->SetClockForTest( |
| 1167 scoped_ptr<base::SimpleTestClock>(clock)); | 1101 scoped_ptr<base::SimpleTestClock>(clock)); |
| 1168 | 1102 |
| 1169 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 1103 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 1170 | 1104 |
| 1171 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); | 1105 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| 1172 SystemSuspend(true); | 1106 SystemSuspend(true); |
| 1173 | 1107 |
| 1174 clock->Advance(base::TimeDelta::FromMilliseconds(2000)); | 1108 clock->Advance(base::TimeDelta::FromMilliseconds(2000)); |
| 1175 SystemResume(); | 1109 SystemResume(); |
| 1176 | 1110 |
| 1177 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); | 1111 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| 1178 media_session_->Stop(); | 1112 media_session_->Stop(MediaSession::SuspendType::UI); |
| 1179 | 1113 |
| 1180 scoped_ptr<base::HistogramSamples> samples( | 1114 scoped_ptr<base::HistogramSamples> samples( |
| 1181 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); | 1115 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); |
| 1182 EXPECT_EQ(1, samples->TotalCount()); | 1116 EXPECT_EQ(1, samples->TotalCount()); |
| 1183 EXPECT_EQ(1, samples->GetCount(2000)); | 1117 EXPECT_EQ(1, samples->GetCount(2000)); |
| 1184 } | 1118 } |
| 1185 | 1119 |
| 1186 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 1120 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 1187 UMA_ActiveTime_ActivateSuspendedButNotStopped) { | 1121 UMA_ActiveTime_ActivateSuspendedButNotStopped) { |
| 1188 scoped_ptr<MockMediaSessionObserver> media_session_observer( | 1122 scoped_ptr<MockMediaSessionObserver> media_session_observer( |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1224 | 1158 |
| 1225 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); | 1159 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); |
| 1226 base::SimpleTestClock* clock = new base::SimpleTestClock(); | 1160 base::SimpleTestClock* clock = new base::SimpleTestClock(); |
| 1227 clock->SetNow(base::Time::Now()); | 1161 clock->SetNow(base::Time::Now()); |
| 1228 media_session_uma_helper->SetClockForTest( | 1162 media_session_uma_helper->SetClockForTest( |
| 1229 scoped_ptr<base::SimpleTestClock>(clock)); | 1163 scoped_ptr<base::SimpleTestClock>(clock)); |
| 1230 | 1164 |
| 1231 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 1165 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 1232 clock->Advance(base::TimeDelta::FromMilliseconds(500)); | 1166 clock->Advance(base::TimeDelta::FromMilliseconds(500)); |
| 1233 SystemSuspend(true); | 1167 SystemSuspend(true); |
| 1234 media_session_->Stop(); | 1168 media_session_->Stop(MediaSession::SuspendType::UI); |
| 1235 | 1169 |
| 1236 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 1170 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 1237 clock->Advance(base::TimeDelta::FromMilliseconds(5000)); | 1171 clock->Advance(base::TimeDelta::FromMilliseconds(5000)); |
| 1238 SystemResume(); | 1172 SystemResume(); |
| 1239 media_session_->Stop(); | 1173 media_session_->Stop(MediaSession::SuspendType::UI); |
| 1240 | 1174 |
| 1241 scoped_ptr<base::HistogramSamples> samples( | 1175 scoped_ptr<base::HistogramSamples> samples( |
| 1242 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); | 1176 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); |
| 1243 EXPECT_EQ(2, samples->TotalCount()); | 1177 EXPECT_EQ(2, samples->TotalCount()); |
| 1244 EXPECT_EQ(1, samples->GetCount(500)); | 1178 EXPECT_EQ(1, samples->GetCount(500)); |
| 1245 EXPECT_EQ(1, samples->GetCount(5000)); | 1179 EXPECT_EQ(1, samples->GetCount(5000)); |
| 1246 } | 1180 } |
| 1247 | 1181 |
| 1248 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 1182 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 1249 UMA_ActiveTime_MultipleActivations) { | 1183 UMA_ActiveTime_MultipleActivations) { |
| 1250 scoped_ptr<MockMediaSessionObserver> media_session_observer( | 1184 scoped_ptr<MockMediaSessionObserver> media_session_observer( |
| 1251 new MockMediaSessionObserver); | 1185 new MockMediaSessionObserver); |
| 1252 base::HistogramTester tester; | 1186 base::HistogramTester tester; |
| 1253 | 1187 |
| 1254 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); | 1188 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); |
| 1255 base::SimpleTestClock* clock = new base::SimpleTestClock(); | 1189 base::SimpleTestClock* clock = new base::SimpleTestClock(); |
| 1256 clock->SetNow(base::Time::Now()); | 1190 clock->SetNow(base::Time::Now()); |
| 1257 media_session_uma_helper->SetClockForTest( | 1191 media_session_uma_helper->SetClockForTest( |
| 1258 scoped_ptr<base::SimpleTestClock>(clock)); | 1192 scoped_ptr<base::SimpleTestClock>(clock)); |
| 1259 | 1193 |
| 1260 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 1194 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 1261 clock->Advance(base::TimeDelta::FromMilliseconds(10000)); | 1195 clock->Advance(base::TimeDelta::FromMilliseconds(10000)); |
| 1262 RemovePlayer(media_session_observer.get(), 0); | 1196 RemovePlayer(media_session_observer.get(), 0); |
| 1263 | 1197 |
| 1264 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 1198 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 1265 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); | 1199 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| 1266 media_session_->Stop(); | 1200 media_session_->Stop(MediaSession::SuspendType::UI); |
| 1267 | 1201 |
| 1268 scoped_ptr<base::HistogramSamples> samples( | 1202 scoped_ptr<base::HistogramSamples> samples( |
| 1269 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); | 1203 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); |
| 1270 EXPECT_EQ(2, samples->TotalCount()); | 1204 EXPECT_EQ(2, samples->TotalCount()); |
| 1271 EXPECT_EQ(1, samples->GetCount(1000)); | 1205 EXPECT_EQ(1, samples->GetCount(1000)); |
| 1272 EXPECT_EQ(1, samples->GetCount(10000)); | 1206 EXPECT_EQ(1, samples->GetCount(10000)); |
| 1273 } | 1207 } |
| OLD | NEW |