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

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/AutoplayMutedNotificationTest.java

Issue 2471373005: Pretend the video has no audio track if it is playing as part of autoplay muted. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/java_sources.gni ('k') | content/renderer/media/webmediaplayer_ms_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/AutoplayMutedNotificationTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/AutoplayMutedNotificationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/AutoplayMutedNotificationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e7a1ba61d2515c1159d721fc655bf916ed62167
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/AutoplayMutedNotificationTest.java
@@ -0,0 +1,161 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.media.ui;
+
+import android.content.Context;
+import android.media.AudioManager;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.test.ChromeActivityTestCaseBase;
+import org.chromium.content.browser.test.util.DOMUtils;
+import org.chromium.content.browser.test.util.JavaScriptUtils;
+import org.chromium.net.test.EmbeddedTestServer;
+
+/**
+ * Integration test that checks that autoplay muted doesn't show a notification nor take audio focus
+ */
+public class AutoplayMutedNotificationTest extends ChromeActivityTestCaseBase<ChromeActivity> {
+ private static final String TEST_PATH = "/content/test/data/media/session/autoplay-muted.html";
+ private static final String VIDEO_ID = "video";
+ private static final int AUDIO_FOCUS_CHANGE_TIMEOUT = 500; // ms
+
+ private EmbeddedTestServer mTestServer;
+
+ public AutoplayMutedNotificationTest() {
+ super(ChromeActivity.class);
+ }
+
+ private AudioManager getAudioManager() {
+ return (AudioManager) getActivity().getApplicationContext().getSystemService(
+ Context.AUDIO_SERVICE);
+ }
+
+ private boolean isMediaNotificationVisible() {
+ return MediaNotificationManager.hasManagerForTesting(R.id.media_playback_notification);
+ }
+
+ private class MockAudioFocusChangeListener implements AudioManager.OnAudioFocusChangeListener {
+ private int mAudioFocusState = AudioManager.AUDIOFOCUS_LOSS;
+
+ @Override
+ public void onAudioFocusChange(int focusChange) {
+ mAudioFocusState = focusChange;
+ }
+
+ public int getAudioFocusState() {
+ return mAudioFocusState;
+ }
+
+ public void requestAudioFocus(int focusType) throws Exception {
+ int result = getAudioManager().requestAudioFocus(
+ this, AudioManager.STREAM_MUSIC, focusType);
+ if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
+ fail("Did not get audio focus");
+ } else {
+ mAudioFocusState = focusType;
+ }
+ }
+ }
+
+ private MockAudioFocusChangeListener mAudioFocusChangeListener;
+
+ @Override
+ protected void setUp() throws Exception {
+ mTestServer = EmbeddedTestServer.createAndStartServer(getInstrumentation().getContext());
+ mAudioFocusChangeListener = new MockAudioFocusChangeListener();
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ mTestServer.stopAndDestroyServer();
+ super.tearDown();
+ }
+
+ @Override
+ public void startMainActivity() throws InterruptedException {
+ startMainActivityWithURL(mTestServer.getURL(TEST_PATH));
+ }
+
+ @SmallTest
+ public void testBasic() throws Exception {
+ Tab tab = getActivity().getActivityTab();
+
+ // Taking audio focus.
+ assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.getAudioFocusState());
+ mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN);
+ assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.getAudioFocusState());
+
+ // The page will autoplay the video.
+ DOMUtils.waitForMediaPlay(tab.getWebContents(), VIDEO_ID);
+
+ // Audio focus notification is OS-driven.
+ Thread.sleep(AUDIO_FOCUS_CHANGE_TIMEOUT);
+
+ // Audio focus was not taken and no notification is visible.
+ assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.getAudioFocusState());
+ assertFalse(isMediaNotificationVisible());
+ }
+
+ @SmallTest
+ public void testDoesNotReactToAudioFocus() throws Exception {
+ Tab tab = getActivity().getActivityTab();
+
+ // The page will autoplay the video.
+ DOMUtils.waitForMediaPlay(tab.getWebContents(), VIDEO_ID);
+
+ // Taking audio focus.
+ assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.getAudioFocusState());
+ mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN);
+ assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.getAudioFocusState());
+
+ // Audio focus notification is OS-driven.
+ Thread.sleep(AUDIO_FOCUS_CHANGE_TIMEOUT);
+
+ // Video did not pause.
+ assertFalse(DOMUtils.isMediaPaused(tab.getWebContents(), VIDEO_ID));
+
+ // Still no notification.
+ assertFalse(isMediaNotificationVisible());
+ }
+
+ @SmallTest
+ public void testAutoplayMutedThenUnmute() throws Exception {
+ Tab tab = getActivity().getActivityTab();
+
+ // Taking audio focus.
+ assertEquals(AudioManager.AUDIOFOCUS_LOSS, mAudioFocusChangeListener.getAudioFocusState());
+ mAudioFocusChangeListener.requestAudioFocus(AudioManager.AUDIOFOCUS_GAIN);
+ assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.getAudioFocusState());
+
+ // The page will autoplay the video.
+ DOMUtils.waitForMediaPlay(tab.getWebContents(), VIDEO_ID);
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("(function() {");
+ sb.append(" var video = document.querySelector('video');");
+ sb.append(" video.muted = false;");
+ sb.append(" return video.muted;");
+ sb.append("})();");
+
+ // Unmute from script.
+ String result = JavaScriptUtils.executeJavaScriptAndWaitForResult(
+ tab.getWebContents(), sb.toString());
+ assertTrue(result.trim().equalsIgnoreCase("false"));
+
+ // Video is paused.
+ assertTrue(DOMUtils.isMediaPaused(tab.getWebContents(), VIDEO_ID));
+
+ // Audio focus notification is OS-driven.
+ Thread.sleep(AUDIO_FOCUS_CHANGE_TIMEOUT);
+
+ // Audio focus was not taken and no notification is visible.
+ assertEquals(AudioManager.AUDIOFOCUS_GAIN, mAudioFocusChangeListener.getAudioFocusState());
+ assertFalse(isMediaNotificationVisible());
+ }
+}
« no previous file with comments | « chrome/android/java_sources.gni ('k') | content/renderer/media/webmediaplayer_ms_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698