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

Side by Side Diff: content/public/android/javatests/src/org/chromium/content/browser/MediaSessionTest.java

Issue 1110833004: Move audio focus control from media/ to content/ and make it per WebContents. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: with tests Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.content.browser;
6
7 import android.content.Context;
8 import android.media.AudioManager;
9 import android.test.suitebuilder.annotation.MediumTest;
10 import android.test.suitebuilder.annotation.SmallTest;
11
12 import org.chromium.base.test.util.CommandLineFlags;
13 import org.chromium.base.test.util.Feature;
14 import org.chromium.content.browser.test.util.Criteria;
15 import org.chromium.content.browser.test.util.CriteriaHelper;
16 import org.chromium.content.browser.test.util.DOMUtils;
17 import org.chromium.content.common.ContentSwitches;
18 import org.chromium.content_shell_apk.ContentShellTestBase;
19
20 /**
21 * Tests for MediaSession.
22 */
23 @CommandLineFlags.Add(ContentSwitches.DISABLE_GESTURE_REQUIREMENT_FOR_MEDIA_PLAY BACK)
24 public class MediaSessionTest extends ContentShellTestBase {
25 private static final String MEDIA_SESSION_TEST_URL =
26 "content/test/data/android/media-session.html";
27 private static final String SHORT_AUDIO = "short-audio";
28 private static final String LONG_AUDIO = "long-audio";
29 private static final String SHORT_VIDEO = "short-video";
30 private static final String LONG_VIDEO = "long-video";
31
32 private AudioManager getAudioManager() {
33 return (AudioManager) getActivity().getApplicationContext().getSystemSer vice(
34 Context.AUDIO_SERVICE);
35 }
36
37 private class MockAudioFocusChangeListener implements AudioManager.OnAudioFo cusChangeListener {
38 @Override
39 public void onAudioFocusChange(int focusChange) {
40 mAudioFocusState = focusChange;
41 }
42
43 public int getAudioFocusState() {
44 return mAudioFocusState;
45 }
46
47 public void requestAudioFocus(int focusType) throws Exception {
48 int result = getAudioManager().requestAudioFocus(
49 this, AudioManager.STREAM_MUSIC, focusType);
50 if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
51 throw new Exception("Did not get audio focus!");
52 } else {
53 mAudioFocusState = focusType;
54 }
55 }
56
57 public void abandonAudioFocus() {
58 getAudioManager().abandonAudioFocus(this);
59 mAudioFocusState = AudioManager.AUDIOFOCUS_LOSS;
60 }
61
62 public boolean waitForFocusStateChange(final int focusType) throws Inter ruptedException {
63 return CriteriaHelper.pollForCriteria(new Criteria() {
64 @Override
65 public boolean isSatisfied() {
66 return getAudioFocusState() == focusType;
67 }
68 });
69 }
70
71 int mAudioFocusState = AudioManager.AUDIOFOCUS_LOSS;
72 }
73
74 private MockAudioFocusChangeListener mAudioFocusChangeListener;
75
76 @Override
77 public void setUp() throws Exception {
78 super.setUp();
79
80 try {
81 startActivityWithTestUrl(MEDIA_SESSION_TEST_URL);
82 } catch (Throwable t) {
83 fail("Couldn't load test page");
84 }
85
86 mAudioFocusChangeListener = new MockAudioFocusChangeListener();
87 }
88
89 @Override
90 public void tearDown() throws Exception {
91 mAudioFocusChangeListener.abandonAudioFocus();
92
93 super.tearDown();
94 }
95
96 @SmallTest
97 @Feature({"MediaSession"})
98 public void testDontStopEachOther() throws Exception {
99 assertTrue(DOMUtils.isMediaPaused(getWebContents(), LONG_AUDIO));
100 DOMUtils.playMedia(getWebContents(), LONG_AUDIO);
101 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_AUDIO));
102
103 assertTrue(DOMUtils.isMediaPaused(getWebContents(), LONG_VIDEO));
104 DOMUtils.playMedia(getWebContents(), LONG_VIDEO);
105 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_VIDEO));
106
107 assertTrue(DOMUtils.isMediaPaused(getWebContents(), SHORT_VIDEO));
108 DOMUtils.playMedia(getWebContents(), SHORT_VIDEO);
109 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), SHORT_VIDEO));
110
111 assertTrue(DOMUtils.isMediaPaused(getWebContents(), SHORT_AUDIO));
112 DOMUtils.playMedia(getWebContents(), SHORT_AUDIO);
113 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), SHORT_AUDIO));
114
115 assertFalse(DOMUtils.isMediaPaused(getWebContents(), SHORT_AUDIO));
116 assertFalse(DOMUtils.isMediaPaused(getWebContents(), LONG_AUDIO));
117 assertFalse(DOMUtils.isMediaPaused(getWebContents(), SHORT_VIDEO));
118 assertFalse(DOMUtils.isMediaPaused(getWebContents(), LONG_VIDEO));
119 }
120
121 @MediumTest
122 @Feature({"MediaSession"})
123 public void testShortAudioIsTransient() throws Exception {
124 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
125 mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN );
126 assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.get AudioFocusState());
127
128 DOMUtils.playMedia(getWebContents(), SHORT_AUDIO);
129 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), SHORT_AUDIO));
130
131 assertTrue(mAudioFocusChangeListener.waitForFocusStateChange(
132 AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK));
133 assertTrue(mAudioFocusChangeListener.waitForFocusStateChange(AudioManage r.AUDIOFOCUS_GAIN));
134 }
135
136 @MediumTest
137 @Feature({"MediaSession"})
138 public void testShortVideoIsTransient() throws Exception {
139 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
140 mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN );
141 assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.get AudioFocusState());
142
143 DOMUtils.playMedia(getWebContents(), SHORT_VIDEO);
144 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), SHORT_VIDEO));
145
146 assertTrue(mAudioFocusChangeListener.waitForFocusStateChange(
147 AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK));
148 assertTrue(mAudioFocusChangeListener.waitForFocusStateChange(AudioManage r.AUDIOFOCUS_GAIN));
149 }
150
151 @SmallTest
152 @Feature({"MediaSession"})
153 public void testAudioGainFocus() throws Exception {
154 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
155 mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN );
156 assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.get AudioFocusState());
157
158 DOMUtils.playMedia(getWebContents(), LONG_AUDIO);
159 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_AUDIO));
160
161 assertTrue(mAudioFocusChangeListener.waitForFocusStateChange(AudioManage r.AUDIOFOCUS_LOSS));
162 }
163
164 @SmallTest
165 @Feature({"MediaSession"})
166 public void testVideoGainFocus() throws Exception {
167 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
168 mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN );
169 assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.get AudioFocusState());
170
171 DOMUtils.playMedia(getWebContents(), LONG_VIDEO);
172 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_VIDEO));
173
174 assertTrue(mAudioFocusChangeListener.waitForFocusStateChange(AudioManage r.AUDIOFOCUS_LOSS));
175 }
176
177 @SmallTest
178 @Feature({"MediaSession"})
179 public void testLongAudioAfterShortGainsFocus() throws Exception {
180 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
181 mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN );
182 assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.get AudioFocusState());
183
184 DOMUtils.playMedia(getWebContents(), SHORT_AUDIO);
185 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), SHORT_AUDIO));
186 assertTrue(mAudioFocusChangeListener.waitForFocusStateChange(
187 AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK));
188
189 DOMUtils.playMedia(getWebContents(), LONG_AUDIO);
190 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_AUDIO));
191 assertTrue(mAudioFocusChangeListener.waitForFocusStateChange(AudioManage r.AUDIOFOCUS_LOSS));
192 }
193
194 @SmallTest
195 @Feature({"MediaSession"})
196 public void testLongVideoAfterShortGainsFocus() throws Exception {
197 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
198 mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN );
199 assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.get AudioFocusState());
200
201 DOMUtils.playMedia(getWebContents(), SHORT_VIDEO);
202 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), SHORT_VIDEO));
203 assertTrue(mAudioFocusChangeListener.waitForFocusStateChange(
204 AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK));
205
206 DOMUtils.playMedia(getWebContents(), LONG_VIDEO);
207 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_VIDEO));
208 assertTrue(mAudioFocusChangeListener.waitForFocusStateChange(AudioManage r.AUDIOFOCUS_LOSS));
209 }
210
211 @SmallTest
212 @Feature({"MediaSession"})
213 public void testShortAudioStopsIfLostFocus() throws Exception {
214 DOMUtils.playMedia(getWebContents(), SHORT_AUDIO);
215 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), SHORT_AUDIO));
216
217 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
218 mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN );
219 assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.get AudioFocusState());
220
221 assertTrue(DOMUtils.waitForMediaPause(getWebContents(), SHORT_AUDIO));
222 }
223
224 @SmallTest
225 @Feature({"MediaSession"})
226 public void testShortVideoStopsIfLostFocus() throws Exception {
227 DOMUtils.playMedia(getWebContents(), SHORT_VIDEO);
228 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), SHORT_VIDEO));
229
230 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
231 mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN );
232 assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.get AudioFocusState());
233
234 assertTrue(DOMUtils.waitForMediaPause(getWebContents(), SHORT_VIDEO));
235 }
236
237 @MediumTest
238 @Feature({"MediaSession"})
239 public void testAudioStopsIfLostFocus() throws Exception {
240 DOMUtils.playMedia(getWebContents(), LONG_AUDIO);
241 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_AUDIO));
242
243 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
244 mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN );
245 assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.get AudioFocusState());
246
247 assertTrue(DOMUtils.waitForMediaPause(getWebContents(), LONG_AUDIO));
248 }
249
250 @SmallTest
251 @Feature({"MediaSession"})
252 public void testVideoStopsIfLostFocus() throws Exception {
253 DOMUtils.playMedia(getWebContents(), LONG_VIDEO);
254 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_VIDEO));
255
256 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
257 mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN );
258 assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.get AudioFocusState());
259
260 assertTrue(DOMUtils.waitForMediaPause(getWebContents(), LONG_VIDEO));
261 }
262
263 @SmallTest
264 @Feature({"MediaSession"})
265 public void testMediaDontDuck() throws Exception {
266 DOMUtils.playMedia(getWebContents(), LONG_AUDIO);
267 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_AUDIO));
268 DOMUtils.playMedia(getWebContents(), LONG_VIDEO);
269 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_VIDEO));
270
271 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
272 mAudioFocusChangeListener.requestAudioFocus(
273 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
274 assertEquals(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
275 mAudioFocusChangeListener.getAudioFocusState());
276
277 assertTrue(DOMUtils.waitForMediaPause(getWebContents(), LONG_AUDIO));
278 assertTrue(DOMUtils.waitForMediaPause(getWebContents(), LONG_VIDEO));
279 }
280
281 @MediumTest
282 @Feature({"MediaSession"})
283 public void testMediaResumeAfterTransientMayDuckFocusLoss() throws Exception {
284 DOMUtils.playMedia(getWebContents(), LONG_AUDIO);
285 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_AUDIO));
286 DOMUtils.playMedia(getWebContents(), LONG_VIDEO);
287 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_VIDEO));
288
289 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
290 mAudioFocusChangeListener.requestAudioFocus(
291 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
292 assertEquals(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
293 mAudioFocusChangeListener.getAudioFocusState());
294
295 assertTrue(DOMUtils.waitForMediaPause(getWebContents(), LONG_AUDIO));
296 assertTrue(DOMUtils.waitForMediaPause(getWebContents(), LONG_VIDEO));
297
298 mAudioFocusChangeListener.abandonAudioFocus();
299
300 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_AUDIO));
301 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_VIDEO));
302 }
303
304 @MediumTest
305 @Feature({"MediaSession"})
306 public void testMediaResumeAfterTransientFocusLoss() throws Exception {
307 DOMUtils.playMedia(getWebContents(), LONG_AUDIO);
308 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_AUDIO));
309 DOMUtils.playMedia(getWebContents(), LONG_VIDEO);
310 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_VIDEO));
311
312 assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.get AudioFocusState());
313 mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN _TRANSIENT);
314 assertEquals(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT,
315 mAudioFocusChangeListener.getAudioFocusState());
316
317 assertTrue(DOMUtils.waitForMediaPause(getWebContents(), LONG_AUDIO));
318 assertTrue(DOMUtils.waitForMediaPause(getWebContents(), LONG_VIDEO));
319
320 mAudioFocusChangeListener.abandonAudioFocus();
321
322 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_AUDIO));
323 assertTrue(DOMUtils.waitForMediaPlay(getWebContents(), LONG_VIDEO));
324 }
325 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698