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

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

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

Powered by Google App Engine
This is Rietveld 408576698