Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Side by Side Diff: content/browser/media/android/media_session_browsertest.cc

Issue 1671603002: Mute audio for Spitzer playbacks that haven't received focus yet. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix comment. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « content/browser/media/android/media_session.cc ('k') | content/browser/media/android/media_session_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698