| Index: android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientCallbackHelperTest.java
|
| diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientCallbackHelperTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientCallbackHelperTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8b5cab30f53e159de5a857bee29f8362dc6d3d22
|
| --- /dev/null
|
| +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientCallbackHelperTest.java
|
| @@ -0,0 +1,222 @@
|
| +// Copyright 2014 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.graphics.Picture;
|
| +import android.os.Handler;
|
| +import android.os.Looper;
|
| +import android.test.suitebuilder.annotation.SmallTest;
|
| +
|
| +import org.chromium.android_webview.AwContentsClientCallbackHelper;
|
| +import org.chromium.android_webview.test.TestAwContentsClient.OnDownloadStartHelper;
|
| +import org.chromium.android_webview.test.TestAwContentsClient.OnReceivedLoginRequestHelper;
|
| +import org.chromium.android_webview.test.TestAwContentsClient.PictureListenerHelper;
|
| +import org.chromium.base.test.util.Feature;
|
| +import org.chromium.content.browser.test.util.CallbackHelper;
|
| +import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageStartedHelper;
|
| +import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnReceivedErrorHelper;
|
| +
|
| +import java.util.concurrent.Callable;
|
| +
|
| +/**
|
| + * Test suite for AwContentsClientCallbackHelper.
|
| + */
|
| +public class AwContentsClientCallbackHelperTest extends AwTestBase {
|
| + /**
|
| + * Callback helper for OnLoadedResource.
|
| + */
|
| + public static class OnLoadResourceHelper extends CallbackHelper {
|
| + private String mLastLoadedResource;
|
| +
|
| + public String getLastLoadedResource() {
|
| + assert getCallCount() > 0;
|
| + return mLastLoadedResource;
|
| + }
|
| +
|
| + public void notifyCalled(String url) {
|
| + mLastLoadedResource = url;
|
| + notifyCalled();
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * TestAwContentsClient extended with OnLoadResourceHelper.
|
| + */
|
| + public static class TestAwContentsClient
|
| + extends org.chromium.android_webview.test.TestAwContentsClient {
|
| +
|
| + private final OnLoadResourceHelper mOnLoadResourceHelper;
|
| +
|
| + public TestAwContentsClient() {
|
| + super();
|
| + mOnLoadResourceHelper = new OnLoadResourceHelper();
|
| + }
|
| +
|
| + public OnLoadResourceHelper getOnLoadResourceHelper() {
|
| + return mOnLoadResourceHelper;
|
| + }
|
| +
|
| + @Override
|
| + public void onLoadResource(String url) {
|
| + mOnLoadResourceHelper.notifyCalled(url);
|
| + }
|
| + }
|
| +
|
| + static final int PICTURE_TIMEOUT = 5000;
|
| + static final String TEST_URL = "www.example.com";
|
| + static final String REALM = "www.example.com";
|
| + static final String ACCOUNT = "account";
|
| + static final String ARGS = "args";
|
| + static final String USER_AGENT = "userAgent";
|
| + static final String CONTENT_DISPOSITION = "contentDisposition";
|
| + static final String MIME_TYPE = "mimeType";
|
| + static final int CONTENT_LENGTH = 42;
|
| +
|
| + static final float NEW_SCALE = 1.0f;
|
| + static final float OLD_SCALE = 2.0f;
|
| + static final int ERROR_CODE = 2;
|
| + static final String ERROR_MESSAGE = "A horrible thing has occurred!";
|
| +
|
| + private TestAwContentsClient mContentsClient;
|
| + private AwContentsClientCallbackHelper mClientHelper;
|
| + private Looper mLooper;
|
| +
|
| + @Override
|
| + protected void setUp() throws Exception {
|
| + super.setUp();
|
| + mLooper = Looper.getMainLooper();
|
| + mContentsClient = new TestAwContentsClient();
|
| + mClientHelper = new AwContentsClientCallbackHelper(mLooper, mContentsClient);
|
| + }
|
| +
|
| + @Feature({"AndroidWebView"})
|
| + @SmallTest
|
| + public void testOnLoadResource() throws Exception {
|
| + OnLoadResourceHelper loadResourceHelper = mContentsClient.getOnLoadResourceHelper();
|
| +
|
| + int onLoadResourceCount = loadResourceHelper.getCallCount();
|
| + mClientHelper.postOnLoadResource(TEST_URL);
|
| + loadResourceHelper.waitForCallback(onLoadResourceCount);
|
| + assertEquals(TEST_URL, loadResourceHelper.getLastLoadedResource());
|
| + }
|
| +
|
| + @Feature({"AndroidWebView"})
|
| + @SmallTest
|
| + public void testOnPageStarted() throws Exception {
|
| + OnPageStartedHelper pageStartedHelper = mContentsClient.getOnPageStartedHelper();
|
| +
|
| + int onPageStartedCount = pageStartedHelper.getCallCount();
|
| + mClientHelper.postOnPageStarted(TEST_URL);
|
| + pageStartedHelper.waitForCallback(onPageStartedCount);
|
| + assertEquals(TEST_URL, pageStartedHelper.getUrl());
|
| + }
|
| +
|
| + @Feature({"AndroidWebView"})
|
| + @SmallTest
|
| + public void testOnDownloadStart() throws Exception {
|
| + OnDownloadStartHelper downloadStartHelper = mContentsClient.getOnDownloadStartHelper();
|
| +
|
| + int onDownloadStartCount = downloadStartHelper.getCallCount();
|
| + mClientHelper.postOnDownloadStart(TEST_URL, USER_AGENT, CONTENT_DISPOSITION,
|
| + MIME_TYPE, CONTENT_LENGTH);
|
| + downloadStartHelper.waitForCallback(onDownloadStartCount);
|
| + assertEquals(TEST_URL, downloadStartHelper.getUrl());
|
| + assertEquals(USER_AGENT, downloadStartHelper.getUserAgent());
|
| + assertEquals(CONTENT_DISPOSITION, downloadStartHelper.getContentDisposition());
|
| + assertEquals(MIME_TYPE, downloadStartHelper.getMimeType());
|
| + assertEquals(CONTENT_LENGTH, downloadStartHelper.getContentLength());
|
| + }
|
| +
|
| + @Feature({"AndroidWebView"})
|
| + @SmallTest
|
| + public void testOnNewPicture() throws Exception {
|
| + final PictureListenerHelper pictureListenerHelper =
|
| + mContentsClient.getPictureListenerHelper();
|
| +
|
| + final Picture thePicture = new Picture();
|
| +
|
| + final Callable<Picture> pictureProvider = new Callable<Picture>() {
|
| + @Override
|
| + public Picture call() {
|
| + return thePicture;
|
| + }
|
| + };
|
| +
|
| + // AwContentsClientCallbackHelper rate limits photo callbacks so two posts in close
|
| + // succession should only result in one callback.
|
| + final int onNewPictureCount = pictureListenerHelper.getCallCount();
|
| + // To trip the rate limiting the second postNewPicture call needs to happen
|
| + // before mLooper processes the first. To do this we run both posts as a single block
|
| + // and we do it in the thread that is processes the callbacks (mLooper).
|
| + Handler mainHandler = new Handler(mLooper);
|
| + Runnable postPictures = new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + mClientHelper.postOnNewPicture(pictureProvider);
|
| + mClientHelper.postOnNewPicture(pictureProvider);
|
| + }
|
| + };
|
| + mainHandler.post(postPictures);
|
| +
|
| + // We want to check that one and only one callback is fired,
|
| + // First we wait for the first call back to complete, this ensures that both posts have
|
| + // finished.
|
| + pictureListenerHelper.waitForCallback(onNewPictureCount);
|
| +
|
| + // Then we post a runnable on the callback handler thread. Since both posts have happened
|
| + // and the first callback has happened a second callback (if it exists) must be
|
| + // in the queue before this runnable.
|
| + getInstrumentation().runOnMainSync(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + }
|
| + });
|
| +
|
| + // When that runnable has finished we assert that one and only on callback happened.
|
| + assertEquals(thePicture, pictureListenerHelper.getPicture());
|
| + assertEquals(onNewPictureCount + 1, pictureListenerHelper.getCallCount());
|
| + }
|
| +
|
| + @Feature({"AndroidWebView"})
|
| + @SmallTest
|
| + public void testOnReceivedLoginRequest() throws Exception {
|
| + OnReceivedLoginRequestHelper receivedLoginRequestHelper =
|
| + mContentsClient.getOnReceivedLoginRequestHelper();
|
| +
|
| + int onReceivedLoginRequestCount = receivedLoginRequestHelper.getCallCount();
|
| + mClientHelper.postOnReceivedLoginRequest(REALM, ACCOUNT, ARGS);
|
| + receivedLoginRequestHelper.waitForCallback(onReceivedLoginRequestCount);
|
| + assertEquals(REALM, receivedLoginRequestHelper.getRealm());
|
| + assertEquals(ACCOUNT, receivedLoginRequestHelper.getAccount());
|
| + assertEquals(ARGS, receivedLoginRequestHelper.getArgs());
|
| + }
|
| +
|
| + @Feature({"AndroidWebView"})
|
| + @SmallTest
|
| + public void testOnReceivedError() throws Exception {
|
| + OnReceivedErrorHelper receivedErrorHelper =
|
| + mContentsClient.getOnReceivedErrorHelper();
|
| +
|
| + int onReceivedErrorCount = receivedErrorHelper.getCallCount();
|
| + mClientHelper.postOnReceivedError(ERROR_CODE, ERROR_MESSAGE, TEST_URL);
|
| + receivedErrorHelper.waitForCallback(onReceivedErrorCount);
|
| + assertEquals(ERROR_CODE, receivedErrorHelper.getErrorCode());
|
| + assertEquals(ERROR_MESSAGE, receivedErrorHelper.getDescription());
|
| + assertEquals(TEST_URL, receivedErrorHelper.getFailingUrl());
|
| + }
|
| +
|
| + @Feature({"AndroidWebView"})
|
| + @SmallTest
|
| + public void testOnScaleChangedScaled() throws Exception {
|
| + TestAwContentsClient.OnScaleChangedHelper scaleChangedHelper =
|
| + mContentsClient.getOnScaleChangedHelper();
|
| +
|
| + int onScaleChangeCount = scaleChangedHelper.getCallCount();
|
| + mClientHelper.postOnScaleChangedScaled(OLD_SCALE, NEW_SCALE);
|
| + scaleChangedHelper.waitForCallback(onScaleChangeCount);
|
| + assertEquals(OLD_SCALE, scaleChangedHelper.getOldScale());
|
| + assertEquals(NEW_SCALE, scaleChangedHelper.getNewScale());
|
| + }
|
| +}
|
|
|