Index: chrome/android/javatests/src/org/chromium/chrome/browser/video/FullscreenVideoTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/video/FullscreenVideoTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/video/FullscreenVideoTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c706d13533eb795a570746f63c674bb35e3191e9 |
--- /dev/null |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/video/FullscreenVideoTest.java |
@@ -0,0 +1,94 @@ |
+// Copyright 2015 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.video; |
+ |
+import android.test.FlakyTest; |
+import android.view.KeyEvent; |
+ |
+import org.chromium.base.ThreadUtils; |
+import org.chromium.chrome.browser.ChromeActivity; |
+import org.chromium.chrome.browser.EmptyTabObserver; |
+import org.chromium.chrome.browser.Tab; |
+import org.chromium.chrome.test.ChromeActivityTestCaseBase; |
+import org.chromium.chrome.test.util.TestHttpServerClient; |
+import org.chromium.content.browser.test.util.Criteria; |
+import org.chromium.content.browser.test.util.CriteriaHelper; |
+import org.chromium.content.browser.test.util.TestTouchUtils; |
+ |
+/** |
+ * Test suite for fullscreen video implementation. |
+ */ |
+public class FullscreenVideoTest extends ChromeActivityTestCaseBase<ChromeActivity> { |
+ private static final int TEST_TIMEOUT = 3000; |
+ private boolean mIsTabFullscreen = false; |
+ |
+ private class FullscreenTabObserver extends EmptyTabObserver { |
+ @Override |
+ public void onToggleFullscreenMode(Tab tab, boolean enable) { |
+ mIsTabFullscreen = enable; |
+ } |
+ } |
+ |
+ public FullscreenVideoTest() { |
+ super(ChromeActivity.class); |
+ } |
+ |
+ @Override |
+ public void startMainActivity() throws InterruptedException { |
+ startMainActivityOnBlankPage(); |
+ } |
+ |
+ /** |
+ * Test that when playing a fullscreen video, hitting the back button will let the tab |
+ * exit fullscreen mode without changing its URL. |
+ * |
+ * @MediumTest |
+ * crbug.com/458368. |
+ */ |
+ @FlakyTest |
+ public void testExitFullscreenNotifiesTabObservers() throws InterruptedException { |
+ String url = TestHttpServerClient.getUrl( |
+ "chrome/test/data/android/media/video-fullscreen.html"); |
+ loadUrl(url); |
+ Tab tab = getActivity().getActivityTab(); |
+ FullscreenTabObserver observer = new FullscreenTabObserver(); |
+ tab.addObserver(observer); |
+ |
+ TestTouchUtils.singleClickView(getInstrumentation(), tab.getView(), 500, 500); |
+ waitForVideoToEnterFullscreen(); |
+ // Key events have to be dispached on UI thread. |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ getActivity().dispatchKeyEvent( |
+ new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); |
+ getActivity().dispatchKeyEvent( |
+ new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK)); |
+ } |
+ }); |
+ |
+ waitForTabToExitFullscreen(); |
+ assertEquals("URL mismatch after exiting fullscreen video", |
+ url, getActivity().getActivityTab().getUrl()); |
+ } |
+ |
+ void waitForVideoToEnterFullscreen() throws InterruptedException { |
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ return mIsTabFullscreen; |
+ } |
+ }, TEST_TIMEOUT, CriteriaHelper.DEFAULT_POLLING_INTERVAL)); |
+ } |
+ |
+ void waitForTabToExitFullscreen() throws InterruptedException { |
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ return !mIsTabFullscreen; |
+ } |
+ }, TEST_TIMEOUT, CriteriaHelper.DEFAULT_POLLING_INTERVAL)); |
+ } |
+} |