Chromium Code Reviews| Index: android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java |
| diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java |
| index 72baaf1ac6abff2167488712d75577d9e35707b7..e588ae4a72dd8a64a283ddfdf8761e102af3b11e 100644 |
| --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java |
| +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java |
| @@ -30,6 +30,7 @@ import org.chromium.content.browser.test.util.HistoryUtils; |
| import org.chromium.net.test.util.TestWebServer; |
| import org.chromium.ui.gfx.DeviceDisplayInfo; |
| +import java.util.concurrent.Callable; |
| import java.util.regex.Matcher; |
| import java.util.regex.Pattern; |
| import java.util.ArrayList; |
| @@ -1107,6 +1108,72 @@ public class AwSettingsTest extends AndroidWebViewTestBase { |
| } |
| } |
| + class AwSettingsLoadWithOverviewModeTestHelper extends AwSettingsTestHelper<Boolean> { |
| + private static final float DEFAULT_PAGE_SCALE = 1.0f; |
| + |
| + AwSettingsLoadWithOverviewModeTestHelper( |
| + AwContents awContents, |
| + TestAwContentsClient contentViewClient, |
| + boolean withViewPortTag) throws Throwable { |
| + super(awContents, contentViewClient, true); |
| + mWithViewPortTag = withViewPortTag; |
| + mContentSettings.setUseWideViewPort(true); |
| + } |
| + |
| + @Override |
| + protected Boolean getAlteredValue() { |
| + return ENABLED; |
| + } |
| + |
| + @Override |
| + protected Boolean getInitialValue() { |
| + return DISABLED; |
| + } |
| + |
| + @Override |
| + protected Boolean getCurrentValue() { |
| + return mContentSettings.getLoadWithOverviewMode(); |
| + } |
| + |
| + @Override |
| + protected void setCurrentValue(Boolean value) { |
| + mExpectScaleChange = mContentSettings.getLoadWithOverviewMode() != value; |
| + if (mExpectScaleChange) { |
| + mOnScaleChangedCallCount = |
| + mContentViewClient.getOnScaleChangedHelper().getCallCount(); |
| + } |
| + mContentSettings.setLoadWithOverviewMode(value); |
| + } |
| + |
| + @Override |
| + protected void doEnsureSettingHasValue(Boolean value) throws Throwable { |
| + loadDataSync(getData()); |
| + if (mExpectScaleChange) { |
| + mContentViewClient.getOnScaleChangedHelper(). |
| + waitForCallback(mOnScaleChangedCallCount); |
| + mExpectScaleChange = false; |
| + } |
| + float currentScale = AwSettingsTest.this.getScaleOnUiThread(mAwContents); |
| + if (value) { |
| + assertTrue("Expected: " + currentScale + " < " + DEFAULT_PAGE_SCALE, |
| + currentScale < DEFAULT_PAGE_SCALE); |
| + } else { |
| + assertEquals(DEFAULT_PAGE_SCALE, currentScale); |
| + } |
| + } |
| + |
| + private String getData() { |
| + return "<html><head>" + |
| + (mWithViewPortTag ? "<meta name='viewport' content='width=3000' />" : "") + |
| + "</head>" + |
| + "<body></body></html>"; |
| + } |
| + |
| + private final boolean mWithViewPortTag; |
| + private boolean mExpectScaleChange; |
| + private int mOnScaleChangedCallCount; |
| + } |
| + |
| // The test verifies that JavaScript is disabled upon WebView |
| // creation without accessing ContentSettings. If the test passes, |
| // it means that WebView-specific web preferences configuration |
| @@ -2147,6 +2214,59 @@ public class AwSettingsTest extends AndroidWebViewTestBase { |
| assertEquals(viewportTagSpecifiedWidth, getTitleOnUiThread(awContents)); |
| } |
| + @SmallTest |
| + @Feature({"AndroidWebView", "Preferences"}) |
| + public void testLoadWithOverviewModeWithTwoViews() throws Throwable { |
| + ViewPair views = createViews(); |
| + runPerViewSettingsTest( |
| + new AwSettingsLoadWithOverviewModeTestHelper( |
| + views.getContents0(), views.getClient0(), false), |
| + new AwSettingsLoadWithOverviewModeTestHelper( |
| + views.getContents1(), views.getClient1(), false)); |
| + } |
| + |
| + @SmallTest |
| + @Feature({"AndroidWebView", "Preferences"}) |
| + public void testLoadWithOverviewModeViewportTagWithTwoViews() throws Throwable { |
| + ViewPair views = createViews(); |
| + runPerViewSettingsTest( |
| + new AwSettingsLoadWithOverviewModeTestHelper( |
| + views.getContents0(), views.getClient0(), true), |
| + new AwSettingsLoadWithOverviewModeTestHelper( |
| + views.getContents1(), views.getClient1(), true)); |
| + } |
| + |
| + @SmallTest |
| + @Feature({"AndroidWebView", "Preferences"}) |
| + // Verify that LoadViewOverviewMode doesn't affect pages with initial scale |
| + // set in the viewport tag, |
|
benm (inactive)
2013/02/14 18:29:38
Is this documented?
nit: s/,/./ ... I had to find
mnaganov (inactive)
2013/02/15 10:30:19
No, figured out experimentally. The JavaDoc is bar
|
| + public void testLoadWithOverviewModeViewportScale() throws Throwable { |
| + final TestAwContentsClient contentClient = new TestAwContentsClient(); |
| + final AwTestContainerView testContainerView = |
| + createAwTestContainerViewOnMainSync(contentClient); |
| + final AwContents awContents = testContainerView.getAwContents(); |
| + ContentSettings settings = getContentSettingsOnUiThread(awContents); |
| + CallbackHelper onPageFinishedHelper = contentClient.getOnPageFinishedHelper(); |
| + |
| + final int pageScale = 2; |
| + final String page = "<html><head>" + |
| + "<meta name='viewport' content='width=3000, initial-scale=" + pageScale + |
| + "' /></head>" + |
| + "<body></body></html>"; |
| + |
| + assertFalse(settings.getUseWideViewPort()); |
| + assertFalse(settings.getLoadWithOverviewMode()); |
| + loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false); |
| + assertEquals(1.0f, getScaleOnUiThread(awContents)); |
| + |
| + settings.setUseWideViewPort(true); |
| + settings.setLoadWithOverviewMode(true); |
| + int onScaleChangedCallCount = contentClient.getOnScaleChangedHelper().getCallCount(); |
| + loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false); |
| + contentClient.getOnScaleChangedHelper().waitForCallback(onScaleChangedCallCount); |
| + assertEquals((float)pageScale, getScaleOnUiThread(awContents)); |
| + } |
| + |
| static class ViewPair { |
| private final AwContents contents0; |
| private final TestAwContentsClient client0; |
| @@ -2271,4 +2391,13 @@ public class AwSettingsTest extends AndroidWebViewTestBase { |
| private void resetResourceContext() { |
| AndroidProtocolHandler.setResourceContextForTesting(null); |
| } |
| + |
| + private float getScaleOnUiThread(final AwContents awContents) throws Throwable { |
| + return runTestOnUiThreadAndGetResult(new Callable<Float>() { |
| + @Override |
| + public Float call() throws Exception { |
| + return awContents.getContentViewCore().getScale(); |
| + } |
| + }); |
| + } |
| } |