Upstream version 9.38.204.0
[platform/framework/web/crosswalk.git] / src / xwalk / test / android / core / javatests / src / org / xwalk / core / xwview / test / TestHelperBridge.java
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.
5
6 package org.xwalk.core.xwview.test;
7
8 import android.util.Log;
9 import android.webkit.ValueCallback;
10 import android.webkit.WebResourceResponse;
11
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;
18
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;
24
25 import org.xwalk.core.XWalkView;
26
27 class TestHelperBridge {
28
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;
37
38         void setReturnValue(WebResourceResponse value) {
39             mResourceResponseReturnValue = value;
40         }
41
42         void setReturnValueForUrl(String url, WebResourceResponse value) {
43             mReturnValuesByUrls.put(url, value);
44         }
45
46         public void setUrlToWaitFor(String url) {
47             mUrlToWaitFor = url;
48         }
49
50         public List<String> getUrls() {
51             assert getCallCount() > 0;
52             return mShouldInterceptRequestUrls;
53         }
54
55         public WebResourceResponse getReturnValue(String url) {
56             WebResourceResponse value = mReturnValuesByUrls.get(url);
57             if (value != null) return value;
58             return mResourceResponseReturnValue;
59         }
60
61         public void notifyCalled(String url) {
62             if (mUrlToWaitFor == null || mUrlToWaitFor.equals(url)) {
63                 mShouldInterceptRequestUrls.add(url);
64                 notifyCalled();
65             }
66         }
67     }
68
69     public class OnLoadStartedHelper extends CallbackHelper {
70         private String mUrl;
71
72         public String getUrl() {
73             assert getCallCount() > 0;
74             return mUrl;
75         }
76
77         public void notifyCalled(String url) {
78             mUrl = url;
79             notifyCalled();
80         }
81     }
82
83     public class OnProgressChangedHelper extends CallbackHelper {
84         private int mProgress;
85
86         public int getProgress() {
87             assert getCallCount() > 0;
88             return mProgress;
89         }
90
91         public void notifyCalled(int progress) {
92             mProgress = progress;
93             notifyCalled();
94         }
95     }
96
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>() {
102                     @Override
103                     public void onReceiveValue(String jsonResult) {
104                         notifyCalled(jsonResult);
105                     }
106                 };
107             xWalkView.evaluateJavascript(code, callback);
108             mJsonResult = null;
109         }
110
111         public boolean hasValue() {
112             return mJsonResult != null;
113         }
114
115         public boolean waitUntilHasValue() throws InterruptedException, TimeoutException {
116             waitUntilCriteria(getHasValueCriteria());
117             return hasValue();
118         }
119
120         public String getJsonResultAndClear() {
121             assert hasValue();
122             String result = mJsonResult;
123             mJsonResult = null;
124             return result;
125         }
126
127         public Criteria getHasValueCriteria() {
128             return new Criteria() {
129                 @Override
130                 public boolean isSatisfied() {
131                     return hasValue();
132                 }
133             };
134         }
135
136         public void notifyCalled(String jsonResult) {
137             assert !hasValue();
138             mJsonResult = jsonResult;
139             notifyCalled();
140         }
141     }
142
143     public class OnJavascriptCloseWindowHelper extends CallbackHelper {
144         private boolean mCalled = false;
145
146         public boolean getCalled() {
147             assert getCallCount() > 0;
148             return mCalled;
149         }
150
151         public void notifyCalled(boolean called) {
152             mCalled = called;
153             notifyCalled();
154         }
155     }
156
157     public class ShouldOverrideUrlLoadingHelper extends CallbackHelper {
158         private String mShouldOverrideUrlLoadingUrl;
159         private String mPreviousShouldOverrideUrlLoadingUrl;
160         private boolean mShouldOverrideUrlLoadingReturnValue = false;
161
162         void setShouldOverrideUrlLoadingUrl(String url) {
163             mShouldOverrideUrlLoadingUrl = url;
164         }
165
166         void setPreviousShouldOverrideUrlLoadingUrl(String url) {
167             mPreviousShouldOverrideUrlLoadingUrl = url;
168         }
169
170         void setShouldOverrideUrlLoadingReturnValue(boolean value) {
171             mShouldOverrideUrlLoadingReturnValue = value;
172         }
173
174         public String getShouldOverrideUrlLoadingUrl() {
175             assert getCallCount() > 0;
176             return mShouldOverrideUrlLoadingUrl;
177         }
178
179         public String getPreviousShouldOverrideUrlLoadingUrl() {
180             assert getCallCount() > 1;
181             return mPreviousShouldOverrideUrlLoadingUrl;
182         }
183
184         public boolean getShouldOverrideUrlLoadingReturnValue() {
185             return mShouldOverrideUrlLoadingReturnValue;
186         }
187
188         public void notifyCalled(String url) {
189             mPreviousShouldOverrideUrlLoadingUrl = mShouldOverrideUrlLoadingUrl;
190             mShouldOverrideUrlLoadingUrl = url;
191             notifyCalled();
192         }
193     }
194
195     public class OnScaleChangedHelper extends CallbackHelper {
196         private float mScale;
197
198         public float getScale() {
199             assert getCallCount() > 0;
200             return mScale;
201         }
202
203         public void notifyCalled(float scale) {
204             mScale = scale;
205             notifyCalled();
206         }
207     }
208
209     public class OnRequestFocusHelper extends CallbackHelper {
210         private boolean mCalled = false;
211
212         public boolean getCalled() {
213             assert getCallCount() > 0;
214             return mCalled;
215         }
216
217         public void notifyCalled(boolean called) {
218             mCalled = called;
219             notifyCalled();
220         }
221     }
222
223     private String mChangedTitle;
224     private final OnPageStartedHelper mOnPageStartedHelper;
225     private final OnPageFinishedHelper mOnPageFinishedHelper;
226     private final OnReceivedErrorHelper mOnReceivedErrorHelper;
227
228     private final OnEvaluateJavaScriptResultHelper mOnEvaluateJavaScriptResultHelper;
229
230     private final OnTitleUpdatedHelper mOnTitleUpdatedHelper;
231     private final ShouldInterceptLoadRequestHelper mShouldInterceptLoadRequestHelper;
232     private final OnLoadStartedHelper mOnLoadStartedHelper;
233     private final OnJavascriptCloseWindowHelper mOnJavascriptCloseWindowHelper;
234     private final OnProgressChangedHelper mOnProgressChangedHelper;
235     private final ShouldOverrideUrlLoadingHelper mShouldOverrideUrlLoadingHelper;
236     private final OnScaleChangedHelper mOnScaleChangedHelper;
237     private final OnRequestFocusHelper mOnRequestFocusHelper;
238
239     public TestHelperBridge() {
240         mOnPageStartedHelper = new OnPageStartedHelper();
241         mOnPageFinishedHelper = new OnPageFinishedHelper();
242         mOnReceivedErrorHelper = new OnReceivedErrorHelper();
243         mOnEvaluateJavaScriptResultHelper = new OnEvaluateJavaScriptResultHelper();
244         mOnTitleUpdatedHelper = new OnTitleUpdatedHelper();
245         mShouldInterceptLoadRequestHelper = new ShouldInterceptLoadRequestHelper();
246         mOnLoadStartedHelper = new OnLoadStartedHelper();
247         mOnJavascriptCloseWindowHelper = new OnJavascriptCloseWindowHelper();
248         mOnProgressChangedHelper = new OnProgressChangedHelper();
249         mShouldOverrideUrlLoadingHelper = new ShouldOverrideUrlLoadingHelper();
250         mOnScaleChangedHelper = new OnScaleChangedHelper();
251         mOnRequestFocusHelper = new OnRequestFocusHelper();
252     }
253
254     public OnPageStartedHelper getOnPageStartedHelper() {
255         return mOnPageStartedHelper;
256     }
257
258     public OnPageFinishedHelper getOnPageFinishedHelper() {
259         return mOnPageFinishedHelper;
260     }
261
262     public OnReceivedErrorHelper getOnReceivedErrorHelper() {
263         return mOnReceivedErrorHelper;
264     }
265
266     public OnEvaluateJavaScriptResultHelper getOnEvaluateJavaScriptResultHelper() {
267         return mOnEvaluateJavaScriptResultHelper;
268     }
269
270     public OnTitleUpdatedHelper getOnTitleUpdatedHelper() {
271         return mOnTitleUpdatedHelper;
272     }
273
274     public ShouldInterceptLoadRequestHelper getShouldInterceptLoadRequestHelper() {
275         return mShouldInterceptLoadRequestHelper;
276     }
277
278     public OnLoadStartedHelper getOnLoadStartedHelper() {
279         return mOnLoadStartedHelper;
280     }
281
282     public OnJavascriptCloseWindowHelper getOnJavascriptCloseWindowHelper() {
283         return mOnJavascriptCloseWindowHelper;
284     }
285
286     public OnProgressChangedHelper getOnProgressChangedHelper() {
287         return mOnProgressChangedHelper;
288     }
289
290     public ShouldOverrideUrlLoadingHelper getShouldOverrideUrlLoadingHelper() {
291         return mShouldOverrideUrlLoadingHelper;
292     }
293
294     public OnScaleChangedHelper getOnScaleChangedHelper() {
295         return mOnScaleChangedHelper;
296     }
297
298     public OnRequestFocusHelper getOnRequestFocusHelper() {
299         return mOnRequestFocusHelper;
300     }
301
302     public void onTitleChanged(String title) {
303         mChangedTitle = title;
304         mOnTitleUpdatedHelper.notifyCalled(title);
305     }
306
307     public String getChangedTitle() {
308         return mChangedTitle;
309     }
310
311     public void onPageStarted(String url) {
312         mOnPageStartedHelper.notifyCalled(url);
313     }
314
315     public void onPageFinished(String url) {
316         mOnPageFinishedHelper.notifyCalled(url);
317     }
318
319     public void onReceivedLoadError(int errorCode, String description, String failingUrl) {
320         mOnReceivedErrorHelper.notifyCalled(errorCode, description, failingUrl);
321     }
322
323     public WebResourceResponse shouldInterceptLoadRequest(String url) {
324         WebResourceResponse response = mShouldInterceptLoadRequestHelper.getReturnValue(url);
325         mShouldInterceptLoadRequestHelper.notifyCalled(url);
326         return response;
327     }
328
329     public void onLoadStarted(String url) {
330         mOnLoadStartedHelper.notifyCalled(url);
331     }
332
333     public void onJavascriptCloseWindow() {
334         mOnJavascriptCloseWindowHelper.notifyCalled(true);
335     }
336
337     public void onProgressChanged(int progress) {
338         mOnProgressChangedHelper.notifyCalled(progress);
339     }
340
341     public boolean shouldOverrideUrlLoading(String url) {
342         boolean returnValue =
343             mShouldOverrideUrlLoadingHelper.getShouldOverrideUrlLoadingReturnValue();
344         mShouldOverrideUrlLoadingHelper.notifyCalled(url);
345         return returnValue;
346     }
347
348     public void onScaleChanged(float scale) {
349         mOnScaleChangedHelper.notifyCalled(scale);
350     }
351
352     public void onRequestFocus() {
353         mOnRequestFocusHelper.notifyCalled(true);
354     }
355 }