Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

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

Issue 11419093: [Android WebView] Implement WebSettings.{get|set}CacheMode (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged after the last changes Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
index 4c2a5ae5cdb9ea2aabd29561337613a2aca26d3e..cea8a7379e15d440ee7d6d8f059f63ef9db4251e 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
@@ -7,6 +7,7 @@ package org.chromium.android_webview.test;
import android.content.Context;
import android.os.Build;
import android.test.suitebuilder.annotation.SmallTest;
+import android.webkit.WebSettings;
import org.apache.http.Header;
import org.apache.http.HttpRequest;
@@ -941,6 +942,59 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
}
}
+ class AwSettingsCacheModeTestHelper extends AwSettingsWithSettingsTestHelper<Integer> {
+
+ AwSettingsCacheModeTestHelper(
+ AwContents awContents,
+ TestAwContentsClient contentViewClient,
+ int index,
+ TestWebServer webServer) throws Throwable {
+ super(awContents, contentViewClient, true);
+ mIndex = index;
+ mWebServer = webServer;
+ AwSettingsTest.this.clearCacheOnUiThread(mAwContents, true);
+ }
+
+ @Override
+ protected Integer getAlteredValue() {
+ // We use the value that results in a behaviour completely opposite to default.
+ return WebSettings.LOAD_CACHE_ONLY;
+ }
+
+ @Override
+ protected Integer getInitialValue() {
+ return WebSettings.LOAD_DEFAULT;
+ }
+
+ @Override
+ protected Integer getCurrentValue() {
+ return mAwSettings.getCacheMode();
+ }
+
+ @Override
+ protected void setCurrentValue(Integer value) {
+ mAwSettings.setCacheMode(value);
+ }
+
+ @Override
+ protected void doEnsureSettingHasValue(Integer value) throws Throwable {
+ final String htmlPath = "/cache_mode_" + mIndex + ".html";
+ mIndex += 2;
+ final String url = mWebServer.setResponse(htmlPath, "response", null);
+ assertEquals(0, mWebServer.getRequestCount(htmlPath));
+ if (value == WebSettings.LOAD_DEFAULT) {
+ loadUrlSync(url);
+ assertEquals(1, mWebServer.getRequestCount(htmlPath));
+ } else {
+ loadUrlSyncAndExpectError(url);
+ assertEquals(0, mWebServer.getRequestCount(htmlPath));
+ }
+ }
+
+ private int mIndex;
+ private TestWebServer mWebServer;
+ }
+
// The test verifies that JavaScript is disabled upon WebView
// creation without accessing ContentSettings. If the test passes,
// it means that WebView-specific web preferences configuration
@@ -1900,6 +1954,154 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
new AwSettingsJavaScriptPopupsTestHelper(views.getContents1(), views.getClient1(), 1));
}
+ @SmallTest
+ @Feature({"AndroidWebView", "Preferences"})
+ public void testCacheMode() throws Throwable {
+ final TestAwContentsClient contentClient = new TestAwContentsClient();
+ final AwTestContainerView testContainer =
+ createAwTestContainerViewOnMainSync(false, contentClient);
+ final AwContents awContents = testContainer.getAwContents();
+ final AwSettings awSettings = getAwSettingsOnUiThread(testContainer.getAwContents());
+ clearCacheOnUiThread(awContents, true);
+
+ assertEquals(WebSettings.LOAD_DEFAULT, awSettings.getCacheMode());
+ TestWebServer webServer = null;
+ try {
+ webServer = new TestWebServer(false);
+ final String htmlPath = "/testCacheMode.html";
+ final String url = webServer.setResponse(htmlPath, "response", null);
+ awSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
+ loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), url);
+ assertEquals(1, webServer.getRequestCount(htmlPath));
+ loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), url);
+ assertEquals(1, webServer.getRequestCount(htmlPath));
+
+ awSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+ loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), url);
+ assertEquals(2, webServer.getRequestCount(htmlPath));
+ loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), url);
+ assertEquals(3, webServer.getRequestCount(htmlPath));
+
+ awSettings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);
+ loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), url);
+ assertEquals(3, webServer.getRequestCount(htmlPath));
+ loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), url);
+ assertEquals(3, webServer.getRequestCount(htmlPath));
+
+ final String htmlNotInCachePath = "/testCacheMode-not-in-cache.html";
+ final String urlNotInCache = webServer.setResponse(htmlNotInCachePath, "", null);
+ loadUrlSyncAndExpectError(awContents,
+ contentClient.getOnPageFinishedHelper(),
+ contentClient.getOnReceivedErrorHelper(),
+ urlNotInCache);
+ assertEquals(0, webServer.getRequestCount(htmlNotInCachePath));
+ } finally {
+ if (webServer != null) webServer.shutdown();
+ }
+ }
+
+ @SmallTest
+ @Feature({"AndroidWebView", "Preferences"})
+ // As our implementation of network loads blocking uses the same net::URLRequest settings, make
+ // sure that setting cache mode doesn't accidentally enable network loads. The reference
+ // behaviour is that when network loads are blocked, setting cache mode has no effect.
+ public void testCacheModeWithBlockedNetworkLoads() throws Throwable {
+ final TestAwContentsClient contentClient = new TestAwContentsClient();
+ final AwTestContainerView testContainer =
+ createAwTestContainerViewOnMainSync(false, contentClient);
+ final AwContents awContents = testContainer.getAwContents();
+ final AwSettings awSettings = getAwSettingsOnUiThread(testContainer.getAwContents());
+ clearCacheOnUiThread(awContents, true);
+
+ assertEquals(WebSettings.LOAD_DEFAULT, awSettings.getCacheMode());
+ awSettings.setBlockNetworkLoads(true);
+ TestWebServer webServer = null;
+ try {
+ webServer = new TestWebServer(false);
+ final String htmlPath = "/testCacheModeWithBlockedNetworkLoads.html";
+ final String url = webServer.setResponse(htmlPath, "response", null);
+ loadUrlSyncAndExpectError(awContents,
+ contentClient.getOnPageFinishedHelper(),
+ contentClient.getOnReceivedErrorHelper(),
+ url);
+ assertEquals(0, webServer.getRequestCount(htmlPath));
+
+ awSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
+ loadUrlSyncAndExpectError(awContents,
+ contentClient.getOnPageFinishedHelper(),
+ contentClient.getOnReceivedErrorHelper(),
+ url);
+ assertEquals(0, webServer.getRequestCount(htmlPath));
+
+ awSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+ loadUrlSyncAndExpectError(awContents,
+ contentClient.getOnPageFinishedHelper(),
+ contentClient.getOnReceivedErrorHelper(),
+ url);
+ assertEquals(0, webServer.getRequestCount(htmlPath));
+
+ awSettings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);
+ loadUrlSyncAndExpectError(awContents,
+ contentClient.getOnPageFinishedHelper(),
+ contentClient.getOnReceivedErrorHelper(),
+ url);
+ assertEquals(0, webServer.getRequestCount(htmlPath));
+ } finally {
+ if (webServer != null) webServer.shutdown();
+ }
+ }
+
+ @SmallTest
+ @Feature({"AndroidWebView", "Preferences"})
+ public void testCacheModeNormal() throws Throwable {
+ ViewPair views = createViews(NORMAL_VIEW, NORMAL_VIEW);
+ TestWebServer webServer = null;
+ try {
+ webServer = new TestWebServer(false);
+ runPerViewSettingsTest(
+ new AwSettingsCacheModeTestHelper(
+ views.getContents0(), views.getClient0(), 0, webServer),
+ new AwSettingsCacheModeTestHelper(
+ views.getContents1(), views.getClient1(), 1, webServer));
+ } finally {
+ if (webServer != null) webServer.shutdown();
+ }
+ }
+
+ @SmallTest
+ @Feature({"AndroidWebView", "Preferences"})
+ public void testCacheModeIncognito() throws Throwable {
+ ViewPair views = createViews(INCOGNITO_VIEW, INCOGNITO_VIEW);
+ TestWebServer webServer = null;
+ try {
+ webServer = new TestWebServer(false);
+ runPerViewSettingsTest(
+ new AwSettingsCacheModeTestHelper(
+ views.getContents0(), views.getClient0(), 0, webServer),
+ new AwSettingsCacheModeTestHelper(
+ views.getContents1(), views.getClient1(), 1, webServer));
+ } finally {
+ if (webServer != null) webServer.shutdown();
+ }
+ }
+
+ @SmallTest
+ @Feature({"AndroidWebView", "Preferences"})
+ public void testCacheModeBoth() throws Throwable {
+ ViewPair views = createViews(NORMAL_VIEW, INCOGNITO_VIEW);
+ TestWebServer webServer = null;
+ try {
+ webServer = new TestWebServer(false);
+ runPerViewSettingsTest(
+ new AwSettingsCacheModeTestHelper(
+ views.getContents0(), views.getClient0(), 0, webServer),
+ new AwSettingsCacheModeTestHelper(
+ views.getContents1(), views.getClient1(), 1, webServer));
+ } finally {
+ if (webServer != null) webServer.shutdown();
+ }
+ }
+
class ViewPair {
private final AwContents contents0;
private final TestAwContentsClient client0;

Powered by Google App Engine
This is Rietveld 408576698