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.net.Uri;
9 import android.util.Log;
10 import android.view.KeyEvent;
11 import android.webkit.ValueCallback;
12 import android.webkit.WebResourceResponse;
14 import java.util.ArrayList;
15 import java.util.List;
16 import java.util.concurrent.Callable;
17 import java.util.concurrent.ConcurrentHashMap;
18 import java.util.concurrent.CountDownLatch;
19 import java.util.concurrent.TimeoutException;
21 import org.chromium.content.browser.test.util.CallbackHelper;
22 import org.chromium.content.browser.test.util.Criteria;
23 import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageFinishedHelper;
24 import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageStartedHelper;
25 import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnReceivedErrorHelper;
27 import org.xwalk.core.XWalkUIClient.LoadStatus;
28 import org.xwalk.core.XWalkView;
30 class TestHelperBridge {
32 // Two new helper classes for testing new APIs.
33 public class ShouldInterceptLoadRequestHelper extends CallbackHelper {
34 private List<String> mShouldInterceptRequestUrls = new ArrayList<String>();
35 private ConcurrentHashMap<String, WebResourceResponse> mReturnValuesByUrls
36 = new ConcurrentHashMap<String, WebResourceResponse>();
37 // This is read from the IO thread, so needs to be marked volatile.
38 private volatile WebResourceResponse mResourceResponseReturnValue = null;
39 private String mUrlToWaitFor;
41 void setReturnValue(WebResourceResponse value) {
42 mResourceResponseReturnValue = value;
45 void setReturnValueForUrl(String url, WebResourceResponse value) {
46 mReturnValuesByUrls.put(url, value);
49 public void setUrlToWaitFor(String url) {
53 public List<String> getUrls() {
54 assert getCallCount() > 0;
55 return mShouldInterceptRequestUrls;
58 public WebResourceResponse getReturnValue(String url) {
59 WebResourceResponse value = mReturnValuesByUrls.get(url);
60 if (value != null) return value;
61 return mResourceResponseReturnValue;
64 public void notifyCalled(String url) {
65 if (mUrlToWaitFor == null || mUrlToWaitFor.equals(url)) {
66 mShouldInterceptRequestUrls.add(url);
72 public class OnLoadStartedHelper extends CallbackHelper {
75 public String getUrl() {
76 assert getCallCount() > 0;
80 public void notifyCalled(String url) {
86 public class OnProgressChangedHelper extends CallbackHelper {
87 private int mProgress;
89 public int getProgress() {
90 assert getCallCount() > 0;
94 public void notifyCalled(int progress) {
100 class OnEvaluateJavaScriptResultHelper extends CallbackHelper {
101 private String mJsonResult;
102 public void evaluateJavascript(XWalkView xWalkView, String code) {
103 ValueCallback<String> callback =
104 new ValueCallback<String>() {
106 public void onReceiveValue(String jsonResult) {
107 notifyCalled(jsonResult);
110 xWalkView.evaluateJavascript(code, callback);
114 public boolean hasValue() {
115 return mJsonResult != null;
118 public boolean waitUntilHasValue() throws InterruptedException, TimeoutException {
119 waitUntilCriteria(getHasValueCriteria());
123 public String getJsonResultAndClear() {
125 String result = mJsonResult;
130 public Criteria getHasValueCriteria() {
131 return new Criteria() {
133 public boolean isSatisfied() {
139 public void notifyCalled(String jsonResult) {
141 mJsonResult = jsonResult;
146 public class OnJavascriptCloseWindowHelper extends CallbackHelper {
147 private boolean mCalled = false;
149 public boolean getCalled() {
150 assert getCallCount() > 0;
154 public void notifyCalled(boolean called) {
160 public class ShouldOverrideUrlLoadingHelper extends CallbackHelper {
161 private String mShouldOverrideUrlLoadingUrl;
162 private String mPreviousShouldOverrideUrlLoadingUrl;
163 private boolean mShouldOverrideUrlLoadingReturnValue = false;
165 void setShouldOverrideUrlLoadingUrl(String url) {
166 mShouldOverrideUrlLoadingUrl = url;
169 void setPreviousShouldOverrideUrlLoadingUrl(String url) {
170 mPreviousShouldOverrideUrlLoadingUrl = url;
173 void setShouldOverrideUrlLoadingReturnValue(boolean value) {
174 mShouldOverrideUrlLoadingReturnValue = value;
177 public String getShouldOverrideUrlLoadingUrl() {
178 assert getCallCount() > 0;
179 return mShouldOverrideUrlLoadingUrl;
182 public String getPreviousShouldOverrideUrlLoadingUrl() {
183 assert getCallCount() > 1;
184 return mPreviousShouldOverrideUrlLoadingUrl;
187 public boolean getShouldOverrideUrlLoadingReturnValue() {
188 return mShouldOverrideUrlLoadingReturnValue;
191 public void notifyCalled(String url) {
192 mPreviousShouldOverrideUrlLoadingUrl = mShouldOverrideUrlLoadingUrl;
193 mShouldOverrideUrlLoadingUrl = url;
198 public class OnScaleChangedHelper extends CallbackHelper {
199 private float mScale;
201 public float getScale() {
202 assert getCallCount() > 0;
206 public void notifyCalled(float scale) {
212 public class OnRequestFocusHelper extends CallbackHelper {
213 private boolean mCalled = false;
215 public boolean getCalled() {
216 assert getCallCount() > 0;
220 public void notifyCalled(boolean called) {
226 public class OnJavascriptModalDialogHelper extends CallbackHelper {
227 private String mMessage;
229 public String getMessage() {
230 assert getCallCount() > 0;
234 public void notifyCalled(String message) {
240 public class OpenFileChooserHelper extends CallbackHelper {
241 private ValueCallback<Uri> mCallback;
243 public ValueCallback<Uri> getCallback() {
244 assert getCallCount() > 0;
248 public void notifyCalled(ValueCallback<Uri> callback) {
249 mCallback = callback;
254 public class OnFullscreenToggledHelper extends CallbackHelper {
255 private boolean mEnterFullscreen = false;
257 public boolean getEnterFullscreen() {
258 assert getCallCount() > 0;
259 return mEnterFullscreen;
262 public void notifyCalled(boolean enterFullscreen) {
263 mEnterFullscreen = enterFullscreen;
268 public class OverrideOrUnhandledKeyEventHelper extends CallbackHelper {
269 private KeyEvent mEvent;
271 public KeyEvent getKeyEvent() {
272 assert getCallCount() > 0;
276 public void notifyCalled(KeyEvent event) {
282 private String mChangedTitle;
283 private LoadStatus mLoadStatus;
284 private final OnPageStartedHelper mOnPageStartedHelper;
285 private final OnPageFinishedHelper mOnPageFinishedHelper;
286 private final OnReceivedErrorHelper mOnReceivedErrorHelper;
288 private final OnEvaluateJavaScriptResultHelper mOnEvaluateJavaScriptResultHelper;
290 private final OnTitleUpdatedHelper mOnTitleUpdatedHelper;
291 private final ShouldInterceptLoadRequestHelper mShouldInterceptLoadRequestHelper;
292 private final OnLoadStartedHelper mOnLoadStartedHelper;
293 private final OnJavascriptCloseWindowHelper mOnJavascriptCloseWindowHelper;
294 private final OnProgressChangedHelper mOnProgressChangedHelper;
295 private final ShouldOverrideUrlLoadingHelper mShouldOverrideUrlLoadingHelper;
296 private final OnScaleChangedHelper mOnScaleChangedHelper;
297 private final OnRequestFocusHelper mOnRequestFocusHelper;
298 private final OnJavascriptModalDialogHelper mOnJavascriptModalDialogHelper;
299 private final OpenFileChooserHelper mOpenFileChooserHelper;
300 private final OnFullscreenToggledHelper mOnFullscreenToggledHelper;
301 private final OverrideOrUnhandledKeyEventHelper mOverrideOrUnhandledKeyEventHelper;
303 public TestHelperBridge() {
304 mOnPageStartedHelper = new OnPageStartedHelper();
305 mOnPageFinishedHelper = new OnPageFinishedHelper();
306 mOnReceivedErrorHelper = new OnReceivedErrorHelper();
307 mOnEvaluateJavaScriptResultHelper = new OnEvaluateJavaScriptResultHelper();
308 mOnTitleUpdatedHelper = new OnTitleUpdatedHelper();
309 mShouldInterceptLoadRequestHelper = new ShouldInterceptLoadRequestHelper();
310 mOnLoadStartedHelper = new OnLoadStartedHelper();
311 mOnJavascriptCloseWindowHelper = new OnJavascriptCloseWindowHelper();
312 mOnProgressChangedHelper = new OnProgressChangedHelper();
313 mShouldOverrideUrlLoadingHelper = new ShouldOverrideUrlLoadingHelper();
314 mOnScaleChangedHelper = new OnScaleChangedHelper();
315 mOnRequestFocusHelper = new OnRequestFocusHelper();
316 mOnJavascriptModalDialogHelper = new OnJavascriptModalDialogHelper();
317 mOpenFileChooserHelper = new OpenFileChooserHelper();
318 mOnFullscreenToggledHelper = new OnFullscreenToggledHelper();
319 mOverrideOrUnhandledKeyEventHelper = new OverrideOrUnhandledKeyEventHelper();
322 public OnPageStartedHelper getOnPageStartedHelper() {
323 return mOnPageStartedHelper;
326 public OnPageFinishedHelper getOnPageFinishedHelper() {
327 return mOnPageFinishedHelper;
330 public OnReceivedErrorHelper getOnReceivedErrorHelper() {
331 return mOnReceivedErrorHelper;
334 public OnEvaluateJavaScriptResultHelper getOnEvaluateJavaScriptResultHelper() {
335 return mOnEvaluateJavaScriptResultHelper;
338 public OnTitleUpdatedHelper getOnTitleUpdatedHelper() {
339 return mOnTitleUpdatedHelper;
342 public ShouldInterceptLoadRequestHelper getShouldInterceptLoadRequestHelper() {
343 return mShouldInterceptLoadRequestHelper;
346 public OnLoadStartedHelper getOnLoadStartedHelper() {
347 return mOnLoadStartedHelper;
350 public OnJavascriptCloseWindowHelper getOnJavascriptCloseWindowHelper() {
351 return mOnJavascriptCloseWindowHelper;
354 public OnProgressChangedHelper getOnProgressChangedHelper() {
355 return mOnProgressChangedHelper;
358 public ShouldOverrideUrlLoadingHelper getShouldOverrideUrlLoadingHelper() {
359 return mShouldOverrideUrlLoadingHelper;
362 public OnScaleChangedHelper getOnScaleChangedHelper() {
363 return mOnScaleChangedHelper;
366 public OnRequestFocusHelper getOnRequestFocusHelper() {
367 return mOnRequestFocusHelper;
370 public OnJavascriptModalDialogHelper getOnJavascriptModalDialogHelper() {
371 return mOnJavascriptModalDialogHelper;
374 public OpenFileChooserHelper getOpenFileChooserHelper() {
375 return mOpenFileChooserHelper;
378 public OnFullscreenToggledHelper getOnFullscreenToggledHelper() {
379 return mOnFullscreenToggledHelper;
382 public OverrideOrUnhandledKeyEventHelper getOverrideOrUnhandledKeyEventHelper() {
383 return mOverrideOrUnhandledKeyEventHelper;
386 public void onTitleChanged(String title) {
387 mChangedTitle = title;
388 mOnTitleUpdatedHelper.notifyCalled(title);
391 public String getChangedTitle() {
392 return mChangedTitle;
395 public void onPageStarted(String url) {
396 mOnPageStartedHelper.notifyCalled(url);
399 public void onPageFinished(String url, LoadStatus status) {
400 mLoadStatus = status;
401 mOnPageFinishedHelper.notifyCalled(url);
404 public LoadStatus getLoadStatus() {
408 public void onReceivedLoadError(int errorCode, String description, String failingUrl) {
409 mOnReceivedErrorHelper.notifyCalled(errorCode, description, failingUrl);
412 public WebResourceResponse shouldInterceptLoadRequest(String url) {
413 WebResourceResponse response = mShouldInterceptLoadRequestHelper.getReturnValue(url);
414 mShouldInterceptLoadRequestHelper.notifyCalled(url);
418 public void onLoadStarted(String url) {
419 mOnLoadStartedHelper.notifyCalled(url);
422 public void onJavascriptCloseWindow() {
423 mOnJavascriptCloseWindowHelper.notifyCalled(true);
426 public void onProgressChanged(int progress) {
427 mOnProgressChangedHelper.notifyCalled(progress);
430 public boolean shouldOverrideUrlLoading(String url) {
431 boolean returnValue =
432 mShouldOverrideUrlLoadingHelper.getShouldOverrideUrlLoadingReturnValue();
433 mShouldOverrideUrlLoadingHelper.notifyCalled(url);
437 public void onScaleChanged(float scale) {
438 mOnScaleChangedHelper.notifyCalled(scale);
441 public void onRequestFocus() {
442 mOnRequestFocusHelper.notifyCalled(true);
445 public boolean onJavascriptModalDialog(String message) {
446 mOnJavascriptModalDialogHelper.notifyCalled(message);
450 public void openFileChooser(ValueCallback<Uri> uploadFile) {
451 mOpenFileChooserHelper.notifyCalled(uploadFile);
454 public void onFullscreenToggled(boolean enterFullscreen) {
455 mOnFullscreenToggledHelper.notifyCalled(enterFullscreen);
458 public boolean overrideOrUnhandledKeyEvent(KeyEvent event) {
459 mOverrideOrUnhandledKeyEventHelper.notifyCalled(event);