Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / xwalk / test / android / core / javatests / src / org / xwalk / core / xwview / test / XWalkViewTestBase.java
index 301db86..bcd22b0 100644 (file)
@@ -1,5 +1,5 @@
 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Copyright (c) 2013 Intel Corporation. All rights reserved.
+// Copyright (c) 2013-2014 Intel Corporation. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -7,7 +7,12 @@ package org.xwalk.core.xwview.test;
 
 import android.app.Activity;
 import android.content.Context;
+import android.net.Uri;
 import android.test.ActivityInstrumentationTestCase2;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.webkit.ValueCallback;
+import android.webkit.WebResourceResponse;
 
 import java.io.InputStream;
 import java.io.IOException;
@@ -18,55 +23,152 @@ import java.util.concurrent.TimeUnit;
 
 import junit.framework.Assert;
 
-import org.chromium.content.browser.LoadUrlParams;
+import org.chromium.content_public.browser.LoadUrlParams;
 import org.chromium.content.browser.test.util.CallbackHelper;
 import org.chromium.content.browser.test.util.Criteria;
 import org.chromium.content.browser.test.util.CriteriaHelper;
-import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper;
-import org.xwalk.core.XWalkClient;
-import org.xwalk.core.XWalkContent;
-import org.xwalk.core.XWalkContentsClient;
-import org.xwalk.core.XWalkSettings;
+
+import org.xwalk.core.XWalkJavascriptResult;
+import org.xwalk.core.XWalkNavigationHistory;
+import org.xwalk.core.XWalkNavigationItem;
+import org.xwalk.core.XWalkResourceClient;
+import org.xwalk.core.XWalkUIClient;
 import org.xwalk.core.XWalkView;
-import org.xwalk.core.XWalkWebChromeClient;
 
 public class XWalkViewTestBase
        extends ActivityInstrumentationTestCase2<XWalkViewTestRunnerActivity> {
     protected final static int WAIT_TIMEOUT_SECONDS = 15;
+    protected final static long WAIT_TIMEOUT_MS = 2000;
+    private final static int CHECK_INTERVAL = 100;
+    private final static String TAG = "XWalkViewTestBase";
     private XWalkView mXWalkView;
-    final TestXWalkViewContentsClient mTestContentsClient = new TestXWalkViewContentsClient();
-
-    static class ViewPair {
-        private final XWalkContent content0;
-        private final TestXWalkViewContentsClient client0;
-        private final XWalkContent content1;
-        private final TestXWalkViewContentsClient client1;
-
-        ViewPair(XWalkContent content0, TestXWalkViewContentsClient client0,
-                XWalkContent content1, TestXWalkViewContentsClient client1) {
-            this.content0 = content0;
-            this.client0 = client0;
-            this.content1 = content1;
-            this.client1 = client1;
+    final TestHelperBridge mTestHelperBridge = new TestHelperBridge();
+
+    class TestXWalkUIClientBase extends XWalkUIClient {
+        TestHelperBridge mInnerContentsClient;
+        public TestXWalkUIClientBase(TestHelperBridge client) {
+            super(getXWalkView());
+            mInnerContentsClient = client;
+        }
+
+        @Override
+        public void onPageLoadStarted(XWalkView view, String url) {
+            mInnerContentsClient.onPageStarted(url);
+        }
+
+        @Override
+        public void onPageLoadStopped(XWalkView view, String url, LoadStatus status) {
+            mInnerContentsClient.onPageFinished(url, status);
+        }
+
+        @Override
+        public void onReceivedTitle(XWalkView view, String title) {
+            mInnerContentsClient.onTitleChanged(title);
+        }
+
+        @Override
+        public void onJavascriptCloseWindow(XWalkView view) {
+            mInnerContentsClient.onJavascriptCloseWindow();
+        }
+
+        @Override
+        public void onScaleChanged(XWalkView view, float oldScale, float newScale) {
+            mInnerContentsClient.onScaleChanged(newScale);
+        }
+
+        @Override
+        public void onRequestFocus(XWalkView view) {
+            mInnerContentsClient.onRequestFocus();
+        }
+
+        @Override
+        public boolean onJavascriptModalDialog(XWalkView view,
+                XWalkUIClient.JavascriptMessageType type, String url, String message,
+                        String defaultValue, XWalkJavascriptResult result) {
+            return mInnerContentsClient.onJavascriptModalDialog(message);
+        }
+
+        @Override
+        public void openFileChooser(XWalkView view, ValueCallback<Uri> uploadFile,
+                String acceptType, String capture) {
+            mInnerContentsClient.openFileChooser(uploadFile);
+        }
+
+        @Override
+        public void onFullscreenToggled(XWalkView view, boolean enterFullscreen) {
+            mInnerContentsClient.onFullscreenToggled(enterFullscreen);
+        }
+
+        @Override
+        public boolean shouldOverrideKeyEvent(XWalkView view, KeyEvent event) {
+            return mInnerContentsClient.overrideOrUnhandledKeyEvent(event);
+        }
+    }
+
+    class TestXWalkUIClient extends TestXWalkUIClientBase {
+        public TestXWalkUIClient() {
+            super(mTestHelperBridge);
         }
+    }
 
-        XWalkContent getContent0() {
-            return content0;
+    class TestXWalkResourceClientBase extends XWalkResourceClient {
+        TestHelperBridge mInnerContentsClient;
+        public TestXWalkResourceClientBase(TestHelperBridge client) {
+            super(mXWalkView);
+            mInnerContentsClient = client;
         }
 
-        TestXWalkViewContentsClient getClient0() {
-            return client0;
+        @Override
+        public void onLoadStarted(XWalkView view, String url) {
+            mInnerContentsClient.onLoadStarted(url);
         }
 
-        XWalkContent getContent1() {
-            return content1;
+        @Override
+        public void onReceivedLoadError(XWalkView view, int errorCode, String description, String failingUrl) {
+            mInnerContentsClient.onReceivedLoadError(errorCode, description, failingUrl);
         }
 
-        TestXWalkViewContentsClient getClient1() {
-            return client1;
+        @Override
+        public WebResourceResponse shouldInterceptLoadRequest(XWalkView view,
+                String url) {
+            return mInnerContentsClient.shouldInterceptLoadRequest(url);
+        }
+
+        @Override
+        public void onProgressChanged(XWalkView view, int progressInPercent) {
+            mTestHelperBridge.onProgressChanged(progressInPercent);
+        }
+
+        @Override
+        public boolean shouldOverrideUrlLoading(XWalkView view, String url) {
+            return mTestHelperBridge.shouldOverrideUrlLoading(url);
         }
     }
 
+    class TestXWalkResourceClient extends TestXWalkResourceClientBase {
+        public TestXWalkResourceClient() {
+            super(mTestHelperBridge);
+        }
+    }
+
+    void setUIClient(final XWalkUIClient client) {
+        getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                getXWalkView().setUIClient(client);
+            }
+        });
+    }
+
+    void setResourceClient(final XWalkResourceClient client) {
+        getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                getXWalkView().setResourceClient(client);
+            }
+        });
+    }
+
     public XWalkViewTestBase() {
         super(XWalkViewTestRunnerActivity.class);
     }
@@ -82,7 +184,9 @@ public class XWalkViewTestBase
             public void run() {
                 mXWalkView = new XWalkView(activity, activity);
                 getActivity().addView(mXWalkView);
-                mXWalkView.getXWalkViewContentForTest().installWebContentsObserverForTest(mTestContentsClient);
+                mXWalkView.setUIClient(new TestXWalkUIClient());
+                mXWalkView.setResourceClient(new TestXWalkResourceClient());
+                // mXWalkView.getXWalkViewContentForTest().installWebContentsObserverForTest(mTestHelperBridge);
             }
         });
     }
@@ -100,8 +204,16 @@ public class XWalkViewTestBase
         });
     }
 
+    protected void loadJavaScriptUrl(final String url) throws Exception {
+        if (!url.startsWith("javascript:")) {
+            Log.w(TAG, "loadJavascriptUrl only accepts javascript: url");
+            return;
+        }
+        loadUrlAsync(url);
+    }
+
     protected void loadUrlSync(final String url) throws Exception {
-        CallbackHelper pageFinishedHelper = mTestContentsClient.getOnPageFinishedHelper();
+        CallbackHelper pageFinishedHelper = mTestHelperBridge.getOnPageFinishedHelper();
         int currentCallCount = pageFinishedHelper.getCallCount();
         loadUrlAsync(url);
 
@@ -113,34 +225,32 @@ public class XWalkViewTestBase
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                mXWalkView.loadUrl(url);
+                mXWalkView.load(url, null);
             }
         });
     }
 
-    protected void loadDataSync(final String data, final String mimeType,
+    protected void loadDataSync(final String url, final String data, final String mimeType,
             final boolean isBase64Encoded) throws Exception {
-        CallbackHelper pageFinishedHelper = mTestContentsClient.getOnPageFinishedHelper();
+        CallbackHelper pageFinishedHelper = mTestHelperBridge.getOnPageFinishedHelper();
         int currentCallCount = pageFinishedHelper.getCallCount();
-        loadDataAsync(data, mimeType, isBase64Encoded);
+        loadDataAsync(url, data, mimeType, isBase64Encoded);
         pageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_SECONDS,
                 TimeUnit.SECONDS);
     }
 
-    protected void loadDataAsync(final String data, final String mimeType,
+    protected void loadDataAsync(final String url, final String data, final String mimeType,
              final boolean isBase64Encoded) throws Exception {
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                mXWalkView.getXWalkViewContentForTest().getContentViewCoreForTest(
-                        ).loadUrl(LoadUrlParams.createLoadDataParams(
-                        data, mimeType, isBase64Encoded));
+                mXWalkView.load(url, data);
             }
         });
     }
 
-    protected void loadUrlSyncByContent(final XWalkContent xWalkContent,
-            final TestXWalkViewContentsClient contentsClient,
+    protected void loadUrlSyncByContent(final XWalkView xWalkContent,
+            final TestHelperBridge contentsClient,
             final String url) throws Exception {
         CallbackHelper pageFinishedHelper = contentsClient.getOnPageFinishedHelper();
         int currentCallCount = pageFinishedHelper.getCallCount();
@@ -150,12 +260,12 @@ public class XWalkViewTestBase
                 TimeUnit.SECONDS);
     }
 
-    protected void loadUrlAsyncByContent(final XWalkContent xWalkContent,
+    protected void loadUrlAsyncByContent(final XWalkView xWalkContent,
             final String url) throws Exception {
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                xWalkContent.loadUrl(url);
+                xWalkContent.load(url, null);
             }
         });
     }
@@ -193,31 +303,20 @@ public class XWalkViewTestBase
         }
     }
 
-    protected String getTitleOnUiThreadByContent(final XWalkContent xWalkContent) throws Exception {
+    protected String getTitleOnUiThreadByContent(final XWalkView xWalkContent) throws Exception {
         return runTestOnUiThreadAndGetResult(new Callable<String>() {
             @Override
             public String call() throws Exception {
-                String title = xWalkContent.getContentViewCoreForTest().getTitle();
+                String title = xWalkContent.getTitle();
                 return title;
             }
         });
     }
 
-    protected XWalkSettings getXWalkSettingsOnUiThreadByContent(
-            final XWalkContent xwalkContent) throws Exception {
-        return runTestOnUiThreadAndGetResult(new Callable<XWalkSettings>() {
-            @Override
-            public XWalkSettings call() throws Exception {
-                return xwalkContent.getSettings();
-            }
-        });
-    }
-
     protected XWalkView createXWalkViewContainerOnMainSync(
             final Context context,
-            final XWalkContentsClient contentClient,
-            final XWalkClient xWalkClient,
-            final XWalkWebChromeClient xWlkWebChromeClient) throws Exception {
+            final XWalkUIClient uiClient,
+            final XWalkResourceClient resourceClient) throws Exception {
         final AtomicReference<XWalkView> xWalkViewContainer =
                 new AtomicReference<XWalkView>();
         getInstrumentation().runOnMainSync(new Runnable() {
@@ -225,61 +324,25 @@ public class XWalkViewTestBase
             public void run() {
                 xWalkViewContainer.set(new XWalkView(context, getActivity()));
                 getActivity().addView(xWalkViewContainer.get());
-                xWalkViewContainer.get().getXWalkViewContentForTest().installWebContentsObserverForTest(contentClient);
-                xWalkViewContainer.get().setXWalkClient(xWalkClient);
-                xWalkViewContainer.get().setXWalkWebChromeClient(xWlkWebChromeClient);
+                xWalkViewContainer.get().setUIClient(uiClient);
+                xWalkViewContainer.get().setResourceClient(resourceClient);
             }
         });
 
         return xWalkViewContainer.get();
     }
 
-    protected XWalkContent getXWalkContentOnMainSync(final XWalkView view) throws Exception {
-        final AtomicReference<XWalkContent> xWalkContent =
-                new AtomicReference<XWalkContent>();
-        getInstrumentation().runOnMainSync(new Runnable() {
-            @Override
-            public void run() {
-                xWalkContent.set(view.getXWalkViewContentForTest());
-            }
-        });
-
-        return xWalkContent.get();
-    }
-
-    protected ViewPair createViewsOnMainSync(final TestXWalkViewContentsClient contentClient0,
-            final TestXWalkViewContentsClient contentClient1, final XWalkClient viewClient0,
-                    final XWalkClient viewClient1, final XWalkWebChromeClient chromeClient0,
-                            final XWalkWebChromeClient chromeClient1, final Context context) throws Throwable {
-        final XWalkView walkView0 = createXWalkViewContainerOnMainSync(context, contentClient0,
-                viewClient0, chromeClient0);
-        final XWalkView walkView1 = createXWalkViewContainerOnMainSync(context, contentClient1,
-                viewClient1, chromeClient1);
-        final AtomicReference<ViewPair> viewPair = new AtomicReference<ViewPair>();
-
-        getInstrumentation().runOnMainSync(new Runnable() {
-            @Override
-            public void run() {
-                XWalkContent content0 = walkView0.getXWalkViewContentForTest();
-                XWalkContent content1 = walkView1.getXWalkViewContentForTest();
-                viewPair.set(new ViewPair(content0, contentClient0, content1, contentClient1));
-            }
-        });
-
-        return viewPair.get();
-    }
-
     protected void loadAssetFile(String fileName) throws Exception {
         String fileContent = getFileContent(fileName);
-        loadDataSync(fileContent, "text/html", false);
+        loadDataSync(fileName, fileContent, "text/html", false);
     }
 
     public void loadAssetFileAndWaitForTitle(String fileName) throws Exception {
-        CallbackHelper getTitleHelper = mTestContentsClient.getOnTitleUpdatedHelper();
+        CallbackHelper getTitleHelper = mTestHelperBridge.getOnTitleUpdatedHelper();
         int currentCallCount = getTitleHelper.getCallCount();
         String fileContent = getFileContent(fileName);
 
-        loadDataSync(fileContent, "text/html", false);
+        loadDataSync(fileName, fileContent, "text/html", false);
 
         getTitleHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_SECONDS,
                 TimeUnit.SECONDS);
@@ -290,21 +353,21 @@ public class XWalkViewTestBase
     }
 
     protected void runTestWaitPageFinished(Runnable runnable) throws Exception{
-        CallbackHelper pageFinishedHelper = mTestContentsClient.getOnPageFinishedHelper();
+        CallbackHelper pageFinishedHelper = mTestHelperBridge.getOnPageFinishedHelper();
         int currentCallCount = pageFinishedHelper.getCallCount();
         runnable.run();
         pageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_SECONDS,
                 TimeUnit.SECONDS);
     }
 
-    protected void reloadSync() throws Exception {
+    protected void reloadSync(final int mode) throws Exception {
         runTestWaitPageFinished(new Runnable(){
             @Override
             public void run() {
                 getInstrumentation().runOnMainSync(new Runnable() {
                     @Override
                     public void run() {
-                        mXWalkView.reload();
+                        mXWalkView.reload(mode);
                     }
                 });
             }
@@ -318,7 +381,8 @@ public class XWalkViewTestBase
                 getInstrumentation().runOnMainSync(new Runnable() {
                     @Override
                     public void run() {
-                        mXWalkView.goBack();
+                        mXWalkView.getNavigationHistory().navigate(
+                            XWalkNavigationHistory.Direction.BACKWARD, 1);
                     }
                 });
             }
@@ -332,7 +396,8 @@ public class XWalkViewTestBase
                 getInstrumentation().runOnMainSync(new Runnable() {
                     @Override
                     public void run() {
-                        mXWalkView.goForward();
+                        mXWalkView.getNavigationHistory().navigate(
+                            XWalkNavigationHistory.Direction.FORWARD, 1);
                     }
                 });
             }
@@ -343,7 +408,7 @@ public class XWalkViewTestBase
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                mXWalkView.clearHistory();
+                mXWalkView.getNavigationHistory().clear();
             }
         });
     }
@@ -352,7 +417,7 @@ public class XWalkViewTestBase
         return runTestOnUiThreadAndGetResult(new Callable<Boolean>() {
             @Override
             public Boolean call() {
-                return mXWalkView.canGoBack();
+                return mXWalkView.getNavigationHistory().canGoBack();
             }
         });
     }
@@ -361,22 +426,151 @@ public class XWalkViewTestBase
         return runTestOnUiThreadAndGetResult(new Callable<Boolean>() {
             @Override
             public Boolean call() {
-                return mXWalkView.canGoForward();
+                return mXWalkView.getNavigationHistory().canGoForward();
+            }
+        });
+    }
+
+    protected int historySizeOnUiThread() throws Throwable {
+        return runTestOnUiThreadAndGetResult(new Callable<Integer>() {
+            @Override
+            public Integer call() {
+                return mXWalkView.getNavigationHistory().size();
+            }
+        });
+    }
+
+    protected boolean hasItemAtOnUiThread(final int index) throws Throwable {
+        return runTestOnUiThreadAndGetResult(new Callable<Boolean>() {
+            @Override
+            public Boolean call() {
+                return mXWalkView.getNavigationHistory().hasItemAt(index);
+            }
+        });
+    }
+
+    protected XWalkNavigationItem getItemAtOnUiThread(final int index) throws Throwable {
+        return runTestOnUiThreadAndGetResult(new Callable<XWalkNavigationItem>() {
+            @Override
+            public XWalkNavigationItem call() {
+                return mXWalkView.getNavigationHistory().getItemAt(index);
+            }
+        });
+    }
+
+    protected XWalkNavigationItem getCurrentItemOnUiThread() throws Throwable {
+        return runTestOnUiThreadAndGetResult(new Callable<XWalkNavigationItem>() {
+            @Override
+            public XWalkNavigationItem call() {
+                return mXWalkView.getNavigationHistory().getCurrentItem();
             }
         });
     }
 
     protected String executeJavaScriptAndWaitForResult(final String code) throws Exception {
-        final OnEvaluateJavaScriptResultHelper helper = mTestContentsClient.getOnEvaluateJavaScriptResultHelper();
+
+        final TestHelperBridge.OnEvaluateJavaScriptResultHelper helper =
+                mTestHelperBridge.getOnEvaluateJavaScriptResultHelper();
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                XWalkContent content = mXWalkView.getXWalkViewContentForTest();
-                helper.evaluateJavaScript(content.getContentViewCoreForTest(), code);
+                helper.evaluateJavascript(mXWalkView, code);
             }
         });
         helper.waitUntilHasValue();
         Assert.assertTrue("Failed to retrieve JavaScript evaluation results.", helper.hasValue());
         return helper.getJsonResultAndClear();
     }
+
+    protected String getUrlOnUiThread() throws Exception {
+        return runTestOnUiThreadAndGetResult(new Callable<String>() {
+            @Override
+            public String call() throws Exception {
+                return mXWalkView.getUrl();
+            }
+        });
+    }
+
+    protected void clearCacheOnUiThread(final boolean includeDiskFiles) throws Exception {
+        getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                mXWalkView.clearCache(includeDiskFiles);
+            }
+        });
+    }
+
+    protected String getAPIVersionOnUiThread() throws Exception {
+        return runTestOnUiThreadAndGetResult(new Callable<String>() {
+            @Override
+            public String call() throws Exception {
+                return mXWalkView.getAPIVersion();
+            }
+        });
+    }
+
+    protected String getXWalkVersionOnUiThread() throws Exception {
+        return runTestOnUiThreadAndGetResult(new Callable<String>() {
+            @Override
+            public String call() throws Exception {
+                return mXWalkView.getXWalkVersion();
+            }
+        });
+    }
+
+    public void clickOnElementId(final String id, String frameName) throws Exception {
+        String str;
+        if (frameName != null) {
+            str = "top.window." + "LeftFrame" + ".document.getElementById('" + id + "')";
+        } else {
+            str = "document.getElementById('" + id + "')";
+        }
+        final String script1 = str + " != null";
+        final String script2 = str + ".dispatchEvent(evObj);";
+        Assert.assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
+            @Override
+            public boolean isSatisfied() {
+                try {
+                    String idIsNotNull = executeJavaScriptAndWaitForResult(script1);
+                    return idIsNotNull.equals("true");
+                } catch (Throwable t) {
+                    t.printStackTrace();
+                    Assert.fail("Failed to check if DOM is loaded: " + t.toString());
+                    return false;
+                }
+            }
+        }, WAIT_TIMEOUT_MS, CHECK_INTERVAL));
+
+        try {
+            String result = executeJavaScriptAndWaitForResult(
+                "var evObj = document.createEvent('Events'); " +
+                "evObj.initEvent('click', true, false); " +
+                script2 +
+                "console.log('element with id [" + id + "] clicked');");
+        } catch (Throwable t) {
+            t.printStackTrace();
+        }
+    }
+
+    public void simulateKeyAction(final int action) {
+        new Thread(new Runnable() {
+            public void run() {
+                try {
+                    getInstrumentation().sendKeySync(new KeyEvent(action,
+                            KeyEvent.KEYCODE_DPAD_CENTER));
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }).start();
+    }
+
+    protected void stopLoading() throws Exception {
+        getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                mXWalkView.stopLoading();
+            }
+        });
+    }
 }