Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / android_webview / javatests / src / org / chromium / android_webview / test / AwContentsClientFullScreenVideoTest.java
1 // Copyright 2013 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.android_webview.test;
6
7 import android.test.suitebuilder.annotation.MediumTest;
8
9 import junit.framework.Assert;
10
11 import org.chromium.android_webview.test.util.JavascriptEventObserver;
12 import org.chromium.android_webview.test.util.VideoTestWebServer;
13 import org.chromium.base.test.util.Feature;
14 import org.chromium.content.browser.ContentViewCore;
15 import org.chromium.content.browser.test.util.DOMUtils;
16 import org.chromium.content.browser.test.util.TouchCommon;
17
18 /**
19  * Test WebChromeClient::onShow/HideCustomView.
20  */
21 public class AwContentsClientFullScreenVideoTest extends AwTestBase {
22     private FullScreenVideoTestAwContentsClient mContentsClient;
23     private ContentViewCore mContentViewCore;
24     private VideoTestWebServer mWebServer;
25     private AwTestContainerView mTestContainerView;
26
27     @Override
28     protected void setUp() throws Exception {
29         super.setUp();
30         mContentsClient = new FullScreenVideoTestAwContentsClient(getActivity());
31         mTestContainerView =
32                 createAwTestContainerViewOnMainSync(mContentsClient);
33         mContentViewCore = mTestContainerView.getContentViewCore();
34         enableJavaScriptOnUiThread(mTestContainerView.getAwContents());
35         mTestContainerView.getAwContents().getSettings().setFullscreenSupported(true);
36         mWebServer = new VideoTestWebServer(
37                 getInstrumentation().getTargetContext());
38     }
39
40     @Override
41     protected void tearDown() throws Exception {
42         super.tearDown();
43         if (mWebServer != null) mWebServer.getTestWebServer().shutdown();
44     }
45
46     @MediumTest
47     @Feature({"AndroidWebView"})
48     public void testOnShowAndHideCustomViewWithCallback() throws Throwable {
49         doOnShowAndHideCustomViewTest(new Runnable() {
50             @Override
51             public void run() {
52                 mContentsClient.getExitCallback().onCustomViewHidden();
53             }
54         });
55     }
56
57     @MediumTest
58     @Feature({"AndroidWebView"})
59     public void testOnShowAndHideCustomViewWithJavascript() throws Throwable {
60         doOnShowAndHideCustomViewTest(new Runnable() {
61             @Override
62             public void run() {
63                 DOMUtils.exitFullscreen(mContentViewCore);
64             }
65         });
66     }
67
68     @MediumTest
69     @Feature({"AndroidWebView"})
70     public void testOnShowCustomViewAndPlayWithHtmlControl() throws Throwable {
71         doOnShowCustomViewTest();
72         Assert.assertFalse(DOMUtils.hasVideoEnded(
73                 mContentViewCore, VideoTestWebServer.VIDEO_ID));
74
75         // Click the html play button that is rendered above the video right in the middle
76         // of the custom view. Note that we're not able to get the precise location of the
77         // control since it is a shadow element, so this test might break if the location
78         // ever moves.
79         TouchCommon touchCommon = new TouchCommon(
80                 AwContentsClientFullScreenVideoTest.this);
81         touchCommon.singleClickView(mContentsClient.getCustomView());
82
83         Assert.assertTrue(DOMUtils.waitForEndOfVideo(
84                 mContentViewCore, VideoTestWebServer.VIDEO_ID));
85     }
86
87     @MediumTest
88     @Feature({"AndroidWebView"})
89     public void testFullscreenNotSupported() throws Throwable {
90         mTestContainerView.getAwContents().getSettings().setFullscreenSupported(false);
91
92         final JavascriptEventObserver fullScreenErrorObserver = new JavascriptEventObserver();
93         getInstrumentation().runOnMainSync(new Runnable() {
94             @Override
95             public void run() {
96                 fullScreenErrorObserver.register(mContentViewCore, "javaFullScreenErrorObserver");
97             }
98         });
99
100         loadTestPageAndClickFullscreen();
101
102         Assert.assertTrue(fullScreenErrorObserver.waitForEvent(500));
103         Assert.assertFalse(mContentsClient.wasCustomViewShownCalled());
104     }
105
106     private void doOnShowAndHideCustomViewTest(final Runnable existFullscreen)
107             throws Throwable {
108         doOnShowCustomViewTest();
109         getInstrumentation().runOnMainSync(existFullscreen);
110         mContentsClient.waitForCustomViewHidden();
111     }
112
113     private void doOnShowCustomViewTest() throws Exception {
114         loadTestPageAndClickFullscreen();
115         mContentsClient.waitForCustomViewShown();
116     }
117
118     private void loadTestPageAndClickFullscreen() throws Exception {
119         loadUrlSync(mTestContainerView.getAwContents(),
120                 mContentsClient.getOnPageFinishedHelper(),
121                 mWebServer.getFullScreenVideoTestURL());
122
123         // Click the button in full_screen_video_test.html to enter fullscreen.
124         TouchCommon touchCommon = new TouchCommon(this);
125         touchCommon.singleClickView(mTestContainerView);
126     }
127 }