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

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

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

Powered by Google App Engine
This is Rietveld 408576698