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 public class OnProgressChangedHelper extends CallbackHelper {
84 private int mProgress;
86 public int getProgress() {
87 assert getCallCount() > 0;
91 public void notifyCalled(int progress) {
97 class OnEvaluateJavaScriptResultHelper extends CallbackHelper {
98 private String mJsonResult;
99 public void evaluateJavascript(XWalkView xWalkView, String code) {
100 ValueCallback<String> callback =
101 new ValueCallback<String>() {
103 public void onReceiveValue(String jsonResult) {
104 notifyCalled(jsonResult);
107 xWalkView.evaluateJavascript(code, callback);
111 public boolean hasValue() {
112 return mJsonResult != null;
115 public boolean waitUntilHasValue() throws InterruptedException, TimeoutException {
116 waitUntilCriteria(getHasValueCriteria());
120 public String getJsonResultAndClear() {
122 String result = mJsonResult;
127 public Criteria getHasValueCriteria() {
128 return new Criteria() {
130 public boolean isSatisfied() {
136 public void notifyCalled(String jsonResult) {
138 mJsonResult = jsonResult;
143 public class OnJavascriptCloseWindowHelper extends CallbackHelper {
144 private boolean mCalled = false;
146 public boolean getCalled() {
147 assert getCallCount() > 0;
151 public void notifyCalled(boolean called) {
157 private String mChangedTitle;
158 private final OnPageStartedHelper mOnPageStartedHelper;
159 private final OnPageFinishedHelper mOnPageFinishedHelper;
160 private final OnReceivedErrorHelper mOnReceivedErrorHelper;
162 private final OnEvaluateJavaScriptResultHelper mOnEvaluateJavaScriptResultHelper;
164 private final OnTitleUpdatedHelper mOnTitleUpdatedHelper;
165 private final ShouldInterceptLoadRequestHelper mShouldInterceptLoadRequestHelper;
166 private final OnLoadStartedHelper mOnLoadStartedHelper;
167 private final OnJavascriptCloseWindowHelper mOnJavascriptCloseWindowHelper;
168 private final OnProgressChangedHelper mOnProgressChangedHelper;
170 public TestHelperBridge() {
171 mOnPageStartedHelper = new OnPageStartedHelper();
172 mOnPageFinishedHelper = new OnPageFinishedHelper();
173 mOnReceivedErrorHelper = new OnReceivedErrorHelper();
174 mOnEvaluateJavaScriptResultHelper = new OnEvaluateJavaScriptResultHelper();
175 mOnTitleUpdatedHelper = new OnTitleUpdatedHelper();
176 mShouldInterceptLoadRequestHelper = new ShouldInterceptLoadRequestHelper();
177 mOnLoadStartedHelper = new OnLoadStartedHelper();
178 mOnJavascriptCloseWindowHelper = new OnJavascriptCloseWindowHelper();
179 mOnProgressChangedHelper = new OnProgressChangedHelper();
182 public OnPageStartedHelper getOnPageStartedHelper() {
183 return mOnPageStartedHelper;
186 public OnPageFinishedHelper getOnPageFinishedHelper() {
187 return mOnPageFinishedHelper;
190 public OnReceivedErrorHelper getOnReceivedErrorHelper() {
191 return mOnReceivedErrorHelper;
194 public OnEvaluateJavaScriptResultHelper getOnEvaluateJavaScriptResultHelper() {
195 return mOnEvaluateJavaScriptResultHelper;
198 public OnTitleUpdatedHelper getOnTitleUpdatedHelper() {
199 return mOnTitleUpdatedHelper;
202 public ShouldInterceptLoadRequestHelper getShouldInterceptLoadRequestHelper() {
203 return mShouldInterceptLoadRequestHelper;
206 public OnLoadStartedHelper getOnLoadStartedHelper() {
207 return mOnLoadStartedHelper;
210 public OnJavascriptCloseWindowHelper getOnJavascriptCloseWindowHelper() {
211 return mOnJavascriptCloseWindowHelper;
214 public OnProgressChangedHelper getOnProgressChangedHelper() {
215 return mOnProgressChangedHelper;
218 public void onTitleChanged(String title) {
219 mChangedTitle = title;
220 mOnTitleUpdatedHelper.notifyCalled(title);
223 public String getChangedTitle() {
224 return mChangedTitle;
227 public void onPageStarted(String url) {
228 mOnPageStartedHelper.notifyCalled(url);
231 public void onPageFinished(String url) {
232 mOnPageFinishedHelper.notifyCalled(url);
235 public void onReceivedLoadError(int errorCode, String description, String failingUrl) {
236 mOnReceivedErrorHelper.notifyCalled(errorCode, description, failingUrl);
239 public WebResourceResponse shouldInterceptLoadRequest(String url) {
240 WebResourceResponse response = mShouldInterceptLoadRequestHelper.getReturnValue(url);
241 mShouldInterceptLoadRequestHelper.notifyCalled(url);
245 public void onLoadStarted(String url) {
246 mOnLoadStartedHelper.notifyCalled(url);
249 public void onJavascriptCloseWindow() {
250 mOnJavascriptCloseWindowHelper.notifyCalled(true);
253 public void onProgressChanged(int progress) {
254 mOnProgressChangedHelper.notifyCalled(progress);