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

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

Issue 1159113006: [Android] A prototype of the interactive media notification. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved OnMediaSessionStateChanged to WebContentsImpl Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/media/android/media_session.h" 5 #include "content/browser/media/android/media_session.h"
6 6
7 #include <list> 7 #include <list>
8 #include <vector> 8 #include <vector>
9 9
10 #include "content/browser/media/android/media_session_observer.h" 10 #include "content/browser/media/android/media_session_observer.h"
11 #include "content/public/browser/web_contents.h"
12 #include "content/public/browser/web_contents_observer.h"
11 #include "content/public/test/content_browser_test.h" 13 #include "content/public/test/content_browser_test.h"
12 #include "content/shell/browser/shell.h" 14 #include "content/shell/browser/shell.h"
15 #include "testing/gmock/include/gmock/gmock.h"
13 16
14 namespace content { 17 using content::WebContents;
18 using content::WebContentsObserver;
19 using content::MediaSession;
20 using content::MediaSessionObserver;
21
22 using ::testing::Expectation;
23
24 namespace {
15 25
16 class MockMediaSessionObserver : public MediaSessionObserver { 26 class MockMediaSessionObserver : public MediaSessionObserver {
17 public: 27 public:
18 MockMediaSessionObserver() 28 MockMediaSessionObserver()
19 : received_resume_calls_(0), 29 : received_resume_calls_(0),
20 received_suspend_calls_(0) { 30 received_suspend_calls_(0) {
21 } 31 }
22 32
23 ~MockMediaSessionObserver() override = default; 33 ~MockMediaSessionObserver() override = default;
24 34
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 73
64 private: 74 private:
65 // Basic representation of the players. The position in the vector is the 75 // Basic representation of the players. The position in the vector is the
66 // player_id. The value of the vector is the playing status. 76 // player_id. The value of the vector is the playing status.
67 std::vector<bool> players_; 77 std::vector<bool> players_;
68 78
69 int received_resume_calls_; 79 int received_resume_calls_;
70 int received_suspend_calls_; 80 int received_suspend_calls_;
71 }; 81 };
72 82
73 class MediaSessionBrowserTest : public ContentBrowserTest { 83 class MockWebContentsObserver : public WebContentsObserver {
84 public:
85 MockWebContentsObserver(WebContents* web_contents)
86 : WebContentsObserver(web_contents) {}
87
88 MOCK_METHOD2(MediaSessionStateChanged,
89 void(bool is_controllable, bool is_suspended));
90 };
91
92 } // namespace
93
94 class MediaSessionBrowserTest : public content::ContentBrowserTest {
74 protected: 95 protected:
75 MediaSessionBrowserTest() = default; 96 MediaSessionBrowserTest() = default;
76 97
77 void DisableNativeBackend(MediaSession* media_session) { 98 void SetUpOnMainThread() override {
78 media_session->ResetJavaRefForTest(); 99 ContentBrowserTest::SetUpOnMainThread();
100
101 mock_web_contents_observer_.reset(
102 new MockWebContentsObserver(shell()->web_contents()));
103 media_session_ = MediaSession::Get(shell()->web_contents());
104 media_session_->ResetJavaRefForTest();
105 ASSERT_TRUE(media_session_);
79 } 106 }
80 107
81 void StartNewPlayer(MediaSession* media_session, 108 void TearDownOnMainThread() override {
82 MockMediaSessionObserver* media_session_observer, 109 mock_web_contents_observer_.reset();
110
111 media_session_->RemoveAllPlayersForTest();
112 media_session_ = nullptr;
113
114 ContentBrowserTest::TearDownOnMainThread();
115 }
116
117 void StartNewPlayer(MockMediaSessionObserver* media_session_observer,
83 MediaSession::Type type) { 118 MediaSession::Type type) {
84 bool result = media_session->AddPlayer( 119 bool result = AddPlayer(
85 media_session_observer, 120 media_session_observer,
86 media_session_observer->StartNewPlayer(), 121 media_session_observer->StartNewPlayer(),
87 type); 122 type);
88 EXPECT_TRUE(result); 123 EXPECT_TRUE(result);
89 } 124 }
90 125
91 void SuspendSession(MediaSession* media_session) { 126 bool AddPlayer(MockMediaSessionObserver* media_session_observer,
92 media_session->OnSuspend(true); 127 int player_id,
128 MediaSession::Type type) {
129 return media_session_->AddPlayer(media_session_observer, player_id, type);
93 } 130 }
94 131
95 void ResumeSession(MediaSession* media_session) { 132 void RemovePlayer(MockMediaSessionObserver* media_session_observer,
96 media_session->OnResume(); 133 int player_id) {
134 media_session_->RemovePlayer(media_session_observer, player_id);
97 } 135 }
98 136
99 bool HasAudioFocus(MediaSession* media_session) { 137 void RemovePlayers(MockMediaSessionObserver* media_session_observer) {
100 return media_session->IsActiveForTest(); 138 media_session_->RemovePlayers(media_session_observer);
101 } 139 }
102 140
103 MediaSession::Type GetSessionType(MediaSession* media_session) { 141 void OnSuspendSession(bool isTemporary) {
104 return media_session->audio_focus_type_for_test(); 142 media_session_->OnSuspend(nullptr, nullptr, isTemporary);
105 } 143 }
106 144
107 private: 145 void OnResumeSession() { media_session_->OnResume(nullptr, nullptr); }
146
147 bool HasAudioFocus() { return media_session_->IsActiveForTest(); }
148
149 MediaSession::Type GetSessionType() {
150 return media_session_->audio_focus_type_for_test();
151 }
152
153 bool IsControllable() { return media_session_->IsControllable(); }
154
155 bool IsSuspended() { return media_session_->IsSuspended(); }
156
157 void ResumeSession() { media_session_->Resume(); }
158
159 void SuspendSession() { media_session_->Suspend(); }
160
161 MockWebContentsObserver* mock_web_contents_observer() {
162 return mock_web_contents_observer_.get();
163 }
164
165 protected:
166 MediaSession* media_session_;
167 scoped_ptr<MockWebContentsObserver> mock_web_contents_observer_;
168
108 DISALLOW_COPY_AND_ASSIGN(MediaSessionBrowserTest); 169 DISALLOW_COPY_AND_ASSIGN(MediaSessionBrowserTest);
109 }; 170 };
110 171
111 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, 172 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
112 PlayersFromSameObserverDoNotStopEachOtherInSameSession) { 173 PlayersFromSameObserverDoNotStopEachOtherInSameSession) {
113 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
114 ASSERT_TRUE(media_session);
115 DisableNativeBackend(media_session);
116
117 scoped_ptr<MockMediaSessionObserver> media_session_observer( 174 scoped_ptr<MockMediaSessionObserver> media_session_observer(
118 new MockMediaSessionObserver); 175 new MockMediaSessionObserver);
119 176
120 StartNewPlayer(media_session, media_session_observer.get(), 177 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
121 MediaSession::Type::Content); 178 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
122 StartNewPlayer(media_session, media_session_observer.get(), 179 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
123 MediaSession::Type::Content);
124 StartNewPlayer(media_session, media_session_observer.get(),
125 MediaSession::Type::Content);
126 180
127 EXPECT_TRUE(media_session_observer->IsPlaying(0)); 181 EXPECT_TRUE(media_session_observer->IsPlaying(0));
128 EXPECT_TRUE(media_session_observer->IsPlaying(1)); 182 EXPECT_TRUE(media_session_observer->IsPlaying(1));
129 EXPECT_TRUE(media_session_observer->IsPlaying(2)); 183 EXPECT_TRUE(media_session_observer->IsPlaying(2));
130
131 media_session->RemovePlayers(media_session_observer.get());
132 } 184 }
133 185
134 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, 186 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
135 PlayersFromManyObserverDoNotStopEachOtherInSameSession) { 187 PlayersFromManyObserverDoNotStopEachOtherInSameSession) {
136 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
137 ASSERT_TRUE(media_session);
138 DisableNativeBackend(media_session);
139
140 scoped_ptr<MockMediaSessionObserver> media_session_observer_1( 188 scoped_ptr<MockMediaSessionObserver> media_session_observer_1(
141 new MockMediaSessionObserver); 189 new MockMediaSessionObserver);
142 scoped_ptr<MockMediaSessionObserver> media_session_observer_2( 190 scoped_ptr<MockMediaSessionObserver> media_session_observer_2(
143 new MockMediaSessionObserver); 191 new MockMediaSessionObserver);
144 scoped_ptr<MockMediaSessionObserver> media_session_observer_3( 192 scoped_ptr<MockMediaSessionObserver> media_session_observer_3(
145 new MockMediaSessionObserver); 193 new MockMediaSessionObserver);
146 194
147 StartNewPlayer(media_session, media_session_observer_1.get(), 195 StartNewPlayer(media_session_observer_1.get(), MediaSession::Type::Content);
148 MediaSession::Type::Content); 196
149 StartNewPlayer(media_session, media_session_observer_2.get(), 197 StartNewPlayer(media_session_observer_2.get(), MediaSession::Type::Content);
150 MediaSession::Type::Content); 198 StartNewPlayer(media_session_observer_3.get(), MediaSession::Type::Content);
151 StartNewPlayer(media_session, media_session_observer_3.get(),
152 MediaSession::Type::Content);
153 199
154 EXPECT_TRUE(media_session_observer_1->IsPlaying(0)); 200 EXPECT_TRUE(media_session_observer_1->IsPlaying(0));
155 EXPECT_TRUE(media_session_observer_2->IsPlaying(0)); 201 EXPECT_TRUE(media_session_observer_2->IsPlaying(0));
156 EXPECT_TRUE(media_session_observer_3->IsPlaying(0)); 202 EXPECT_TRUE(media_session_observer_3->IsPlaying(0));
157
158 media_session->RemovePlayers(media_session_observer_1.get());
159 media_session->RemovePlayers(media_session_observer_2.get());
160 media_session->RemovePlayers(media_session_observer_3.get());
161 } 203 }
162 204
163 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, 205 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
164 SuspendedMediaSessionStopsPlayers) { 206 SuspendedMediaSessionStopsPlayers) {
165 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
166 ASSERT_TRUE(media_session);
167 DisableNativeBackend(media_session);
168
169 scoped_ptr<MockMediaSessionObserver> media_session_observer( 207 scoped_ptr<MockMediaSessionObserver> media_session_observer(
170 new MockMediaSessionObserver); 208 new MockMediaSessionObserver);
171 209
172 StartNewPlayer(media_session, media_session_observer.get(), 210 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
173 MediaSession::Type::Content); 211 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
174 StartNewPlayer(media_session, media_session_observer.get(), 212 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
175 MediaSession::Type::Content);
176 StartNewPlayer(media_session, media_session_observer.get(),
177 MediaSession::Type::Content);
178 213
179 SuspendSession(media_session); 214 OnSuspendSession(true);
180 215
181 EXPECT_FALSE(media_session_observer->IsPlaying(0)); 216 EXPECT_FALSE(media_session_observer->IsPlaying(0));
182 EXPECT_FALSE(media_session_observer->IsPlaying(1)); 217 EXPECT_FALSE(media_session_observer->IsPlaying(1));
183 EXPECT_FALSE(media_session_observer->IsPlaying(2)); 218 EXPECT_FALSE(media_session_observer->IsPlaying(2));
184
185 media_session->RemovePlayers(media_session_observer.get());
186 } 219 }
187 220
188 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, 221 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
189 ResumedMediaSessionRestartsPlayers) { 222 ResumedMediaSessionRestartsPlayers) {
190 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
191 ASSERT_TRUE(media_session);
192 DisableNativeBackend(media_session);
193
194 scoped_ptr<MockMediaSessionObserver> media_session_observer( 223 scoped_ptr<MockMediaSessionObserver> media_session_observer(
195 new MockMediaSessionObserver); 224 new MockMediaSessionObserver);
196 225
197 StartNewPlayer(media_session, media_session_observer.get(), 226 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
198 MediaSession::Type::Content); 227 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
199 StartNewPlayer(media_session, media_session_observer.get(), 228 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
200 MediaSession::Type::Content);
201 StartNewPlayer(media_session, media_session_observer.get(),
202 MediaSession::Type::Content);
203 229
204 SuspendSession(media_session); 230 OnSuspendSession(true);
205 ResumeSession(media_session); 231 OnResumeSession();
206 232
207 EXPECT_TRUE(media_session_observer->IsPlaying(0)); 233 EXPECT_TRUE(media_session_observer->IsPlaying(0));
208 EXPECT_TRUE(media_session_observer->IsPlaying(1)); 234 EXPECT_TRUE(media_session_observer->IsPlaying(1));
209 EXPECT_TRUE(media_session_observer->IsPlaying(2)); 235 EXPECT_TRUE(media_session_observer->IsPlaying(2));
210
211 media_session->RemovePlayers(media_session_observer.get());
212 } 236 }
213 237
214 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, 238 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
215 StartedPlayerOnSuspendedSessionPlaysAlone) { 239 StartedPlayerOnSuspendedSessionPlaysAlone) {
216 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
217 ASSERT_TRUE(media_session);
218 DisableNativeBackend(media_session);
219
220 scoped_ptr<MockMediaSessionObserver> media_session_observer( 240 scoped_ptr<MockMediaSessionObserver> media_session_observer(
221 new MockMediaSessionObserver); 241 new MockMediaSessionObserver);
222 242
223 StartNewPlayer(media_session, media_session_observer.get(), 243 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
224 MediaSession::Type::Content);
225 244
226 EXPECT_TRUE(media_session_observer->IsPlaying(0)); 245 EXPECT_TRUE(media_session_observer->IsPlaying(0));
227 246
228 SuspendSession(media_session); 247 OnSuspendSession(true);
229 248
230 EXPECT_FALSE(media_session_observer->IsPlaying(0)); 249 EXPECT_FALSE(media_session_observer->IsPlaying(0));
231 250
232 StartNewPlayer(media_session, media_session_observer.get(), 251 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
233 MediaSession::Type::Content);
234 252
235 EXPECT_FALSE(media_session_observer->IsPlaying(0)); 253 EXPECT_FALSE(media_session_observer->IsPlaying(0));
236 EXPECT_TRUE(media_session_observer->IsPlaying(1)); 254 EXPECT_TRUE(media_session_observer->IsPlaying(1));
237 255
238 StartNewPlayer(media_session, media_session_observer.get(), 256 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
239 MediaSession::Type::Content);
240 257
241 EXPECT_FALSE(media_session_observer->IsPlaying(0)); 258 EXPECT_FALSE(media_session_observer->IsPlaying(0));
242 EXPECT_TRUE(media_session_observer->IsPlaying(1)); 259 EXPECT_TRUE(media_session_observer->IsPlaying(1));
243 EXPECT_TRUE(media_session_observer->IsPlaying(2)); 260 EXPECT_TRUE(media_session_observer->IsPlaying(2));
244
245 media_session->RemovePlayers(media_session_observer.get());
246 } 261 }
247 262
248 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, AudioFocusInitialState) { 263 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, AudioFocusInitialState) {
249 MediaSession* media_session = MediaSession::Get(shell()->web_contents()); 264 EXPECT_FALSE(HasAudioFocus());
250 ASSERT_TRUE(media_session);
251 DisableNativeBackend(media_session);
252
253 EXPECT_FALSE(HasAudioFocus(media_session));
254 } 265 }
255 266
256 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, StartPlayerGivesFocus) { 267 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, StartPlayerGivesFocus) {
257 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
258 ASSERT_TRUE(media_session);
259 DisableNativeBackend(media_session);
260
261 scoped_ptr<MockMediaSessionObserver> media_session_observer( 268 scoped_ptr<MockMediaSessionObserver> media_session_observer(
262 new MockMediaSessionObserver); 269 new MockMediaSessionObserver);
263 270
264 StartNewPlayer(media_session, media_session_observer.get(), 271 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
265 MediaSession::Type::Content);
266 272
267 EXPECT_TRUE(HasAudioFocus(media_session)); 273 EXPECT_TRUE(HasAudioFocus());
268
269 media_session->RemovePlayers(media_session_observer.get());
270 } 274 }
271 275
272 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, SuspendGivesAwayAudioFocus) { 276 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, SuspendGivesAwayAudioFocus) {
273 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
274 ASSERT_TRUE(media_session);
275 DisableNativeBackend(media_session);
276
277 scoped_ptr<MockMediaSessionObserver> media_session_observer( 277 scoped_ptr<MockMediaSessionObserver> media_session_observer(
278 new MockMediaSessionObserver); 278 new MockMediaSessionObserver);
279 279
280 StartNewPlayer(media_session, media_session_observer.get(), 280 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
281 MediaSession::Type::Content);
282 281
283 SuspendSession(media_session); 282 OnSuspendSession(true);
284 283
285 EXPECT_FALSE(HasAudioFocus(media_session)); 284 EXPECT_FALSE(HasAudioFocus());
286
287 media_session->RemovePlayers(media_session_observer.get());
288 } 285 }
289 286
290 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ResumeGivesBackAudioFocus) { 287 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ResumeGivesBackAudioFocus) {
291 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
292 ASSERT_TRUE(media_session);
293 DisableNativeBackend(media_session);
294
295 scoped_ptr<MockMediaSessionObserver> media_session_observer( 288 scoped_ptr<MockMediaSessionObserver> media_session_observer(
296 new MockMediaSessionObserver); 289 new MockMediaSessionObserver);
297 290
298 StartNewPlayer(media_session, media_session_observer.get(), 291 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
299 MediaSession::Type::Content);
300 292
301 SuspendSession(media_session); 293 OnSuspendSession(true);
302 ResumeSession(media_session); 294 OnResumeSession();
303 295
304 EXPECT_TRUE(HasAudioFocus(media_session)); 296 EXPECT_TRUE(HasAudioFocus());
305
306 media_session->RemovePlayers(media_session_observer.get());
307 } 297 }
308 298
309 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, 299 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
310 RemovingLastPlayerDropsAudioFocus_1) { 300 RemovingLastPlayerDropsAudioFocus) {
311 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
312 ASSERT_TRUE(media_session);
313 DisableNativeBackend(media_session);
314
315 scoped_ptr<MockMediaSessionObserver> media_session_observer( 301 scoped_ptr<MockMediaSessionObserver> media_session_observer(
316 new MockMediaSessionObserver); 302 new MockMediaSessionObserver);
317 303
318 StartNewPlayer(media_session, media_session_observer.get(), 304 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
319 MediaSession::Type::Content); 305 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
320 StartNewPlayer(media_session, media_session_observer.get(), 306 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
321 MediaSession::Type::Content);
322 StartNewPlayer(media_session, media_session_observer.get(),
323 MediaSession::Type::Content);
324 307
325 media_session->RemovePlayer(media_session_observer.get(), 0); 308 RemovePlayer(media_session_observer.get(), 0);
326 EXPECT_TRUE(HasAudioFocus(media_session)); 309 EXPECT_TRUE(HasAudioFocus());
327 media_session->RemovePlayer(media_session_observer.get(), 1); 310 RemovePlayer(media_session_observer.get(), 1);
328 EXPECT_TRUE(HasAudioFocus(media_session)); 311 EXPECT_TRUE(HasAudioFocus());
329 media_session->RemovePlayer(media_session_observer.get(), 2); 312 RemovePlayer(media_session_observer.get(), 2);
330 EXPECT_FALSE(HasAudioFocus(media_session)); 313 EXPECT_FALSE(HasAudioFocus());
331 } 314 }
332 315
333 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, 316 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
334 RemovingLastPlayerDropsAudioFocus_2) { 317 RemovingLastPlayerFromManyObserversDropsAudioFocus) {
335 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
336 ASSERT_TRUE(media_session);
337 DisableNativeBackend(media_session);
338
339 scoped_ptr<MockMediaSessionObserver> media_session_observer_1( 318 scoped_ptr<MockMediaSessionObserver> media_session_observer_1(
340 new MockMediaSessionObserver); 319 new MockMediaSessionObserver);
341 scoped_ptr<MockMediaSessionObserver> media_session_observer_2( 320 scoped_ptr<MockMediaSessionObserver> media_session_observer_2(
342 new MockMediaSessionObserver); 321 new MockMediaSessionObserver);
343 scoped_ptr<MockMediaSessionObserver> media_session_observer_3( 322 scoped_ptr<MockMediaSessionObserver> media_session_observer_3(
344 new MockMediaSessionObserver); 323 new MockMediaSessionObserver);
345 324
346 StartNewPlayer(media_session, media_session_observer_1.get(), 325 StartNewPlayer(media_session_observer_1.get(), MediaSession::Type::Content);
347 MediaSession::Type::Content); 326 StartNewPlayer(media_session_observer_2.get(), MediaSession::Type::Content);
348 StartNewPlayer(media_session, media_session_observer_2.get(), 327 StartNewPlayer(media_session_observer_3.get(), MediaSession::Type::Content);
349 MediaSession::Type::Content); 328
350 StartNewPlayer(media_session, media_session_observer_3.get(), 329 RemovePlayer(media_session_observer_1.get(), 0);
351 MediaSession::Type::Content); 330 EXPECT_TRUE(HasAudioFocus());
352 331 RemovePlayer(media_session_observer_2.get(), 0);
353 media_session->RemovePlayer(media_session_observer_1.get(), 0); 332 EXPECT_TRUE(HasAudioFocus());
354 EXPECT_TRUE(HasAudioFocus(media_session)); 333 RemovePlayer(media_session_observer_3.get(), 0);
355 media_session->RemovePlayer(media_session_observer_2.get(), 0); 334 EXPECT_FALSE(HasAudioFocus());
356 EXPECT_TRUE(HasAudioFocus(media_session)); 335 }
357 media_session->RemovePlayer(media_session_observer_3.get(), 0); 336
358 EXPECT_FALSE(HasAudioFocus(media_session)); 337 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
359 } 338 RemovingAllPlayersFromObserversDropsAudioFocus) {
360
361 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
362 RemovingLastPlayerDropsAudioFocus_3) {
363 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
364 ASSERT_TRUE(media_session);
365 DisableNativeBackend(media_session);
366
367 scoped_ptr<MockMediaSessionObserver> media_session_observer_1( 339 scoped_ptr<MockMediaSessionObserver> media_session_observer_1(
368 new MockMediaSessionObserver); 340 new MockMediaSessionObserver);
369 scoped_ptr<MockMediaSessionObserver> media_session_observer_2( 341 scoped_ptr<MockMediaSessionObserver> media_session_observer_2(
370 new MockMediaSessionObserver); 342 new MockMediaSessionObserver);
371 343
372 StartNewPlayer(media_session, media_session_observer_1.get(), 344 StartNewPlayer(media_session_observer_1.get(), MediaSession::Type::Content);
373 MediaSession::Type::Content); 345 StartNewPlayer(media_session_observer_1.get(), MediaSession::Type::Content);
374 StartNewPlayer(media_session, media_session_observer_1.get(), 346 StartNewPlayer(media_session_observer_2.get(), MediaSession::Type::Content);
375 MediaSession::Type::Content); 347 StartNewPlayer(media_session_observer_2.get(), MediaSession::Type::Content);
376 StartNewPlayer(media_session, media_session_observer_2.get(), 348
377 MediaSession::Type::Content); 349 RemovePlayers(media_session_observer_1.get());
378 StartNewPlayer(media_session, media_session_observer_2.get(), 350 EXPECT_TRUE(HasAudioFocus());
379 MediaSession::Type::Content); 351 RemovePlayers(media_session_observer_2.get());
380 352 EXPECT_FALSE(HasAudioFocus());
381 media_session->RemovePlayers(media_session_observer_1.get());
382 EXPECT_TRUE(HasAudioFocus(media_session));
383 media_session->RemovePlayers(media_session_observer_2.get());
384 EXPECT_FALSE(HasAudioFocus(media_session));
385 } 353 }
386 354
387 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ResumePlayGivesAudioFocus) { 355 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ResumePlayGivesAudioFocus) {
388 MediaSession* media_session = MediaSession::Get(shell()->web_contents()); 356 scoped_ptr<MockMediaSessionObserver> media_session_observer(
389 ASSERT_TRUE(media_session); 357 new MockMediaSessionObserver);
390 DisableNativeBackend(media_session); 358
391 359 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
392 scoped_ptr<MockMediaSessionObserver> media_session_observer( 360
393 new MockMediaSessionObserver); 361 RemovePlayer(media_session_observer.get(), 0);
394 362 EXPECT_FALSE(HasAudioFocus());
395 StartNewPlayer(media_session, media_session_observer.get(), 363
396 MediaSession::Type::Content); 364 EXPECT_TRUE(
397 365 AddPlayer(media_session_observer.get(), 0, MediaSession::Type::Content));
398 media_session->RemovePlayer(media_session_observer.get(), 0); 366 EXPECT_TRUE(HasAudioFocus());
399 EXPECT_FALSE(HasAudioFocus(media_session)); 367 }
400 368
401 EXPECT_TRUE(media_session->AddPlayer(media_session_observer.get(), 0, 369 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
402 MediaSession::Type::Content)); 370 ResumeSuspendAreSentOnlyOncePerPlayers) {
403 EXPECT_TRUE(HasAudioFocus(media_session)); 371 scoped_ptr<MockMediaSessionObserver> media_session_observer(
404 372 new MockMediaSessionObserver);
405 media_session->RemovePlayers(media_session_observer.get()); 373
406 } 374 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
407 375 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
408 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, 376 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
409 ResumeSuspendAreSentOnlyOncePerPlayers_1) {
410 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
411 ASSERT_TRUE(media_session);
412 DisableNativeBackend(media_session);
413
414 scoped_ptr<MockMediaSessionObserver> media_session_observer(
415 new MockMediaSessionObserver);
416
417 StartNewPlayer(media_session, media_session_observer.get(),
418 MediaSession::Type::Content);
419 StartNewPlayer(media_session, media_session_observer.get(),
420 MediaSession::Type::Content);
421 StartNewPlayer(media_session, media_session_observer.get(),
422 MediaSession::Type::Content);
423 377
424 EXPECT_EQ(0, media_session_observer->received_suspend_calls()); 378 EXPECT_EQ(0, media_session_observer->received_suspend_calls());
425 EXPECT_EQ(0, media_session_observer->received_resume_calls()); 379 EXPECT_EQ(0, media_session_observer->received_resume_calls());
426 380
427 SuspendSession(media_session); 381 OnSuspendSession(true);
428 EXPECT_EQ(3, media_session_observer->received_suspend_calls()); 382 EXPECT_EQ(3, media_session_observer->received_suspend_calls());
429 383
430 ResumeSession(media_session); 384 OnResumeSession();
431 EXPECT_EQ(3, media_session_observer->received_resume_calls()); 385 EXPECT_EQ(3, media_session_observer->received_resume_calls());
432 386 }
433 media_session->RemovePlayers(media_session_observer.get()); 387
434 } 388 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
435 389 ResumeSuspendAreSentOnlyOncePerPlayersAddedTwice) {
436 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, 390 scoped_ptr<MockMediaSessionObserver> media_session_observer(
437 ResumeSuspendAreSentOnlyOncePerPlayers_2) { 391 new MockMediaSessionObserver);
438 MediaSession* media_session = MediaSession::Get(shell()->web_contents()); 392
439 ASSERT_TRUE(media_session); 393 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
440 DisableNativeBackend(media_session); 394 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
441 395 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
442 scoped_ptr<MockMediaSessionObserver> media_session_observer(
443 new MockMediaSessionObserver);
444
445 StartNewPlayer(media_session, media_session_observer.get(),
446 MediaSession::Type::Content);
447 StartNewPlayer(media_session, media_session_observer.get(),
448 MediaSession::Type::Content);
449 StartNewPlayer(media_session, media_session_observer.get(),
450 MediaSession::Type::Content);
451 396
452 // Adding the three players above again. 397 // Adding the three players above again.
453 EXPECT_TRUE(media_session->AddPlayer(media_session_observer.get(), 0, 398 EXPECT_TRUE(
454 MediaSession::Type::Content)); 399 AddPlayer(media_session_observer.get(), 0, MediaSession::Type::Content));
455 EXPECT_TRUE(media_session->AddPlayer(media_session_observer.get(), 1, 400 EXPECT_TRUE(
456 MediaSession::Type::Content)); 401 AddPlayer(media_session_observer.get(), 1, MediaSession::Type::Content));
457 EXPECT_TRUE(media_session->AddPlayer(media_session_observer.get(), 2, 402 EXPECT_TRUE(
458 MediaSession::Type::Content)); 403 AddPlayer(media_session_observer.get(), 2, MediaSession::Type::Content));
459 404
460 EXPECT_EQ(0, media_session_observer->received_suspend_calls()); 405 EXPECT_EQ(0, media_session_observer->received_suspend_calls());
461 EXPECT_EQ(0, media_session_observer->received_resume_calls()); 406 EXPECT_EQ(0, media_session_observer->received_resume_calls());
462 407
463 SuspendSession(media_session); 408 OnSuspendSession(true);
464 EXPECT_EQ(3, media_session_observer->received_suspend_calls()); 409 EXPECT_EQ(3, media_session_observer->received_suspend_calls());
465 410
466 ResumeSession(media_session); 411 OnResumeSession();
467 EXPECT_EQ(3, media_session_observer->received_resume_calls()); 412 EXPECT_EQ(3, media_session_observer->received_resume_calls());
468
469 media_session->RemovePlayers(media_session_observer.get());
470 } 413 }
471 414
472 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, 415 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
473 RemovingTheSamePlayerTwiceIsANoop) { 416 RemovingTheSamePlayerTwiceIsANoop) {
474 MediaSession* media_session = MediaSession::Get(shell()->web_contents()); 417 scoped_ptr<MockMediaSessionObserver> media_session_observer(
475 ASSERT_TRUE(media_session); 418 new MockMediaSessionObserver);
476 DisableNativeBackend(media_session); 419
477 420 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
478 scoped_ptr<MockMediaSessionObserver> media_session_observer( 421
479 new MockMediaSessionObserver); 422 RemovePlayer(media_session_observer.get(), 0);
480 423 RemovePlayer(media_session_observer.get(), 0);
481 StartNewPlayer(media_session, media_session_observer.get(),
482 MediaSession::Type::Content);
483
484 media_session->RemovePlayer(media_session_observer.get(), 0);
485 media_session->RemovePlayer(media_session_observer.get(), 0);
486
487 media_session->RemovePlayers(media_session_observer.get());
488 } 424 }
489 425
490 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, MediaSessionType) { 426 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, MediaSessionType) {
491 MediaSession* media_session = MediaSession::Get(shell()->web_contents());
492 ASSERT_TRUE(media_session);
493 DisableNativeBackend(media_session);
494
495 scoped_ptr<MockMediaSessionObserver> media_session_observer( 427 scoped_ptr<MockMediaSessionObserver> media_session_observer(
496 new MockMediaSessionObserver); 428 new MockMediaSessionObserver);
497 429
498 // Starting a player with a given type should set the session to that type. 430 // Starting a player with a given type should set the session to that type.
499 StartNewPlayer(media_session, media_session_observer.get(), 431 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
500 MediaSession::Type::Transient); 432 EXPECT_EQ(MediaSession::Type::Transient, GetSessionType());
501 EXPECT_EQ(MediaSession::Type::Transient, GetSessionType(media_session));
502 433
503 // Adding a player of the same type should have no effect on the type. 434 // Adding a player of the same type should have no effect on the type.
504 StartNewPlayer(media_session, media_session_observer.get(), 435 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
505 MediaSession::Type::Transient); 436 EXPECT_EQ(MediaSession::Type::Transient, GetSessionType());
506 EXPECT_EQ(MediaSession::Type::Transient, GetSessionType(media_session));
507 437
508 // Adding a player of Content type should override the current type. 438 // Adding a player of Content type should override the current type.
509 StartNewPlayer(media_session, media_session_observer.get(), 439 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
510 MediaSession::Type::Content); 440 EXPECT_EQ(MediaSession::Type::Content, GetSessionType());
511 EXPECT_EQ(MediaSession::Type::Content, GetSessionType(media_session));
512 441
513 // Adding a player of the Transient type should have no effect on the type. 442 // Adding a player of the Transient type should have no effect on the type.
514 StartNewPlayer(media_session, media_session_observer.get(), 443 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
515 MediaSession::Type::Transient); 444 EXPECT_EQ(MediaSession::Type::Content, GetSessionType());
516 EXPECT_EQ(MediaSession::Type::Content, GetSessionType(media_session));
517 445
518 EXPECT_TRUE(media_session_observer->IsPlaying(0)); 446 EXPECT_TRUE(media_session_observer->IsPlaying(0));
519 EXPECT_TRUE(media_session_observer->IsPlaying(1)); 447 EXPECT_TRUE(media_session_observer->IsPlaying(1));
520 EXPECT_TRUE(media_session_observer->IsPlaying(2)); 448 EXPECT_TRUE(media_session_observer->IsPlaying(2));
521 EXPECT_TRUE(media_session_observer->IsPlaying(3)); 449 EXPECT_TRUE(media_session_observer->IsPlaying(3));
522 450
523 SuspendSession(media_session); 451 OnSuspendSession(true);
524 452
525 EXPECT_FALSE(media_session_observer->IsPlaying(0)); 453 EXPECT_FALSE(media_session_observer->IsPlaying(0));
526 EXPECT_FALSE(media_session_observer->IsPlaying(1)); 454 EXPECT_FALSE(media_session_observer->IsPlaying(1));
527 EXPECT_FALSE(media_session_observer->IsPlaying(2)); 455 EXPECT_FALSE(media_session_observer->IsPlaying(2));
528 EXPECT_FALSE(media_session_observer->IsPlaying(3)); 456 EXPECT_FALSE(media_session_observer->IsPlaying(3));
529 457
530 EXPECT_EQ(MediaSession::Type::Content, GetSessionType(media_session)); 458 EXPECT_EQ(MediaSession::Type::Content, GetSessionType());
531 459
532 ResumeSession(media_session); 460 OnResumeSession();
533 461
534 EXPECT_TRUE(media_session_observer->IsPlaying(0)); 462 EXPECT_TRUE(media_session_observer->IsPlaying(0));
535 EXPECT_TRUE(media_session_observer->IsPlaying(1)); 463 EXPECT_TRUE(media_session_observer->IsPlaying(1));
536 EXPECT_TRUE(media_session_observer->IsPlaying(2)); 464 EXPECT_TRUE(media_session_observer->IsPlaying(2));
537 EXPECT_TRUE(media_session_observer->IsPlaying(3)); 465 EXPECT_TRUE(media_session_observer->IsPlaying(3));
538 466
539 EXPECT_EQ(MediaSession::Type::Content, GetSessionType(media_session)); 467 EXPECT_EQ(MediaSession::Type::Content, GetSessionType());
540 468 }
541 media_session->RemovePlayers(media_session_observer.get()); 469
542 } 470 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsShowForContent) {
543 471 EXPECT_CALL(*mock_web_contents_observer(),
544 } // namespace content 472 MediaSessionStateChanged(true, false));
473
474 scoped_ptr<MockMediaSessionObserver> media_session_observer(
475 new MockMediaSessionObserver);
476
477 // Starting a player with a content type should show the media controls.
478 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
479
480 EXPECT_TRUE(IsControllable());
481 EXPECT_FALSE(IsSuspended());
482 }
483
484 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsNoShowForTransient) {
485 EXPECT_CALL(*mock_web_contents_observer(),
486 MediaSessionStateChanged(false, false));
487
488 scoped_ptr<MockMediaSessionObserver> media_session_observer(
489 new MockMediaSessionObserver);
490
491 // Starting a player with a transient type should not show the media controls.
492 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
493
494 EXPECT_FALSE(IsControllable());
495 EXPECT_FALSE(IsSuspended());
496 }
497
498 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsHideWhenStopped) {
499 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
500 MediaSessionStateChanged(true, false));
501 EXPECT_CALL(*mock_web_contents_observer(),
502 MediaSessionStateChanged(false, true))
503 .After(showControls);
504
505 scoped_ptr<MockMediaSessionObserver> media_session_observer(
506 new MockMediaSessionObserver);
507
508 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
509
510 RemovePlayers(media_session_observer.get());
511
512 EXPECT_FALSE(IsControllable());
513 EXPECT_TRUE(IsSuspended());
514 }
515
516 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsShownAcceptTransient) {
517 EXPECT_CALL(*mock_web_contents_observer(),
518 MediaSessionStateChanged(true, false));
519
520 scoped_ptr<MockMediaSessionObserver> media_session_observer(
521 new MockMediaSessionObserver);
522
523 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
524
525 // Transient player join the session without affecting the controls.
526 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
527
528 EXPECT_TRUE(IsControllable());
529 EXPECT_FALSE(IsSuspended());
530 }
531
532 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
533 ControlsShownAfterContentAdded) {
534 Expectation dontShowControls = EXPECT_CALL(
535 *mock_web_contents_observer(), MediaSessionStateChanged(false, false));
536 EXPECT_CALL(*mock_web_contents_observer(),
537 MediaSessionStateChanged(true, false))
538 .After(dontShowControls);
539
540 scoped_ptr<MockMediaSessionObserver> media_session_observer(
541 new MockMediaSessionObserver);
542
543 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
544
545 // The controls are shown when the content player is added.
546 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
547
548 EXPECT_TRUE(IsControllable());
549 EXPECT_FALSE(IsSuspended());
550 }
551
552 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
553 ControlsStayIfOnlyOnePlayerHasBeenPaused) {
554 EXPECT_CALL(*mock_web_contents_observer(),
555 MediaSessionStateChanged(true, false));
556
557 scoped_ptr<MockMediaSessionObserver> media_session_observer(
558 new MockMediaSessionObserver);
559
560 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
561 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
562
563 // Removing only content player doesn't hide the controls since the session
564 // is still active.
565 RemovePlayer(media_session_observer.get(), 0);
566
567 EXPECT_TRUE(IsControllable());
568 EXPECT_FALSE(IsSuspended());
569 }
570
571 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
572 ControlsHideWhenTheLastPlayerIsStopped) {
573 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
574 MediaSessionStateChanged(true, false));
575 EXPECT_CALL(*mock_web_contents_observer(),
576 MediaSessionStateChanged(false, true))
577 .After(showControls);
578 scoped_ptr<MockMediaSessionObserver> media_session_observer(
579 new MockMediaSessionObserver);
580
581 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
582 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
583
584 RemovePlayer(media_session_observer.get(), 0);
585
586 EXPECT_TRUE(IsControllable());
587 EXPECT_FALSE(IsSuspended());
588
589 RemovePlayer(media_session_observer.get(), 1);
590
591 EXPECT_FALSE(IsControllable());
592 EXPECT_TRUE(IsSuspended());
593 }
594
595 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
596 ControlsHideWhenAllThePlayersAreRemoved) {
597 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
598 MediaSessionStateChanged(true, false));
599 EXPECT_CALL(*mock_web_contents_observer(),
600 MediaSessionStateChanged(false, true))
601 .After(showControls);
602
603 scoped_ptr<MockMediaSessionObserver> media_session_observer(
604 new MockMediaSessionObserver);
605
606 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
607 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
608
609 RemovePlayers(media_session_observer.get());
610
611 EXPECT_FALSE(IsControllable());
612 EXPECT_TRUE(IsSuspended());
613 }
614
615 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
616 SuspendTemporaryUpdatesControls) {
617 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
618 MediaSessionStateChanged(true, false));
619 EXPECT_CALL(*mock_web_contents_observer(),
620 MediaSessionStateChanged(true, true))
621 .After(showControls);
622
623 scoped_ptr<MockMediaSessionObserver> media_session_observer(
624 new MockMediaSessionObserver);
625
626 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
627
628 OnSuspendSession(true);
629
630 EXPECT_TRUE(IsControllable());
631 EXPECT_TRUE(IsSuspended());
632 }
633
634 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsUpdatedWhenResumed) {
635 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
636 MediaSessionStateChanged(true, false));
637 Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(),
638 MediaSessionStateChanged(true, true))
639 .After(showControls);
640 EXPECT_CALL(*mock_web_contents_observer(),
641 MediaSessionStateChanged(true, false))
642 .After(pauseControls);
643
644 scoped_ptr<MockMediaSessionObserver> media_session_observer(
645 new MockMediaSessionObserver);
646
647 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
648 OnSuspendSession(true);
649 OnResumeSession();
650
651 EXPECT_TRUE(IsControllable());
652 EXPECT_FALSE(IsSuspended());
653 }
654
655 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
656 ControlsHideWhenSessionSuspendedPermanently) {
657 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
658 MediaSessionStateChanged(true, false));
659 EXPECT_CALL(*mock_web_contents_observer(),
660 MediaSessionStateChanged(false, true))
661 .After(showControls);
662
663 scoped_ptr<MockMediaSessionObserver> media_session_observer(
664 new MockMediaSessionObserver);
665
666 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
667
668 OnSuspendSession(false);
669
670 EXPECT_FALSE(IsControllable());
671 EXPECT_TRUE(IsSuspended());
672 }
673
674 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
675 ControlsHideWhenSessionChangesFromContentToTransient) {
676 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
677 MediaSessionStateChanged(true, false));
678 Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(),
679 MediaSessionStateChanged(true, true))
680 .After(showControls);
681 EXPECT_CALL(*mock_web_contents_observer(),
682 MediaSessionStateChanged(false, false))
683 .After(pauseControls);
684
685 scoped_ptr<MockMediaSessionObserver> media_session_observer(
686 new MockMediaSessionObserver);
687
688 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
689 OnSuspendSession(true);
690
691 // This should reset the session and change it to a transient, so
692 // hide the controls.
693 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
694
695 EXPECT_FALSE(IsControllable());
696 EXPECT_FALSE(IsSuspended());
697 }
698
699 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
700 ControlsUpdatedWhenNewPlayerResetsSession) {
701 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
702 MediaSessionStateChanged(true, false));
703 Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(),
704 MediaSessionStateChanged(true, true))
705 .After(showControls);
706 EXPECT_CALL(*mock_web_contents_observer(),
707 MediaSessionStateChanged(true, false))
708 .After(pauseControls);
709
710 scoped_ptr<MockMediaSessionObserver> media_session_observer(
711 new MockMediaSessionObserver);
712
713 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
714 OnSuspendSession(true);
715
716 // This should reset the session and update the controls.
717 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
718
719 EXPECT_TRUE(IsControllable());
720 EXPECT_FALSE(IsSuspended());
721 }
722
723 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
724 ControlsResumedWhenPlayerIsResumed) {
725 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
726 MediaSessionStateChanged(true, false));
727 Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(),
728 MediaSessionStateChanged(true, true))
729 .After(showControls);
730 EXPECT_CALL(*mock_web_contents_observer(),
731 MediaSessionStateChanged(true, false))
732 .After(pauseControls);
733
734 scoped_ptr<MockMediaSessionObserver> media_session_observer(
735 new MockMediaSessionObserver);
736
737 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
738 OnSuspendSession(true);
739
740 // This should resume the session and update the controls.
741 AddPlayer(media_session_observer.get(), 0, MediaSession::Type::Content);
742
743 EXPECT_TRUE(IsControllable());
744 EXPECT_FALSE(IsSuspended());
745 }
746
747 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
748 ControlsNotUpdatedDueToResumeSessionAction) {
749 EXPECT_CALL(*mock_web_contents_observer(),
750 MediaSessionStateChanged(true, false));
751
752 scoped_ptr<MockMediaSessionObserver> media_session_observer(
753 new MockMediaSessionObserver);
754
755 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
756 SuspendSession();
757
758 EXPECT_TRUE(IsControllable());
759 EXPECT_TRUE(IsSuspended());
760 }
761
762 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
763 ControlsNotUpdatedDueToSuspendSessionAction) {
764 EXPECT_CALL(*mock_web_contents_observer(),
765 MediaSessionStateChanged(true, false));
766
767 scoped_ptr<MockMediaSessionObserver> media_session_observer(
768 new MockMediaSessionObserver);
769
770 StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
771 SuspendSession();
772 ResumeSession();
773
774 EXPECT_TRUE(IsControllable());
775 EXPECT_FALSE(IsSuspended());
776 }
OLDNEW
« no previous file with comments | « content/browser/media/android/media_session.cc ('k') | content/browser/web_contents/web_contents_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698