- add sources.
[platform/framework/web/crosswalk.git] / src / content / public / test / android / javatests / src / org / chromium / content / browser / test / util / JavaScriptUtils.java
1 // Copyright (c) 2012 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.content.browser.test.util;
6
7 import junit.framework.Assert;
8
9 import org.chromium.base.ThreadUtils;
10 import org.chromium.content.browser.ContentView;
11 import org.chromium.content.browser.ContentViewCore;
12
13 import java.util.concurrent.TimeUnit;
14 import java.util.concurrent.TimeoutException;
15
16 /**
17  * Collection of JavaScript utilities.
18  */
19 public class JavaScriptUtils {
20     private static final long EVALUATION_TIMEOUT_SECONDS = 5;
21
22     /**
23      * Executes the given snippet of JavaScript code within the given ContentView.
24      * Returns the result of its execution in JSON format.
25      */
26     public static String executeJavaScriptAndWaitForResult(
27             final ContentView view, TestCallbackHelperContainer viewClient,
28             final String code) throws InterruptedException, TimeoutException {
29         return executeJavaScriptAndWaitForResult(
30                 view.getContentViewCore(),
31                 viewClient.getOnEvaluateJavaScriptResultHelper(),
32                 code);
33     }
34
35     /**
36      * Executes the given snippet of JavaScript code within the given ContentViewCore.
37      * Does not depend on ContentView and TestCallbackHelperContainer.
38      * Returns the result of its execution in JSON format.
39      */
40     public static String executeJavaScriptAndWaitForResult(
41             final ContentViewCore viewCore,
42             final TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper helper,
43             final String code) throws InterruptedException, TimeoutException {
44         return executeJavaScriptAndWaitForResult(
45                 viewCore, helper, code, EVALUATION_TIMEOUT_SECONDS, TimeUnit.SECONDS);
46     }
47
48     /**
49      * Executes the given snippet of JavaScript code within the given ContentViewCore.
50      * Does not depend on ContentView and TestCallbackHelperContainer.
51      * Returns the result of its execution in JSON format.
52      */
53     public static String executeJavaScriptAndWaitForResult(
54             final ContentViewCore viewCore,
55             final TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper helper,
56             final String code,
57             final long timeout, final TimeUnit timeoutUnits)
58                     throws InterruptedException, TimeoutException {
59         ThreadUtils.runOnUiThread(new Runnable() {
60             @Override
61             public void run() {
62                 helper.evaluateJavaScript(viewCore, code);
63             }
64         });
65         helper.waitUntilHasValue(timeout, timeoutUnits);
66         Assert.assertTrue("Failed to retrieve JavaScript evaluation results.", helper.hasValue());
67         return helper.getJsonResultAndClear();
68     }
69
70     /**
71      * Executes the given snippet of JavaScript code but does not wait for the result.
72      */
73     public static void executeJavaScript(final ContentView view, final String code) {
74         ThreadUtils.runOnUiThread(new Runnable() {
75             @Override
76             public void run() {
77                 view.evaluateJavaScript(code);
78             }
79         });
80     }
81 }