1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Copyright (c) 2014 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.
6 package org.xwalk.core.xwview.test;
8 import android.util.Log;
9 import android.webkit.ValueCallback;
10 import android.webkit.WebResourceResponse;
12 import java.util.ArrayList;
13 import java.util.List;
14 import java.util.concurrent.Callable;
15 import java.util.concurrent.ConcurrentHashMap;
16 import java.util.concurrent.CountDownLatch;
17 import java.util.concurrent.TimeoutException;
19 import org.chromium.content.browser.test.util.CallbackHelper;
20 import org.chromium.content.browser.test.util.Criteria;
21 import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageFinishedHelper;
22 import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageStartedHelper;
23 import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnReceivedErrorHelper;
25 import org.xwalk.core.XWalkView;
27 class TestHelperBridge {
29 // Two new helper classes for testing new APIs.
30 public class ShouldInterceptLoadRequestHelper extends CallbackHelper {
31 private List<String> mShouldInterceptRequestUrls = new ArrayList<String>();
32 private ConcurrentHashMap<String, WebResourceResponse> mReturnValuesByUrls
33 = new ConcurrentHashMap<String, WebResourceResponse>();
34 // This is read from the IO thread, so needs to be marked volatile.
35 private volatile WebResourceResponse mResourceResponseReturnValue = null;
36 private String mUrlToWaitFor;
38 void setReturnValue(WebResourceResponse value) {
39 mResourceResponseReturnValue = value;
42 void setReturnValueForUrl(String url, WebResourceResponse value) {
43 mReturnValuesByUrls.put(url, value);
46 public void setUrlToWaitFor(String url) {
50 public List<String> getUrls() {
51 assert getCallCount() > 0;
52 return mShouldInterceptRequestUrls;
55 public WebResourceResponse getReturnValue(String url) {
56 WebResourceResponse value = mReturnValuesByUrls.get(url);
57 if (value != null) return value;
58 return mResourceResponseReturnValue;
61 public void notifyCalled(String url) {
62 if (mUrlToWaitFor == null || mUrlToWaitFor.equals(url)) {
63 mShouldInterceptRequestUrls.add(url);
69 public class OnLoadStartedHelper extends CallbackHelper {
72 public String getUrl() {
73 assert getCallCount() > 0;
77 public void notifyCalled(String url) {
83 class OnEvaluateJavaScriptResultHelper extends CallbackHelper {
84 private String mJsonResult;
85 public void evaluateJavascript(XWalkView xWalkView, String code) {
86 ValueCallback<String> callback =
87 new ValueCallback<String>() {
89 public void onReceiveValue(String jsonResult) {
90 notifyCalled(jsonResult);
93 xWalkView.evaluateJavascript(code, callback);
97 public boolean hasValue() {
98 return mJsonResult != null;
101 public boolean waitUntilHasValue() throws InterruptedException, TimeoutException {
102 waitUntilCriteria(getHasValueCriteria());
106 public String getJsonResultAndClear() {
108 String result = mJsonResult;
113 public Criteria getHasValueCriteria() {
114 return new Criteria() {
116 public boolean isSatisfied() {
122 public void notifyCalled(String jsonResult) {
124 mJsonResult = jsonResult;
129 private String mChangedTitle;
130 private final OnPageStartedHelper mOnPageStartedHelper;
131 private final OnPageFinishedHelper mOnPageFinishedHelper;
132 private final OnReceivedErrorHelper mOnReceivedErrorHelper;
134 private final OnEvaluateJavaScriptResultHelper mOnEvaluateJavaScriptResultHelper;
136 private final OnTitleUpdatedHelper mOnTitleUpdatedHelper;
137 private final ShouldInterceptLoadRequestHelper mShouldInterceptLoadRequestHelper;
138 private final OnLoadStartedHelper mOnLoadStartedHelper;
140 public TestHelperBridge() {
141 mOnPageStartedHelper = new OnPageStartedHelper();
142 mOnPageFinishedHelper = new OnPageFinishedHelper();
143 mOnReceivedErrorHelper = new OnReceivedErrorHelper();
144 mOnEvaluateJavaScriptResultHelper = new OnEvaluateJavaScriptResultHelper();
145 mOnTitleUpdatedHelper = new OnTitleUpdatedHelper();
146 mShouldInterceptLoadRequestHelper = new ShouldInterceptLoadRequestHelper();
147 mOnLoadStartedHelper = new OnLoadStartedHelper();
150 public OnPageStartedHelper getOnPageStartedHelper() {
151 return mOnPageStartedHelper;
154 public OnPageFinishedHelper getOnPageFinishedHelper() {
155 return mOnPageFinishedHelper;
158 public OnReceivedErrorHelper getOnReceivedErrorHelper() {
159 return mOnReceivedErrorHelper;
162 public OnEvaluateJavaScriptResultHelper getOnEvaluateJavaScriptResultHelper() {
163 return mOnEvaluateJavaScriptResultHelper;
166 public OnTitleUpdatedHelper getOnTitleUpdatedHelper() {
167 return mOnTitleUpdatedHelper;
170 public ShouldInterceptLoadRequestHelper getShouldInterceptLoadRequestHelper() {
171 return mShouldInterceptLoadRequestHelper;
174 public OnLoadStartedHelper getOnLoadStartedHelper() {
175 return mOnLoadStartedHelper;
178 public void onTitleChanged(String title) {
179 mChangedTitle = title;
180 mOnTitleUpdatedHelper.notifyCalled(title);
183 public String getChangedTitle() {
184 return mChangedTitle;
187 public void onPageStarted(String url) {
188 mOnPageStartedHelper.notifyCalled(url);
191 public void onPageFinished(String url) {
192 mOnPageFinishedHelper.notifyCalled(url);
195 public void onReceivedLoadError(int errorCode, String description, String failingUrl) {
196 mOnReceivedErrorHelper.notifyCalled(errorCode, description, failingUrl);
199 public WebResourceResponse shouldInterceptLoadRequest(String url) {
200 WebResourceResponse response = mShouldInterceptLoadRequestHelper.getReturnValue(url);
201 mShouldInterceptLoadRequestHelper.notifyCalled(url);
205 public void onLoadStarted(String url) {
206 mOnLoadStartedHelper.notifyCalled(url);