1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.android_webview.test; 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.Context; 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochimport android.graphics.Point; 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochimport android.net.http.SslError; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.Build; 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.os.SystemClock; 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.test.suitebuilder.annotation.MediumTest; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.test.suitebuilder.annotation.SmallTest; 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochimport android.view.WindowManager; 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import android.webkit.JavascriptInterface; 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochimport android.webkit.ValueCallback; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.webkit.WebSettings; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout; 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.apache.http.Header; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.apache.http.HttpRequest; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.android_webview.AwContents; 246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)import org.chromium.android_webview.AwContentsClient.ShouldInterceptRequestParams; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.android_webview.AwSettings; 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.android_webview.AwSettings.LayoutAlgorithm; 276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)import org.chromium.android_webview.AwWebResourceResponse; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.android_webview.test.util.CommonResources; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.android_webview.test.util.ImagePageGenerator; 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)import org.chromium.android_webview.test.util.VideoTestUtil; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.android_webview.test.util.VideoTestWebServer; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.test.util.DisabledTest; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.test.util.Feature; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.test.util.TestFileUtil; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.test.util.UrlUtils; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.test.util.CallbackHelper; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.test.util.HistoryUtils; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.content_public.browser.WebContents; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.net.test.util.TestWebServer; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.ui.gfx.DeviceDisplayInfo; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)import java.io.File; 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import java.util.concurrent.Callable; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import java.util.concurrent.TimeUnit; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.regex.Matcher; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.regex.Pattern; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * A test suite for AwSettings class. The key objective is to verify that each 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * settings applies either to each individual view or to all views of the 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * application 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public class AwSettingsTest extends AwTestBase { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final boolean ENABLED = true; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final boolean DISABLED = false; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * A helper class for testing a particular preference from AwSettings. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The generic type T is the type of the setting. Usually, to test an 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * effect of the preference, JS code is executed that sets document's title. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * In this case, requiresJsEnabled constructor argument must be set to true. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) abstract class AwSettingsTestHelper<T> { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected final AwContents mAwContents; 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch protected final Context mContext; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected final TestAwContentsClient mContentViewClient; 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected final AwSettings mAwSettings; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwSettingsTestHelper(AwTestContainerView containerView, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) boolean requiresJsEnabled) throws Throwable { 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch mAwContents = containerView.getAwContents(); 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch mContext = containerView.getContext(); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewClient = contentViewClient; 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch mAwSettings = AwSettingsTest.this.getAwSettingsOnUiThread(mAwContents); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (requiresJsEnabled) { 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setJavaScriptEnabled(true); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ensureSettingHasAlteredValue() throws Throwable { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ensureSettingHasValue(getAlteredValue()); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ensureSettingHasInitialValue() throws Throwable { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ensureSettingHasValue(getInitialValue()); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setAlteredSettingValue() throws Throwable { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setCurrentValue(getAlteredValue()); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setInitialSettingValue() throws Throwable { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setCurrentValue(getInitialValue()); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected abstract T getAlteredValue(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected abstract T getInitialValue(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected abstract T getCurrentValue(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected abstract void setCurrentValue(T value) throws Throwable; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected abstract void doEnsureSettingHasValue(T value) throws Throwable; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected String getTitleOnUiThread() throws Exception { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return AwSettingsTest.this.getTitleOnUiThread(mAwContents); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void loadDataSync(String data) throws Throwable { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsTest.this.loadDataSync( 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mAwContents, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewClient.getOnPageFinishedHelper(), 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "text/html", 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void loadUrlSync(String url) throws Throwable { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsTest.this.loadUrlSync( 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mAwContents, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewClient.getOnPageFinishedHelper(), 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void loadUrlSyncAndExpectError(String url) throws Throwable { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsTest.this.loadUrlSyncAndExpectError( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mAwContents, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewClient.getOnPageFinishedHelper(), 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewClient.getOnReceivedErrorHelper(), 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected String executeJavaScriptAndWaitForResult(String script) throws Exception { 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return AwSettingsTest.this.executeJavaScriptAndWaitForResult( 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mAwContents, mContentViewClient, script); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private void ensureSettingHasValue(T value) throws Throwable { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(value, getCurrentValue()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doEnsureSettingHasValue(value); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsJavaScriptTestHelper extends AwSettingsTestHelper<Boolean> { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String JS_ENABLED_STRING = "JS Enabled"; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String JS_DISABLED_STRING = "JS Disabled"; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 150effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwSettingsJavaScriptTestHelper(AwTestContainerView containerView, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 152effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, false); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getAlteredValue() { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ENABLED; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getInitialValue() { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DISABLED; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getCurrentValue() { 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getJavaScriptEnabled(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setJavaScriptEnabled(value); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync(getData()); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals( 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value == ENABLED ? JS_ENABLED_STRING : JS_DISABLED_STRING, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getTitleOnUiThread()); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private String getData() { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "<html><head><title>" + JS_DISABLED_STRING + "</title>" 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) + "</head><body onload=\"document.title='" + JS_ENABLED_STRING 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) + "';\"></body></html>"; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In contrast to AwSettingsJavaScriptTestHelper, doesn't reload the page when testing 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // JavaScript state. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsJavaScriptDynamicTestHelper extends AwSettingsJavaScriptTestHelper { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsJavaScriptDynamicTestHelper( 194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 196effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load the page. 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.doEnsureSettingHasValue(getInitialValue()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String oldTitle = getTitleOnUiThread(); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String newTitle = oldTitle + "_modified"; 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) executeJavaScriptAndWaitForResult(getScript(newTitle)); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(value == ENABLED ? newTitle : oldTitle, getTitleOnUiThread()); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private String getScript(String title) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "document.title='" + title + "';"; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsPluginsTestHelper extends AwSettingsTestHelper<Boolean> { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String PLUGINS_ENABLED_STRING = "Embed"; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String PLUGINS_DISABLED_STRING = "NoEmbed"; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 218effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwSettingsPluginsTestHelper(AwTestContainerView containerView, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 220effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getAlteredValue() { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ENABLED; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getInitialValue() { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DISABLED; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getCurrentValue() { 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getPluginsEnabled(); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setPluginsEnabled(value); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync(getData()); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals( 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value == ENABLED ? PLUGINS_ENABLED_STRING : PLUGINS_DISABLED_STRING, 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getTitleOnUiThread()); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private String getData() { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "<html><body onload=\"document.title = document.body.innerText;\">" 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) + "<noembed>No</noembed><span>Embed</span></body></html>"; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsStandardFontFamilyTestHelper extends AwSettingsTestHelper<String> { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsStandardFontFamilyTestHelper( 259effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 261effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected String getAlteredValue() { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "cursive"; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected String getInitialValue() { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "sans-serif"; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected String getCurrentValue() { 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getStandardFontFamily(); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(String value) { 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setStandardFontFamily(value); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(String value) throws Throwable { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync(getData()); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(value, getTitleOnUiThread()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private String getData() { 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "<html><body onload=\"document.title = " + 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "getComputedStyle(document.body).getPropertyValue('font-family');\">" 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) + "</body></html>"; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsDefaultFontSizeTestHelper extends AwSettingsTestHelper<Integer> { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsDefaultFontSizeTestHelper( 299effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 301effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Integer getAlteredValue() { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 42; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Integer getInitialValue() { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 16; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Integer getCurrentValue() { 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getDefaultFontSize(); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(Integer value) { 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setDefaultFontSize(value); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Integer value) throws Throwable { 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync(getData()); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(value.toString() + "px", getTitleOnUiThread()); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private String getData() { 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "<html><body onload=\"document.title = " + 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "getComputedStyle(document.body).getPropertyValue('font-size');\">" 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) + "</body></html>"; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsLoadImagesAutomaticallyTestHelper extends AwSettingsTestHelper<Boolean> { 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private ImagePageGenerator mGenerator; 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsLoadImagesAutomaticallyTestHelper( 341effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient, 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ImagePageGenerator generator) throws Throwable { 344effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mGenerator = generator; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getAlteredValue() { 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DISABLED; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getInitialValue() { 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ENABLED; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getCurrentValue() { 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getLoadsImagesAutomatically(); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setLoadsImagesAutomatically(value); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync(mGenerator.getPageSource()); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(value == ENABLED ? 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ImagePageGenerator.IMAGE_LOADED_STRING : 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ImagePageGenerator.IMAGE_NOT_LOADED_STRING, 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getTitleOnUiThread()); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 378d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 379d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) class AwSettingsImagesEnabledHelper extends AwSettingsTestHelper<Boolean> { 380d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 381d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) AwSettingsImagesEnabledHelper( 382effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 383d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TestAwContentsClient contentViewClient, 384d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TestWebServer webServer, 385d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ImagePageGenerator generator) throws Throwable { 386effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 387d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) mWebServer = webServer; 388d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) mGenerator = generator; 389d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 390d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 391d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @Override 392d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) protected Boolean getAlteredValue() { 393d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return DISABLED; 394d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 395d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 396d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @Override 397d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) protected Boolean getInitialValue() { 398d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return ENABLED; 399d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 400d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 401d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @Override 402d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) protected Boolean getCurrentValue() { 403d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return mAwSettings.getImagesEnabled(); 404d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 405d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 406d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @Override 407d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) protected void setCurrentValue(Boolean value) { 408d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) mAwSettings.setImagesEnabled(value); 409d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 410d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 411d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @Override 412d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 413d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) final String httpImageUrl = mGenerator.getPageUrl(mWebServer); 414d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) AwSettingsTest.this.loadUrlSync( 415d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) mAwContents, 416d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) mContentViewClient.getOnPageFinishedHelper(), 417d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) httpImageUrl); 418d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) assertEquals(value == ENABLED ? 419d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ImagePageGenerator.IMAGE_LOADED_STRING : 420d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ImagePageGenerator.IMAGE_NOT_LOADED_STRING, 421d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) getTitleOnUiThread()); 422d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 423d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 424d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private TestWebServer mWebServer; 425d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private ImagePageGenerator mGenerator; 426d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 427d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsDefaultTextEncodingTestHelper extends AwSettingsTestHelper<String> { 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsDefaultTextEncodingTestHelper( 430effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 432effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected String getAlteredValue() { 4374ccfafb49a467adf7819cc5933ef036c1ee41c10mkosiba return "Latin-1"; 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected String getInitialValue() { 4424ccfafb49a467adf7819cc5933ef036c1ee41c10mkosiba return "UTF-8"; 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected String getCurrentValue() { 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getDefaultTextEncodingName(); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(String value) { 452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setDefaultTextEncodingName(value); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(String value) throws Throwable { 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync(getData()); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(value, getTitleOnUiThread()); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private String getData() { 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "<html><body onload='document.title=document.defaultCharset'></body></html>"; 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsUserAgentStringTestHelper extends AwSettingsTestHelper<String> { 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private final String mDefaultUa; 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String DEFAULT_UA = ""; 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String CUSTOM_UA = "ChromeViewTest"; 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsUserAgentStringTestHelper( 472effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 474effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mDefaultUa = mAwSettings.getUserAgentString(); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected String getAlteredValue() { 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CUSTOM_UA; 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected String getInitialValue() { 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DEFAULT_UA; 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected String getCurrentValue() { 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The test framework expects that getXXX() == Z after setXXX(Z). 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But setUserAgentString("" / null) resets the UA string to default, 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and getUserAgentString returns the default UA string afterwards. 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // To align with the framework, we return an empty string instead of 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the default UA. 495c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) String currentUa = mAwSettings.getUserAgentString(); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mDefaultUa.equals(currentUa) ? DEFAULT_UA : currentUa; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(String value) { 501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setUserAgentString(value); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(String value) throws Throwable { 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync(getData()); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals( 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DEFAULT_UA.equals(value) ? mDefaultUa : value, 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getTitleOnUiThread()); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private String getData() { 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "<html><body onload='document.title=navigator.userAgent'></body></html>"; 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsDomStorageEnabledTestHelper extends AwSettingsTestHelper<Boolean> { 518424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private static final String TEST_FILE = "webview/localStorage.html"; 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String NO_LOCAL_STORAGE = "No localStorage"; 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String HAS_LOCAL_STORAGE = "Has localStorage"; 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsDomStorageEnabledTestHelper( 523effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 525effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 526424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AwSettingsTest.assertFileIsReadable(UrlUtils.getTestFilePath(TEST_FILE)); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getAlteredValue() { 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ENABLED; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getInitialValue() { 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DISABLED; 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getCurrentValue() { 541c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getDomStorageEnabled(); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setDomStorageEnabled(value); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It is not permitted to access localStorage from data URLs in WebKit, 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that is why a standalone page must be used. 553424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) loadUrlSync(UrlUtils.getTestFileUrl(TEST_FILE)); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals( 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value == ENABLED ? HAS_LOCAL_STORAGE : NO_LOCAL_STORAGE, 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getTitleOnUiThread()); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class AwSettingsDatabaseTestHelper extends AwSettingsTestHelper<Boolean> { 561424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private static final String TEST_FILE = "webview/database_access.html"; 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private static final String NO_DATABASE = "No database"; 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private static final String HAS_DATABASE = "Has database"; 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwSettingsDatabaseTestHelper( 566effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 568effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 569424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AwSettingsTest.assertFileIsReadable(UrlUtils.getTestFilePath(TEST_FILE)); 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Boolean getAlteredValue() { 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ENABLED; 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Boolean getInitialValue() { 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return DISABLED; 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Boolean getCurrentValue() { 584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getDatabaseEnabled(); 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void setCurrentValue(Boolean value) { 589c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setDatabaseEnabled(value); 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // It seems accessing the database through a data scheme is not 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // supported, and fails with a DOM exception (likely a cross-domain 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // violation). 597424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) loadUrlSync(UrlUtils.getTestFileUrl(TEST_FILE)); 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals( 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value == ENABLED ? HAS_DATABASE : NO_DATABASE, 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) getTitleOnUiThread()); 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsUniversalAccessFromFilesTestHelper extends AwSettingsTestHelper<Boolean> { 605424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private static final String TEST_CONTAINER_FILE = "webview/iframe_access.html"; 606424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private static final String TEST_FILE = "webview/hello_world.html"; 607ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private static final String ACCESS_DENIED_TITLE = "Exception"; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsUniversalAccessFromFilesTestHelper( 610effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 612effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 613424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AwSettingsTest.assertFileIsReadable(UrlUtils.getTestFilePath(TEST_CONTAINER_FILE)); 614424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AwSettingsTest.assertFileIsReadable(UrlUtils.getTestFilePath(TEST_FILE)); 615424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) mIframeContainerUrl = UrlUtils.getTestFileUrl(TEST_CONTAINER_FILE); 616424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) mIframeUrl = UrlUtils.getTestFileUrl(TEST_FILE); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The value of the setting depends on the SDK version. 618c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setAllowUniversalAccessFromFileURLs(false); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If universal access is true, the value of file access doesn't 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // matter. While if universal access is false, having file access 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // enabled will allow file loading. 622c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setAllowFileAccessFromFileURLs(false); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getAlteredValue() { 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ENABLED; 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getInitialValue() { 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DISABLED; 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getCurrentValue() { 637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getAllowUniversalAccessFromFileURLs(); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 642c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setAllowUniversalAccessFromFileURLs(value); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadUrlSync(mIframeContainerUrl); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals( 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value == ENABLED ? mIframeUrl : ACCESS_DENIED_TITLE, 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getTitleOnUiThread()); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private final String mIframeContainerUrl; 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private final String mIframeUrl; 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsFileAccessFromFilesIframeTestHelper extends AwSettingsTestHelper<Boolean> { 658424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private static final String TEST_CONTAINER_FILE = "webview/iframe_access.html"; 659424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private static final String TEST_FILE = "webview/hello_world.html"; 660ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private static final String ACCESS_DENIED_TITLE = "Exception"; 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsFileAccessFromFilesIframeTestHelper( 663effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 665effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 666424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AwSettingsTest.assertFileIsReadable(UrlUtils.getTestFilePath(TEST_CONTAINER_FILE)); 667424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AwSettingsTest.assertFileIsReadable(UrlUtils.getTestFilePath(TEST_FILE)); 668424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) mIframeContainerUrl = UrlUtils.getTestFileUrl(TEST_CONTAINER_FILE); 669424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) mIframeUrl = UrlUtils.getTestFileUrl(TEST_FILE); 670c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setAllowUniversalAccessFromFileURLs(false); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The value of the setting depends on the SDK version. 672c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setAllowFileAccessFromFileURLs(false); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getAlteredValue() { 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ENABLED; 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getInitialValue() { 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DISABLED; 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getCurrentValue() { 687c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getAllowFileAccessFromFileURLs(); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 692c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setAllowFileAccessFromFileURLs(value); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadUrlSync(mIframeContainerUrl); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals( 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value == ENABLED ? mIframeUrl : ACCESS_DENIED_TITLE, 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getTitleOnUiThread()); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private final String mIframeContainerUrl; 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private final String mIframeUrl; 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsFileAccessFromFilesXhrTestHelper extends AwSettingsTestHelper<Boolean> { 708424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private static final String TEST_FILE = "webview/xhr_access.html"; 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String ACCESS_GRANTED_TITLE = "Hello, World!"; 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String ACCESS_DENIED_TITLE = "Exception"; 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsFileAccessFromFilesXhrTestHelper( 713effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 715effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 716424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) assertFileIsReadable(UrlUtils.getTestFilePath(TEST_FILE)); 717424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) mXhrContainerUrl = UrlUtils.getTestFileUrl(TEST_FILE); 718c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setAllowUniversalAccessFromFileURLs(false); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The value of the setting depends on the SDK version. 720c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setAllowFileAccessFromFileURLs(false); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getAlteredValue() { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ENABLED; 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getInitialValue() { 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DISABLED; 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getCurrentValue() { 735c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getAllowFileAccessFromFileURLs(); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 740c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setAllowFileAccessFromFileURLs(value); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadUrlSync(mXhrContainerUrl); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals( 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value == ENABLED ? ACCESS_GRANTED_TITLE : ACCESS_DENIED_TITLE, 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getTitleOnUiThread()); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private final String mXhrContainerUrl; 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 754c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class AwSettingsFileUrlAccessTestHelper extends AwSettingsTestHelper<Boolean> { 755424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private static final String TEST_FILE = "webview/hello_world.html"; 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String ACCESS_GRANTED_TITLE = "Hello, World!"; 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsFileUrlAccessTestHelper( 759effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient, 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int startIndex) throws Throwable { 762effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mIndex = startIndex; 764424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AwSettingsTest.assertFileIsReadable(UrlUtils.getTestFilePath(TEST_FILE)); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getAlteredValue() { 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DISABLED; 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getInitialValue() { 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ENABLED; 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getCurrentValue() { 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mAwSettings.getAllowFileAccess(); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mAwSettings.setAllowFileAccess(value); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use query parameters to avoid hitting a cached page. 790424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) String fileUrl = UrlUtils.getTestFileUrl(TEST_FILE + "?id=" + mIndex); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mIndex += 2; 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value == ENABLED) { 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadUrlSync(fileUrl); 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(ACCESS_GRANTED_TITLE, getTitleOnUiThread()); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadUrlSyncAndExpectError(fileUrl); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private int mIndex; 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 803c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class AwSettingsContentUrlAccessTestHelper extends AwSettingsTestHelper<Boolean> { 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsContentUrlAccessTestHelper( 806effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient, 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index) throws Throwable { 809effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mTarget = "content_access_" + index; 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getAlteredValue() { 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DISABLED; 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getInitialValue() { 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ENABLED; 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getCurrentValue() { 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mAwSettings.getAllowContentAccess(); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mAwSettings.setAllowContentAccess(value); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsTest.this.resetResourceRequestCountInContentProvider(mTarget); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value == ENABLED) { 837f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) loadUrlSync(AwSettingsTest.this.createContentUrl(mTarget)); 838f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) String title = getTitleOnUiThread(); 839f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) assertTrue(title != null); 840f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) assertTrue("[" + mTarget + "] Actual title: \"" + title + "\"", 841f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) title.contains(mTarget)); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsTest.this.ensureResourceRequestCountInContentProvider(mTarget, 1); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 844f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) loadUrlSyncAndExpectError(AwSettingsTest.this.createContentUrl(mTarget)); 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsTest.this.ensureResourceRequestCountInContentProvider(mTarget, 0); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private final String mTarget; 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 852c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class AwSettingsContentUrlAccessFromFileTestHelper extends AwSettingsTestHelper<Boolean> { 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String TARGET = "content_from_file"; 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsContentUrlAccessFromFileTestHelper( 856effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient, 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index) throws Throwable { 859effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mIndex = index; 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mTempDir = getInstrumentation().getTargetContext().getCacheDir().getPath(); 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getAlteredValue() { 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DISABLED; 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getInitialValue() { 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ENABLED; 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getCurrentValue() { 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mAwSettings.getAllowContentAccess(); 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mAwSettings.setAllowContentAccess(value); 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsTest.this.resetResourceRequestCountInContentProvider(TARGET); 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String fileName = mTempDir + "/" + TARGET + ".html"; 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try { 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestFileUtil.createNewHtmlFile(fileName, 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TARGET, 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<img src=\"" + 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adding a query avoids hitting a cached image, and also verifies 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that content URL query parameters are ignored when accessing 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a content provider. 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsTest.this.createContentUrl(TARGET + "?id=" + mIndex) + "\">"); 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mIndex += 2; 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadUrlSync("file://" + fileName); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value == ENABLED) { 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsTest.this.ensureResourceRequestCountInContentProvider(TARGET, 1); 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsTest.this.ensureResourceRequestCountInContentProvider(TARGET, 0); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } finally { 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestFileUtil.deleteFile(fileName); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private int mIndex; 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private String mTempDir; 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This class provides helper methods for testing of settings related to 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the text autosizing feature. 914c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) abstract class AwSettingsTextAutosizingTestHelper<T> extends AwSettingsTestHelper<T> { 9152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected static final float PARAGRAPH_FONT_SIZE = 14.0f; 9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwSettingsTextAutosizingTestHelper( 918effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 920effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mNeedToWaitForFontSizeChange = false; 9222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(getData()); 9232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void setCurrentValue(T value) throws Throwable { 9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mNeedToWaitForFontSizeChange = false; 9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (value != getCurrentValue()) { 9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mOldFontSize = getActualFontSize(); 9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mNeedToWaitForFontSizeChange = true; 9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected float getActualFontSize() throws Throwable { 9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!mNeedToWaitForFontSizeChange) { 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) executeJavaScriptAndWaitForResult("setTitleToActualFontSize()"); 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final float oldFontSize = mOldFontSize; 9395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) poll(new Callable<Boolean>() { 9405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) @Override 9415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public Boolean call() throws Exception { 9425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) executeJavaScriptAndWaitForResult("setTitleToActualFontSize()"); 9435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) float newFontSize = Float.parseFloat(getTitleOnUiThread()); 9445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return newFontSize != oldFontSize; 9455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 9465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }); 9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mNeedToWaitForFontSizeChange = false; 9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Float.parseFloat(getTitleOnUiThread()); 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected String getData() { 953effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DeviceDisplayInfo deviceInfo = DeviceDisplayInfo.create(mContext); 954effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int displayWidth = (int) (deviceInfo.getDisplayWidth() / deviceInfo.getDIPScale()); 955effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int layoutWidth = (int) (displayWidth * 2.5f); // Use 2.5 as autosizing layout tests do. 9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringBuilder sb = new StringBuilder(); 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sb.append("<html>" + 958effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "<head>" + 959effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "<meta name=\"viewport\" content=\"width=" + layoutWidth + "\">" + 960effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "<style>" + 961effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "body { width: " + layoutWidth + "px; margin: 0; overflow-y: hidden; }" + 962effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "</style>" + 963effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "<script>" + 9642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "function setTitleToActualFontSize() {" + 9652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // parseFloat is used to trim out the "px" suffix. 9662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " document.title = parseFloat(getComputedStyle(" + 9672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " document.getElementById('par')).getPropertyValue('font-size'));" + 9682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}</script></head>" + 9692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<body>" + 9702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<p id=\"par\" style=\"font-size:"); 9712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sb.append(PARAGRAPH_FONT_SIZE); 9722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sb.append("px;\">"); 9732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make the paragraph wide enough for being processed by the font autosizer. 974effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch for (int i = 0; i < 500; i++) { 9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sb.append("Hello, World! "); 9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sb.append("</p></body></html>"); 9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return sb.toString(); 9792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private boolean mNeedToWaitForFontSizeChange; 9822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private float mOldFontSize; 9832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class AwSettingsLayoutAlgorithmTestHelper extends 9862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwSettingsTextAutosizingTestHelper<LayoutAlgorithm> { 9872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwSettingsLayoutAlgorithmTestHelper( 989effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 9902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 991effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient); 9922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Font autosizing doesn't step in for narrow layout widths. 993c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setUseWideViewPort(true); 9942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 9972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected LayoutAlgorithm getAlteredValue() { 9982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return LayoutAlgorithm.TEXT_AUTOSIZING; 9992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 10022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected LayoutAlgorithm getInitialValue() { 10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return LayoutAlgorithm.NARROW_COLUMNS; 10042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected LayoutAlgorithm getCurrentValue() { 1008c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getLayoutAlgorithm(); 10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 10122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void setCurrentValue(LayoutAlgorithm value) throws Throwable { 10132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) super.setCurrentValue(value); 1014c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setLayoutAlgorithm(value); 10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 10182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void doEnsureSettingHasValue(LayoutAlgorithm value) throws Throwable { 10192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final float actualFontSize = getActualFontSize(); 10202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (value == LayoutAlgorithm.TEXT_AUTOSIZING) { 10212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertFalse("Actual font size: " + actualFontSize, 10222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) actualFontSize == PARAGRAPH_FONT_SIZE); 10232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 10242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertTrue("Actual font size: " + actualFontSize, 10252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) actualFontSize == PARAGRAPH_FONT_SIZE); 10262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class AwSettingsTextZoomTestHelper extends AwSettingsTextAutosizingTestHelper<Integer> { 10312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private static final int INITIAL_TEXT_ZOOM = 100; 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private final float mInitialActualFontSize; 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsTextZoomTestHelper( 1035effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 1037effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient); 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mInitialActualFontSize = getActualFontSize(); 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Integer getAlteredValue() { 10432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return INITIAL_TEXT_ZOOM * 2; 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Integer getInitialValue() { 10482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return INITIAL_TEXT_ZOOM; 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Integer getCurrentValue() { 1053c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getTextZoom(); 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 10572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void setCurrentValue(Integer value) throws Throwable { 10582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) super.setCurrentValue(value); 10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mAwSettings.setTextZoom(value); 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Integer value) throws Throwable { 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final float actualFontSize = getActualFontSize(); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that actual vs. initial font size ratio is similar to actual vs. initial 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // text zoom values ratio. 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final float ratiosDelta = Math.abs( 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (actualFontSize / mInitialActualFontSize) - 1069a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) (value / (float) INITIAL_TEXT_ZOOM)); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertTrue( 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "|(" + actualFontSize + " / " + mInitialActualFontSize + ") - (" + 10722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value + " / " + INITIAL_TEXT_ZOOM + ")| = " + ratiosDelta, 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ratiosDelta <= 0.2f); 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class AwSettingsTextZoomAutosizingTestHelper 10782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extends AwSettingsTextAutosizingTestHelper<Integer> { 10792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private static final int INITIAL_TEXT_ZOOM = 100; 10802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private final float mInitialActualFontSize; 10812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwSettingsTextZoomAutosizingTestHelper( 1083effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 10842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 1085effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient); 1086c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setLayoutAlgorithm(LayoutAlgorithm.TEXT_AUTOSIZING); 10872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The initial font size can be adjusted by font autosizer depending on the page's 10882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // viewport width. 10892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mInitialActualFontSize = getActualFontSize(); 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 10932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Integer getAlteredValue() { 10942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return INITIAL_TEXT_ZOOM * 2; 10952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Integer getInitialValue() { 10992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return INITIAL_TEXT_ZOOM; 11002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 11012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 11032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Integer getCurrentValue() { 1104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getTextZoom(); 11052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 11062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 11082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void setCurrentValue(Integer value) throws Throwable { 11092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) super.setCurrentValue(value); 1110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setTextZoom(value); 11112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 11122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 11142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void doEnsureSettingHasValue(Integer value) throws Throwable { 11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final float actualFontSize = getActualFontSize(); 11162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that actual vs. initial font size ratio is similar to actual vs. initial 11172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // text zoom values ratio. 11182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final float ratiosDelta = Math.abs( 11192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (actualFontSize / mInitialActualFontSize) - 1120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) (value / (float) INITIAL_TEXT_ZOOM)); 11212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertTrue( 11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "|(" + actualFontSize + " / " + mInitialActualFontSize + ") - (" + 11232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value + " / " + INITIAL_TEXT_ZOOM + ")| = " + ratiosDelta, 11242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ratiosDelta <= 0.2f); 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class AwSettingsJavaScriptPopupsTestHelper extends AwSettingsTestHelper<Boolean> { 1129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private static final String POPUP_ENABLED = "Popup enabled"; 1130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private static final String POPUP_BLOCKED = "Popup blocked"; 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsJavaScriptPopupsTestHelper( 1133effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 11342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 1135effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getAlteredValue() { 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ENABLED; 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getInitialValue() { 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DISABLED; 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected Boolean getCurrentValue() { 1150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getJavaScriptCanOpenWindowsAutomatically(); 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 1155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setJavaScriptCanOpenWindowsAutomatically(value); 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync(getData()); 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final boolean expectPopupEnabled = value; 11625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) poll(new Callable<Boolean>() { 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 11645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public Boolean call() throws Exception { 11655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) String title = getTitleOnUiThread(); 11665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return expectPopupEnabled ? POPUP_ENABLED.equals(title) : 11675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) POPUP_BLOCKED.equals(title); 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }); 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(value ? POPUP_ENABLED : POPUP_BLOCKED, getTitleOnUiThread()); 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private String getData() { 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "<html><head>" + 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<script>" + 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " function tryOpenWindow() {" + 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " var newWindow = window.open(" + 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " 'data:text/html;charset=utf-8," + 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <html><head><title>" + POPUP_ENABLED + "</title></head></html>');" + 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " if (!newWindow) document.title = '" + POPUP_BLOCKED + "';" + 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" + 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</script></head>" + 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<body onload='tryOpenWindow()'></body></html>"; 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class AwSettingsCacheModeTestHelper extends AwSettingsTestHelper<Integer> { 11882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwSettingsCacheModeTestHelper( 1190effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 11912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestAwContentsClient contentViewClient, 11922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int index, 11932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestWebServer webServer) throws Throwable { 1194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 11952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mIndex = index; 11962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mWebServer = webServer; 11972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 11982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 12002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Integer getAlteredValue() { 12012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We use the value that results in a behaviour completely opposite to default. 12022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WebSettings.LOAD_CACHE_ONLY; 12032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 12062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Integer getInitialValue() { 12072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WebSettings.LOAD_DEFAULT; 12082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 12112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Integer getCurrentValue() { 12122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return mAwSettings.getCacheMode(); 12132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 12162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void setCurrentValue(Integer value) { 12172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mAwSettings.setCacheMode(value); 12182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 12212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void doEnsureSettingHasValue(Integer value) throws Throwable { 12222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String htmlPath = "/cache_mode_" + mIndex + ".html"; 12232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mIndex += 2; 12242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String url = mWebServer.setResponse(htmlPath, "response", null); 12252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(0, mWebServer.getRequestCount(htmlPath)); 12262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (value == WebSettings.LOAD_DEFAULT) { 12272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync(url); 12282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(1, mWebServer.getRequestCount(htmlPath)); 12292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 12302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSyncAndExpectError(url); 12312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(0, mWebServer.getRequestCount(htmlPath)); 12322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private int mIndex; 12362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private TestWebServer mWebServer; 12372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // To verify whether UseWideViewport works, we check, if the page width specified 12402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // in the "meta viewport" tag is applied. When UseWideViewport is turned off, the 12412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "viewport" tag is ignored, and the layout width is set to device width in DIP pixels. 12422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We specify a very high width value to make sure that it doesn't intersect with 12432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // device screen widths (in DIP pixels). 1244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class AwSettingsUseWideViewportTestHelper extends AwSettingsTestHelper<Boolean> { 1245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private static final String VIEWPORT_TAG_LAYOUT_WIDTH = "3000"; 12462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwSettingsUseWideViewportTestHelper( 1248effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 12492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 1250effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 12512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 12542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Boolean getAlteredValue() { 12552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ENABLED; 12562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 12592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Boolean getInitialValue() { 12602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return DISABLED; 12612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 12642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Boolean getCurrentValue() { 1265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getUseWideViewPort(); 12662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 12692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void setCurrentValue(Boolean value) { 1270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setUseWideViewPort(value); 12712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 12742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 12752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(getData()); 12762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String bodyWidth = getTitleOnUiThread(); 12772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (value) { 12782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertTrue(bodyWidth, VIEWPORT_TAG_LAYOUT_WIDTH.equals(bodyWidth)); 12792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 12802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertFalse(bodyWidth, VIEWPORT_TAG_LAYOUT_WIDTH.equals(bodyWidth)); 12812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private String getData() { 12852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "<html><head>" + 12862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<meta name='viewport' content='width=" + VIEWPORT_TAG_LAYOUT_WIDTH + "' />" + 12872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "</head>" + 12882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<body onload='document.title=document.body.clientWidth'></body></html>"; 12892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class AwSettingsLoadWithOverviewModeTestHelper extends AwSettingsTestHelper<Boolean> { 12932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private static final float DEFAULT_PAGE_SCALE = 1.0f; 12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwSettingsLoadWithOverviewModeTestHelper( 1296effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView containerView, 12972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestAwContentsClient contentViewClient, 12982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) boolean withViewPortTag) throws Throwable { 1299effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch super(containerView, contentViewClient, true); 13002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mWithViewPortTag = withViewPortTag; 1301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setUseWideViewPort(true); 13022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 13052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Boolean getAlteredValue() { 13062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ENABLED; 13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 13102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Boolean getInitialValue() { 13112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return DISABLED; 13122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 13152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected Boolean getCurrentValue() { 1316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mAwSettings.getLoadWithOverviewMode(); 13172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 13202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void setCurrentValue(Boolean value) { 1321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mExpectScaleChange = mAwSettings.getLoadWithOverviewMode() != value; 13222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (mExpectScaleChange) { 13232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mOnScaleChangedCallCount = 13242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mContentViewClient.getOnScaleChangedHelper().getCallCount(); 13252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mAwSettings.setLoadWithOverviewMode(value); 13272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 13302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 13312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(getData()); 13322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (mExpectScaleChange) { 13332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mContentViewClient.getOnScaleChangedHelper(). 13342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) waitForCallback(mOnScaleChangedCallCount); 13352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mExpectScaleChange = false; 13362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float currentScale = AwSettingsTest.this.getScaleOnUiThread(mAwContents); 13382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (value) { 13392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertTrue("Expected: " + currentScale + " < " + DEFAULT_PAGE_SCALE, 13402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) currentScale < DEFAULT_PAGE_SCALE); 13412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 13422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(DEFAULT_PAGE_SCALE, currentScale); 13432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private String getData() { 13472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "<html><head>" + 13482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (mWithViewPortTag ? "<meta name='viewport' content='width=3000' />" : "") + 13492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "</head>" + 13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<body></body></html>"; 13512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private final boolean mWithViewPortTag; 13542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private boolean mExpectScaleChange; 13552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private int mOnScaleChangedCallCount; 13562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) class AwSettingsForceZeroLayoutHeightTestHelper extends AwSettingsTestHelper<Boolean> { 13596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 13606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) AwSettingsForceZeroLayoutHeightTestHelper( 13616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) AwTestContainerView containerView, 13626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) TestAwContentsClient contentViewClient, 13636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) boolean withViewPortTag) throws Throwable { 13646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) super(containerView, contentViewClient, true); 13656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mWithViewPortTag = withViewPortTag; 13666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mAwSettings.setUseWideViewPort(true); 13676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 13686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 13696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 13706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) protected Boolean getAlteredValue() { 13716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return ENABLED; 13726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 13736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 13746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 13756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) protected Boolean getInitialValue() { 13766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return DISABLED; 13776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 13786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 13796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 13806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) protected Boolean getCurrentValue() { 13816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return mAwSettings.getForceZeroLayoutHeight(); 13826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 13836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 13846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 13856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 13866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mAwSettings.setForceZeroLayoutHeight(value); 13876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 13886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 13896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 13906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 13916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) loadDataSync(getData()); 13926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int height = Integer.parseInt(getTitleOnUiThread()); 13936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (value) { 13946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(0, height); 13956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } else { 13966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertTrue("Div should be at least 50px high, was: " + height, height >= 50); 13976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 13986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 13996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private String getData() { 14016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return "<html><head>" + 14026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) (mWithViewPortTag ? "<meta name='viewport' content='height=3000' />" : "") + 14036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " <script type='text/javascript'> " + 14046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " window.addEventListener('load', function(event) { " + 14056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " document.title = document.getElementById('testDiv').clientHeight; " + 14066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " }); " + 14076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " </script> " + 14086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "</head>" + 14096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "<body> " + 14106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " <div style='height:50px;'>test</div> " + 14116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " <div id='testDiv' style='height:100%;'></div> " + 14126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "</body></html>"; 14136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 14146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private final boolean mWithViewPortTag; 14166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 14176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) class AwSettingsZeroLayoutHeightDisablesViewportQuirkTestHelper extends 14196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) AwSettingsTestHelper<Boolean> { 14206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) AwSettingsZeroLayoutHeightDisablesViewportQuirkTestHelper( 14226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) AwTestContainerView containerView, 14236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) TestAwContentsClient contentViewClient) throws Throwable { 14246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) super(containerView, contentViewClient, true); 14256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mAwSettings.setUseWideViewPort(true); 14266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mAwSettings.setForceZeroLayoutHeight(true); 14276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 14286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 14306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) protected Boolean getAlteredValue() { 14316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return ENABLED; 14326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 14336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 14356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) protected Boolean getInitialValue() { 14366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return DISABLED; 14376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 14386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 14406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) protected Boolean getCurrentValue() { 14416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return mAwSettings.getZeroLayoutHeightDisablesViewportQuirk(); 14426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 14436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 14456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) protected void setCurrentValue(Boolean value) { 14466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mAwSettings.setZeroLayoutHeightDisablesViewportQuirk(value); 14476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 14486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 14506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) protected void doEnsureSettingHasValue(Boolean value) throws Throwable { 14516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DeviceDisplayInfo deviceInfo = DeviceDisplayInfo.create(mContext); 14526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int displayWidth = (int) (deviceInfo.getDisplayWidth() / deviceInfo.getDIPScale()); 14536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) loadDataSync(getData()); 14556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int width = Integer.parseInt(getTitleOnUiThread()); 14566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (value) { 14576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(displayWidth, width); 14586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } else { 14596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(3000, width); 14606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 14616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 14626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private String getData() { 14646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return "<html><head>" + 14656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "<meta name='viewport' content='width=3000' />" + 14666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " <script type='text/javascript'> " + 14676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " window.addEventListener('load', function(event) { " + 14686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " document.title = document.documentElement.clientWidth; " + 14696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " }); " + 14706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " </script> " + 14716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "</head>" + 14726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "<body> " + 14736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " <div style='height:50px;'>test</div> " + 14746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) " <div id='testDiv' style='height:100%;'></div> " + 14756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "</body></html>"; 14766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 14776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 14786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The test verifies that JavaScript is disabled upon WebView 1480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // creation without accessing AwSettings. If the test passes, 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it means that WebView-specific web preferences configuration 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is applied on WebView creation. JS state is used, because it is 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // enabled by default in Chrome, but must be disabled by default 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in WebView. 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testJavaScriptDisabledByDefault() throws Throwable { 14881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci final String jsEnabledString = "JS has run"; 14891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci final String jsDisabledString = "JS has not run"; 14901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci final String testPageHtml = 14911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "<html><head><title>" + jsDisabledString + "</title>" 14921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci + "</head><body onload=\"document.title='" + jsEnabledString 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) + "';\"></body></html>"; 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync( 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) awContents, 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contentClient.getOnPageFinishedHelper(), 15011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci testPageHtml, 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "text/html", 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 15041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(jsDisabledString, getTitleOnUiThread(awContents)); 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 15092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testJavaScriptEnabledWithTwoViews() throws Throwable { 15102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 1512effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsJavaScriptTestHelper(views.getContainer0(), views.getClient0()), 1513effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsJavaScriptTestHelper(views.getContainer1(), views.getClient1())); 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 15182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testJavaScriptEnabledDynamicWithTwoViews() throws Throwable { 15192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 1521effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsJavaScriptDynamicTestHelper(views.getContainer0(), views.getClient0()), 1522effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsJavaScriptDynamicTestHelper(views.getContainer1(), views.getClient1())); 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 15272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testPluginsEnabledWithTwoViews() throws Throwable { 15282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 1530effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsPluginsTestHelper(views.getContainer0(), views.getClient0()), 1531effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsPluginsTestHelper(views.getContainer1(), views.getClient1())); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 15362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testStandardFontFamilyWithTwoViews() throws Throwable { 15372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 1539effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsStandardFontFamilyTestHelper(views.getContainer0(), views.getClient0()), 1540effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsStandardFontFamilyTestHelper(views.getContainer1(), views.getClient1())); 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 15452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testDefaultFontSizeWithTwoViews() throws Throwable { 15462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 1548effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsDefaultFontSizeTestHelper(views.getContainer0(), views.getClient0()), 1549effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsDefaultFontSizeTestHelper(views.getContainer1(), views.getClient1())); 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The test verifies that after changing the LoadsImagesAutomatically 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // setting value from false to true previously skipped images are 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // automatically loaded. 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testLoadsImagesAutomaticallyNoPageReload() throws Throwable { 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 1562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwSettings settings = getAwSettingsOnUiThread(awContents); 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setJavaScriptEnabled(true); 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ImagePageGenerator generator = new ImagePageGenerator(0, false); 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setLoadsImagesAutomatically(false); 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync(awContents, 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contentClient.getOnPageFinishedHelper(), 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.getPageSource(), 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "text/html", false); 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(ImagePageGenerator.IMAGE_NOT_LOADED_STRING, 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getTitleOnUiThread(awContents)); 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setLoadsImagesAutomatically(true); 15735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) poll(new Callable<Boolean>() { 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 15755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public Boolean call() throws Exception { 15765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return !ImagePageGenerator.IMAGE_NOT_LOADED_STRING.equals( 15775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) getTitleOnUiThread(awContents)); 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }); 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(ImagePageGenerator.IMAGE_LOADED_STRING, getTitleOnUiThread(awContents)); 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 15862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testLoadsImagesAutomaticallyWithTwoViews() throws Throwable { 15872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new AwSettingsLoadImagesAutomaticallyTestHelper( 1590effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer0(), views.getClient0(), new ImagePageGenerator(0, true)), 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new AwSettingsLoadImagesAutomaticallyTestHelper( 1592effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer1(), views.getClient1(), new ImagePageGenerator(1, true))); 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 15972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testDefaultTextEncodingWithTwoViews() throws Throwable { 15982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 1600effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsDefaultTextEncodingTestHelper(views.getContainer0(), views.getClient0()), 1601effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsDefaultTextEncodingTestHelper(views.getContainer1(), views.getClient1())); 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The test verifies that the default user agent string follows the format 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // defined in Android CTS tests: 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mozilla/5.0 (Linux;[ U;] Android <version>;[ <language>-<country>;] 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // [<devicemodel>;] Build/<buildID>) AppleWebKit/<major>.<minor> (KHTML, like Gecko) 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Version/<major>.<minor>[ Mobile] Safari/<major>.<minor> 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testUserAgentStringDefault() throws Throwable { 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 1617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwSettings settings = getAwSettingsOnUiThread(awContents); 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String actualUserAgentString = settings.getUserAgentString(); 1619f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) assertEquals(actualUserAgentString, AwSettings.getDefaultUserAgent()); 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String patternString = 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Mozilla/5\\.0 \\(Linux;( U;)? Android ([^;]+);( (\\w+)-(\\w+);)?" + 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\\s?(.*)\\sBuild/(.+)\\) AppleWebKit/(\\d+)\\.(\\d+) \\(KHTML, like Gecko\\) " + 1623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "Version/\\d+\\.\\d Chrome/\\d+\\.\\d+\\.\\d+\\.\\d+" + 1624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "( Mobile)? Safari/(\\d+)\\.(\\d+)"; 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final Pattern userAgentExpr = Pattern.compile(patternString); 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Matcher patternMatcher = userAgentExpr.matcher(actualUserAgentString); 16272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertTrue(String.format("User agent string did not match expected pattern. %nExpected " + 16282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "pattern:%n%s%nActual:%n%s", patternString, actualUserAgentString), 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patternMatcher.find()); 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No country-language code token. 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(null, patternMatcher.group(3)); 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ("REL".equals(Build.VERSION.CODENAME)) { 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Model is only added in release builds 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(Build.MODEL, patternMatcher.group(6)); 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Release version is valid only in release builds 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(Build.VERSION.RELEASE, patternMatcher.group(2)); 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(Build.ID, patternMatcher.group(7)); 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testUserAgentStringOverride() throws Throwable { 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 1648c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwSettings settings = getAwSettingsOnUiThread(awContents); 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String defaultUserAgentString = settings.getUserAgentString(); 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that an attempt to reset the default UA string has no effect. 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setUserAgentString(null); 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(defaultUserAgentString, settings.getUserAgentString()); 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setUserAgentString(""); 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(defaultUserAgentString, settings.getUserAgentString()); 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that we can also set the default value. 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setUserAgentString(defaultUserAgentString); 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(defaultUserAgentString, settings.getUserAgentString()); 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set a custom UA string, verify that it can be reset back to default. 1662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) final String customUserAgentString = "AwSettingsTest"; 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setUserAgentString(customUserAgentString); 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(customUserAgentString, settings.getUserAgentString()); 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setUserAgentString(null); 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(defaultUserAgentString, settings.getUserAgentString()); 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that the current UA override setting has a priority over UA 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // overrides in navigation history entries. 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testUserAgentStringOverrideForHistory() throws Throwable { 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 16781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci final WebContents webContents = awContents.getWebContents(); 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CallbackHelper onPageFinishedHelper = contentClient.getOnPageFinishedHelper(); 1680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwSettings settings = getAwSettingsOnUiThread(awContents); 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setJavaScriptEnabled(true); 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String defaultUserAgentString = settings.getUserAgentString(); 1683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) final String customUserAgentString = "AwSettingsTest"; 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We are using different page titles to make sure that we are really 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // going back and forward between them. 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String pageTemplate = 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<html><head><title>%s</title></head>" + 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<body onload='document.title+=navigator.userAgent'></body>" + 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</html>"; 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String page1Title = "Page1"; 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String page2Title = "Page2"; 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String page1 = String.format(pageTemplate, page1Title); 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String page2 = String.format(pageTemplate, page2Title); 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setUserAgentString(customUserAgentString); 16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync( 16962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awContents, onPageFinishedHelper, page1, "text/html", false); 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(page1Title + customUserAgentString, getTitleOnUiThread(awContents)); 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync( 16992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awContents, onPageFinishedHelper, page2, "text/html", false); 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(page2Title + customUserAgentString, getTitleOnUiThread(awContents)); 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setUserAgentString(null); 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Must not cause any changes until the next page loading. 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(page2Title + customUserAgentString, getTitleOnUiThread(awContents)); 17041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HistoryUtils.goBackSync(getInstrumentation(), webContents, onPageFinishedHelper); 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(page1Title + defaultUserAgentString, getTitleOnUiThread(awContents)); 17061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HistoryUtils.goForwardSync(getInstrumentation(), webContents, 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onPageFinishedHelper); 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(page2Title + defaultUserAgentString, getTitleOnUiThread(awContents)); 17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 17132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testUserAgentStringWithTwoViews() throws Throwable { 17142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 1716effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsUserAgentStringTestHelper(views.getContainer0(), views.getClient0()), 1717effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsUserAgentStringTestHelper(views.getContainer1(), views.getClient1())); 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testUserAgentWithTestServer() throws Throwable { 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwContents awContents = testContainerView.getAwContents(); 1727c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwSettings settings = getAwSettingsOnUiThread(awContents); 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String customUserAgentString = 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "testUserAgentWithTestServerUserAgent"; 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestWebServer webServer = null; 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String fileName = null; 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try { 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webServer = new TestWebServer(false); 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String httpPath = "/testUserAgentWithTestServer.html"; 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String url = webServer.setResponse(httpPath, "foo", null); 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setUserAgentString(customUserAgentString); 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadUrlSync(awContents, 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contentClient.getOnPageFinishedHelper(), 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url); 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(1, webServer.getRequestCount(httpPath)); 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpRequest request = webServer.getLastRequest(httpPath); 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Header[] matchingHeaders = request.getHeaders("User-Agent"); 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(1, matchingHeaders.length); 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Header header = matchingHeaders[0]; 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(customUserAgentString, header.getValue()); 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } finally { 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webServer != null) webServer.shutdown(); 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 17572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testDomStorageEnabledWithTwoViews() throws Throwable { 17582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 1760effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsDomStorageEnabledTestHelper(views.getContainer0(), views.getClient0()), 1761effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsDomStorageEnabledTestHelper(views.getContainer1(), views.getClient1())); 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ideally, these three tests below should be combined into one, or tested using 17652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // runPerViewSettingsTest. However, it seems the database setting cannot be toggled 17662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // once set. Filed b/8186497. 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 17692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testDatabaseInitialValue() throws Throwable { 17702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestAwContentsClient client = new TestAwContentsClient(); 17712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwTestContainerView testContainerView = 17722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) createAwTestContainerViewOnMainSync(client); 1773effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwSettingsDatabaseTestHelper helper = 1774effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsDatabaseTestHelper(testContainerView, client); 17752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper.ensureSettingHasInitialValue(); 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 17802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testDatabaseEnabled() throws Throwable { 17812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestAwContentsClient client = new TestAwContentsClient(); 17822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwTestContainerView testContainerView = 17832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) createAwTestContainerViewOnMainSync(client); 1784effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwSettingsDatabaseTestHelper helper = 1785effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsDatabaseTestHelper(testContainerView, client); 17862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper.setAlteredSettingValue(); 17872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper.ensureSettingHasAlteredValue(); 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 17922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testDatabaseDisabled() throws Throwable { 17932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestAwContentsClient client = new TestAwContentsClient(); 17942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwTestContainerView testContainerView = 17952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) createAwTestContainerViewOnMainSync(client); 1796effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwSettingsDatabaseTestHelper helper = 1797effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsDatabaseTestHelper(testContainerView, client); 17982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper.setInitialSettingValue(); 17992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper.ensureSettingHasInitialValue(); 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1802424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) @SmallTest 1803424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 18042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testUniversalAccessFromFilesWithTwoViews() throws Throwable { 18052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 1807effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsUniversalAccessFromFilesTestHelper(views.getContainer0(), 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views.getClient0()), 1809effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsUniversalAccessFromFilesTestHelper(views.getContainer1(), 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views.getClient1())); 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This test verifies that local image resources can be loaded from file: 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLs regardless of file access state. 1815424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) @SmallTest 1816424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testFileAccessFromFilesImage() throws Throwable { 1818424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) final String testFile = "webview/image_access.html"; 1819424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) assertFileIsReadable(UrlUtils.getTestFilePath(testFile)); 1820424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) final String imageContainerUrl = UrlUtils.getTestFileUrl(testFile); 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String imageHeight = "16"; 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 1826c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwSettings settings = getAwSettingsOnUiThread(awContents); 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setJavaScriptEnabled(true); 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setAllowUniversalAccessFromFileURLs(false); 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setAllowFileAccessFromFileURLs(false); 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), imageContainerUrl); 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(imageHeight, getTitleOnUiThread(awContents)); 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1834424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) @SmallTest 1835424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 18362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testFileAccessFromFilesIframeWithTwoViews() throws Throwable { 18372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new AwSettingsFileAccessFromFilesIframeTestHelper( 1840effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer0(), views.getClient0()), 18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new AwSettingsFileAccessFromFilesIframeTestHelper( 1842effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer1(), views.getClient1())); 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) @SmallTest 1846424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 18472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testFileAccessFromFilesXhrWithTwoViews() throws Throwable { 18482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 1850effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsFileAccessFromFilesXhrTestHelper(views.getContainer0(), 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views.getClient0()), 1852effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsFileAccessFromFilesXhrTestHelper(views.getContainer1(), 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views.getClient1())); 18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 18582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testFileUrlAccessWithTwoViews() throws Throwable { 18592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 1861effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsFileUrlAccessTestHelper(views.getContainer0(), views.getClient0(), 0), 1862effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsFileUrlAccessTestHelper(views.getContainer1(), views.getClient1(), 1)); 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 18672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testContentUrlAccessWithTwoViews() throws Throwable { 18682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 1870effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsContentUrlAccessTestHelper(views.getContainer0(), views.getClient0(), 0), 1871effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsContentUrlAccessTestHelper(views.getContainer1(), views.getClient1(), 1)); 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences", "Navigation"}) 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testBlockingContentUrlsFromDataUrls() throws Throwable { 18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String target = "content_from_data"; 18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String page = "<html><body>" + 18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<img src=\"" + 18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createContentUrl(target) + "\">" + 18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</body></html>"; 18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resetResourceRequestCountInContentProvider(target); 18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync( 18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) awContents, 18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contentClient.getOnPageFinishedHelper(), 18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page, 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "text/html", 18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ensureResourceRequestCountInContentProvider(target, 0); 18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 18972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences", "Navigation"}) 18982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testContentUrlFromFileWithTwoViews() throws Throwable { 18992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new AwSettingsContentUrlAccessFromFileTestHelper( 1902effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer0(), views.getClient0(), 0), 19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new AwSettingsContentUrlAccessFromFileTestHelper( 1904effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer1(), views.getClient1(), 1)); 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @SmallTest 1908116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @Feature({"AndroidWebView", "Preferences"}) 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testBlockNetworkImagesDoesNotBlockDataUrlImage() throws Throwable { 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 1914c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) final AwSettings settings = getAwSettingsOnUiThread(awContents); 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ImagePageGenerator generator = new ImagePageGenerator(0, false); 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setJavaScriptEnabled(true); 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setImagesEnabled(false); 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDataSync(awContents, 19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contentClient.getOnPageFinishedHelper(), 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.getPageSource(), 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "text/html", 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(ImagePageGenerator.IMAGE_LOADED_STRING, getTitleOnUiThread(awContents)); 19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testBlockNetworkImagesBlocksNetworkImageAndReloadInPlace() throws Throwable { 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 1934c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) final AwSettings settings = getAwSettingsOnUiThread(awContents); 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setJavaScriptEnabled(true); 19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ImagePageGenerator generator = new ImagePageGenerator(0, false); 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestWebServer webServer = null; 19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try { 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webServer = new TestWebServer(false); 1941d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) final String httpImageUrl = generator.getPageUrl(webServer); 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setImagesEnabled(false); 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), httpImageUrl); 19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(ImagePageGenerator.IMAGE_NOT_LOADED_STRING, 19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getTitleOnUiThread(awContents)); 19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings.setImagesEnabled(true); 19495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) poll(new Callable<Boolean>() { 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 19515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public Boolean call() throws Exception { 19525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ImagePageGenerator.IMAGE_LOADED_STRING.equals( 19535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) getTitleOnUiThread(awContents)); 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }); 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } finally { 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webServer != null) webServer.shutdown(); 19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 19622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 1963d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) public void testBlockNetworkImagesWithTwoViews() throws Throwable { 1964d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ViewPair views = createViews(); 1965d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TestWebServer webServer = null; 1966d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) try { 1967d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webServer = new TestWebServer(false); 1968d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) runPerViewSettingsTest( 1969d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) new AwSettingsImagesEnabledHelper( 1970effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer0(), 1971d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) views.getClient0(), 1972d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webServer, 1973d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) new ImagePageGenerator(0, true)), 1974d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) new AwSettingsImagesEnabledHelper( 1975effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer1(), 1976d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) views.getClient1(), 1977d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webServer, 1978d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) new ImagePageGenerator(1, true))); 1979d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } finally { 1980d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (webServer != null) webServer.shutdown(); 1981d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 1982d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 1983d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1984d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @SmallTest 1985d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 19862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testBlockNetworkLoadsWithHttpResources() throws Throwable { 19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 19882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwTestContainerView testContainer = 19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 19902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwContents awContents = testContainer.getAwContents(); 1991c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) final AwSettings awSettings = getAwSettingsOnUiThread(awContents); 1992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) awSettings.setJavaScriptEnabled(true); 19932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ImagePageGenerator generator = new ImagePageGenerator(0, false); 19942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestWebServer webServer = null; 19962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) String fileName = null; 19972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try { 19982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up http image. 19992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer = new TestWebServer(false); 20002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String httpPath = "/image.png"; 20012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String imageUrl = webServer.setResponseBase64( 20022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) httpPath, generator.getImageSourceNoAdvance(), 20032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommonResources.getImagePngHeaders(true)); 20042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up file html that loads http iframe. 2006a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) String pageHtml = "<img src='" + imageUrl + "' " + 20072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "onload=\"document.title='img_onload_fired';\" " + 20082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "onerror=\"document.title='img_onerror_fired';\" />"; 20092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Context context = getInstrumentation().getTargetContext(); 20102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fileName = context.getCacheDir() + "/block_network_loads_test.html"; 20112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestFileUtil.deleteFile(fileName); // Remove leftover file if any. 20122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestFileUtil.createNewHtmlFile(fileName, "unset", pageHtml); 20132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Actual test. Blocking should trigger onerror handler. 20152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awSettings.setBlockNetworkLoads(true); 20162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync( 20172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awContents, 20182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 20192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "file:///" + fileName); 20202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(0, webServer.getRequestCount(httpPath)); 20212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals("img_onerror_fired", getTitleOnUiThread(awContents)); 20222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Unblock should load normally. 20242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awSettings.setBlockNetworkLoads(false); 20252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync( 20262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awContents, 20272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 20282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "file:///" + fileName); 20292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(1, webServer.getRequestCount(httpPath)); 20302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals("img_onload_fired", getTitleOnUiThread(awContents)); 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } finally { 20322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (fileName != null) TestFileUtil.deleteFile(fileName); 20332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webServer != null) webServer.shutdown(); 20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private static class AudioEvent { 2038f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private CallbackHelper mCallback; 2039f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public AudioEvent(CallbackHelper callback) { 2040f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mCallback = callback; 2041f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2042f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2043f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @JavascriptInterface 2044f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public void onCanPlay() { 2045f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mCallback.notifyCalled(); 2046f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2047f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2048f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @JavascriptInterface 2049f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public void onError() { 2050f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mCallback.notifyCalled(); 2051f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2052f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2053f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2054f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @SmallTest 2055f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 2056f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public void testBlockNetworkLoadsWithAudio() throws Throwable { 2057f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 2058f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) final AwTestContainerView testContainer = 2059f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 2060f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) final AwContents awContents = testContainer.getAwContents(); 2061f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) final AwSettings awSettings = getAwSettingsOnUiThread(awContents); 2062116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch final CallbackHelper callback = new CallbackHelper(); 2063f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) awSettings.setJavaScriptEnabled(true); 2064f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2065f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TestWebServer webServer = null; 2066f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) try { 2067f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webServer = new TestWebServer(false); 2068f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) final String httpPath = "/audio.mp3"; 2069f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Don't care about the response is correct or not, just want 2070f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // to know whether Url is accessed. 2071f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) final String audioUrl = webServer.setResponse(httpPath, "1", null); 2072f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2073a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) String pageHtml = "<html><body><audio controls src='" + audioUrl + "' " + 2074f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "oncanplay=\"AudioEvent.onCanPlay();\" " + 2075f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "onerror=\"AudioEvent.onError();\" /> </body></html>"; 2076f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Actual test. Blocking should trigger onerror handler. 2077f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) awSettings.setBlockNetworkLoads(true); 2078116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch runTestOnUiThread(new Runnable() { 2079116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @Override 2080116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public void run() { 2081116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch awContents.addPossiblyUnsafeJavascriptInterface( 2082116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new AudioEvent(callback), "AudioEvent", null); 2083116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 2084116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }); 2085f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int count = callback.getCallCount(); 2086f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) loadDataSync(awContents, contentClient.getOnPageFinishedHelper(), pageHtml, 2087f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "text/html", false); 2088f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback.waitForCallback(count, 1); 2089f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) assertEquals(0, webServer.getRequestCount(httpPath)); 2090f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2091f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The below test failed in Nexus Galaxy. 2092f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // See https://code.google.com/p/chromium/issues/detail?id=313463 2093f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Unblock should load normally. 2094f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) /* 2095f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) awSettings.setBlockNetworkLoads(false); 2096f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) count = callback.getCallCount(); 2097f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) loadDataSync(awContents, contentClient.getOnPageFinishedHelper(), pageHtml, 2098f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "text/html", false); 2099f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback.waitForCallback(count, 1); 2100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) assertTrue(0 != webServer.getRequestCount(httpPath)); 2101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 2102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } finally { 2103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (webServer != null) webServer.shutdown(); 2104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 21072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test an assert URL (file:///android_asset/) 21082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 21092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Navigation"}) 21102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testAssetUrl() throws Throwable { 21112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note: this text needs to be kept in sync with the contents of the html file referenced 21122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // below. 21132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String expectedTitle = "Asset File"; 21142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 21152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwTestContainerView testContainerView = 21162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 21172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 21182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync(awContents, 21192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 21202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "file:///android_asset/asset_file.html"); 21212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(expectedTitle, getTitleOnUiThread(awContents)); 21222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 21232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test a resource URL (file:///android_res/). 21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Navigation"}) 21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testResourceUrl() throws Throwable { 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: this text needs to be kept in sync with the contents of the html file referenced 21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // below. 21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String expectedTitle = "Resource File"; 21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 21352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync(awContents, 21362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 21372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "file:///android_res/raw/resource_file.html"); 21382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(expectedTitle, getTitleOnUiThread(awContents)); 21395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that the file URL access toggle does not affect asset URLs. 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Navigation"}) 21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testFileUrlAccessToggleDoesNotBlockAssetUrls() throws Throwable { 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: this text needs to be kept in sync with the contents of the html file referenced 21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // below. 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String expectedTitle = "Asset File"; 21485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 21505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 21525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwSettings settings = getAwSettingsOnUiThread(awContents); 21532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.setAllowFileAccess(false); 21542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync(awContents, 21552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 21562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "file:///android_asset/asset_file.html"); 21572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(expectedTitle, getTitleOnUiThread(awContents)); 21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that the file URL access toggle does not affect resource URLs. 21615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 21625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView", "Navigation"}) 21635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testFileUrlAccessToggleDoesNotBlockResourceUrls() throws Throwable { 21645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: this text needs to be kept in sync with the contents of the html file referenced 21655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // below. 21665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final String expectedTitle = "Resource File"; 21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 21685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwTestContainerView testContainerView = 21695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 21705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 21715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) final AwSettings settings = getAwSettingsOnUiThread(awContents); 21722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.setAllowFileAccess(false); 21732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync(awContents, 21742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 21752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "file:///android_res/raw/resource_file.html"); 21762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(expectedTitle, getTitleOnUiThread(awContents)); 21775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 21802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 21812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testLayoutAlgorithmWithTwoViews() throws Throwable { 21822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 21832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) runPerViewSettingsTest( 2184effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsLayoutAlgorithmTestHelper(views.getContainer0(), views.getClient0()), 2185effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsLayoutAlgorithmTestHelper(views.getContainer1(), views.getClient1())); 21862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 21872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 21892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 21902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testTextZoomWithTwoViews() throws Throwable { 21912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 21925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 2193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsTextZoomTestHelper(views.getContainer0(), views.getClient0()), 2194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsTextZoomTestHelper(views.getContainer1(), views.getClient1())); 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 21982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 21992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testTextZoomAutosizingWithTwoViews() throws Throwable { 22002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 22012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) runPerViewSettingsTest( 2202effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsTextZoomAutosizingTestHelper(views.getContainer0(), views.getClient0()), 2203effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsTextZoomAutosizingTestHelper(views.getContainer1(), views.getClient1())); 22042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 22052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 22072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 22082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testJavaScriptPopupsWithTwoViews() throws Throwable { 22092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 22102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) runPerViewSettingsTest( 2211effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsJavaScriptPopupsTestHelper(views.getContainer0(), views.getClient0()), 2212effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsJavaScriptPopupsTestHelper(views.getContainer1(), views.getClient1())); 22132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 22142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 22162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 22172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testCacheMode() throws Throwable { 22182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 22192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwTestContainerView testContainer = 22202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 22212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwContents awContents = testContainer.getAwContents(); 22222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwSettings awSettings = getAwSettingsOnUiThread(testContainer.getAwContents()); 22232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clearCacheOnUiThread(awContents, true); 22242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(WebSettings.LOAD_DEFAULT, awSettings.getCacheMode()); 22262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestWebServer webServer = null; 22272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try { 22282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer = new TestWebServer(false); 22292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String htmlPath = "/testCacheMode.html"; 22302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String url = webServer.setResponse(htmlPath, "response", null); 22312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 22322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), url); 22332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(1, webServer.getRequestCount(htmlPath)); 22342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), url); 22352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(1, webServer.getRequestCount(htmlPath)); 22362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); 22382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), url); 22392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(2, webServer.getRequestCount(htmlPath)); 22402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), url); 22412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(3, webServer.getRequestCount(htmlPath)); 22422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awSettings.setCacheMode(WebSettings.LOAD_CACHE_ONLY); 22442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), url); 22452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(3, webServer.getRequestCount(htmlPath)); 22462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), url); 22472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(3, webServer.getRequestCount(htmlPath)); 22482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String htmlNotInCachePath = "/testCacheMode-not-in-cache.html"; 22502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String urlNotInCache = webServer.setResponse(htmlNotInCachePath, "", null); 22512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSyncAndExpectError(awContents, 22522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 22532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnReceivedErrorHelper(), 22542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) urlNotInCache); 22552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(0, webServer.getRequestCount(htmlNotInCachePath)); 22562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } finally { 22572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webServer != null) webServer.shutdown(); 22582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 22592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 22602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 22622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 22632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // As our implementation of network loads blocking uses the same net::URLRequest settings, make 22642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // sure that setting cache mode doesn't accidentally enable network loads. The reference 22652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // behaviour is that when network loads are blocked, setting cache mode has no effect. 22662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testCacheModeWithBlockedNetworkLoads() throws Throwable { 22672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 22682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwTestContainerView testContainer = 22692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 22702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwContents awContents = testContainer.getAwContents(); 22712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwSettings awSettings = getAwSettingsOnUiThread(testContainer.getAwContents()); 22722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clearCacheOnUiThread(awContents, true); 22732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(WebSettings.LOAD_DEFAULT, awSettings.getCacheMode()); 22752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awSettings.setBlockNetworkLoads(true); 22762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestWebServer webServer = null; 22772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try { 22782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer = new TestWebServer(false); 22792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String htmlPath = "/testCacheModeWithBlockedNetworkLoads.html"; 22802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String url = webServer.setResponse(htmlPath, "response", null); 22812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSyncAndExpectError(awContents, 22822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 22832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnReceivedErrorHelper(), 22842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url); 22852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(0, webServer.getRequestCount(htmlPath)); 22862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 22882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSyncAndExpectError(awContents, 22892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 22902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnReceivedErrorHelper(), 22912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url); 22922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(0, webServer.getRequestCount(htmlPath)); 22932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); 22952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSyncAndExpectError(awContents, 22962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 22972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnReceivedErrorHelper(), 22982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url); 22992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(0, webServer.getRequestCount(htmlPath)); 23002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awSettings.setCacheMode(WebSettings.LOAD_CACHE_ONLY); 23022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSyncAndExpectError(awContents, 23032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 23042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnReceivedErrorHelper(), 23052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url); 23062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(0, webServer.getRequestCount(htmlPath)); 23072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } finally { 23082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webServer != null) webServer.shutdown(); 23092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 23132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 23142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testCacheModeWithTwoViews() throws Throwable { 23152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 23162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestWebServer webServer = null; 23172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try { 23182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer = new TestWebServer(false); 23192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) runPerViewSettingsTest( 23202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new AwSettingsCacheModeTestHelper( 2321effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer0(), views.getClient0(), 0, webServer), 23222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new AwSettingsCacheModeTestHelper( 2323effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer1(), views.getClient1(), 1, webServer)); 23242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } finally { 23252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webServer != null) webServer.shutdown(); 23262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static class ManifestTestHelper { 23302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private final TestWebServer mWebServer; 23312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private final String mHtmlPath; 23322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private final String mHtmlUrl; 23332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private final String mManifestPath; 23342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ManifestTestHelper( 23362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestWebServer webServer, String htmlPageName, String manifestName) { 23372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mWebServer = webServer; 23382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mHtmlPath = "/" + htmlPageName; 23392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mHtmlUrl = webServer.setResponse( 23402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mHtmlPath, "<html manifest=\"" + manifestName + "\"></html>", null); 23412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mManifestPath = "/" + manifestName; 23422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer.setResponse( 23432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mManifestPath, 23442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "CACHE MANIFEST", 23452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommonResources.getContentTypeAndCacheHeaders("text/cache-manifest", false)); 23462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) String getHtmlPath() { 23492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return mHtmlPath; 23502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) String getHtmlUrl() { 23532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return mHtmlUrl; 23542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) String getManifestPath() { 23572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return mManifestPath; 23582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int waitUntilHtmlIsRequested(final int initialRequestCount) throws Exception { 23612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return waitUntilResourceIsRequested(mHtmlPath, initialRequestCount); 23622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int waitUntilManifestIsRequested(final int initialRequestCount) throws Exception { 23652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return waitUntilResourceIsRequested(mManifestPath, initialRequestCount); 23662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private int waitUntilResourceIsRequested( 23695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) final String path, final int initialRequestCount) throws Exception { 23705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) poll(new Callable<Boolean>() { 23712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 23725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public Boolean call() throws Exception { 23732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return mWebServer.getRequestCount(path) > initialRequestCount; 23742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }); 23762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return mWebServer.getRequestCount(path); 23772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 23792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 23812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences", "AppCache"}) 23822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testAppCache() throws Throwable { 23832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 23842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwTestContainerView testContainer = 23852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 23862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwContents awContents = testContainer.getAwContents(); 2387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) final AwSettings settings = getAwSettingsOnUiThread(awContents); 23882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.setJavaScriptEnabled(true); 23892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that the cache isn't actually enabled until the call to setAppCachePath. 23902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.setAppCacheEnabled(true); 23912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestWebServer webServer = null; 23932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try { 23942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer = new TestWebServer(false); 23952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ManifestTestHelper helper = new ManifestTestHelper( 23962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer, "testAppCache.html", "appcache.manifest"); 23972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync( 23982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awContents, 23992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 24002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper.getHtmlUrl()); 24012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper.waitUntilHtmlIsRequested(0); 24022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Unfortunately, there is no other good way of verifying that AppCache is 24032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // disabled, other than checking that it didn't try to fetch the manifest. 24042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Thread.sleep(1000); 24052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(0, webServer.getRequestCount(helper.getManifestPath())); 24062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.setAppCachePath("whatever"); // Enables AppCache. 24072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync( 24082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awContents, 24092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnPageFinishedHelper(), 24102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper.getHtmlUrl()); 24112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper.waitUntilManifestIsRequested(0); 24122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } finally { 24132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webServer != null) webServer.shutdown(); 24142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 24152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 24162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2417a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @SmallTest 2418a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences", "AppCache"}) 24192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testAppCacheWithTwoViews() throws Throwable { 24202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We don't use the test helper here, because making sure that AppCache 24212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // is disabled takes a lot of time, so running through the usual drill 24222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // will take about 20 seconds. 24232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 24242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwSettings settings0 = getAwSettingsOnUiThread(views.getContents0()); 24262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings0.setJavaScriptEnabled(true); 24272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings0.setAppCachePath("whatever"); 24282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings0.setAppCacheEnabled(true); 2429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwSettings settings1 = getAwSettingsOnUiThread(views.getContents1()); 24302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings1.setJavaScriptEnabled(true); 24312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // AppCachePath setting is global, no need to set it for the second view. 24322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings1.setAppCacheEnabled(true); 24332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestWebServer webServer = null; 24352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try { 24362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer = new TestWebServer(false); 24372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ManifestTestHelper helper0 = new ManifestTestHelper( 24382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer, "testAppCache_0.html", "appcache.manifest_0"); 24392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync( 24402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views.getContents0(), 24412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views.getClient0().getOnPageFinishedHelper(), 24422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper0.getHtmlUrl()); 24432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int manifestRequests0 = helper0.waitUntilManifestIsRequested(0); 24442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ManifestTestHelper helper1 = new ManifestTestHelper( 24452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer, "testAppCache_1.html", "appcache.manifest_1"); 24462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync( 24472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views.getContents1(), 24482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views.getClient1().getOnPageFinishedHelper(), 24492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper1.getHtmlUrl()); 24502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper1.waitUntilManifestIsRequested(0); 24512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings1.setAppCacheEnabled(false); 24522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync( 24532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views.getContents0(), 24542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views.getClient0().getOnPageFinishedHelper(), 24552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper0.getHtmlUrl()); 24562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper0.waitUntilManifestIsRequested(manifestRequests0); 24572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final int prevManifestRequestCount = 24582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer.getRequestCount(helper1.getManifestPath()); 24592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int htmlRequests1 = webServer.getRequestCount(helper1.getHtmlPath()); 24602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadUrlSync( 24612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views.getContents1(), 24622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views.getClient1().getOnPageFinishedHelper(), 24632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper1.getHtmlUrl()); 24642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper1.waitUntilHtmlIsRequested(htmlRequests1); 24652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Unfortunately, there is no other good way of verifying that AppCache is 24662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // disabled, other than checking that it didn't try to fetch the manifest. 24672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Thread.sleep(1000); 24682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals( 24692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prevManifestRequestCount, webServer.getRequestCount(helper1.getManifestPath())); 24702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } finally { 24712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webServer != null) webServer.shutdown(); 24722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 24732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 24742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 24762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 24772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testUseWideViewportWithTwoViews() throws Throwable { 2478e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ViewPair views = createViews(true); 24795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 2480effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsUseWideViewportTestHelper(views.getContainer0(), views.getClient0()), 2481effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsUseWideViewportTestHelper(views.getContainer1(), views.getClient1())); 24825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2484d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @SmallTest 2485d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 2486d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) public void testUseWideViewportWithTwoViewsNoQuirks() throws Throwable { 2487e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ViewPair views = createViews(); 2488d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) runPerViewSettingsTest( 2489effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsUseWideViewportTestHelper(views.getContainer0(), views.getClient0()), 2490effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new AwSettingsUseWideViewportTestHelper(views.getContainer1(), views.getClient1())); 2491d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 2492d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 2493d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private void useWideViewportLayoutWidthTest( 2494effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView testContainer, CallbackHelper onPageFinishedHelper) 2495effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch throws Throwable { 2496effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch final AwContents awContents = testContainer.getAwContents(); 2497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwSettings settings = getAwSettingsOnUiThread(awContents); 24982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String pageTemplate = "<html><head>%s</head>" + 25002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<body onload='document.title=document.body.clientWidth'></body></html>"; 25012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String pageNoViewport = String.format(pageTemplate, ""); 25022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String pageViewportDeviceWidth = String.format( 25032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pageTemplate, 25042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<meta name='viewport' content='width=device-width' />"); 25052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String viewportTagSpecifiedWidth = "3000"; 25062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String pageViewportSpecifiedWidth = String.format( 25072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pageTemplate, 25082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<meta name='viewport' content='width=" + viewportTagSpecifiedWidth + "' />"); 25092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2510effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DeviceDisplayInfo deviceInfo = DeviceDisplayInfo.create(testContainer.getContext()); 25112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int displayWidth = (int) (deviceInfo.getDisplayWidth() / deviceInfo.getDIPScale()); 25122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 25132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.setJavaScriptEnabled(true); 25142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertFalse(settings.getUseWideViewPort()); 2515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // When UseWideViewPort is off, "width" setting of "meta viewport" 2516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // tags is ignored, and the layout width is set to device width in CSS pixels. 25172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Thus, all 3 pages will have the same body width. 25182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(awContents, onPageFinishedHelper, pageNoViewport, "text/html", false); 25192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int actualWidth = Integer.parseInt(getTitleOnUiThread(awContents)); 25202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Avoid rounding errors. 25212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertTrue("Expected: " + displayWidth + ", Actual: " + actualWidth, 25222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Math.abs(displayWidth - actualWidth) <= 1); 25232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(awContents, onPageFinishedHelper, pageViewportDeviceWidth, "text/html", false); 25242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) actualWidth = Integer.parseInt(getTitleOnUiThread(awContents)); 25252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertTrue("Expected: " + displayWidth + ", Actual: " + actualWidth, 25262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Math.abs(displayWidth - actualWidth) <= 1); 25272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync( 25282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awContents, onPageFinishedHelper, pageViewportSpecifiedWidth, "text/html", false); 25292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) actualWidth = Integer.parseInt(getTitleOnUiThread(awContents)); 25302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertTrue("Expected: " + displayWidth + ", Actual: " + actualWidth, 25312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Math.abs(displayWidth - actualWidth) <= 1); 25322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 25332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.setUseWideViewPort(true); 25342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // When UseWideViewPort is on, "meta viewport" tag is used. 25352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If there is no viewport tag, or width isn't specified, 25362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // then layout width is set to max(980, <device-width-in-DIP-pixels>) 25372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(awContents, onPageFinishedHelper, pageNoViewport, "text/html", false); 25382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) actualWidth = Integer.parseInt(getTitleOnUiThread(awContents)); 25392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertTrue("Expected: >= 980 , Actual: " + actualWidth, actualWidth >= 980); 25402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(awContents, onPageFinishedHelper, pageViewportDeviceWidth, "text/html", false); 25412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) actualWidth = Integer.parseInt(getTitleOnUiThread(awContents)); 25422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertTrue("Expected: " + displayWidth + ", Actual: " + actualWidth, 25432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Math.abs(displayWidth - actualWidth) <= 1); 25442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync( 25452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awContents, onPageFinishedHelper, pageViewportSpecifiedWidth, "text/html", false); 25462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(viewportTagSpecifiedWidth, getTitleOnUiThread(awContents)); 25472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 25482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2549d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @SmallTest 2550d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 2551d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) public void testUseWideViewportLayoutWidth() throws Throwable { 2552d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TestAwContentsClient contentClient = new TestAwContentsClient(); 2553d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) AwTestContainerView testContainerView = 2554d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 2555effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch useWideViewportLayoutWidthTest(testContainerView, contentClient.getOnPageFinishedHelper()); 2556d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 2557d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 2558d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @SmallTest 2559d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 2560d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) public void testUseWideViewportLayoutWidthNoQuirks() throws Throwable { 2561d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TestAwContentsClient contentClient = new TestAwContentsClient(); 2562d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) AwTestContainerView testContainerView = 2563d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient, false); 2564effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch useWideViewportLayoutWidthTest(testContainerView, contentClient.getOnPageFinishedHelper()); 2565d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 2566d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 2567c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @MediumTest 2568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 25692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testUseWideViewportControlsDoubleTabToZoom() throws Throwable { 25702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 25712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwTestContainerView testContainerView = 25722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 25732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 25742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CallbackHelper onPageFinishedHelper = contentClient.getOnPageFinishedHelper(); 2575f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AwSettings settings = getAwSettingsOnUiThread(awContents); 2576f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) settings.setBuiltInZoomControls(true); 25772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2578effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DeviceDisplayInfo deviceInfo = 2579effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DeviceDisplayInfo.create(testContainerView.getContext()); 2580effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int displayWidth = (int) (deviceInfo.getDisplayWidth() / deviceInfo.getDIPScale()); 2581effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int layoutWidth = displayWidth * 2; 2582effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch final String page = "<html>" + 2583effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "<head><meta name='viewport' content='width=" + layoutWidth + "'>" + 2584effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "<style> body { width: " + layoutWidth + "px; }</style></head>" + 2585effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "<body>Page Text</body></html>"; 2586effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 25872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertFalse(settings.getUseWideViewPort()); 2588effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Without wide viewport the <meta viewport> tag will be ignored by WebView, 2589effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // but it doesn't really matter as we don't expect double tap to change the scale. 25902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false); 25912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final float initialScale = getScaleOnUiThread(awContents); 25922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) simulateDoubleTapCenterOfWebViewOnUiThread(testContainerView); 25932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Thread.sleep(1000); 25942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(initialScale, getScaleOnUiThread(awContents)); 25952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 25962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.setUseWideViewPort(true); 25972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false); 25982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int onScaleChangedCallCount = contentClient.getOnScaleChangedHelper().getCallCount(); 25992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) simulateDoubleTapCenterOfWebViewOnUiThread(testContainerView); 26002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnScaleChangedHelper().waitForCallback(onScaleChangedCallCount); 26012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final float zoomedOutScale = getScaleOnUiThread(awContents); 26022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertTrue("zoomedOut: " + zoomedOutScale + ", initial: " + initialScale, 26032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) zoomedOutScale < initialScale); 26045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 26072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 26086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public void testForceZeroLayoutHeightWithTwoViews() throws Throwable { 26096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ViewPair views = createViews(); 26106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) runPerViewSettingsTest( 26116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new AwSettingsForceZeroLayoutHeightTestHelper( 26126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) views.getContainer0(), views.getClient0(), false), 26136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new AwSettingsForceZeroLayoutHeightTestHelper( 26146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) views.getContainer1(), views.getClient1(), false)); 26156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 26166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 26176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @SmallTest 26186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 26196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public void testForceZeroLayoutHeightViewportTagWithTwoViews() throws Throwable { 26206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ViewPair views = createViews(); 26216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) runPerViewSettingsTest( 26226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new AwSettingsForceZeroLayoutHeightTestHelper( 26236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) views.getContainer0(), views.getClient0(), true), 26246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new AwSettingsForceZeroLayoutHeightTestHelper( 26256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) views.getContainer1(), views.getClient1(), true)); 26266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 26276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 26286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @SmallTest 26296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 26306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public void testZeroLayoutHeightDisablesViewportQuirkWithTwoViews() throws Throwable { 26316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ViewPair views = createViews(); 26326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) runPerViewSettingsTest( 26336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new AwSettingsZeroLayoutHeightDisablesViewportQuirkTestHelper( 26346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) views.getContainer0(), views.getClient0()), 26356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new AwSettingsZeroLayoutHeightDisablesViewportQuirkTestHelper( 26366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) views.getContainer1(), views.getClient1())); 26376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 26386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 26396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @SmallTest 26406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 26412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testLoadWithOverviewModeWithTwoViews() throws Throwable { 26422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 26435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 26442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new AwSettingsLoadWithOverviewModeTestHelper( 2645effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer0(), views.getClient0(), false), 26462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new AwSettingsLoadWithOverviewModeTestHelper( 2647effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer1(), views.getClient1(), false)); 26485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @SmallTest 2651f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 26522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testLoadWithOverviewModeViewportTagWithTwoViews() throws Throwable { 26532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewPair views = createViews(); 26545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runPerViewSettingsTest( 26552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new AwSettingsLoadWithOverviewModeTestHelper( 2656effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer0(), views.getClient0(), true), 26572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new AwSettingsLoadWithOverviewModeTestHelper( 2658effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views.getContainer1(), views.getClient1(), true)); 26595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 26622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 26632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testSetInitialScale() throws Throwable { 26642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final TestAwContentsClient contentClient = new TestAwContentsClient(); 26652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwTestContainerView testContainerView = 26662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) createAwTestContainerViewOnMainSync(contentClient); 26672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwContents awContents = testContainerView.getAwContents(); 26682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwSettings awSettings = getAwSettingsOnUiThread(awContents); 26692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CallbackHelper onPageFinishedHelper = contentClient.getOnPageFinishedHelper(); 26702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch WindowManager wm = (WindowManager) getInstrumentation().getTargetContext() 26727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch .getSystemService(Context.WINDOW_SERVICE); 26737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Point screenSize = new Point(); 26747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch wm.getDefaultDisplay().getSize(screenSize); 26757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Make sure after 50% scale, page width still larger than screen. 26767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int height = screenSize.y * 2 + 1; 26777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int width = screenSize.x * 2 + 1; 26782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final String page = "<html><body>" + 2679a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "<p style='height:" + height + "px;width:" + width + "px'>" + 26807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "testSetInitialScale</p></body></html>"; 26812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final float defaultScale = 26822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) getInstrumentation().getTargetContext().getResources().getDisplayMetrics().density; 26832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(defaultScale, getPixelScaleOnUiThread(awContents), .01f); 26852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false); 26862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(defaultScale, getPixelScaleOnUiThread(awContents), .01f); 26872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int onScaleChangedCallCount = contentClient.getOnScaleChangedHelper().getCallCount(); 26892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awSettings.setInitialPageScale(50); 26902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false); 26912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnScaleChangedHelper().waitForCallback(onScaleChangedCallCount); 26922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(0.5f, getPixelScaleOnUiThread(awContents), .01f); 26932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onScaleChangedCallCount = contentClient.getOnScaleChangedHelper().getCallCount(); 26952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awSettings.setInitialPageScale(500); 26962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false); 26972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnScaleChangedHelper().waitForCallback(onScaleChangedCallCount); 26982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(5.0f, getPixelScaleOnUiThread(awContents), .01f); 26992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onScaleChangedCallCount = contentClient.getOnScaleChangedHelper().getCallCount(); 27012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) awSettings.setInitialPageScale(0); 27022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false); 27032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentClient.getOnScaleChangedHelper().waitForCallback(onScaleChangedCallCount); 27042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertEquals(defaultScale, getPixelScaleOnUiThread(awContents), .01f); 27052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 27062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /* 27082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @LargeTest 27092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 27104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) http://crbug.com/304549 27114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 27124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) @DisabledTest 27132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testMediaPlaybackWithoutUserGesture() throws Throwable { 2714010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) assertTrue(VideoTestUtil.runVideoTest(this, false, WAIT_TIMEOUT_MS)); 27152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 27162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 27182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 27192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testMediaPlaybackWithUserGesture() throws Throwable { 27202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wait for 5 second to see if video played. 2721010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) assertFalse(VideoTestUtil.runVideoTest(this, true, scaleTimeout(5000))); 27222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 27232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 27252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"AndroidWebView", "Preferences"}) 27262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testDefaultVideoPosterURL() throws Throwable { 27272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final CallbackHelper videoPosterAccessedCallbackHelper = new CallbackHelper(); 27281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci final String defaultVideoPosterUrl = "http://default_video_poster/"; 27292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestAwContentsClient client = new TestAwContentsClient() { 27302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 27316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) public AwWebResourceResponse shouldInterceptRequest( 27326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ShouldInterceptRequestParams params) { 27331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (params.url.equals(defaultVideoPosterUrl)) { 27342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) videoPosterAccessedCallbackHelper.notifyCalled(); 27352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 27362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return null; 27372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 27382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 27392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwContents awContents = createAwTestContainerViewOnMainSync(client).getAwContents(); 27402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) getInstrumentation().runOnMainSync(new Runnable() { 27412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 27422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void run() { 2743c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwSettings awSettings = awContents.getSettings(); 27441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci awSettings.setDefaultVideoPosterURL(defaultVideoPosterUrl); 27452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 27462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }); 27472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VideoTestWebServer webServer = new VideoTestWebServer( 27482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) getInstrumentation().getTargetContext()); 27492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try { 27502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) String data = "<html><head><body>" + 27512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<video id='video' control src='" + 27522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer.getOnePixelOneFrameWebmURL() + "' /> </body></html>"; 27532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadDataAsync(awContents, data, "text/html", false); 27542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) videoPosterAccessedCallbackHelper.waitForCallback(0, 1, 20, TimeUnit.SECONDS); 27552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } finally { 27562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webServer.getTestWebServer() != null) 27572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webServer.getTestWebServer().shutdown(); 27582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 27592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 27602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch @SmallTest 27620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch @Feature({"AndroidWebView", "Preferences"}) 27630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public void testAllowMixedMode() throws Throwable { 27640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch final TestAwContentsClient contentClient = new TestAwContentsClient() { 27650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch @Override 27660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public void onReceivedSslError(ValueCallback<Boolean> callback, SslError error) { 27670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch callback.onReceiveValue(true); 27680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 27690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch }; 27700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch final AwTestContainerView testContainerView = 27710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch createAwTestContainerViewOnMainSync(contentClient); 27720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch final AwContents awContents = testContainerView.getAwContents(); 27730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch final AwSettings awSettings = getAwSettingsOnUiThread(awContents); 27740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 27750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch awSettings.setJavaScriptEnabled(true); 27760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 27771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestWebServer httpsServer = null; 27781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestWebServer httpServer = null; 27791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci try { 27801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci httpsServer = new TestWebServer(true); 27811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci httpServer = new TestWebServer(false); 27820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 27831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci final String jsUrl = "/insecure.js"; 27841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci final String imageUrl = "/insecure.png"; 27851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci final String secureUrl = "/secure.html"; 27861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci httpServer.setResponse(jsUrl, "window.loaded_js = 42;", null); 27871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci httpServer.setResponseBase64(imageUrl, CommonResources.FAVICON_DATA_BASE64, null); 27880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 27891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci final String jsHtml = "<script src=\"" + httpServer.getResponseUrl(jsUrl) + 27900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "\"></script>"; 27911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci final String imageHtml = "<img src=\"" + httpServer.getResponseUrl(imageUrl) + "\" />"; 27921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci final String secureHtml = "<body>" + imageHtml + " " + jsHtml + "</body>"; 27931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 27941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci String fullSecureUrl = httpsServer.setResponse(secureUrl, secureHtml, null); 27951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 27961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci awSettings.setMixedContentMode(AwSettings.MIXED_CONTENT_NEVER_ALLOW); 27971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), fullSecureUrl); 27981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(1, httpsServer.getRequestCount(secureUrl)); 27991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(0, httpServer.getRequestCount(jsUrl)); 28001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(0, httpServer.getRequestCount(imageUrl)); 28011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 28021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci awSettings.setMixedContentMode(AwSettings.MIXED_CONTENT_ALWAYS_ALLOW); 28031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), fullSecureUrl); 28041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(2, httpsServer.getRequestCount(secureUrl)); 28051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(1, httpServer.getRequestCount(jsUrl)); 28061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(1, httpServer.getRequestCount(imageUrl)); 28071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 28081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci awSettings.setMixedContentMode(AwSettings.MIXED_CONTENT_COMPATIBILITY_MODE); 28091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), fullSecureUrl); 28101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(3, httpsServer.getRequestCount(secureUrl)); 28111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(1, httpServer.getRequestCount(jsUrl)); 28121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(2, httpServer.getRequestCount(imageUrl)); 28131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } finally { 28141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (httpServer != null) { 28151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci httpServer.shutdown(); 28161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 28171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (httpsServer != null) { 28181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci httpsServer.shutdown(); 28191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 28201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 28210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 28220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 28230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 28242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static class ViewPair { 2825effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private final AwTestContainerView mContainer0; 2826effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private final TestAwContentsClient mClient0; 2827effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private final AwTestContainerView mContainer1; 2828effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private final TestAwContentsClient mClient1; 28295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2830effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ViewPair(AwTestContainerView container0, TestAwContentsClient client0, 2831effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView container1, TestAwContentsClient client1) { 2832effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch this.mContainer0 = container0; 2833effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch this.mClient0 = client0; 2834effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch this.mContainer1 = container1; 2835effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch this.mClient1 = client1; 2836effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 2837effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2838effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView getContainer0() { 2839effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return mContainer0; 28405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwContents getContents0() { 2843effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return mContainer0.getAwContents(); 28445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient getClient0() { 2847effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return mClient0; 2848effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 2849effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2850effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AwTestContainerView getContainer1() { 2851effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return mContainer1; 28525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwContents getContents1() { 2855effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return mContainer1.getAwContents(); 28565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient getClient1() { 2859effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return mClient1; 28605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 28645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Verifies the following statements about a setting: 28655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - initially, the setting has a default value; 28665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - the setting can be switched to an alternate value and back; 28675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - switching a setting in the first WebView doesn't affect the setting 28685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * state in the second WebView and vice versa. 28695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 28705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param helper0 Test helper for the first ContentView 28715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param helper1 Test helper for the second ContentView 28725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Throwable 28735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 28745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private void runPerViewSettingsTest(AwSettingsTestHelper helper0, 28755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwSettingsTestHelper helper1) throws Throwable { 28765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.ensureSettingHasInitialValue(); 28775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.ensureSettingHasInitialValue(); 28785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.setAlteredSettingValue(); 28805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.ensureSettingHasInitialValue(); 28815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.ensureSettingHasAlteredValue(); 28825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.setInitialSettingValue(); 28845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.ensureSettingHasInitialValue(); 28855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.ensureSettingHasInitialValue(); 28865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.setAlteredSettingValue(); 28885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.ensureSettingHasAlteredValue(); 28895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.ensureSettingHasInitialValue(); 28905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.setInitialSettingValue(); 28925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.ensureSettingHasInitialValue(); 28935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.ensureSettingHasInitialValue(); 28945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.setAlteredSettingValue(); 28965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.ensureSettingHasAlteredValue(); 28975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.ensureSettingHasInitialValue(); 28985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.setAlteredSettingValue(); 29005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.ensureSettingHasAlteredValue(); 29015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.ensureSettingHasAlteredValue(); 29025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.setInitialSettingValue(); 29045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.ensureSettingHasInitialValue(); 29055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.ensureSettingHasAlteredValue(); 29065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.setInitialSettingValue(); 29085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper0.ensureSettingHasInitialValue(); 29095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper1.ensureSettingHasInitialValue(); 29105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private ViewPair createViews() throws Throwable { 2913e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return createViews(false); 2914d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 2915d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 2916d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private ViewPair createViews(boolean supportsLegacyQuirks) throws Throwable { 29175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient client0 = new TestAwContentsClient(); 29185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAwContentsClient client1 = new TestAwContentsClient(); 29195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ViewPair( 2920effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch createAwTestContainerViewOnMainSync(client0, supportsLegacyQuirks), 29215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client0, 2922effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch createAwTestContainerViewOnMainSync(client1, supportsLegacyQuirks), 29235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client1); 29245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2926424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) static void assertFileIsReadable(String filePath) { 2927424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) File file = new File(filePath); 2928424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) try { 2929424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) assertTrue("Test file \"" + filePath + "\" is not readable." + 2930424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "Please make sure that files from android_webview/test/data/device_files/ " + 2931424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "has been pushed to the device before testing", 2932424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) file.canRead()); 2933424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } catch (SecurityException e) { 2934424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) fail("Got a SecurityException for \"" + filePath + "\": " + e.toString()); 2935424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 2936424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 2937424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 29385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 29395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Verifies the number of resource requests made to the content provider. 29405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param resource Resource name 29415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param expectedCount Expected resource requests count 29425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 29435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private void ensureResourceRequestCountInContentProvider(String resource, int expectedCount) { 29445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Context context = getInstrumentation().getTargetContext(); 29455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int actualCount = TestContentProvider.getResourceRequestCount(context, resource); 29465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(expectedCount, actualCount); 29475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private void resetResourceRequestCountInContentProvider(String resource) { 29505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Context context = getInstrumentation().getTargetContext(); 29515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestContentProvider.resetResourceRequestCount(context, resource); 29525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private String createContentUrl(final String target) { 29555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return TestContentProvider.createContentUrl(target); 29565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private void simulateDoubleTapCenterOfWebViewOnUiThread(final AwTestContainerView webView) 29592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) throws Throwable { 2960a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) final int x = (webView.getRight() - webView.getLeft()) / 2; 2961a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) final int y = (webView.getBottom() - webView.getTop()) / 2; 29622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AwContents awContents = webView.getAwContents(); 29632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) runTestOnUiThread(new Runnable() { 29642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 29652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void run() { 2966f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) awContents.getContentViewCore().sendDoubleTapForTest( 29675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SystemClock.uptimeMillis(), x, y); 29682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 29692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }); 29705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2972