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

Side by Side Diff: content/browser/media/session/media_session_impl_browsertest.cc

Issue 2475473002: Implement one-shot audio focus inside MediaSession (Closed)
Patch Set: fixed a case where removing the last one-shot player Created 4 years, 1 month 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/session/media_session_impl.h" 5 #include "content/browser/media/session/media_session_impl.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/memory/ptr_util.h"
13 #include "base/metrics/histogram_samples.h" 14 #include "base/metrics/histogram_samples.h"
14 #include "base/test/histogram_tester.h" 15 #include "base/test/histogram_tester.h"
15 #include "base/test/simple_test_tick_clock.h" 16 #include "base/test/simple_test_tick_clock.h"
16 #include "content/browser/media/session/audio_focus_delegate.h" 17 #include "content/browser/media/session/audio_focus_delegate.h"
17 #include "content/browser/media/session/mock_media_session_player_observer.h" 18 #include "content/browser/media/session/mock_media_session_player_observer.h"
18 #include "content/public/browser/media_session.h" 19 #include "content/public/browser/media_session.h"
19 #include "content/public/browser/media_session_observer.h" 20 #include "content/public/browser/media_session_observer.h"
20 #include "content/public/browser/web_contents.h" 21 #include "content/public/browser/web_contents.h"
21 #include "content/public/test/content_browser_test.h" 22 #include "content/public/test/content_browser_test.h"
22 #include "content/shell/browser/shell.h" 23 #include "content/shell/browser/shell.h"
23 #include "media/base/media_content_type.h" 24 #include "media/base/media_content_type.h"
24 #include "testing/gmock/include/gmock/gmock.h" 25 #include "testing/gmock/include/gmock/gmock.h"
25 26
26 using content::WebContents; 27 using content::WebContents;
27 using content::MediaSession; 28 using content::MediaSession;
28 using content::MediaSessionImpl; 29 using content::MediaSessionImpl;
29 using content::MediaSessionObserver; 30 using content::MediaSessionObserver;
30 using content::AudioFocusDelegate; 31 using content::AudioFocusDelegate;
31 using content::MediaSessionPlayerObserver; 32 using content::MediaSessionPlayerObserver;
32 using content::MediaSessionUmaHelper; 33 using content::MediaSessionUmaHelper;
33 using content::MockMediaSessionPlayerObserver; 34 using content::MockMediaSessionPlayerObserver;
34 35
35 using ::testing::Expectation; 36 using ::testing::Expectation;
37 using ::testing::_;
36 38
37 namespace { 39 namespace {
38 40
39 const double kDefaultVolumeMultiplier = 1.0; 41 const double kDefaultVolumeMultiplier = 1.0;
40 const double kDuckingVolumeMultiplier = 0.2; 42 const double kDuckingVolumeMultiplier = 0.2;
41 43
42 class MockAudioFocusDelegate : public AudioFocusDelegate { 44 class MockAudioFocusDelegate : public AudioFocusDelegate {
43 public: 45 public:
44 bool RequestAudioFocus(content::AudioFocusManager::AudioFocusType) override { 46 MockAudioFocusDelegate() {
45 return true; 47 ON_CALL(*this, RequestAudioFocus(_)).WillByDefault(::testing::Return(true));
46 } 48 }
47 49
48 void AbandonAudioFocus() override {} 50 MOCK_METHOD1(RequestAudioFocus,
51 bool(content::AudioFocusManager::AudioFocusType));
52 MOCK_METHOD0(AbandonAudioFocus, void());
49 }; 53 };
50 54
51 class MockMediaSessionObserver : public MediaSessionObserver { 55 class MockMediaSessionObserver : public MediaSessionObserver {
52 public: 56 public:
53 MockMediaSessionObserver(MediaSession* media_session) 57 MockMediaSessionObserver(MediaSession* media_session)
54 : MediaSessionObserver(media_session) {} 58 : MediaSessionObserver(media_session) {}
55 59
56 MOCK_METHOD2(MediaSessionStateChanged, 60 MOCK_METHOD2(MediaSessionStateChanged,
57 void(bool is_controllable, bool is_suspended)); 61 void(bool is_controllable, bool is_suspended));
58 MOCK_METHOD0(MediaSessionDestroyed, void()); 62 MOCK_METHOD0(MediaSessionDestroyed, void());
59 }; 63 };
60 64
61 } // namespace 65 } // namespace
62 66
63 class MediaSessionImplBrowserTest : public content::ContentBrowserTest { 67 class MediaSessionImplBrowserTest : public content::ContentBrowserTest {
64 protected: 68 protected:
65 MediaSessionImplBrowserTest() = default; 69 MediaSessionImplBrowserTest() = default;
66 70
67 void SetUpOnMainThread() override { 71 void SetUpOnMainThread() override {
68 ContentBrowserTest::SetUpOnMainThread(); 72 ContentBrowserTest::SetUpOnMainThread();
69 73
70 media_session_ = MediaSessionImpl::Get(shell()->web_contents()); 74 media_session_ = MediaSessionImpl::Get(shell()->web_contents());
71 mock_media_session_observer_.reset( 75 mock_media_session_observer_.reset(
72 new MockMediaSessionObserver(media_session_)); 76 new MockMediaSessionObserver(media_session_));
77 mock_audio_focus_delegate_ = new MockAudioFocusDelegate;
73 media_session_->SetDelegateForTests( 78 media_session_->SetDelegateForTests(
74 std::unique_ptr<AudioFocusDelegate>(new MockAudioFocusDelegate())); 79 base::WrapUnique(mock_audio_focus_delegate_));
75 ASSERT_TRUE(media_session_); 80 ASSERT_TRUE(media_session_);
76 } 81 }
77 82
78 void TearDownOnMainThread() override { 83 void TearDownOnMainThread() override {
79 mock_media_session_observer_.reset(); 84 mock_media_session_observer_.reset();
80 85
81 media_session_->RemoveAllPlayersForTest(); 86 media_session_->RemoveAllPlayersForTest();
82 media_session_ = nullptr; 87 media_session_ = nullptr;
83 88
84 ContentBrowserTest::TearDownOnMainThread(); 89 ContentBrowserTest::TearDownOnMainThread();
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 } 142 }
138 143
139 void SystemStartDucking() { media_session_->StartDucking(); } 144 void SystemStartDucking() { media_session_->StartDucking(); }
140 145
141 void SystemStopDucking() { media_session_->StopDucking(); } 146 void SystemStopDucking() { media_session_->StopDucking(); }
142 147
143 MockMediaSessionObserver* mock_media_session_observer() { 148 MockMediaSessionObserver* mock_media_session_observer() {
144 return mock_media_session_observer_.get(); 149 return mock_media_session_observer_.get();
145 } 150 }
146 151
152 MockAudioFocusDelegate* mock_audio_focus_delegate() {
153 return mock_audio_focus_delegate_;
154 }
155
147 std::unique_ptr<MediaSessionImpl> CreateDummyMediaSession() { 156 std::unique_ptr<MediaSessionImpl> CreateDummyMediaSession() {
148 return std::unique_ptr<MediaSessionImpl>(new MediaSessionImpl(nullptr)); 157 return base::WrapUnique<MediaSessionImpl>(new MediaSessionImpl(nullptr));
149 } 158 }
150 159
151 MediaSessionUmaHelper* GetMediaSessionUMAHelper() { 160 MediaSessionUmaHelper* GetMediaSessionUMAHelper() {
152 return media_session_->uma_helper_for_test(); 161 return media_session_->uma_helper_for_test();
153 } 162 }
154 163
155 protected: 164 protected:
156 MediaSessionImpl* media_session_; 165 MediaSessionImpl* media_session_;
157 std::unique_ptr<MockMediaSessionObserver> mock_media_session_observer_; 166 std::unique_ptr<MockMediaSessionObserver> mock_media_session_observer_;
167 MockAudioFocusDelegate* mock_audio_focus_delegate_;
158 168
159 DISALLOW_COPY_AND_ASSIGN(MediaSessionImplBrowserTest); 169 DISALLOW_COPY_AND_ASSIGN(MediaSessionImplBrowserTest);
160 }; 170 };
161 171
162 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 172 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
163 PlayersFromSameObserverDoNotStopEachOtherInSameSession) { 173 PlayersFromSameObserverDoNotStopEachOtherInSameSession) {
164 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 174 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
165 new MockMediaSessionPlayerObserver);
166 175
167 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 176 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
168 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 177 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
169 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 178 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
170 179
171 EXPECT_TRUE(player_observer->IsPlaying(0)); 180 EXPECT_TRUE(player_observer->IsPlaying(0));
172 EXPECT_TRUE(player_observer->IsPlaying(1)); 181 EXPECT_TRUE(player_observer->IsPlaying(1));
173 EXPECT_TRUE(player_observer->IsPlaying(2)); 182 EXPECT_TRUE(player_observer->IsPlaying(2));
174 } 183 }
175 184
176 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 185 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
177 PlayersFromManyObserverDoNotStopEachOtherInSameSession) { 186 PlayersFromManyObserverDoNotStopEachOtherInSameSession) {
178 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer_1( 187 auto player_observer_1 = base::MakeUnique<MockMediaSessionPlayerObserver>();
179 new MockMediaSessionPlayerObserver); 188 auto player_observer_2 = base::MakeUnique<MockMediaSessionPlayerObserver>();
180 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer_2( 189 auto player_observer_3 = base::MakeUnique<MockMediaSessionPlayerObserver>();
181 new MockMediaSessionPlayerObserver);
182 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer_3(
183 new MockMediaSessionPlayerObserver);
184 190
185 StartNewPlayer(player_observer_1.get(), media::MediaContentType::Persistent); 191 StartNewPlayer(player_observer_1.get(), media::MediaContentType::Persistent);
186 StartNewPlayer(player_observer_2.get(), media::MediaContentType::Persistent); 192 StartNewPlayer(player_observer_2.get(), media::MediaContentType::Persistent);
187 StartNewPlayer(player_observer_3.get(), media::MediaContentType::Persistent); 193 StartNewPlayer(player_observer_3.get(), media::MediaContentType::Persistent);
188 194
189 EXPECT_TRUE(player_observer_1->IsPlaying(0)); 195 EXPECT_TRUE(player_observer_1->IsPlaying(0));
190 EXPECT_TRUE(player_observer_2->IsPlaying(0)); 196 EXPECT_TRUE(player_observer_2->IsPlaying(0));
191 EXPECT_TRUE(player_observer_3->IsPlaying(0)); 197 EXPECT_TRUE(player_observer_3->IsPlaying(0));
192 } 198 }
193 199
194 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 200 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
195 SuspendedMediaSessionStopsPlayers) { 201 SuspendedMediaSessionStopsPlayers) {
196 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 202 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
197 new MockMediaSessionPlayerObserver);
198 203
199 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 204 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
200 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 205 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
201 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 206 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
202 207
203 SystemSuspend(true); 208 SystemSuspend(true);
204 209
205 EXPECT_FALSE(player_observer->IsPlaying(0)); 210 EXPECT_FALSE(player_observer->IsPlaying(0));
206 EXPECT_FALSE(player_observer->IsPlaying(1)); 211 EXPECT_FALSE(player_observer->IsPlaying(1));
207 EXPECT_FALSE(player_observer->IsPlaying(2)); 212 EXPECT_FALSE(player_observer->IsPlaying(2));
208 } 213 }
209 214
210 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 215 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
211 ResumedMediaSessionRestartsPlayers) { 216 ResumedMediaSessionRestartsPlayers) {
212 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 217 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
213 new MockMediaSessionPlayerObserver);
214 218
215 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 219 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
216 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 220 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
217 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 221 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
218 222
219 SystemSuspend(true); 223 SystemSuspend(true);
220 SystemResume(); 224 SystemResume();
221 225
222 EXPECT_TRUE(player_observer->IsPlaying(0)); 226 EXPECT_TRUE(player_observer->IsPlaying(0));
223 EXPECT_TRUE(player_observer->IsPlaying(1)); 227 EXPECT_TRUE(player_observer->IsPlaying(1));
224 EXPECT_TRUE(player_observer->IsPlaying(2)); 228 EXPECT_TRUE(player_observer->IsPlaying(2));
225 } 229 }
226 230
227 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 231 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
228 StartedPlayerOnSuspendedSessionPlaysAlone) { 232 StartedPlayerOnSuspendedSessionPlaysAlone) {
229 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 233 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
230 new MockMediaSessionPlayerObserver);
231 234
232 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 235 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
233 236
234 EXPECT_TRUE(player_observer->IsPlaying(0)); 237 EXPECT_TRUE(player_observer->IsPlaying(0));
235 238
236 SystemSuspend(true); 239 SystemSuspend(true);
237 240
238 EXPECT_FALSE(player_observer->IsPlaying(0)); 241 EXPECT_FALSE(player_observer->IsPlaying(0));
239 242
240 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 243 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
241 244
242 EXPECT_FALSE(player_observer->IsPlaying(0)); 245 EXPECT_FALSE(player_observer->IsPlaying(0));
243 EXPECT_TRUE(player_observer->IsPlaying(1)); 246 EXPECT_TRUE(player_observer->IsPlaying(1));
244 247
245 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 248 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
246 249
247 EXPECT_FALSE(player_observer->IsPlaying(0)); 250 EXPECT_FALSE(player_observer->IsPlaying(0));
248 EXPECT_TRUE(player_observer->IsPlaying(1)); 251 EXPECT_TRUE(player_observer->IsPlaying(1));
249 EXPECT_TRUE(player_observer->IsPlaying(2)); 252 EXPECT_TRUE(player_observer->IsPlaying(2));
250 } 253 }
251 254
252 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, InitialVolumeMultiplier) { 255 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, InitialVolumeMultiplier) {
253 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 256 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
254 new MockMediaSessionPlayerObserver);
255 257
256 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 258 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
257 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 259 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
258 260
259 EXPECT_EQ(kDefaultVolumeMultiplier, player_observer->GetVolumeMultiplier(0)); 261 EXPECT_EQ(kDefaultVolumeMultiplier, player_observer->GetVolumeMultiplier(0));
260 EXPECT_EQ(kDefaultVolumeMultiplier, player_observer->GetVolumeMultiplier(1)); 262 EXPECT_EQ(kDefaultVolumeMultiplier, player_observer->GetVolumeMultiplier(1));
261 } 263 }
262 264
263 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 265 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
264 StartDuckingReducesVolumeMultiplier) { 266 StartDuckingReducesVolumeMultiplier) {
265 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 267 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
266 new MockMediaSessionPlayerObserver);
267 268
268 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 269 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
269 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 270 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
270 SystemStartDucking(); 271 SystemStartDucking();
271 272
272 EXPECT_EQ(kDuckingVolumeMultiplier, player_observer->GetVolumeMultiplier(0)); 273 EXPECT_EQ(kDuckingVolumeMultiplier, player_observer->GetVolumeMultiplier(0));
273 EXPECT_EQ(kDuckingVolumeMultiplier, player_observer->GetVolumeMultiplier(1)); 274 EXPECT_EQ(kDuckingVolumeMultiplier, player_observer->GetVolumeMultiplier(1));
274 275
275 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 276 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
276 277
277 EXPECT_EQ(kDuckingVolumeMultiplier, player_observer->GetVolumeMultiplier(2)); 278 EXPECT_EQ(kDuckingVolumeMultiplier, player_observer->GetVolumeMultiplier(2));
278 } 279 }
279 280
280 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 281 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
281 StopDuckingRecoversVolumeMultiplier) { 282 StopDuckingRecoversVolumeMultiplier) {
282 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 283 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
283 new MockMediaSessionPlayerObserver);
284 284
285 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 285 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
286 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 286 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
287 SystemStartDucking(); 287 SystemStartDucking();
288 SystemStopDucking(); 288 SystemStopDucking();
289 289
290 EXPECT_EQ(kDefaultVolumeMultiplier, player_observer->GetVolumeMultiplier(0)); 290 EXPECT_EQ(kDefaultVolumeMultiplier, player_observer->GetVolumeMultiplier(0));
291 EXPECT_EQ(kDefaultVolumeMultiplier, player_observer->GetVolumeMultiplier(1)); 291 EXPECT_EQ(kDefaultVolumeMultiplier, player_observer->GetVolumeMultiplier(1));
292 292
293 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 293 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
294 294
295 EXPECT_EQ(kDefaultVolumeMultiplier, player_observer->GetVolumeMultiplier(2)); 295 EXPECT_EQ(kDefaultVolumeMultiplier, player_observer->GetVolumeMultiplier(2));
296 } 296 }
297 297
298 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, AudioFocusInitialState) { 298 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, AudioFocusInitialState) {
299 EXPECT_FALSE(HasAudioFocus()); 299 EXPECT_FALSE(HasAudioFocus());
300 } 300 }
301 301
302 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, StartPlayerGivesFocus) { 302 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, StartPlayerGivesFocus) {
303 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 303 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
304 new MockMediaSessionPlayerObserver);
305 304
306 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 305 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
307 306
308 EXPECT_TRUE(HasAudioFocus()); 307 EXPECT_TRUE(HasAudioFocus());
309 } 308 }
310 309
311 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 310 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
312 SuspendGivesAwayAudioFocus) { 311 SuspendGivesAwayAudioFocus) {
313 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 312 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
314 new MockMediaSessionPlayerObserver);
315 313
316 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 314 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
317 315
318 SystemSuspend(true); 316 SystemSuspend(true);
319 317
320 EXPECT_FALSE(HasAudioFocus()); 318 EXPECT_FALSE(HasAudioFocus());
321 } 319 }
322 320
323 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, StopGivesAwayAudioFocus) { 321 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, StopGivesAwayAudioFocus) {
324 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 322 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
325 new MockMediaSessionPlayerObserver);
326 323
327 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 324 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
328 325
329 media_session_->Stop(MediaSession::SuspendType::UI); 326 media_session_->Stop(MediaSession::SuspendType::UI);
330 327
331 EXPECT_FALSE(HasAudioFocus()); 328 EXPECT_FALSE(HasAudioFocus());
332 } 329 }
333 330
334 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ResumeGivesBackAudioFocus) { 331 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ResumeGivesBackAudioFocus) {
335 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 332 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
336 new MockMediaSessionPlayerObserver);
337 333
338 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 334 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
339 335
340 SystemSuspend(true); 336 SystemSuspend(true);
341 SystemResume(); 337 SystemResume();
342 338
343 EXPECT_TRUE(HasAudioFocus()); 339 EXPECT_TRUE(HasAudioFocus());
344 } 340 }
345 341
346 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 342 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
347 RemovingLastPlayerDropsAudioFocus) { 343 RemovingLastPlayerDropsAudioFocus) {
348 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 344 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
349 new MockMediaSessionPlayerObserver);
350 345
351 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 346 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
352 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 347 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
353 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 348 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
354 349
355 RemovePlayer(player_observer.get(), 0); 350 RemovePlayer(player_observer.get(), 0);
356 EXPECT_TRUE(HasAudioFocus()); 351 EXPECT_TRUE(HasAudioFocus());
357 RemovePlayer(player_observer.get(), 1); 352 RemovePlayer(player_observer.get(), 1);
358 EXPECT_TRUE(HasAudioFocus()); 353 EXPECT_TRUE(HasAudioFocus());
359 RemovePlayer(player_observer.get(), 2); 354 RemovePlayer(player_observer.get(), 2);
360 EXPECT_FALSE(HasAudioFocus()); 355 EXPECT_FALSE(HasAudioFocus());
361 } 356 }
362 357
363 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 358 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
364 RemovingLastPlayerFromManyObserversDropsAudioFocus) { 359 RemovingLastPlayerFromManyObserversDropsAudioFocus) {
365 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer_1( 360 auto player_observer_1 = base::MakeUnique<MockMediaSessionPlayerObserver>();
366 new MockMediaSessionPlayerObserver); 361 auto player_observer_2 = base::MakeUnique<MockMediaSessionPlayerObserver>();
367 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer_2( 362 auto player_observer_3 = base::MakeUnique<MockMediaSessionPlayerObserver>();
368 new MockMediaSessionPlayerObserver);
369 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer_3(
370 new MockMediaSessionPlayerObserver);
371 363
372 StartNewPlayer(player_observer_1.get(), media::MediaContentType::Persistent); 364 StartNewPlayer(player_observer_1.get(), media::MediaContentType::Persistent);
373 StartNewPlayer(player_observer_2.get(), media::MediaContentType::Persistent); 365 StartNewPlayer(player_observer_2.get(), media::MediaContentType::Persistent);
374 StartNewPlayer(player_observer_3.get(), media::MediaContentType::Persistent); 366 StartNewPlayer(player_observer_3.get(), media::MediaContentType::Persistent);
375 367
376 RemovePlayer(player_observer_1.get(), 0); 368 RemovePlayer(player_observer_1.get(), 0);
377 EXPECT_TRUE(HasAudioFocus()); 369 EXPECT_TRUE(HasAudioFocus());
378 RemovePlayer(player_observer_2.get(), 0); 370 RemovePlayer(player_observer_2.get(), 0);
379 EXPECT_TRUE(HasAudioFocus()); 371 EXPECT_TRUE(HasAudioFocus());
380 RemovePlayer(player_observer_3.get(), 0); 372 RemovePlayer(player_observer_3.get(), 0);
381 EXPECT_FALSE(HasAudioFocus()); 373 EXPECT_FALSE(HasAudioFocus());
382 } 374 }
383 375
384 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 376 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
385 RemovingAllPlayersFromObserversDropsAudioFocus) { 377 RemovingAllPlayersFromObserversDropsAudioFocus) {
386 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer_1( 378 auto player_observer_1 = base::MakeUnique<MockMediaSessionPlayerObserver>();
387 new MockMediaSessionPlayerObserver); 379 auto player_observer_2 = base::MakeUnique<MockMediaSessionPlayerObserver>();
388 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer_2(
389 new MockMediaSessionPlayerObserver);
390 380
391 StartNewPlayer(player_observer_1.get(), media::MediaContentType::Persistent); 381 StartNewPlayer(player_observer_1.get(), media::MediaContentType::Persistent);
392 StartNewPlayer(player_observer_1.get(), media::MediaContentType::Persistent); 382 StartNewPlayer(player_observer_1.get(), media::MediaContentType::Persistent);
393 StartNewPlayer(player_observer_2.get(), media::MediaContentType::Persistent); 383 StartNewPlayer(player_observer_2.get(), media::MediaContentType::Persistent);
394 StartNewPlayer(player_observer_2.get(), media::MediaContentType::Persistent); 384 StartNewPlayer(player_observer_2.get(), media::MediaContentType::Persistent);
395 385
396 RemovePlayers(player_observer_1.get()); 386 RemovePlayers(player_observer_1.get());
397 EXPECT_TRUE(HasAudioFocus()); 387 EXPECT_TRUE(HasAudioFocus());
398 RemovePlayers(player_observer_2.get()); 388 RemovePlayers(player_observer_2.get());
399 EXPECT_FALSE(HasAudioFocus()); 389 EXPECT_FALSE(HasAudioFocus());
400 } 390 }
401 391
402 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ResumePlayGivesAudioFocus) { 392 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ResumePlayGivesAudioFocus) {
403 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 393 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
404 new MockMediaSessionPlayerObserver);
405 394
406 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 395 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
407 396
408 RemovePlayer(player_observer.get(), 0); 397 RemovePlayer(player_observer.get(), 0);
409 EXPECT_FALSE(HasAudioFocus()); 398 EXPECT_FALSE(HasAudioFocus());
410 399
411 EXPECT_TRUE( 400 EXPECT_TRUE(
412 AddPlayer(player_observer.get(), 0, media::MediaContentType::Persistent)); 401 AddPlayer(player_observer.get(), 0, media::MediaContentType::Persistent));
413 EXPECT_TRUE(HasAudioFocus()); 402 EXPECT_TRUE(HasAudioFocus());
414 } 403 }
415 404
416 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 405 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
417 ResumeSuspendAreSentOnlyOncePerPlayers) { 406 ResumeSuspendAreSentOnlyOncePerPlayers) {
418 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 407 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
419 new MockMediaSessionPlayerObserver);
420 408
421 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 409 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
422 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 410 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
423 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 411 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
424 412
425 EXPECT_EQ(0, player_observer->received_suspend_calls()); 413 EXPECT_EQ(0, player_observer->received_suspend_calls());
426 EXPECT_EQ(0, player_observer->received_resume_calls()); 414 EXPECT_EQ(0, player_observer->received_resume_calls());
427 415
428 SystemSuspend(true); 416 SystemSuspend(true);
429 EXPECT_EQ(3, player_observer->received_suspend_calls()); 417 EXPECT_EQ(3, player_observer->received_suspend_calls());
430 418
431 SystemResume(); 419 SystemResume();
432 EXPECT_EQ(3, player_observer->received_resume_calls()); 420 EXPECT_EQ(3, player_observer->received_resume_calls());
433 } 421 }
434 422
435 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 423 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
436 ResumeSuspendAreSentOnlyOncePerPlayersAddedTwice) { 424 ResumeSuspendAreSentOnlyOncePerPlayersAddedTwice) {
437 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 425 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
438 new MockMediaSessionPlayerObserver);
439 426
440 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 427 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
441 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 428 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
442 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 429 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
443 430
444 // Adding the three players above again. 431 // Adding the three players above again.
445 EXPECT_TRUE( 432 EXPECT_TRUE(
446 AddPlayer(player_observer.get(), 0, media::MediaContentType::Persistent)); 433 AddPlayer(player_observer.get(), 0, media::MediaContentType::Persistent));
447 EXPECT_TRUE( 434 EXPECT_TRUE(
448 AddPlayer(player_observer.get(), 1, media::MediaContentType::Persistent)); 435 AddPlayer(player_observer.get(), 1, media::MediaContentType::Persistent));
449 EXPECT_TRUE( 436 EXPECT_TRUE(
450 AddPlayer(player_observer.get(), 2, media::MediaContentType::Persistent)); 437 AddPlayer(player_observer.get(), 2, media::MediaContentType::Persistent));
451 438
452 EXPECT_EQ(0, player_observer->received_suspend_calls()); 439 EXPECT_EQ(0, player_observer->received_suspend_calls());
453 EXPECT_EQ(0, player_observer->received_resume_calls()); 440 EXPECT_EQ(0, player_observer->received_resume_calls());
454 441
455 SystemSuspend(true); 442 SystemSuspend(true);
456 EXPECT_EQ(3, player_observer->received_suspend_calls()); 443 EXPECT_EQ(3, player_observer->received_suspend_calls());
457 444
458 SystemResume(); 445 SystemResume();
459 EXPECT_EQ(3, player_observer->received_resume_calls()); 446 EXPECT_EQ(3, player_observer->received_resume_calls());
460 } 447 }
461 448
462 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 449 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
463 RemovingTheSamePlayerTwiceIsANoop) { 450 RemovingTheSamePlayerTwiceIsANoop) {
464 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 451 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
465 new MockMediaSessionPlayerObserver);
466 452
467 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 453 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
468 454
469 RemovePlayer(player_observer.get(), 0); 455 RemovePlayer(player_observer.get(), 0);
470 RemovePlayer(player_observer.get(), 0); 456 RemovePlayer(player_observer.get(), 0);
471 } 457 }
472 458
473 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, AudioFocusType) { 459 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, AudioFocusType) {
474 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 460 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
475 new MockMediaSessionPlayerObserver);
476 461
477 // Starting a player with a given type should set the session to that type. 462 // Starting a player with a given type should set the session to that type.
478 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient); 463 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient);
479 EXPECT_EQ(content::AudioFocusManager::AudioFocusType::GainTransientMayDuck, 464 EXPECT_EQ(content::AudioFocusManager::AudioFocusType::GainTransientMayDuck,
480 GetSessionAudioFocusType()); 465 GetSessionAudioFocusType());
481 466
482 // Adding a player of the same type should have no effect on the type. 467 // Adding a player of the same type should have no effect on the type.
483 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient); 468 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient);
484 EXPECT_EQ(content::AudioFocusManager::AudioFocusType::GainTransientMayDuck, 469 EXPECT_EQ(content::AudioFocusManager::AudioFocusType::GainTransientMayDuck,
485 GetSessionAudioFocusType()); 470 GetSessionAudioFocusType());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 EXPECT_TRUE(player_observer->IsPlaying(3)); 502 EXPECT_TRUE(player_observer->IsPlaying(3));
518 503
519 EXPECT_EQ(content::AudioFocusManager::AudioFocusType::Gain, 504 EXPECT_EQ(content::AudioFocusManager::AudioFocusType::Gain,
520 GetSessionAudioFocusType()); 505 GetSessionAudioFocusType());
521 } 506 }
522 507
523 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ControlsShowForContent) { 508 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ControlsShowForContent) {
524 EXPECT_CALL(*mock_media_session_observer(), 509 EXPECT_CALL(*mock_media_session_observer(),
525 MediaSessionStateChanged(true, false)); 510 MediaSessionStateChanged(true, false));
526 511
527 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 512 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
528 new MockMediaSessionPlayerObserver);
529 513
530 // Starting a player with a content type should show the media controls. 514 // Starting a player with a content type should show the media controls.
531 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 515 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
532 516
533 EXPECT_TRUE(IsControllable()); 517 EXPECT_TRUE(IsControllable());
534 EXPECT_FALSE(IsSuspended()); 518 EXPECT_FALSE(IsSuspended());
535 } 519 }
536 520
537 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 521 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
538 ControlsNoShowForTransient) { 522 ControlsNoShowForTransient) {
539 EXPECT_CALL(*mock_media_session_observer(), 523 EXPECT_CALL(*mock_media_session_observer(),
540 MediaSessionStateChanged(false, false)); 524 MediaSessionStateChanged(false, false));
541 525
542 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 526 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
543 new MockMediaSessionPlayerObserver);
544 527
545 // Starting a player with a transient type should not show the media controls. 528 // Starting a player with a transient type should not show the media controls.
546 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient); 529 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient);
547 530
548 EXPECT_FALSE(IsControllable()); 531 EXPECT_FALSE(IsControllable());
549 EXPECT_FALSE(IsSuspended()); 532 EXPECT_FALSE(IsSuspended());
550 } 533 }
551 534
552 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ControlsHideWhenStopped) { 535 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ControlsHideWhenStopped) {
553 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 536 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
554 MediaSessionStateChanged(true, false)); 537 MediaSessionStateChanged(true, false));
555 EXPECT_CALL(*mock_media_session_observer(), 538 EXPECT_CALL(*mock_media_session_observer(),
556 MediaSessionStateChanged(false, true)) 539 MediaSessionStateChanged(false, true))
557 .After(showControls); 540 .After(showControls);
558 541
559 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 542 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
560 new MockMediaSessionPlayerObserver);
561 543
562 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 544 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
563 545
564 RemovePlayers(player_observer.get()); 546 RemovePlayers(player_observer.get());
565 547
566 EXPECT_FALSE(IsControllable()); 548 EXPECT_FALSE(IsControllable());
567 EXPECT_TRUE(IsSuspended()); 549 EXPECT_TRUE(IsSuspended());
568 } 550 }
569 551
570 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 552 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
571 ControlsShownAcceptTransient) { 553 ControlsShownAcceptTransient) {
572 EXPECT_CALL(*mock_media_session_observer(), 554 EXPECT_CALL(*mock_media_session_observer(),
573 MediaSessionStateChanged(true, false)); 555 MediaSessionStateChanged(true, false));
574 556
575 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 557 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
576 new MockMediaSessionPlayerObserver);
577 558
578 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 559 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
579 560
580 // Transient player join the session without affecting the controls. 561 // Transient player join the session without affecting the controls.
581 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient); 562 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient);
582 563
583 EXPECT_TRUE(IsControllable()); 564 EXPECT_TRUE(IsControllable());
584 EXPECT_FALSE(IsSuspended()); 565 EXPECT_FALSE(IsSuspended());
585 } 566 }
586 567
587 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 568 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
588 ControlsShownAfterContentAdded) { 569 ControlsShownAfterContentAdded) {
589 Expectation dontShowControls = EXPECT_CALL( 570 Expectation dontShowControls = EXPECT_CALL(
590 *mock_media_session_observer(), MediaSessionStateChanged(false, false)); 571 *mock_media_session_observer(), MediaSessionStateChanged(false, false));
591 EXPECT_CALL(*mock_media_session_observer(), 572 EXPECT_CALL(*mock_media_session_observer(),
592 MediaSessionStateChanged(true, false)) 573 MediaSessionStateChanged(true, false))
593 .After(dontShowControls); 574 .After(dontShowControls);
594 575
595 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 576 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
596 new MockMediaSessionPlayerObserver);
597 577
598 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient); 578 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient);
599 579
600 // The controls are shown when the content player is added. 580 // The controls are shown when the content player is added.
601 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 581 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
602 582
603 EXPECT_TRUE(IsControllable()); 583 EXPECT_TRUE(IsControllable());
604 EXPECT_FALSE(IsSuspended()); 584 EXPECT_FALSE(IsSuspended());
605 } 585 }
606 586
607 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 587 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
608 ControlsStayIfOnlyOnePlayerHasBeenPaused) { 588 ControlsStayIfOnlyOnePlayerHasBeenPaused) {
609 EXPECT_CALL(*mock_media_session_observer(), 589 EXPECT_CALL(*mock_media_session_observer(),
610 MediaSessionStateChanged(true, false)); 590 MediaSessionStateChanged(true, false));
611 591
612 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 592 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
613 new MockMediaSessionPlayerObserver);
614 593
615 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 594 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
616 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient); 595 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient);
617 596
618 // Removing only content player doesn't hide the controls since the session 597 // Removing only content player doesn't hide the controls since the session
619 // is still active. 598 // is still active.
620 RemovePlayer(player_observer.get(), 0); 599 RemovePlayer(player_observer.get(), 0);
621 600
622 EXPECT_TRUE(IsControllable()); 601 EXPECT_TRUE(IsControllable());
623 EXPECT_FALSE(IsSuspended()); 602 EXPECT_FALSE(IsSuspended());
624 } 603 }
625 604
626 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 605 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
627 ControlsHideWhenTheLastPlayerIsRemoved) { 606 ControlsHideWhenTheLastPlayerIsRemoved) {
628 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 607 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
629 MediaSessionStateChanged(true, false)); 608 MediaSessionStateChanged(true, false));
630 EXPECT_CALL(*mock_media_session_observer(), 609 EXPECT_CALL(*mock_media_session_observer(),
631 MediaSessionStateChanged(false, true)) 610 MediaSessionStateChanged(false, true))
632 .After(showControls); 611 .After(showControls);
633 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 612
634 new MockMediaSessionPlayerObserver); 613 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
635 614
636 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 615 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
637 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 616 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
638 617
639 RemovePlayer(player_observer.get(), 0); 618 RemovePlayer(player_observer.get(), 0);
640 619
641 EXPECT_TRUE(IsControllable()); 620 EXPECT_TRUE(IsControllable());
642 EXPECT_FALSE(IsSuspended()); 621 EXPECT_FALSE(IsSuspended());
643 622
644 RemovePlayer(player_observer.get(), 1); 623 RemovePlayer(player_observer.get(), 1);
645 624
646 EXPECT_FALSE(IsControllable()); 625 EXPECT_FALSE(IsControllable());
647 EXPECT_TRUE(IsSuspended()); 626 EXPECT_TRUE(IsSuspended());
648 } 627 }
649 628
650 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 629 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
651 ControlsHideWhenAllThePlayersAreRemoved) { 630 ControlsHideWhenAllThePlayersAreRemoved) {
652 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 631 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
653 MediaSessionStateChanged(true, false)); 632 MediaSessionStateChanged(true, false));
654 EXPECT_CALL(*mock_media_session_observer(), 633 EXPECT_CALL(*mock_media_session_observer(),
655 MediaSessionStateChanged(false, true)) 634 MediaSessionStateChanged(false, true))
656 .After(showControls); 635 .After(showControls);
657 636
658 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 637 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
659 new MockMediaSessionPlayerObserver);
660 638
661 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 639 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
662 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 640 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
663 641
664 RemovePlayers(player_observer.get()); 642 RemovePlayers(player_observer.get());
665 643
666 EXPECT_FALSE(IsControllable()); 644 EXPECT_FALSE(IsControllable());
667 EXPECT_TRUE(IsSuspended()); 645 EXPECT_TRUE(IsSuspended());
668 } 646 }
669 647
670 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 648 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
671 ControlsNotHideWhenTheLastPlayerIsPaused) { 649 ControlsNotHideWhenTheLastPlayerIsPaused) {
672 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 650 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
673 MediaSessionStateChanged(true, false)); 651 MediaSessionStateChanged(true, false));
674 EXPECT_CALL(*mock_media_session_observer(), 652 EXPECT_CALL(*mock_media_session_observer(),
675 MediaSessionStateChanged(true, true)) 653 MediaSessionStateChanged(true, true))
676 .After(showControls); 654 .After(showControls);
677 655
678 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 656 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
679 new MockMediaSessionPlayerObserver);
680 657
681 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 658 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
682 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 659 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
683 660
684 OnPlayerPaused(player_observer.get(), 0); 661 OnPlayerPaused(player_observer.get(), 0);
685 662
686 EXPECT_TRUE(IsControllable()); 663 EXPECT_TRUE(IsControllable());
687 EXPECT_FALSE(IsSuspended()); 664 EXPECT_FALSE(IsSuspended());
688 665
689 OnPlayerPaused(player_observer.get(), 1); 666 OnPlayerPaused(player_observer.get(), 1);
690 667
691 EXPECT_TRUE(IsControllable()); 668 EXPECT_TRUE(IsControllable());
692 EXPECT_TRUE(IsSuspended()); 669 EXPECT_TRUE(IsSuspended());
693 } 670 }
694 671
695 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 672 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
696 SuspendTemporaryUpdatesControls) { 673 SuspendTemporaryUpdatesControls) {
697 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 674 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
698 MediaSessionStateChanged(true, false)); 675 MediaSessionStateChanged(true, false));
699 EXPECT_CALL(*mock_media_session_observer(), 676 EXPECT_CALL(*mock_media_session_observer(),
700 MediaSessionStateChanged(true, true)) 677 MediaSessionStateChanged(true, true))
701 .After(showControls); 678 .After(showControls);
702 679
703 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 680 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
704 new MockMediaSessionPlayerObserver);
705 681
706 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 682 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
707 683
708 SystemSuspend(true); 684 SystemSuspend(true);
709 685
710 EXPECT_TRUE(IsControllable()); 686 EXPECT_TRUE(IsControllable());
711 EXPECT_TRUE(IsSuspended()); 687 EXPECT_TRUE(IsSuspended());
712 } 688 }
713 689
714 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 690 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
715 ControlsUpdatedWhenResumed) { 691 ControlsUpdatedWhenResumed) {
716 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 692 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
717 MediaSessionStateChanged(true, false)); 693 MediaSessionStateChanged(true, false));
718 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(), 694 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(),
719 MediaSessionStateChanged(true, true)) 695 MediaSessionStateChanged(true, true))
720 .After(showControls); 696 .After(showControls);
721 EXPECT_CALL(*mock_media_session_observer(), 697 EXPECT_CALL(*mock_media_session_observer(),
722 MediaSessionStateChanged(true, false)) 698 MediaSessionStateChanged(true, false))
723 .After(pauseControls); 699 .After(pauseControls);
724 700
725 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 701 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
726 new MockMediaSessionPlayerObserver);
727 702
728 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 703 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
729 SystemSuspend(true); 704 SystemSuspend(true);
730 SystemResume(); 705 SystemResume();
731 706
732 EXPECT_TRUE(IsControllable()); 707 EXPECT_TRUE(IsControllable());
733 EXPECT_FALSE(IsSuspended()); 708 EXPECT_FALSE(IsSuspended());
734 } 709 }
735 710
736 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 711 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
737 ControlsHideWhenSessionSuspendedPermanently) { 712 ControlsHideWhenSessionSuspendedPermanently) {
738 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 713 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
739 MediaSessionStateChanged(true, false)); 714 MediaSessionStateChanged(true, false));
740 EXPECT_CALL(*mock_media_session_observer(), 715 EXPECT_CALL(*mock_media_session_observer(),
741 MediaSessionStateChanged(false, true)) 716 MediaSessionStateChanged(false, true))
742 .After(showControls); 717 .After(showControls);
743 718
744 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 719 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
745 new MockMediaSessionPlayerObserver);
746 720
747 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 721 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
748 722
749 SystemSuspend(false); 723 SystemSuspend(false);
750 724
751 EXPECT_FALSE(IsControllable()); 725 EXPECT_FALSE(IsControllable());
752 EXPECT_TRUE(IsSuspended()); 726 EXPECT_TRUE(IsSuspended());
753 } 727 }
754 728
755 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 729 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
756 ConstrolsHideWhenSessionStops) { 730 ConstrolsHideWhenSessionStops) {
757 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 731 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
758 MediaSessionStateChanged(true, false)); 732 MediaSessionStateChanged(true, false));
759 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(), 733 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(),
760 MediaSessionStateChanged(true, true)) 734 MediaSessionStateChanged(true, true))
761 .After(showControls); 735 .After(showControls);
762 EXPECT_CALL(*mock_media_session_observer(), 736 EXPECT_CALL(*mock_media_session_observer(),
763 MediaSessionStateChanged(false, true)) 737 MediaSessionStateChanged(false, true))
764 .After(pauseControls); 738 .After(pauseControls);
765 739
766 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 740 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
767 new MockMediaSessionPlayerObserver);
768 741
769 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 742 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
770 743
771 media_session_->Stop(MediaSession::SuspendType::UI); 744 media_session_->Stop(MediaSession::SuspendType::UI);
772 745
773 EXPECT_FALSE(IsControllable()); 746 EXPECT_FALSE(IsControllable());
774 EXPECT_TRUE(IsSuspended()); 747 EXPECT_TRUE(IsSuspended());
775 } 748 }
776 749
777 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 750 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
778 ControlsHideWhenSessionChangesFromContentToTransient) { 751 ControlsHideWhenSessionChangesFromContentToTransient) {
779 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 752 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
780 MediaSessionStateChanged(true, false)); 753 MediaSessionStateChanged(true, false));
781 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(), 754 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(),
782 MediaSessionStateChanged(true, true)) 755 MediaSessionStateChanged(true, true))
783 .After(showControls); 756 .After(showControls);
784 EXPECT_CALL(*mock_media_session_observer(), 757 EXPECT_CALL(*mock_media_session_observer(),
785 MediaSessionStateChanged(false, false)) 758 MediaSessionStateChanged(false, false))
786 .After(pauseControls); 759 .After(pauseControls);
787 760
788 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 761 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
789 new MockMediaSessionPlayerObserver);
790 762
791 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 763 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
792 SystemSuspend(true); 764 SystemSuspend(true);
793 765
794 // This should reset the session and change it to a transient, so 766 // This should reset the session and change it to a transient, so
795 // hide the controls. 767 // hide the controls.
796 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient); 768 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient);
797 769
798 EXPECT_FALSE(IsControllable()); 770 EXPECT_FALSE(IsControllable());
799 EXPECT_FALSE(IsSuspended()); 771 EXPECT_FALSE(IsSuspended());
800 } 772 }
801 773
802 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 774 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
803 ControlsUpdatedWhenNewPlayerResetsSession) { 775 ControlsUpdatedWhenNewPlayerResetsSession) {
804 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 776 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
805 MediaSessionStateChanged(true, false)); 777 MediaSessionStateChanged(true, false));
806 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(), 778 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(),
807 MediaSessionStateChanged(true, true)) 779 MediaSessionStateChanged(true, true))
808 .After(showControls); 780 .After(showControls);
809 EXPECT_CALL(*mock_media_session_observer(), 781 EXPECT_CALL(*mock_media_session_observer(),
810 MediaSessionStateChanged(true, false)) 782 MediaSessionStateChanged(true, false))
811 .After(pauseControls); 783 .After(pauseControls);
812 784
813 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 785 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
814 new MockMediaSessionPlayerObserver);
815 786
816 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 787 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
817 SystemSuspend(true); 788 SystemSuspend(true);
818 789
819 // This should reset the session and update the controls. 790 // This should reset the session and update the controls.
820 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 791 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
821 792
822 EXPECT_TRUE(IsControllable()); 793 EXPECT_TRUE(IsControllable());
823 EXPECT_FALSE(IsSuspended()); 794 EXPECT_FALSE(IsSuspended());
824 } 795 }
825 796
826 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 797 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
827 ControlsResumedWhenPlayerIsResumed) { 798 ControlsResumedWhenPlayerIsResumed) {
828 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 799 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
829 MediaSessionStateChanged(true, false)); 800 MediaSessionStateChanged(true, false));
830 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(), 801 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(),
831 MediaSessionStateChanged(true, true)) 802 MediaSessionStateChanged(true, true))
832 .After(showControls); 803 .After(showControls);
833 EXPECT_CALL(*mock_media_session_observer(), 804 EXPECT_CALL(*mock_media_session_observer(),
834 MediaSessionStateChanged(true, false)) 805 MediaSessionStateChanged(true, false))
835 .After(pauseControls); 806 .After(pauseControls);
836 807
837 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 808 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
838 new MockMediaSessionPlayerObserver);
839 809
840 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 810 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
841 SystemSuspend(true); 811 SystemSuspend(true);
842 812
843 // This should resume the session and update the controls. 813 // This should resume the session and update the controls.
844 AddPlayer(player_observer.get(), 0, media::MediaContentType::Persistent); 814 AddPlayer(player_observer.get(), 0, media::MediaContentType::Persistent);
845 815
846 EXPECT_TRUE(IsControllable()); 816 EXPECT_TRUE(IsControllable());
847 EXPECT_FALSE(IsSuspended()); 817 EXPECT_FALSE(IsSuspended());
848 } 818 }
849 819
850 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 820 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
851 ControlsUpdatedDueToResumeSessionAction) { 821 ControlsUpdatedDueToResumeSessionAction) {
852 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 822 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
853 MediaSessionStateChanged(true, false)); 823 MediaSessionStateChanged(true, false));
854 EXPECT_CALL(*mock_media_session_observer(), 824 EXPECT_CALL(*mock_media_session_observer(),
855 MediaSessionStateChanged(true, true)) 825 MediaSessionStateChanged(true, true))
856 .After(showControls); 826 .After(showControls);
857 827
858 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 828 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
859 new MockMediaSessionPlayerObserver);
860 829
861 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 830 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
862 UISuspend(); 831 UISuspend();
863 832
864 EXPECT_TRUE(IsControllable()); 833 EXPECT_TRUE(IsControllable());
865 EXPECT_TRUE(IsSuspended()); 834 EXPECT_TRUE(IsSuspended());
866 } 835 }
867 836
868 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 837 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
869 ControlsUpdatedDueToSuspendSessionAction) { 838 ControlsUpdatedDueToSuspendSessionAction) {
870 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), 839 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(),
871 MediaSessionStateChanged(true, false)); 840 MediaSessionStateChanged(true, false));
872 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(), 841 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(),
873 MediaSessionStateChanged(true, true)) 842 MediaSessionStateChanged(true, true))
874 .After(showControls); 843 .After(showControls);
875 EXPECT_CALL(*mock_media_session_observer(), 844 EXPECT_CALL(*mock_media_session_observer(),
876 MediaSessionStateChanged(true, false)) 845 MediaSessionStateChanged(true, false))
877 .After(pauseControls); 846 .After(pauseControls);
878 847
879 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 848 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
880 new MockMediaSessionPlayerObserver);
881 849
882 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 850 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
883 UISuspend(); 851 UISuspend();
884 UIResume(); 852 UIResume();
885 853
886 EXPECT_TRUE(IsControllable()); 854 EXPECT_TRUE(IsControllable());
887 EXPECT_FALSE(IsSuspended()); 855 EXPECT_FALSE(IsSuspended());
888 } 856 }
889 857
890 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 858 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
859 ControlsDontShowWhenOneShotIsPresent) {
860 EXPECT_CALL(*mock_media_session_observer(),
861 MediaSessionStateChanged(false, false));
862
863 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
864
865 StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot);
866
867 EXPECT_FALSE(IsControllable());
868 EXPECT_FALSE(IsSuspended());
869
870 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient);
871 EXPECT_FALSE(IsControllable());
872 EXPECT_FALSE(IsSuspended());
873
874 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
875 EXPECT_FALSE(IsControllable());
876 EXPECT_FALSE(IsSuspended());
877 }
878
879 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
880 ControlsHiddenAfterRemoveOneShotWithoutOtherPlayers) {
881 Expectation expect_1 = EXPECT_CALL(*mock_media_session_observer(),
882 MediaSessionStateChanged(false, false));
883 Expectation expect_2 = EXPECT_CALL(*mock_media_session_observer(),
884 MediaSessionStateChanged(false, true))
885 .After(expect_1);
886 EXPECT_CALL(*mock_media_session_observer(), MediaSessionStateChanged(true, _))
887 .Times(0)
888 .After(expect_2);
889
890 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
891
892 StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot);
893 RemovePlayer(player_observer.get(), 0);
894
895 EXPECT_FALSE(IsControllable());
896 EXPECT_TRUE(IsSuspended());
897 }
898
899 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
900 ControlsShowAfterRemoveOneShotWithPersistentPresent) {
901 Expectation uncontrollable = EXPECT_CALL(
902 *mock_media_session_observer(), MediaSessionStateChanged(false, false));
903
904 EXPECT_CALL(*mock_media_session_observer(),
905 MediaSessionStateChanged(true, false))
906 .After(uncontrollable);
907
908 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
909
910 StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot);
911 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient);
912 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
913
914 RemovePlayer(player_observer.get(), 0);
915
916 EXPECT_TRUE(IsControllable());
917 EXPECT_FALSE(IsSuspended());
918 }
919
920 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
921 DontSuspendWhenOneShotIsPresent) {
922 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
923
924 StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot);
925 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient);
926 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
927
928 SystemSuspend(false);
929
930 EXPECT_FALSE(IsControllable());
931 EXPECT_FALSE(IsSuspended());
932
933 EXPECT_EQ(0, player_observer->received_suspend_calls());
934 }
935
936 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
891 DontResumeBySystemUISuspendedSessions) { 937 DontResumeBySystemUISuspendedSessions) {
892 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 938 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
893 new MockMediaSessionPlayerObserver); 939
894 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 940 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
895 941
896 UISuspend(); 942 UISuspend();
897 EXPECT_TRUE(IsControllable()); 943 EXPECT_TRUE(IsControllable());
898 EXPECT_TRUE(IsSuspended()); 944 EXPECT_TRUE(IsSuspended());
899 945
900 SystemResume(); 946 SystemResume();
901 EXPECT_TRUE(IsControllable()); 947 EXPECT_TRUE(IsControllable());
902 EXPECT_TRUE(IsSuspended()); 948 EXPECT_TRUE(IsSuspended());
903 } 949 }
904 950
905 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 951 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
906 AllowUIResumeForSystemSuspend) { 952 AllowUIResumeForSystemSuspend) {
907 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 953 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
908 new MockMediaSessionPlayerObserver); 954
909 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 955 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
910 956
911 SystemSuspend(true); 957 SystemSuspend(true);
912 EXPECT_TRUE(IsControllable()); 958 EXPECT_TRUE(IsControllable());
913 EXPECT_TRUE(IsSuspended()); 959 EXPECT_TRUE(IsSuspended());
914 960
915 UIResume(); 961 UIResume();
916 EXPECT_TRUE(IsControllable()); 962 EXPECT_TRUE(IsControllable());
917 EXPECT_FALSE(IsSuspended()); 963 EXPECT_FALSE(IsSuspended());
918 } 964 }
919 965
920 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ResumeSuspendFromUI) { 966 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ResumeSuspendFromUI) {
921 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 967 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
922 new MockMediaSessionPlayerObserver); 968
923 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 969 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
924 970
925 UISuspend(); 971 UISuspend();
926 EXPECT_TRUE(IsControllable()); 972 EXPECT_TRUE(IsControllable());
927 EXPECT_TRUE(IsSuspended()); 973 EXPECT_TRUE(IsSuspended());
928 974
929 UIResume(); 975 UIResume();
930 EXPECT_TRUE(IsControllable()); 976 EXPECT_TRUE(IsControllable());
931 EXPECT_FALSE(IsSuspended()); 977 EXPECT_FALSE(IsSuspended());
932 } 978 }
933 979
934 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ResumeSuspendFromSystem) { 980 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ResumeSuspendFromSystem) {
935 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 981 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
936 new MockMediaSessionPlayerObserver); 982
937 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 983 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
938 984
939 SystemSuspend(true); 985 SystemSuspend(true);
940 EXPECT_TRUE(IsControllable()); 986 EXPECT_TRUE(IsControllable());
941 EXPECT_TRUE(IsSuspended()); 987 EXPECT_TRUE(IsSuspended());
942 988
943 SystemResume(); 989 SystemResume();
944 EXPECT_TRUE(IsControllable()); 990 EXPECT_TRUE(IsControllable());
945 EXPECT_FALSE(IsSuspended()); 991 EXPECT_FALSE(IsSuspended());
946 } 992 }
947 993
994 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, OneShotTakesGainFocus) {
995 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
996
997 EXPECT_CALL(
998 *mock_audio_focus_delegate(),
999 RequestAudioFocus(content::AudioFocusManager::AudioFocusType::Gain))
1000 .Times(1);
1001 EXPECT_CALL(*mock_audio_focus_delegate(),
1002 RequestAudioFocus(::testing::Ne(
1003 content::AudioFocusManager::AudioFocusType::Gain)))
1004 .Times(0);
1005 StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot);
1006 StartNewPlayer(player_observer.get(), media::MediaContentType::Transient);
1007 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1008 }
1009
1010 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, RemovingOneShotDropsFocus) {
1011 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
1012
1013 EXPECT_CALL(*mock_audio_focus_delegate(), AbandonAudioFocus());
1014 StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot);
1015 RemovePlayer(player_observer.get(), 0);
1016 }
1017
1018 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
1019 RemovingOneShotWhileStillHavingOtherPlayersKeepsFocus) {
1020 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
1021
1022 EXPECT_CALL(*mock_audio_focus_delegate(), AbandonAudioFocus())
1023 .Times(1); // Called in TearDown
1024 StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot);
1025 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1026 RemovePlayer(player_observer.get(), 0);
1027 }
1028
948 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 1029 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
949 UMA_Suspended_SystemTransient) { 1030 UMA_Suspended_SystemTransient) {
950 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 1031 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
951 new MockMediaSessionPlayerObserver);
952 base::HistogramTester tester; 1032 base::HistogramTester tester;
953 1033
954 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1034 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
955 SystemSuspend(true); 1035 SystemSuspend(true);
956 1036
957 std::unique_ptr<base::HistogramSamples> samples( 1037 std::unique_ptr<base::HistogramSamples> samples(
958 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended")); 1038 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended"));
959 EXPECT_EQ(1, samples->TotalCount()); 1039 EXPECT_EQ(1, samples->TotalCount());
960 EXPECT_EQ(1, samples->GetCount(0)); // System Transient 1040 EXPECT_EQ(1, samples->GetCount(0)); // System Transient
961 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent 1041 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent
962 EXPECT_EQ(0, samples->GetCount(2)); // UI 1042 EXPECT_EQ(0, samples->GetCount(2)); // UI
963 } 1043 }
964 1044
965 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 1045 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
966 UMA_Suspended_SystemPermantent) { 1046 UMA_Suspended_SystemPermantent) {
967 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 1047 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
968 new MockMediaSessionPlayerObserver);
969 base::HistogramTester tester; 1048 base::HistogramTester tester;
970 1049
971 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1050 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
972 SystemSuspend(false); 1051 SystemSuspend(false);
973 1052
974 std::unique_ptr<base::HistogramSamples> samples( 1053 std::unique_ptr<base::HistogramSamples> samples(
975 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended")); 1054 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended"));
976 EXPECT_EQ(1, samples->TotalCount()); 1055 EXPECT_EQ(1, samples->TotalCount());
977 EXPECT_EQ(0, samples->GetCount(0)); // System Transient 1056 EXPECT_EQ(0, samples->GetCount(0)); // System Transient
978 EXPECT_EQ(1, samples->GetCount(1)); // System Permanent 1057 EXPECT_EQ(1, samples->GetCount(1)); // System Permanent
979 EXPECT_EQ(0, samples->GetCount(2)); // UI 1058 EXPECT_EQ(0, samples->GetCount(2)); // UI
980 } 1059 }
981 1060
982 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, UMA_Suspended_UI) { 1061 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, UMA_Suspended_UI) {
983 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 1062 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
984 new MockMediaSessionPlayerObserver); 1063
985 base::HistogramTester tester; 1064 base::HistogramTester tester;
986 1065
987 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1066 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
988 UISuspend(); 1067 UISuspend();
989 1068
990 std::unique_ptr<base::HistogramSamples> samples( 1069 std::unique_ptr<base::HistogramSamples> samples(
991 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended")); 1070 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended"));
992 EXPECT_EQ(1, samples->TotalCount()); 1071 EXPECT_EQ(1, samples->TotalCount());
993 EXPECT_EQ(0, samples->GetCount(0)); // System Transient 1072 EXPECT_EQ(0, samples->GetCount(0)); // System Transient
994 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent 1073 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent
995 EXPECT_EQ(1, samples->GetCount(2)); // UI 1074 EXPECT_EQ(1, samples->GetCount(2)); // UI
996 } 1075 }
997 1076
998 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, UMA_Suspended_Multiple) { 1077 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, UMA_Suspended_Multiple) {
999 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 1078 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
1000 new MockMediaSessionPlayerObserver);
1001 base::HistogramTester tester; 1079 base::HistogramTester tester;
1002 1080
1003 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1081 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1004 1082
1005 UISuspend(); 1083 UISuspend();
1006 UIResume(); 1084 UIResume();
1007 1085
1008 SystemSuspend(true); 1086 SystemSuspend(true);
1009 SystemResume(); 1087 SystemResume();
1010 1088
1011 UISuspend(); 1089 UISuspend();
1012 UIResume(); 1090 UIResume();
1013 1091
1014 SystemSuspend(false); 1092 SystemSuspend(false);
1015 1093
1016 std::unique_ptr<base::HistogramSamples> samples( 1094 std::unique_ptr<base::HistogramSamples> samples(
1017 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended")); 1095 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended"));
1018 EXPECT_EQ(4, samples->TotalCount()); 1096 EXPECT_EQ(4, samples->TotalCount());
1019 EXPECT_EQ(1, samples->GetCount(0)); // System Transient 1097 EXPECT_EQ(1, samples->GetCount(0)); // System Transient
1020 EXPECT_EQ(1, samples->GetCount(1)); // System Permanent 1098 EXPECT_EQ(1, samples->GetCount(1)); // System Permanent
1021 EXPECT_EQ(2, samples->GetCount(2)); // UI 1099 EXPECT_EQ(2, samples->GetCount(2)); // UI
1022 } 1100 }
1023 1101
1024 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, UMA_Suspended_Crossing) { 1102 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, UMA_Suspended_Crossing) {
1025 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 1103 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
1026 new MockMediaSessionPlayerObserver);
1027 base::HistogramTester tester; 1104 base::HistogramTester tester;
1028 1105
1029 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1106 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1030 1107
1031 UISuspend(); 1108 UISuspend();
1032 SystemSuspend(true); 1109 SystemSuspend(true);
1033 SystemSuspend(false); 1110 SystemSuspend(false);
1034 UIResume(); 1111 UIResume();
1035 1112
1036 SystemSuspend(true); 1113 SystemSuspend(true);
1037 SystemSuspend(true); 1114 SystemSuspend(true);
1038 SystemSuspend(false); 1115 SystemSuspend(false);
1039 SystemResume(); 1116 SystemResume();
1040 1117
1041 std::unique_ptr<base::HistogramSamples> samples( 1118 std::unique_ptr<base::HistogramSamples> samples(
1042 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended")); 1119 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended"));
1043 EXPECT_EQ(2, samples->TotalCount()); 1120 EXPECT_EQ(2, samples->TotalCount());
1044 EXPECT_EQ(1, samples->GetCount(0)); // System Transient 1121 EXPECT_EQ(1, samples->GetCount(0)); // System Transient
1045 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent 1122 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent
1046 EXPECT_EQ(1, samples->GetCount(2)); // UI 1123 EXPECT_EQ(1, samples->GetCount(2)); // UI
1047 } 1124 }
1048 1125
1049 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, UMA_Suspended_Stop) { 1126 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, UMA_Suspended_Stop) {
1050 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 1127 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
1051 new MockMediaSessionPlayerObserver);
1052 base::HistogramTester tester; 1128 base::HistogramTester tester;
1053 1129
1054 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1130 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1055 media_session_->Stop(MediaSession::SuspendType::UI); 1131 media_session_->Stop(MediaSession::SuspendType::UI);
1056 1132
1057 std::unique_ptr<base::HistogramSamples> samples( 1133 std::unique_ptr<base::HistogramSamples> samples(
1058 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended")); 1134 tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended"));
1059 EXPECT_EQ(1, samples->TotalCount()); 1135 EXPECT_EQ(1, samples->TotalCount());
1060 EXPECT_EQ(0, samples->GetCount(0)); // System Transient 1136 EXPECT_EQ(0, samples->GetCount(0)); // System Transient
1061 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent 1137 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent
1062 EXPECT_EQ(1, samples->GetCount(2)); // UI 1138 EXPECT_EQ(1, samples->GetCount(2)); // UI
1063 } 1139 }
1064 1140
1065 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 1141 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
1066 UMA_ActiveTime_NoActivation) { 1142 UMA_ActiveTime_NoActivation) {
1067 base::HistogramTester tester; 1143 base::HistogramTester tester;
1068 1144
1069 std::unique_ptr<MediaSessionImpl> media_session = CreateDummyMediaSession(); 1145 std::unique_ptr<MediaSessionImpl> media_session = CreateDummyMediaSession();
1070 media_session.reset(); 1146 media_session.reset();
1071 1147
1072 // A MediaSession that wasn't active doesn't register an active time. 1148 // A MediaSession that wasn't active doesn't register an active time.
1073 std::unique_ptr<base::HistogramSamples> samples( 1149 std::unique_ptr<base::HistogramSamples> samples(
1074 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); 1150 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime"));
1075 EXPECT_EQ(0, samples->TotalCount()); 1151 EXPECT_EQ(0, samples->TotalCount());
1076 } 1152 }
1077 1153
1078 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 1154 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
1079 UMA_ActiveTime_SimpleActivation) { 1155 UMA_ActiveTime_SimpleActivation) {
1080 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 1156 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
1081 new MockMediaSessionPlayerObserver);
1082 base::HistogramTester tester; 1157 base::HistogramTester tester;
1083 1158
1084 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); 1159 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper();
1085 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock(); 1160 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock();
1086 clock->SetNowTicks(base::TimeTicks::Now()); 1161 clock->SetNowTicks(base::TimeTicks::Now());
1087 media_session_uma_helper->SetClockForTest( 1162 media_session_uma_helper->SetClockForTest(
1088 std::unique_ptr<base::SimpleTestTickClock>(clock)); 1163 std::unique_ptr<base::SimpleTestTickClock>(clock));
1089 1164
1090 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1165 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1091 1166
1092 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); 1167 clock->Advance(base::TimeDelta::FromMilliseconds(1000));
1093 media_session_->Stop(MediaSession::SuspendType::UI); 1168 media_session_->Stop(MediaSession::SuspendType::UI);
1094 1169
1095 std::unique_ptr<base::HistogramSamples> samples( 1170 std::unique_ptr<base::HistogramSamples> samples(
1096 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); 1171 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime"));
1097 EXPECT_EQ(1, samples->TotalCount()); 1172 EXPECT_EQ(1, samples->TotalCount());
1098 EXPECT_EQ(1, samples->GetCount(1000)); 1173 EXPECT_EQ(1, samples->GetCount(1000));
1099 } 1174 }
1100 1175
1101 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 1176 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
1102 UMA_ActiveTime_ActivationWithUISuspension) { 1177 UMA_ActiveTime_ActivationWithUISuspension) {
1103 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 1178 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
1104 new MockMediaSessionPlayerObserver);
1105 base::HistogramTester tester; 1179 base::HistogramTester tester;
1106 1180
1107 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); 1181 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper();
1108 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock(); 1182 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock();
1109 clock->SetNowTicks(base::TimeTicks::Now()); 1183 clock->SetNowTicks(base::TimeTicks::Now());
1110 media_session_uma_helper->SetClockForTest( 1184 media_session_uma_helper->SetClockForTest(
1111 std::unique_ptr<base::SimpleTestTickClock>(clock)); 1185 std::unique_ptr<base::SimpleTestTickClock>(clock));
1112 1186
1113 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1187 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1114 1188
1115 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); 1189 clock->Advance(base::TimeDelta::FromMilliseconds(1000));
1116 UISuspend(); 1190 UISuspend();
1117 1191
1118 clock->Advance(base::TimeDelta::FromMilliseconds(2000)); 1192 clock->Advance(base::TimeDelta::FromMilliseconds(2000));
1119 UIResume(); 1193 UIResume();
1120 1194
1121 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); 1195 clock->Advance(base::TimeDelta::FromMilliseconds(1000));
1122 media_session_->Stop(MediaSession::SuspendType::UI); 1196 media_session_->Stop(MediaSession::SuspendType::UI);
1123 1197
1124 std::unique_ptr<base::HistogramSamples> samples( 1198 std::unique_ptr<base::HistogramSamples> samples(
1125 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); 1199 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime"));
1126 EXPECT_EQ(1, samples->TotalCount()); 1200 EXPECT_EQ(1, samples->TotalCount());
1127 EXPECT_EQ(1, samples->GetCount(2000)); 1201 EXPECT_EQ(1, samples->GetCount(2000));
1128 } 1202 }
1129 1203
1130 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 1204 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
1131 UMA_ActiveTime_ActivationWithSystemSuspension) { 1205 UMA_ActiveTime_ActivationWithSystemSuspension) {
1132 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 1206 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
1133 new MockMediaSessionPlayerObserver);
1134 base::HistogramTester tester; 1207 base::HistogramTester tester;
1135 1208
1136 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); 1209 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper();
1137 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock(); 1210 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock();
1138 clock->SetNowTicks(base::TimeTicks::Now()); 1211 clock->SetNowTicks(base::TimeTicks::Now());
1139 media_session_uma_helper->SetClockForTest( 1212 media_session_uma_helper->SetClockForTest(
1140 std::unique_ptr<base::SimpleTestTickClock>(clock)); 1213 std::unique_ptr<base::SimpleTestTickClock>(clock));
1141 1214
1142 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1215 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1143 1216
1144 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); 1217 clock->Advance(base::TimeDelta::FromMilliseconds(1000));
1145 SystemSuspend(true); 1218 SystemSuspend(true);
1146 1219
1147 clock->Advance(base::TimeDelta::FromMilliseconds(2000)); 1220 clock->Advance(base::TimeDelta::FromMilliseconds(2000));
1148 SystemResume(); 1221 SystemResume();
1149 1222
1150 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); 1223 clock->Advance(base::TimeDelta::FromMilliseconds(1000));
1151 media_session_->Stop(MediaSession::SuspendType::UI); 1224 media_session_->Stop(MediaSession::SuspendType::UI);
1152 1225
1153 std::unique_ptr<base::HistogramSamples> samples( 1226 std::unique_ptr<base::HistogramSamples> samples(
1154 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); 1227 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime"));
1155 EXPECT_EQ(1, samples->TotalCount()); 1228 EXPECT_EQ(1, samples->TotalCount());
1156 EXPECT_EQ(1, samples->GetCount(2000)); 1229 EXPECT_EQ(1, samples->GetCount(2000));
1157 } 1230 }
1158 1231
1159 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 1232 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
1160 UMA_ActiveTime_ActivateSuspendedButNotStopped) { 1233 UMA_ActiveTime_ActivateSuspendedButNotStopped) {
1161 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 1234 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
1162 new MockMediaSessionPlayerObserver);
1163 base::HistogramTester tester; 1235 base::HistogramTester tester;
1164 1236
1165 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); 1237 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper();
1166 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock(); 1238 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock();
1167 clock->SetNowTicks(base::TimeTicks::Now()); 1239 clock->SetNowTicks(base::TimeTicks::Now());
1168 media_session_uma_helper->SetClockForTest( 1240 media_session_uma_helper->SetClockForTest(
1169 std::unique_ptr<base::SimpleTestTickClock>(clock)); 1241 std::unique_ptr<base::SimpleTestTickClock>(clock));
1170 1242
1171 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1243 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1172 clock->Advance(base::TimeDelta::FromMilliseconds(500)); 1244 clock->Advance(base::TimeDelta::FromMilliseconds(500));
(...skipping 11 matching lines...) Expand all
1184 1256
1185 { 1257 {
1186 std::unique_ptr<base::HistogramSamples> samples( 1258 std::unique_ptr<base::HistogramSamples> samples(
1187 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); 1259 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime"));
1188 EXPECT_EQ(0, samples->TotalCount()); 1260 EXPECT_EQ(0, samples->TotalCount());
1189 } 1261 }
1190 } 1262 }
1191 1263
1192 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 1264 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
1193 UMA_ActiveTime_ActivateSuspendStopTwice) { 1265 UMA_ActiveTime_ActivateSuspendStopTwice) {
1194 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 1266 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
1195 new MockMediaSessionPlayerObserver);
1196 base::HistogramTester tester; 1267 base::HistogramTester tester;
1197 1268
1198 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); 1269 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper();
1199 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock(); 1270 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock();
1200 clock->SetNowTicks(base::TimeTicks::Now()); 1271 clock->SetNowTicks(base::TimeTicks::Now());
1201 media_session_uma_helper->SetClockForTest( 1272 media_session_uma_helper->SetClockForTest(
1202 std::unique_ptr<base::SimpleTestTickClock>(clock)); 1273 std::unique_ptr<base::SimpleTestTickClock>(clock));
1203 1274
1204 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1275 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1205 clock->Advance(base::TimeDelta::FromMilliseconds(500)); 1276 clock->Advance(base::TimeDelta::FromMilliseconds(500));
1206 SystemSuspend(true); 1277 SystemSuspend(true);
1207 media_session_->Stop(MediaSession::SuspendType::UI); 1278 media_session_->Stop(MediaSession::SuspendType::UI);
1208 1279
1209 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1280 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1210 clock->Advance(base::TimeDelta::FromMilliseconds(5000)); 1281 clock->Advance(base::TimeDelta::FromMilliseconds(5000));
1211 SystemResume(); 1282 SystemResume();
1212 media_session_->Stop(MediaSession::SuspendType::UI); 1283 media_session_->Stop(MediaSession::SuspendType::UI);
1213 1284
1214 std::unique_ptr<base::HistogramSamples> samples( 1285 std::unique_ptr<base::HistogramSamples> samples(
1215 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); 1286 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime"));
1216 EXPECT_EQ(2, samples->TotalCount()); 1287 EXPECT_EQ(2, samples->TotalCount());
1217 EXPECT_EQ(1, samples->GetCount(500)); 1288 EXPECT_EQ(1, samples->GetCount(500));
1218 EXPECT_EQ(1, samples->GetCount(5000)); 1289 EXPECT_EQ(1, samples->GetCount(5000));
1219 } 1290 }
1220 1291
1221 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 1292 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
1222 UMA_ActiveTime_MultipleActivations) { 1293 UMA_ActiveTime_MultipleActivations) {
1223 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( 1294 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
1224 new MockMediaSessionPlayerObserver);
1225 base::HistogramTester tester; 1295 base::HistogramTester tester;
1226 1296
1227 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper(); 1297 MediaSessionUmaHelper* media_session_uma_helper = GetMediaSessionUMAHelper();
1228 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock(); 1298 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock();
1229 clock->SetNowTicks(base::TimeTicks::Now()); 1299 clock->SetNowTicks(base::TimeTicks::Now());
1230 media_session_uma_helper->SetClockForTest( 1300 media_session_uma_helper->SetClockForTest(
1231 std::unique_ptr<base::SimpleTestTickClock>(clock)); 1301 std::unique_ptr<base::SimpleTestTickClock>(clock));
1232 1302
1233 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1303 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1234 clock->Advance(base::TimeDelta::FromMilliseconds(10000)); 1304 clock->Advance(base::TimeDelta::FromMilliseconds(10000));
1235 RemovePlayer(player_observer.get(), 0); 1305 RemovePlayer(player_observer.get(), 0);
1236 1306
1237 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1307 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1238 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); 1308 clock->Advance(base::TimeDelta::FromMilliseconds(1000));
1239 media_session_->Stop(MediaSession::SuspendType::UI); 1309 media_session_->Stop(MediaSession::SuspendType::UI);
1240 1310
1241 std::unique_ptr<base::HistogramSamples> samples( 1311 std::unique_ptr<base::HistogramSamples> samples(
1242 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); 1312 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime"));
1243 EXPECT_EQ(2, samples->TotalCount()); 1313 EXPECT_EQ(2, samples->TotalCount());
1244 EXPECT_EQ(1, samples->GetCount(1000)); 1314 EXPECT_EQ(1, samples->GetCount(1000));
1245 EXPECT_EQ(1, samples->GetCount(10000)); 1315 EXPECT_EQ(1, samples->GetCount(10000));
1246 } 1316 }
OLDNEW
« no previous file with comments | « content/browser/media/session/media_session_impl.cc ('k') | content/browser/media/session/pepper_playback_observer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698