- add third_party src.
[platform/framework/web/crosswalk.git] / src / xwalk / test / android / core / javatests / src / org / xwalk / core / xwview / test / RendererResponsivenessTest.java
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Copyright (c) 2013 Intel Corporation. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5
6 package org.xwalk.core.xwview.test;
7
8 import android.graphics.Bitmap;
9 import android.test.suitebuilder.annotation.MediumTest;
10 import android.util.Log;
11 import android.test.TouchUtils;
12 import android.test.InstrumentationTestCase;
13
14 import java.util.concurrent.TimeUnit;
15
16 import org.chromium.content.browser.test.util.CallbackHelper;
17 import org.chromium.base.test.util.DisabledTest;
18 import org.chromium.base.test.util.Feature;
19 import org.chromium.content.browser.ContentView;
20 import org.chromium.content.browser.ContentViewCore;
21
22 import org.xwalk.core.XWalkClient;
23 import org.xwalk.core.XWalkContent;
24 import org.xwalk.core.XWalkView;
25
26 /**
27  * Renderer responsiveness tests:
28  *
29  * Internally, a hang monitor timer will start for each renderer when there is
30  * an input event sent to the renderer. If the ACK for handling the input event
31  * is not received in 30 seconds, the renderer is deemed to be unresponsive to
32  * user interaction.
33  */
34 public class RendererResponsivenessTest extends XWalkViewTestBase {
35     private OnRendererResponsivenessHelper responsiveHelper = new OnRendererResponsivenessHelper();
36     private OnRendererResponsivenessHelper unresponsiveHelper = new OnRendererResponsivenessHelper();
37
38     @Override
39     public void setUp() throws Exception {
40         super.setUp();
41     }
42
43     //@Feature({"RendererResponsivenessTest"})
44     //@MediumTest
45     @DisabledTest
46     public void testRendererUnresponsive() throws Throwable {
47         getXWalkView().setXWalkClient(new ResponsivenessTestClient() {
48             @Override
49             public void onRendererUnresponsive(XWalkView view) {
50                 unresponsiveHelper.notifyCalled(view);
51             }
52         });
53
54         loadAssetFile("renderHung.html");
55
56         int currentCallCount = unresponsiveHelper.getCallCount();
57
58         XWalkContent content = getXWalkView().getXWalkViewContentForTest();
59         content.getContentViewCoreForTest().evaluateJavaScript("deadLoopForever();", null);
60
61         /**
62          * Send an input event to xwalk view. Internally, if no ACK message is received
63          * for handling this input event in 30 seconds, onRendererUnresponsive callback
64          * would be called.
65          */
66         TouchUtils.clickView(this, getXWalkView());
67
68         /**
69          * The timeout for responsiveness checking is 30 seconds, so here the timeout
70          * for callback is set to 40 seconds to ensure the onRendererResponsive
71          * to be called.
72          */
73         unresponsiveHelper.waitForCallback(currentCallCount, 1, 40, TimeUnit.SECONDS);
74         assertEquals(getXWalkView(), unresponsiveHelper.getXWalkView());
75     }
76
77     //@Feature({"RendererResponsivenessTest"})
78     //@MediumTest
79     @DisabledTest
80     public void testRendererResponsiveAgain() throws Throwable {
81         getXWalkView().setXWalkClient(new ResponsivenessTestClient() {
82             /**
83              * Called once the renderer become responsive again.
84              */
85             @Override
86             public void onRendererResponsive(XWalkView view) {
87                 responsiveHelper.notifyCalled(view);
88             }
89         });
90
91         loadAssetFile("renderHung.html");
92
93         int currentCallCount = responsiveHelper.getCallCount();
94         XWalkContent content = getXWalkView().getXWalkViewContentForTest();
95         content.getContentViewCoreForTest().evaluateJavaScript("deadLoopFor40secs();", null);
96
97         /**
98          * Send an input event to start the hung monitor.
99          */
100         TouchUtils.clickView(this, getXWalkView());
101
102         /**
103          * Wait for onRendererResponsive to called. The dead loop is designed to run
104          * 40 seconds, and here we wait for 50 seconds to ensure it has enough time to
105          * call onRendererResponsive callback.
106          */
107         responsiveHelper.waitForCallback(currentCallCount, 1, 50, TimeUnit.SECONDS);
108         assertEquals(getXWalkView(), responsiveHelper.getXWalkView());
109     }
110
111     private final class OnRendererResponsivenessHelper extends CallbackHelper {
112         private XWalkView mView;
113
114         public void notifyCalled(XWalkView view) {
115             mView = view;
116             notifyCalled();
117         }
118         public XWalkView getXWalkView() {
119             assert getCallCount() > 0;
120             return mView;
121         }
122     }
123
124     private class ResponsivenessTestClient extends XWalkClient {
125         @Override
126         public void onPageStarted(XWalkView view, String url, Bitmap favicon) {
127             mTestContentsClient.onPageStarted(url);
128         }
129
130         @Override
131         public void onPageFinished(XWalkView view, String url) {
132             mTestContentsClient.didFinishLoad(url);
133         }
134     };
135 }