Chromium Code Reviews

Unified Diff: android_webview/javatests/src/org/chromium/android_webview/test/ContentViewZoomTest.java

Issue 14840011: [Android] Move zoom controls management into WebView (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use an interface and an inline stub, as discussed offline Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Index: android_webview/javatests/src/org/chromium/android_webview/test/ContentViewZoomTest.java
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/ContentViewZoomTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/ContentViewZoomTest.java
deleted file mode 100644
index c50d6f5004408caf54af043c33eeb8eec69b72b8..0000000000000000000000000000000000000000
--- a/android_webview/javatests/src/org/chromium/android_webview/test/ContentViewZoomTest.java
+++ /dev/null
@@ -1,308 +0,0 @@
-// 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.Activity;
-import android.content.pm.ActivityInfo;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.view.View;
-import android.view.ViewConfiguration;
-
-import org.chromium.android_webview.AwContents;
-import org.chromium.android_webview.AwSettings;
-import org.chromium.base.ThreadUtils;
-import org.chromium.base.test.util.Feature;
-import org.chromium.content.browser.ContentSettings;
-import org.chromium.content.browser.ContentViewCore;
-import org.chromium.content.browser.test.util.Criteria;
-import org.chromium.content.browser.test.util.CriteriaHelper;
-
-import java.util.concurrent.Callable;
-
-/**
- * A test suite for zooming-related methods and settings.
- */
-public class ContentViewZoomTest extends AwTestBase {
- private static final long TEST_TIMEOUT_MS = 20000L;
- private static final int CHECK_INTERVAL_MS = 100;
-
- private TestAwContentsClient mContentsClient;
- private AwContents mAwContents;
- private ContentViewCore mContentViewCore;
-
- @Override
- public void setUp() throws Exception {
- super.setUp();
- mContentsClient = new TestAwContentsClient();
- final AwTestContainerView testContainerView =
- createAwTestContainerViewOnMainSync(mContentsClient);
- mAwContents = testContainerView.getAwContents();
- mContentViewCore = testContainerView.getContentViewCore();
- }
-
- private String getZoomableHtml() {
- return "<html><head><meta name=\"viewport\" content=\"" +
- "width=device-width, minimum-scale=0.5, maximum-scale=2.0, initial-scale=0.5" +
- "\"/></head><body>Zoomable</body></html>";
- }
-
- private String getNonZoomableHtml() {
- // This page can't be zoomed because its viewport fully occupies
- // view area and is explicitly made non user-scalable.
- return "<html><head>" +
- "<meta name=\"viewport\" " +
- "content=\"width=device-width,height=device-height," +
- "initial-scale=1,maximum-scale=1,user-scalable=no\">" +
- "</head><body>Non-zoomable</body></html>";
- }
-
- private boolean isMultiTouchZoomSupportedOnUiThread() throws Throwable {
- return runTestOnUiThreadAndGetResult(new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- return mContentViewCore.isMultiTouchZoomSupported();
- }
- });
- }
-
- private int getVisibilityOnUiThread(final View view) throws Throwable {
- return runTestOnUiThreadAndGetResult(new Callable<Integer>() {
- @Override
- public Integer call() throws Exception {
- return view.getVisibility();
- }
- });
- }
-
- private boolean canZoomInOnUiThread() throws Throwable {
- return runTestOnUiThreadAndGetResult(new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- return mContentViewCore.canZoomIn();
- }
- });
- }
-
- private boolean canZoomOutOnUiThread() throws Throwable {
- return runTestOnUiThreadAndGetResult(new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- return mContentViewCore.canZoomOut();
- }
- });
- }
-
- private float getScaleOnUiThread() throws Throwable {
- return runTestOnUiThreadAndGetResult(new Callable<Float>() {
- @Override
- public Float call() throws Exception {
- return mContentViewCore.getScale();
- }
- });
- }
-
- private View getZoomControlsOnUiThread() throws Throwable {
- return runTestOnUiThreadAndGetResult(new Callable<View>() {
- @Override
- public View call() throws Exception {
- return mContentViewCore.getZoomControlsForTest();
- }
- });
- }
-
- private void invokeZoomPickerOnUiThread() throws Throwable {
- ThreadUtils.runOnUiThreadBlocking(new Runnable() {
- @Override
- public void run() {
- mContentViewCore.invokeZoomPicker();
- }
- });
- }
-
- private boolean zoomInOnUiThreadAndWait() throws Throwable {
- final float previousScale = getScaleOnUiThread();
- if (!runTestOnUiThreadAndGetResult(new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- return mContentViewCore.zoomIn();
- }
- }))
- return false;
- // The zoom level is updated asynchronously.
- return waitForScaleChange(previousScale);
- }
-
- private boolean zoomOutOnUiThreadAndWait() throws Throwable {
- final float previousScale = getScaleOnUiThread();
- if (!runTestOnUiThreadAndGetResult(new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- return mContentViewCore.zoomOut();
- }
- }))
- return false;
- // The zoom level is updated asynchronously.
- return waitForScaleChange(previousScale);
- }
-
- private boolean waitForScaleChange(final float previousScale) throws Throwable {
- return CriteriaHelper.pollForCriteria(new Criteria() {
- @Override
- public boolean isSatisfied() {
- try {
- return previousScale != getScaleOnUiThread();
- } catch (Throwable t) {
- t.printStackTrace();
- fail("Failed to getScaleOnUiThread: " + t.toString());
- return false;
- }
- }
- }, TEST_TIMEOUT_MS, CHECK_INTERVAL_MS);
- }
-
- private boolean waitUntilCanNotZoom() throws Throwable {
- return CriteriaHelper.pollForCriteria(new Criteria() {
- @Override
- public boolean isSatisfied() {
- try {
- return !canZoomInOnUiThread() && !canZoomOutOnUiThread();
- } catch (Throwable t) {
- t.printStackTrace();
- fail("Failed to query canZoomIn/Out: " + t.toString());
- return false;
- }
- }
- }, TEST_TIMEOUT_MS, CHECK_INTERVAL_MS);
- }
-
- private void runMagnificationTest(boolean supportZoom) throws Throwable {
- int onScaleChangedCallCount = mContentsClient.getOnScaleChangedHelper().getCallCount();
- loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
- getZoomableHtml(), "text/html", false);
- mContentsClient.getOnScaleChangedHelper().waitForCallback(onScaleChangedCallCount);
- getContentSettingsOnUiThread(mAwContents).setSupportZoom(supportZoom);
- assertTrue("Should be able to zoom in", canZoomInOnUiThread());
- assertFalse("Should not be able to zoom out", canZoomOutOnUiThread());
-
- while (canZoomInOnUiThread()) {
- assertTrue(zoomInOnUiThreadAndWait());
- }
- assertTrue("Should be able to zoom out", canZoomOutOnUiThread());
-
- while (canZoomOutOnUiThread()) {
- assertTrue(zoomOutOnUiThreadAndWait());
- }
- assertTrue("Should be able to zoom in", canZoomInOnUiThread());
- }
-
- @SmallTest
- @Feature({"AndroidWebView"})
- public void testMagnification() throws Throwable {
- runMagnificationTest(true);
- }
-
- // According to Android CTS test, zoomIn/Out must work
- // even if supportZoom is turned off.
- @SmallTest
- @Feature({"AndroidWebView"})
- public void testMagnificationWithZoomSupportOff() throws Throwable {
- runMagnificationTest(false);
- }
-
- @SmallTest
- @Feature({"AndroidWebView"})
- public void testZoomUsingMultiTouch() throws Throwable {
- AwSettings webSettings = getAwSettingsOnUiThread(mAwContents);
- loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
- getZoomableHtml(), "text/html", false);
-
- assertTrue(getContentSettingsOnUiThread(mAwContents).supportZoom());
- assertFalse(getContentSettingsOnUiThread(mAwContents).getBuiltInZoomControls());
- assertFalse(isMultiTouchZoomSupportedOnUiThread());
-
- getContentSettingsOnUiThread(mAwContents).setBuiltInZoomControls(true);
- assertTrue(isMultiTouchZoomSupportedOnUiThread());
-
- getContentSettingsOnUiThread(mAwContents).setSupportZoom(false);
- assertFalse(isMultiTouchZoomSupportedOnUiThread());
- }
-
- @SmallTest
- @Feature({"AndroidWebView"})
- public void testZoomControls() throws Throwable {
- AwSettings webSettings = getAwSettingsOnUiThread(mAwContents);
- int onScaleChangedCallCount = mContentsClient.getOnScaleChangedHelper().getCallCount();
- loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
- getZoomableHtml(), "text/html", false);
- mContentsClient.getOnScaleChangedHelper().waitForCallback(onScaleChangedCallCount);
- // It must be possible to zoom in (or zoom out) for zoom controls to be shown
- assertTrue("Should be able to zoom in", canZoomInOnUiThread());
-
- assertTrue(getContentSettingsOnUiThread(mAwContents).supportZoom());
- getContentSettingsOnUiThread(mAwContents).setBuiltInZoomControls(true);
- getContentSettingsOnUiThread(mAwContents).setDisplayZoomControls(false);
-
- // With DisplayZoomControls set to false, attempts to display zoom
- // controls must be ignored.
- assertNull(getZoomControlsOnUiThread());
- invokeZoomPickerOnUiThread();
- assertNull(getZoomControlsOnUiThread());
-
- getContentSettingsOnUiThread(mAwContents).setDisplayZoomControls(true);
- assertNull(getZoomControlsOnUiThread());
- invokeZoomPickerOnUiThread();
- View zoomControls = getZoomControlsOnUiThread();
- assertEquals(View.VISIBLE, getVisibilityOnUiThread(zoomControls));
- }
-
- @SmallTest
- @Feature({"AndroidWebView"})
- public void testZoomControlsOnNonZoomableContent() throws Throwable {
- AwSettings webSettings = getAwSettingsOnUiThread(mAwContents);
- loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
- getNonZoomableHtml(), "text/html", false);
-
- // ContentView must update itself according to the viewport setup.
- waitUntilCanNotZoom();
-
- assertTrue(getContentSettingsOnUiThread(mAwContents).supportZoom());
- getContentSettingsOnUiThread(mAwContents).setBuiltInZoomControls(true);
- getContentSettingsOnUiThread(mAwContents).setDisplayZoomControls(true);
- assertNull(getZoomControlsOnUiThread());
- invokeZoomPickerOnUiThread();
- View zoomControls = getZoomControlsOnUiThread();
- assertEquals(View.GONE, getVisibilityOnUiThread(zoomControls));
- }
-
- @SmallTest
- @Feature({"AndroidWebView"})
- public void testZoomControlsOnOrientationChange() throws Throwable {
- AwSettings webSettings = getAwSettingsOnUiThread(mAwContents);
- loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
- getZoomableHtml(), "text/html", false);
-
- assertTrue(getContentSettingsOnUiThread(mAwContents).supportZoom());
- getContentSettingsOnUiThread(mAwContents).setBuiltInZoomControls(true);
- getContentSettingsOnUiThread(mAwContents).setDisplayZoomControls(true);
- invokeZoomPickerOnUiThread();
-
- // Now force an orientation change, and try to display the zoom picker
- // again. Make sure that we don't crash when the ZoomPicker registers
- // it's receiver.
-
- Activity activity = getActivity();
- int orientation = activity.getRequestedOrientation();
- activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- activity.setRequestedOrientation(orientation);
- invokeZoomPickerOnUiThread();
-
- // We may crash shortly (as the zoom picker has a short delay in it before
- // it tries to register it's BroadcastReceiver), so sleep to verify we don't.
- // The delay is encoded in ZoomButtonsController#ZOOM_CONTROLS_TIMEOUT,
- // if that changes we may need to update this test.
- Thread.sleep(ViewConfiguration.getZoomControlsTimeout());
- }
-}

Powered by Google App Engine