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 |