| Index: android_webview/javatests/src/org/chromium/android_webview/test/AndroidWebViewTestBase.java | 
| diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AndroidWebViewTestBase.java b/android_webview/javatests/src/org/chromium/android_webview/test/AndroidWebViewTestBase.java | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..56b909aad3d84da3bc3a897f67aab01935c0e6b8 | 
| --- /dev/null | 
| +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AndroidWebViewTestBase.java | 
| @@ -0,0 +1,134 @@ | 
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +package org.chromium.android_webview.test; | 
| + | 
| +import android.app.Instrumentation; | 
| +import android.content.Context; | 
| +import android.test.ActivityInstrumentationTestCase2; | 
| +import android.view.View; | 
| + | 
| +import org.chromium.android_webview.AndroidWebViewUtil; | 
| +import org.chromium.android_webview.AwContents; | 
| +import org.chromium.content.browser.ContentSettings; | 
| +import org.chromium.content.browser.ContentView; | 
| +import org.chromium.content.browser.ContentViewClient; | 
| +import org.chromium.content.browser.ContentViewCore; | 
| +import org.chromium.content.browser.LoadUrlParams; | 
| +import org.chromium.content.browser.test.CallbackHelper; | 
| + | 
| +import java.util.HashMap; | 
| +import java.util.Map; | 
| +import java.util.concurrent.Callable; | 
| +import java.util.concurrent.ExecutionException; | 
| +import java.util.concurrent.FutureTask; | 
| +import java.util.concurrent.TimeUnit; | 
| +import java.util.concurrent.TimeoutException; | 
| + | 
| +/** | 
| + * A base class for android_webview tests. | 
| + */ | 
| +public class AndroidWebViewTestBase | 
| +        extends ActivityInstrumentationTestCase2<AndroidWebViewTestRunnerActivity> { | 
| +    protected static int WAIT_TIMEOUT_SECONDS = 15; | 
| + | 
| +    public AndroidWebViewTestBase() { | 
| +        super(AndroidWebViewTestRunnerActivity.class); | 
| +    } | 
| + | 
| +    @Override | 
| +    protected void setUp() throws Exception { | 
| +        final Context context = getActivity(); | 
| +        getInstrumentation().runOnMainSync(new Runnable() { | 
| +            @Override | 
| +            public void run() { | 
| +                ContentViewCore.initChromiumBrowserProcess( | 
| +                        context, ContentView.MAX_RENDERERS_SINGLE_PROCESS); | 
| +            } | 
| +        }); | 
| +    } | 
| + | 
| +    /** | 
| +     * Runs a {@link Callable} on the main thread, blocking until it is | 
| +     * complete, and returns the result. Calls | 
| +     * {@link Instrumentation#waitForIdleSync()} first to help avoid certain | 
| +     * race conditions. | 
| +     * | 
| +     * @param <R> Type of result to return | 
| +     */ | 
| +    public <R> R runTestOnUiThreadAndGetResult(Callable<R> callable) | 
| +            throws Throwable { | 
| +        FutureTask<R> task = new FutureTask<R>(callable); | 
| +        getInstrumentation().waitForIdleSync(); | 
| +        getInstrumentation().runOnMainSync(task); | 
| +        try { | 
| +            return task.get(); | 
| +        } catch (ExecutionException e) { | 
| +            // Unwrap the cause of the exception and re-throw it. | 
| +            throw e.getCause(); | 
| +        } | 
| +    } | 
| + | 
| +    /** | 
| +     * Loads url on the UI thread and blocks until onPageFinished is called. | 
| +     */ | 
| +    protected void loadUrlSync(final ContentViewCore contentViewCore, | 
| +                               CallbackHelper onPageFinishedHelper, | 
| +                               final String url) throws Throwable { | 
| +        int currentCallCount = onPageFinishedHelper.getCallCount(); | 
| +        loadUrlAsync(contentViewCore, url); | 
| +        onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_SECONDS, | 
| +                TimeUnit.SECONDS); | 
| +    } | 
| + | 
| +    /** | 
| +     * Loads url on the UI thread but does not block. | 
| +     */ | 
| +    protected void loadUrlAsync(final ContentViewCore contentViewCore, | 
| +                                final String url) throws Throwable { | 
| +        runTestOnUiThread(new Runnable() { | 
| +            @Override | 
| +            public void run() { | 
| +                contentViewCore.loadUrl(new LoadUrlParams(url)); | 
| +            } | 
| +        }); | 
| +    } | 
| + | 
| +    /** | 
| +     * Loads data on the UI thread and blocks until onPageFinished is called. | 
| +     */ | 
| +    protected void loadDataSync(final ContentViewCore contentViewCore, | 
| +                                CallbackHelper onPageFinishedHelper, | 
| +                                final String data, final String mimeType, | 
| +                                final boolean isBase64Encoded) throws Throwable { | 
| +        int currentCallCount = onPageFinishedHelper.getCallCount(); | 
| +        loadDataAsync(contentViewCore, data, mimeType, isBase64Encoded); | 
| +        onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_SECONDS, | 
| +                TimeUnit.SECONDS); | 
| +    } | 
| + | 
| +    /** | 
| +     * Loads data on the UI thread but does not block. | 
| +     */ | 
| +    protected void loadDataAsync(final ContentViewCore contentViewCore, final String data, | 
| +                                 final String mimeType, final boolean isBase64Encoded) | 
| +            throws Throwable { | 
| +        runTestOnUiThread(new Runnable() { | 
| +            @Override | 
| +            public void run() { | 
| +                contentViewCore.loadUrl(LoadUrlParams.createLoadDataParams( | 
| +                        data, mimeType, isBase64Encoded)); | 
| +            } | 
| +        }); | 
| +    } | 
| + | 
| +    protected ContentView createContentView(boolean incognito, | 
| +                                            ContentViewClient contentViewClient) { | 
| +        int nativeWebContents = AndroidWebViewUtil.createNativeWebContents(incognito); | 
| +        ContentView contentView = ContentView.newInstance(getActivity(), nativeWebContents, | 
| +                                                          ContentView.PERSONALITY_VIEW); | 
| +        contentView.setContentViewClient(contentViewClient); | 
| +        return contentView; | 
| +    } | 
| +} | 
|  |