From 61850458d6ffefc848213e4db74aecc1257b6373 Mon Sep 17 00:00:00 2001 From: "mkosiba@chromium.org" Date: Mon, 21 Jul 2014 14:20:07 +0000 Subject: Merge 281052 "[android_webview] Add a zoomBy method to AwContents." > [android_webview] Add a zoomBy method to AwContents. > > BUG=390921, 175854 > TEST=AndroidWebViewTest > > Review URL: https://codereview.chromium.org/368023002 TBR=mkosiba@chromium.org Review URL: https://codereview.chromium.org/404123002 git-svn-id: svn://svn.chromium.org/chrome/branches/1985/src@284425 0039d316-1c4b-4281-b951-d872f2087c98 --- .../org/chromium/android_webview/AwContents.java | 19 +++++++++++----- .../test/AwContentsClientOnScaleChangedTest.java | 7 ++---- .../chromium/android_webview/test/AwZoomTest.java | 26 ++++++++++++++++++++-- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index 5b0a427..46338b6 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java @@ -1476,7 +1476,7 @@ public class AwContents { if (!canZoomIn()) { return false; } - return mContentViewCore.pinchByDelta(1.25f); + return zoomBy(1.25f); } /** @@ -1488,7 +1488,19 @@ public class AwContents { if (!canZoomOut()) { return false; } - return mContentViewCore.pinchByDelta(0.8f); + return zoomBy(0.8f); + } + + /** + * @see android.webkit.WebView#zoomBy() + */ + // This method uses the term 'zoom' for legacy reasons, but relates + // to what chrome calls the 'page scale factor'. + public boolean zoomBy(float delta) { + if (delta < 0.01f || delta > 100.0f) { + throw new IllegalStateException("zoom delta value outside [0.01, 100] range."); + } + return mContentViewCore.pinchByDelta(delta); } /** @@ -1983,9 +1995,6 @@ public class AwContents { if (mPageScaleFactor != pageScaleFactor) { float oldPageScaleFactor = mPageScaleFactor; mPageScaleFactor = pageScaleFactor; - // NOTE: if this ever needs to become synchronous then we need to make sure the scroll - // bounds are correctly updated before calling the method, otherwise embedder code that - // attempts to scroll on scale change might cause weird results. mContentsClient.getCallbackHelper().postOnScaleChangedScaled( (float)(oldPageScaleFactor * mDIPScale), (float)(mPageScaleFactor * mDIPScale)); diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientOnScaleChangedTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientOnScaleChangedTest.java index b634fef..fc0a855 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientOnScaleChangedTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientOnScaleChangedTest.java @@ -4,9 +4,10 @@ package org.chromium.android_webview.test; +import android.test.suitebuilder.annotation.SmallTest; + import org.chromium.android_webview.AwContents; import org.chromium.android_webview.test.util.CommonResources; -import org.chromium.base.test.util.DisabledTest; import org.chromium.content.browser.ContentViewCore; /** @@ -30,11 +31,7 @@ public class AwContentsClientOnScaleChangedTest extends AwTestBase { super.tearDown(); } - /* @SmallTest - This test is timing out on ICS bots including cq. See crbug.com/175854. - */ - @DisabledTest public void testScaleUp() throws Throwable { getAwSettingsOnUiThread(mAwContents).setUseWideViewPort(true); loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwZoomTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwZoomTest.java index 40e88ba..b561a13 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwZoomTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwZoomTest.java @@ -24,6 +24,7 @@ import java.util.concurrent.Callable; public class AwZoomTest extends AwTestBase { private TestAwContentsClient mContentsClient; private AwContents mAwContents; + private float MAXIMUM_SCALE = 2.0f; @Override public void setUp() throws Exception { @@ -37,11 +38,11 @@ public class AwZoomTest extends AwTestBase { private String getZoomableHtml(float scale) { final int divWidthPercent = (int)(100.0f / scale); return String.format(Locale.US, "" + "
Zoomable
" + "", - scale, scale, divWidthPercent); + scale, MAXIMUM_SCALE, scale, divWidthPercent); } private String getNonZoomableHtml() { @@ -114,6 +115,18 @@ public class AwZoomTest extends AwTestBase { waitForScaleChange(previousScale); } + private void zoomByOnUiThreadAndWait(final float delta) throws Throwable { + final float previousScale = getPixelScaleOnUiThread(mAwContents); + assertTrue(runTestOnUiThreadAndGetResult(new Callable() { + @Override + public Boolean call() throws Exception { + return mAwContents.zoomBy(delta); + } + })); + // The zoom level is updated asynchronously. + waitForScaleChange(previousScale); + } + private void waitForScaleChange(final float previousScale) throws Throwable { poll(new Callable() { @Override @@ -161,6 +174,15 @@ public class AwZoomTest extends AwTestBase { zoomOutOnUiThreadAndWait(); } assertTrue("Should be able to zoom in", canZoomInOnUiThread(mAwContents)); + + zoomByOnUiThreadAndWait(4.0f); + waitForScaleToBecome(MAXIMUM_SCALE); + + zoomByOnUiThreadAndWait(0.5f); + waitForScaleToBecome(MAXIMUM_SCALE * 0.5f); + + zoomByOnUiThreadAndWait(0.01f); + waitForScaleToBecome(pageMinimumScale); } @SmallTest -- cgit v1.1