OLD | NEW |
| (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 } | |
OLD | NEW |