| 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/android/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> |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 class MediaSessionBrowserTest : public content::ContentBrowserTest { | 126 class MediaSessionBrowserTest : public content::ContentBrowserTest { |
| 127 protected: | 127 protected: |
| 128 MediaSessionBrowserTest() = default; | 128 MediaSessionBrowserTest() = default; |
| 129 | 129 |
| 130 void SetUpOnMainThread() override { | 130 void SetUpOnMainThread() override { |
| 131 ContentBrowserTest::SetUpOnMainThread(); | 131 ContentBrowserTest::SetUpOnMainThread(); |
| 132 | 132 |
| 133 mock_web_contents_observer_.reset( | 133 mock_web_contents_observer_.reset( |
| 134 new MockWebContentsObserver(shell()->web_contents())); | 134 new MockWebContentsObserver(shell()->web_contents())); |
| 135 media_session_ = MediaSession::Get(shell()->web_contents()); | 135 media_session_ = MediaSession::Get(shell()->web_contents()); |
| 136 media_session_->ResetJavaRefForTest(); | 136 // Reset |j_media_session_| ref to prevent calling the Java backend. |
| 137 media_session_->j_media_session_.Reset(); |
| 138 |
| 137 ASSERT_TRUE(media_session_); | 139 ASSERT_TRUE(media_session_); |
| 138 } | 140 } |
| 139 | 141 |
| 140 void TearDownOnMainThread() override { | 142 void TearDownOnMainThread() override { |
| 141 mock_web_contents_observer_.reset(); | 143 mock_web_contents_observer_.reset(); |
| 142 | 144 |
| 143 media_session_->RemoveAllPlayersForTest(); | 145 media_session_->players_.clear(); |
| 146 media_session_->AbandonSystemAudioFocusIfNeeded(); |
| 144 media_session_ = nullptr; | 147 media_session_ = nullptr; |
| 145 | 148 |
| 146 ContentBrowserTest::TearDownOnMainThread(); | 149 ContentBrowserTest::TearDownOnMainThread(); |
| 147 } | 150 } |
| 148 | 151 |
| 149 void StartNewPlayer(MockMediaSessionObserver* media_session_observer, | 152 void StartNewPlayer(MockMediaSessionObserver* media_session_observer, |
| 150 MediaSession::Type type) { | 153 MediaSession::Type type) { |
| 151 bool result = AddPlayer( | 154 bool result = AddPlayer( |
| 152 media_session_observer, | 155 media_session_observer, |
| 153 media_session_observer->StartNewPlayer(), | 156 media_session_observer->StartNewPlayer(), |
| (...skipping 14 matching lines...) Expand all Loading... |
| 168 | 171 |
| 169 void RemovePlayers(MockMediaSessionObserver* media_session_observer) { | 172 void RemovePlayers(MockMediaSessionObserver* media_session_observer) { |
| 170 media_session_->RemovePlayers(media_session_observer); | 173 media_session_->RemovePlayers(media_session_observer); |
| 171 } | 174 } |
| 172 | 175 |
| 173 void OnPlayerPaused(MockMediaSessionObserver* media_session_observer, | 176 void OnPlayerPaused(MockMediaSessionObserver* media_session_observer, |
| 174 int player_id) { | 177 int player_id) { |
| 175 media_session_->OnPlayerPaused(media_session_observer, player_id); | 178 media_session_->OnPlayerPaused(media_session_observer, player_id); |
| 176 } | 179 } |
| 177 | 180 |
| 178 bool HasAudioFocus() { return media_session_->IsActiveForTest(); } | 181 bool HasAudioFocus() const { |
| 182 return media_session_->audio_focus_state_ == MediaSession::State::ACTIVE; |
| 183 } |
| 179 | 184 |
| 180 MediaSession::Type GetSessionType() { | 185 MediaSession::Type GetSessionType() const { |
| 181 return media_session_->audio_focus_type_for_test(); | 186 return media_session_->audio_focus_type_; |
| 182 } | 187 } |
| 183 | 188 |
| 184 bool IsControllable() { return media_session_->IsControllable(); } | 189 bool IsControllable() { return media_session_->IsControllable(); } |
| 185 | 190 |
| 186 bool IsSuspended() { return media_session_->IsSuspended(); } | 191 bool IsSuspended() { return media_session_->IsSuspended(); } |
| 187 | 192 |
| 188 void UIResume() { | 193 void UIResume() { |
| 189 media_session_->Resume(); | 194 media_session_->Resume(); |
| 190 } | 195 } |
| 191 | 196 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 208 | 213 |
| 209 MockWebContentsObserver* mock_web_contents_observer() { | 214 MockWebContentsObserver* mock_web_contents_observer() { |
| 210 return mock_web_contents_observer_.get(); | 215 return mock_web_contents_observer_.get(); |
| 211 } | 216 } |
| 212 | 217 |
| 213 scoped_ptr<MediaSession> CreateDummyMediaSession() { | 218 scoped_ptr<MediaSession> CreateDummyMediaSession() { |
| 214 return scoped_ptr<MediaSession>(new MediaSession(nullptr)); | 219 return scoped_ptr<MediaSession>(new MediaSession(nullptr)); |
| 215 } | 220 } |
| 216 | 221 |
| 217 MediaSessionUmaHelper* GetMediaSessionUMAHelper() { | 222 MediaSessionUmaHelper* GetMediaSessionUMAHelper() { |
| 218 return media_session_->uma_helper_for_test(); | 223 return &media_session_->uma_helper_; |
| 224 } |
| 225 |
| 226 void SetSystemAudioFocusResponse(bool value) { |
| 227 media_session_->default_system_audio_focus_response_ = value; |
| 219 } | 228 } |
| 220 | 229 |
| 221 protected: | 230 protected: |
| 222 MediaSession* media_session_; | 231 MediaSession* media_session_; |
| 223 scoped_ptr<MockWebContentsObserver> mock_web_contents_observer_; | 232 scoped_ptr<MockWebContentsObserver> mock_web_contents_observer_; |
| 224 | 233 |
| 225 DISALLOW_COPY_AND_ASSIGN(MediaSessionBrowserTest); | 234 DISALLOW_COPY_AND_ASSIGN(MediaSessionBrowserTest); |
| 226 }; | 235 }; |
| 227 | 236 |
| 228 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 237 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 SystemSetVolumeMultiplier(volume_multiplier); | 336 SystemSetVolumeMultiplier(volume_multiplier); |
| 328 | 337 |
| 329 EXPECT_EQ(volume_multiplier, media_session_observer->GetVolumeMultiplier(0)); | 338 EXPECT_EQ(volume_multiplier, media_session_observer->GetVolumeMultiplier(0)); |
| 330 EXPECT_EQ(volume_multiplier, media_session_observer->GetVolumeMultiplier(1)); | 339 EXPECT_EQ(volume_multiplier, media_session_observer->GetVolumeMultiplier(1)); |
| 331 | 340 |
| 332 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 341 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 333 | 342 |
| 334 EXPECT_EQ(volume_multiplier, media_session_observer->GetVolumeMultiplier(2)); | 343 EXPECT_EQ(volume_multiplier, media_session_observer->GetVolumeMultiplier(2)); |
| 335 } | 344 } |
| 336 | 345 |
| 346 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 347 VolumeMultiplierOnlySetOnSuccess) { |
| 348 scoped_ptr<MockMediaSessionObserver> media_session_observer( |
| 349 new MockMediaSessionObserver); |
| 350 |
| 351 // Start a new player and initialize it's volume multiplier to zero. |
| 352 const int player_id = media_session_observer->StartNewPlayer(); |
| 353 media_session_observer->OnSetVolumeMultiplier(player_id, 0); |
| 354 |
| 355 // Force the MediaSession to deny the player request. |
| 356 SetSystemAudioFocusResponse(false); |
| 357 |
| 358 // Verify AddPlayer fails and that the volume multiplier is unchanged. |
| 359 EXPECT_FALSE(AddPlayer(media_session_observer.get(), player_id, |
| 360 MediaSession::Type::Content)); |
| 361 EXPECT_DOUBLE_EQ(0, media_session_observer->GetVolumeMultiplier(player_id)); |
| 362 |
| 363 // Repeat the test with transient type session. |
| 364 EXPECT_FALSE(AddPlayer(media_session_observer.get(), player_id, |
| 365 MediaSession::Type::Transient)); |
| 366 EXPECT_DOUBLE_EQ(0, media_session_observer->GetVolumeMultiplier(player_id)); |
| 367 |
| 368 // Reset the MediaSession to allow the player request. |
| 369 SetSystemAudioFocusResponse(true); |
| 370 EXPECT_TRUE(AddPlayer(media_session_observer.get(), player_id, |
| 371 MediaSession::Type::Content)); |
| 372 EXPECT_DOUBLE_EQ(1, media_session_observer->GetVolumeMultiplier(player_id)); |
| 373 |
| 374 // Start a second player with a volume multiplier of zero then verify that it |
| 375 // receives a multiplier update even when there's an existing active focus. |
| 376 ASSERT_TRUE(HasAudioFocus()); |
| 377 const int player_id2 = media_session_observer->StartNewPlayer(); |
| 378 media_session_observer->OnSetVolumeMultiplier(player_id2, 0); |
| 379 EXPECT_TRUE(AddPlayer(media_session_observer.get(), player_id2, |
| 380 MediaSession::Type::Content)); |
| 381 EXPECT_DOUBLE_EQ(1, media_session_observer->GetVolumeMultiplier(player_id2)); |
| 382 } |
| 383 |
| 337 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, AudioFocusInitialState) { | 384 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, AudioFocusInitialState) { |
| 338 EXPECT_FALSE(HasAudioFocus()); | 385 EXPECT_FALSE(HasAudioFocus()); |
| 339 } | 386 } |
| 340 | 387 |
| 341 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, StartPlayerGivesFocus) { | 388 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, StartPlayerGivesFocus) { |
| 342 scoped_ptr<MockMediaSessionObserver> media_session_observer( | 389 scoped_ptr<MockMediaSessionObserver> media_session_observer( |
| 343 new MockMediaSessionObserver); | 390 new MockMediaSessionObserver); |
| 344 | 391 |
| 345 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 392 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 346 | 393 |
| (...skipping 917 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1264 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); | 1311 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| 1265 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); | 1312 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| 1266 media_session_->Stop(); | 1313 media_session_->Stop(); |
| 1267 | 1314 |
| 1268 scoped_ptr<base::HistogramSamples> samples( | 1315 scoped_ptr<base::HistogramSamples> samples( |
| 1269 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); | 1316 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); |
| 1270 EXPECT_EQ(2, samples->TotalCount()); | 1317 EXPECT_EQ(2, samples->TotalCount()); |
| 1271 EXPECT_EQ(1, samples->GetCount(1000)); | 1318 EXPECT_EQ(1, samples->GetCount(1000)); |
| 1272 EXPECT_EQ(1, samples->GetCount(10000)); | 1319 EXPECT_EQ(1, samples->GetCount(10000)); |
| 1273 } | 1320 } |
| OLD | NEW |