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

Unified Diff: android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenTest.java

Issue 639923003: [aw] Fullscreen tests for non-media elements. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fullscreenNonMediaForReview
Patch Set: Add copyright notice to full_screen_video.js Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenTest.java
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d3f6af0fa303830a7d3f1bc22ecb2ccc06cbffc
--- /dev/null
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenTest.java
@@ -0,0 +1,186 @@
+// Copyright 2013 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.android_webview.test;
+
+import android.test.suitebuilder.annotation.MediumTest;
+
+import org.chromium.android_webview.test.util.JavascriptEventObserver;
+import org.chromium.android_webview.test.util.VideoTestWebServer;
+import org.chromium.base.test.util.Feature;
+import org.chromium.content.browser.ContentViewCore;
+import org.chromium.content.browser.test.util.DOMUtils;
+import org.chromium.content.browser.test.util.TouchCommon;
+
+/**
+ * Test the fullscreen API (WebChromeClient::onShow/HideCustomView).
+ *
+ * <p>Fullscreen support follows a different code path depending on whether
+ * the element is a video or not, so we test we both. For non-video elements
+ * we pick a div containing a video and custom html controls since this is a
+ * very common use case.
+ */
+public class AwContentsClientFullScreenTest extends AwTestBase {
+ private FullScreenVideoTestAwContentsClient mContentsClient;
+ private ContentViewCore mContentViewCore;
+ private VideoTestWebServer mWebServer;
+ private AwTestContainerView mTestContainerView;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mContentsClient = new FullScreenVideoTestAwContentsClient(getActivity());
+ mTestContainerView =
+ createAwTestContainerViewOnMainSync(mContentsClient);
+ mContentViewCore = mTestContainerView.getContentViewCore();
+ enableJavaScriptOnUiThread(mTestContainerView.getAwContents());
+ mTestContainerView.getAwContents().getSettings().setFullscreenSupported(true);
+ mWebServer = new VideoTestWebServer(
+ getInstrumentation().getTargetContext());
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ if (mWebServer != null) mWebServer.getTestWebServer().shutdown();
+ }
+
+ @MediumTest
+ @Feature({"AndroidWebView"})
+ public void testOnShowAndHideCustomViewWithCallback_video() throws Throwable {
+ doTestOnShowAndHideCustomViewWithCallback(getFullScreenVideoTestUrl());
+ }
+
+ @MediumTest
+ @Feature({"AndroidWebView"})
+ public void testOnShowAndHideCustomViewWithCallback_videoInsideDiv() throws Throwable {
+ doTestOnShowAndHideCustomViewWithCallback(getFullScreenVideoInsideDivTestUrl());
+ }
+
+ public void doTestOnShowAndHideCustomViewWithCallback(String videoTestUrl) throws Throwable {
+ doOnShowAndHideCustomViewTest(videoTestUrl, new Runnable() {
+ @Override
+ public void run() {
+ mContentsClient.getExitCallback().onCustomViewHidden();
+ }
+ });
+ }
+
+ @MediumTest
+ @Feature({"AndroidWebView"})
+ public void testOnShowAndHideCustomViewWithJavascript_video() throws Throwable {
+ doTestOnShowAndHideCustomViewWithJavascript(getFullScreenVideoTestUrl());
+ }
+
+ @MediumTest
+ @Feature({"AndroidWebView"})
+ public void testOnShowAndHideCustomViewWithJavascript_videoInsideDiv()
+ throws Throwable {
+ doTestOnShowAndHideCustomViewWithJavascript(getFullScreenVideoInsideDivTestUrl());
+ }
+
+ public void doTestOnShowAndHideCustomViewWithJavascript(String videoTestUrl) throws Throwable {
+ doOnShowAndHideCustomViewTest(videoTestUrl, new Runnable() {
+ @Override
+ public void run() {
+ DOMUtils.exitFullscreen(mContentViewCore.getWebContents());
+ }
+ });
+ }
+
+ @MediumTest
+ @Feature({"AndroidWebView"})
+ public void testOnShowCustomViewAndPlayWithHtmlControl_video() throws Throwable {
+ doTestOnShowCustomViewAndPlayWithHtmlControl(getFullScreenVideoTestUrl());
+ }
+
+ @MediumTest
+ @Feature({"AndroidWebView"})
+ public void testOnShowCustomViewAndPlayWithHtmlControl_videoInsideDiv() throws Throwable {
+ doTestOnShowCustomViewAndPlayWithHtmlControl(getFullScreenVideoInsideDivTestUrl());
+ }
+
+ public void doTestOnShowCustomViewAndPlayWithHtmlControl(String videoTestUrl) throws Throwable {
+ final JavascriptEventObserver onPlayObserver = registerObserver("javaOnPlayObserver");
+
+ doOnShowCustomViewTest(videoTestUrl);
+
+ // Click the html play button that is rendered above the video right in the middle
+ // of the custom view. Note that we're not able to get the precise location of the
+ // control since it is a shadow element, so this test might break if the location
+ // ever moves.
+ TouchCommon touchCommon = new TouchCommon(
+ AwContentsClientFullScreenTest.this);
+ touchCommon.singleClickView(mContentsClient.getCustomView());
+
+ assertTrue(onPlayObserver.waitForEvent(WAIT_TIMEOUT_MS));
+ }
+
+ @MediumTest
+ @Feature({"AndroidWebView"})
+ public void testFullscreenNotSupported_video() throws Throwable {
+ doTestFullscreenNotSupported(getFullScreenVideoTestUrl());
+ }
+
+ @MediumTest
+ @Feature({"AndroidWebView"})
+ public void testFullscreenNotSupported_videoInsideDiv() throws Throwable {
+ doTestFullscreenNotSupported(getFullScreenVideoInsideDivTestUrl());
+ }
+
+ public void doTestFullscreenNotSupported(String videoTestUrl) throws Throwable {
+ mTestContainerView.getAwContents().getSettings().setFullscreenSupported(false);
+
+ final JavascriptEventObserver fullScreenErrorObserver = registerObserver(
+ "javaFullScreenErrorObserver");
+
+ loadTestPageAndClickFullscreen(videoTestUrl);
+
+ assertTrue(fullScreenErrorObserver.waitForEvent(WAIT_TIMEOUT_MS));
+ assertFalse(mContentsClient.wasCustomViewShownCalled());
+ }
+
+ private JavascriptEventObserver registerObserver(final String observerName) {
+ final JavascriptEventObserver observer = new JavascriptEventObserver();
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ observer.register(mContentViewCore, observerName);
+ }
+ });
+ return observer;
+ }
+
+ private void doOnShowAndHideCustomViewTest(String videoTestUrl, final Runnable existFullscreen)
+ throws Throwable {
+ doOnShowCustomViewTest(videoTestUrl);
+ getInstrumentation().runOnMainSync(existFullscreen);
+ mContentsClient.waitForCustomViewHidden();
+ }
+
+ private void doOnShowCustomViewTest(String videoTestUrl) throws Exception {
+ final JavascriptEventObserver onEnterFullscreenObserver =
+ registerObserver("javaOnEnterFullscreen");
+ loadTestPageAndClickFullscreen(videoTestUrl);
+ mContentsClient.waitForCustomViewShown();
+ assertTrue(onEnterFullscreenObserver.waitForEvent(WAIT_TIMEOUT_MS));
+ }
+
+ private void loadTestPageAndClickFullscreen(String videoTestUrl) throws Exception {
+ loadUrlSync(mTestContainerView.getAwContents(),
+ mContentsClient.getOnPageFinishedHelper(), videoTestUrl);
+
+ // Click the button in full_screen_video_test.html to enter fullscreen.
+ TouchCommon touchCommon = new TouchCommon(this);
+ touchCommon.singleClickView(mTestContainerView);
+ }
+
+ private String getFullScreenVideoTestUrl() {
+ return mWebServer.getFullScreenVideoTestURL();
+ }
+
+ private String getFullScreenVideoInsideDivTestUrl() {
+ return mWebServer.getFullScreenVideoInsideDivTestURL();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698