Index: android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerTest.java |
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerTest.java |
new file mode 100755 |
index 0000000000000000000000000000000000000000..c2a5868da3b1a539d664cb80afc1d95a5d0f6cca |
--- /dev/null |
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerTest.java |
@@ -0,0 +1,246 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.android_webview.test; |
+ |
+import android.test.MoreAsserts; |
+import android.test.suitebuilder.annotation.MediumTest; |
+import android.test.suitebuilder.annotation.SmallTest; |
+import android.util.Pair; |
+ |
+import org.chromium.android_webview.CookieManager; |
+import org.chromium.base.test.Feature; |
+import org.chromium.content.browser.ContentViewCore; |
+import org.chromium.content.browser.test.Criteria; |
+import org.chromium.content.browser.test.CriteriaHelper; |
+import org.chromium.content.browser.test.TestContentViewClient.OnEvaluateJavaScriptResultHelper; |
+ |
+import java.util.ArrayList; |
+import java.util.Arrays; |
+import java.util.Date; |
+import java.util.HashSet; |
+import java.util.List; |
+import java.util.Set; |
+import java.util.concurrent.atomic.AtomicInteger; |
+ |
+/** |
+ * Tests for the CookieManager. |
+ */ |
+public class CookieManagerTest extends AndroidWebViewTestBase { |
+ |
+ private CookieManager mCookieManager; |
+ private TestAwContentsClient mContentViewClient; |
+ private ContentViewCore mContentViewCore; |
+ |
+ @Override |
+ protected void setUp() throws Exception { |
+ super.setUp(); |
+ |
+ mCookieManager = new CookieManager(); |
+ mContentViewClient = new TestAwContentsClient(); |
+ mContentViewCore = |
+ createAwTestContainerViewOnMainSync(mContentViewClient).getContentViewCore(); |
+ mContentViewCore.getContentSettings().setJavaScriptEnabled(true); |
+ assertNotNull(mCookieManager); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Android-WebView", "Privacy"}) |
+ public void testAllowFileSchemeCookies() throws Throwable { |
+ assertFalse(CookieManager.allowFileSchemeCookies()); |
+ CookieManager.setAcceptFileSchemeCookies(true); |
+ assertTrue(CookieManager.allowFileSchemeCookies()); |
+ CookieManager.setAcceptFileSchemeCookies(false); |
+ assertFalse(CookieManager.allowFileSchemeCookies()); |
+ } |
+ |
+ @MediumTest |
+ @Feature({"Android-WebView", "Privacy"}) |
+ public void testAcceptCookie() throws Throwable { |
+ TestWebServer webServer = null; |
+ try { |
+ webServer = new TestWebServer(false); |
+ String path = "/cookie_test.html"; |
+ String responseStr = |
+ "<html><head><title>TEST!</title></head><body>HELLO!</body></html>"; |
+ String url = webServer.setResponse(path, responseStr, null); |
+ |
+ mCookieManager.setAcceptCookie(false); |
+ mCookieManager.removeAllCookie(); |
+ assertFalse(mCookieManager.acceptCookie()); |
+ assertFalse(mCookieManager.hasCookies()); |
+ |
+ loadUrlSync(mContentViewCore, mContentViewClient.getOnPageFinishedHelper(), url); |
+ setCookie("test1", "value1"); |
+ assertNull(mCookieManager.getCookie(url)); |
+ |
+ List<Pair<String, String>> responseHeaders = new ArrayList<Pair<String, String>>(); |
+ responseHeaders.add( |
+ Pair.create("Set-Cookie", "header-test1=header-value1; path=" + path)); |
+ url = webServer.setResponse(path, responseStr, responseHeaders); |
+ loadUrlSync(mContentViewCore, mContentViewClient.getOnPageFinishedHelper(), url); |
+ assertNull(mCookieManager.getCookie(url)); |
+ |
+ mCookieManager.setAcceptCookie(true); |
+ assertTrue(mCookieManager.acceptCookie()); |
+ |
+ url = webServer.setResponse(path, responseStr, null); |
+ loadUrlSync(mContentViewCore, mContentViewClient.getOnPageFinishedHelper(), url); |
+ setCookie("test2", "value2"); |
+ waitForCookie(url); |
+ String cookie = mCookieManager.getCookie(url); |
+ assertNotNull(cookie); |
+ validateCookies(cookie, "test2"); |
+ |
+ responseHeaders = new ArrayList<Pair<String, String>>(); |
+ responseHeaders.add( |
+ Pair.create("Set-Cookie", "header-test2=header-value2 path=" + path)); |
+ url = webServer.setResponse(path, responseStr, responseHeaders); |
+ loadUrlSync(mContentViewCore, mContentViewClient.getOnPageFinishedHelper(), url); |
+ waitForCookie(url); |
+ cookie = mCookieManager.getCookie(url); |
+ assertNotNull(cookie); |
+ validateCookies(cookie, "test2", "header-test2"); |
+ |
+ // clean up all cookies |
+ mCookieManager.removeAllCookie(); |
+ } finally { |
+ if (webServer != null) webServer.shutdown(); |
+ } |
+ } |
+ |
+ private void setCookie(final String name, final String value) |
+ throws Throwable { |
+ OnEvaluateJavaScriptResultHelper onEvaluateJavaScriptResultHelper = |
+ mContentViewClient.getOnEvaluateJavaScriptResultHelper(); |
+ int currentCallCount = onEvaluateJavaScriptResultHelper.getCallCount(); |
+ final AtomicInteger requestId = new AtomicInteger(); |
+ runTestOnUiThread(new Runnable() { |
+ @Override |
+ public void run() { |
+ requestId.set(mContentViewCore.evaluateJavaScript( |
+ "var expirationDate = new Date();" + |
+ "expirationDate.setDate(expirationDate.getDate() + 5);" + |
+ "document.cookie='" + name + "=" + value + |
+ "; expires=' + expirationDate.toUTCString();")); |
+ } |
+ }); |
+ onEvaluateJavaScriptResultHelper.waitForCallback(currentCallCount); |
+ assertEquals("Response ID mismatch when evaluating JavaScript.", |
+ requestId.get(), onEvaluateJavaScriptResultHelper.getId()); |
+ } |
+ |
+ private void waitForCookie(final String url) throws InterruptedException { |
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ return mCookieManager.getCookie(url) != null; |
+ } |
+ })); |
+ } |
+ |
+ private void validateCookies(String responseCookie, String... expectedCookieNames) { |
+ String[] cookies = responseCookie.split(";"); |
+ Set<String> foundCookieNames = new HashSet<String>(); |
+ for (String cookie : cookies) { |
+ foundCookieNames.add(cookie.substring(0, cookie.indexOf("=")).trim()); |
+ } |
+ MoreAsserts.assertEquals( |
+ foundCookieNames, new HashSet<String>(Arrays.asList(expectedCookieNames))); |
+ } |
+ |
+ @MediumTest |
+ @Feature({"Android-WebView", "Privacy"}) |
+ public void testRemoveAllCookie() throws InterruptedException { |
+ // enable cookie |
+ mCookieManager.setAcceptCookie(true); |
+ assertTrue(mCookieManager.acceptCookie()); |
+ |
+ // first there should be no cookie stored |
+ mCookieManager.removeAllCookie(); |
+ assertFalse(mCookieManager.hasCookies()); |
+ |
+ String url = "http://www.example.com"; |
+ String cookie = "name=test"; |
+ mCookieManager.setCookie(url, cookie); |
+ assertEquals(cookie, mCookieManager.getCookie(url)); |
+ |
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ return mCookieManager.hasCookies(); |
+ } |
+ })); |
+ |
+ // clean up all cookies |
+ mCookieManager.removeAllCookie(); |
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ return !mCookieManager.hasCookies(); |
+ } |
+ })); |
+ } |
+ |
+ @MediumTest |
+ @Feature({"Android-WebView", "Privacy"}) |
+ @SuppressWarnings("deprecation") |
+ public void testCookieExpiration() throws InterruptedException { |
+ // enable cookie |
+ mCookieManager.setAcceptCookie(true); |
+ assertTrue(mCookieManager.acceptCookie()); |
+ mCookieManager.removeAllCookie(); |
+ assertFalse(mCookieManager.hasCookies()); |
+ |
+ final String url = "http://www.example.com"; |
+ final String cookie1 = "cookie1=peter"; |
+ final String cookie2 = "cookie2=sue"; |
+ final String cookie3 = "cookie3=marc"; |
+ |
+ mCookieManager.setCookie(url, cookie1); // session cookie |
+ |
+ Date date = new Date(); |
+ date.setTime(date.getTime() + 1000 * 600); |
+ String value2 = cookie2 + "; expires=" + date.toGMTString(); |
+ mCookieManager.setCookie(url, value2); // expires in 10min |
+ |
+ long expiration = 3000; |
+ date = new Date(); |
+ date.setTime(date.getTime() + expiration); |
+ String value3 = cookie3 + "; expires=" + date.toGMTString(); |
+ mCookieManager.setCookie(url, value3); // expires in 3s |
+ |
+ String allCookies = mCookieManager.getCookie(url); |
+ assertTrue(allCookies.contains(cookie1)); |
+ assertTrue(allCookies.contains(cookie2)); |
+ assertTrue(allCookies.contains(cookie3)); |
+ |
+ mCookieManager.removeSessionCookie(); |
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ String c = mCookieManager.getCookie(url); |
+ return !c.contains(cookie1) && c.contains(cookie2) && c.contains(cookie3); |
+ } |
+ })); |
+ |
+ Thread.sleep(expiration + 1000); // wait for cookie to expire |
+ mCookieManager.removeExpiredCookie(); |
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ String c = mCookieManager.getCookie(url); |
+ return !c.contains(cookie1) && c.contains(cookie2) && !c.contains(cookie3); |
+ } |
+ })); |
+ |
+ mCookieManager.removeAllCookie(); |
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ return mCookieManager.getCookie(url) == null; |
+ } |
+ })); |
+ } |
+} |