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 public class ShouldOverrideUrlLoadingHelper extends CallbackHelper {
158 private String mShouldOverrideUrlLoadingUrl;
159 private String mPreviousShouldOverrideUrlLoadingUrl;
160 private boolean mShouldOverrideUrlLoadingReturnValue = false;
162 void setShouldOverrideUrlLoadingUrl(String url) {
163 mShouldOverrideUrlLoadingUrl = url;
166 void setPreviousShouldOverrideUrlLoadingUrl(String url) {
167 mPreviousShouldOverrideUrlLoadingUrl = url;
170 void setShouldOverrideUrlLoadingReturnValue(boolean value) {
171 mShouldOverrideUrlLoadingReturnValue = value;
174 public String getShouldOverrideUrlLoadingUrl() {
175 assert getCallCount() > 0;
176 return mShouldOverrideUrlLoadingUrl;
179 public String getPreviousShouldOverrideUrlLoadingUrl() {
180 assert getCallCount() > 1;
181 return mPreviousShouldOverrideUrlLoadingUrl;
184 public boolean getShouldOverrideUrlLoadingReturnValue() {
185 return mShouldOverrideUrlLoadingReturnValue;
188 public void notifyCalled(String url) {
189 mPreviousShouldOverrideUrlLoadingUrl = mShouldOverrideUrlLoadingUrl;
190 mShouldOverrideUrlLoadingUrl = url;
195 private String mChangedTitle;
196 private final OnPageStartedHelper mOnPageStartedHelper;
197 private final OnPageFinishedHelper mOnPageFinishedHelper;
198 private final OnReceivedErrorHelper mOnReceivedErrorHelper;
200 private final OnEvaluateJavaScriptResultHelper mOnEvaluateJavaScriptResultHelper;
202 private final OnTitleUpdatedHelper mOnTitleUpdatedHelper;
203 private final ShouldInterceptLoadRequestHelper mShouldInterceptLoadRequestHelper;
204 private final OnLoadStartedHelper mOnLoadStartedHelper;
205 private final OnJavascriptCloseWindowHelper mOnJavascriptCloseWindowHelper;
206 private final OnProgressChangedHelper mOnProgressChangedHelper;
207 private final ShouldOverrideUrlLoadingHelper mShouldOverrideUrlLoadingHelper;
209 public TestHelperBridge() {
210 mOnPageStartedHelper = new OnPageStartedHelper();
211 mOnPageFinishedHelper = new OnPageFinishedHelper();
212 mOnReceivedErrorHelper = new OnReceivedErrorHelper();
213 mOnEvaluateJavaScriptResultHelper = new OnEvaluateJavaScriptResultHelper();
214 mOnTitleUpdatedHelper = new OnTitleUpdatedHelper();
215 mShouldInterceptLoadRequestHelper = new ShouldInterceptLoadRequestHelper();
216 mOnLoadStartedHelper = new OnLoadStartedHelper();
217 mOnJavascriptCloseWindowHelper = new OnJavascriptCloseWindowHelper();
218 mOnProgressChangedHelper = new OnProgressChangedHelper();
219 mShouldOverrideUrlLoadingHelper = new ShouldOverrideUrlLoadingHelper();
222 public OnPageStartedHelper getOnPageStartedHelper() {
223 return mOnPageStartedHelper;
226 public OnPageFinishedHelper getOnPageFinishedHelper() {
227 return mOnPageFinishedHelper;
230 public OnReceivedErrorHelper getOnReceivedErrorHelper() {
231 return mOnReceivedErrorHelper;
234 public OnEvaluateJavaScriptResultHelper getOnEvaluateJavaScriptResultHelper() {
235 return mOnEvaluateJavaScriptResultHelper;
238 public OnTitleUpdatedHelper getOnTitleUpdatedHelper() {
239 return mOnTitleUpdatedHelper;
242 public ShouldInterceptLoadRequestHelper getShouldInterceptLoadRequestHelper() {
243 return mShouldInterceptLoadRequestHelper;
246 public OnLoadStartedHelper getOnLoadStartedHelper() {
247 return mOnLoadStartedHelper;
250 public OnJavascriptCloseWindowHelper getOnJavascriptCloseWindowHelper() {
251 return mOnJavascriptCloseWindowHelper;
254 public OnProgressChangedHelper getOnProgressChangedHelper() {
255 return mOnProgressChangedHelper;
258 public ShouldOverrideUrlLoadingHelper getShouldOverrideUrlLoadingHelper() {
259 return mShouldOverrideUrlLoadingHelper;
262 public void onTitleChanged(String title) {
263 mChangedTitle = title;
264 mOnTitleUpdatedHelper.notifyCalled(title);
267 public String getChangedTitle() {
268 return mChangedTitle;
271 public void onPageStarted(String url) {
272 mOnPageStartedHelper.notifyCalled(url);
275 public void onPageFinished(String url) {
276 mOnPageFinishedHelper.notifyCalled(url);
279 public void onReceivedLoadError(int errorCode, String description, String failingUrl) {
280 mOnReceivedErrorHelper.notifyCalled(errorCode, description, failingUrl);
283 public WebResourceResponse shouldInterceptLoadRequest(String url) {
284 WebResourceResponse response = mShouldInterceptLoadRequestHelper.getReturnValue(url);
285 mShouldInterceptLoadRequestHelper.notifyCalled(url);
289 public void onLoadStarted(String url) {
290 mOnLoadStartedHelper.notifyCalled(url);
293 public void onJavascriptCloseWindow() {
294 mOnJavascriptCloseWindowHelper.notifyCalled(true);
297 public void onProgressChanged(int progress) {
298 mOnProgressChangedHelper.notifyCalled(progress);
301 public boolean shouldOverrideUrlLoading(String url) {
302 boolean returnValue =
303 mShouldOverrideUrlLoadingHelper.getShouldOverrideUrlLoadingReturnValue();
304 mShouldOverrideUrlLoadingHelper.notifyCalled(url);