1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Copyright (c) 2013 Intel Corporation. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
6 package org.xwalk.core.xwview.test;
8 import android.graphics.Bitmap;
9 import android.test.suitebuilder.annotation.SmallTest;
10 import org.chromium.base.test.util.Feature;
11 import android.test.MoreAsserts;
12 import android.test.suitebuilder.annotation.MediumTest;
13 import android.util.Pair;
15 import org.chromium.content.browser.test.util.Criteria;
16 import org.chromium.content.browser.test.util.CriteriaHelper;
17 import org.chromium.net.test.util.TestWebServer;
19 import java.util.ArrayList;
20 import java.util.Arrays;
21 import java.util.Date;
22 import java.util.HashSet;
23 import java.util.List;
26 import org.xwalk.core.XWalkView;
27 import org.xwalk.core.internal.XWalkCookieManager;
28 import org.xwalk.core.internal.XWalkClient;
31 * Tests for the CookieManager.
33 public class CookieManagerTest extends XWalkViewTestBase {
35 private XWalkCookieManager mCookieManager = null;
38 public void setUp() throws Exception {
41 mCookieManager = new XWalkCookieManager();
42 setXWalkClient(new XWalkViewTestBase.TestXWalkClient());
46 @Feature({"AcceptFileSchemeCookies"})
47 public void testAllowFileSchemeCookies() throws Throwable {
48 assertFalse(mCookieManager.allowFileSchemeCookies());
49 mCookieManager.setAcceptFileSchemeCookies(true);
50 assertTrue(mCookieManager.allowFileSchemeCookies());
51 mCookieManager.setAcceptFileSchemeCookies(false);
52 assertFalse(mCookieManager.allowFileSchemeCookies());
56 @Feature({"AcceptCookie"})
57 public void testAcceptCookie() throws Throwable {
58 TestWebServer webServer = null;
60 webServer = new TestWebServer(false);
61 String path = "/cookie_test.html";
63 "<html><head><title>TEST!</title></head><body>HELLO!</body></html>";
64 String url = webServer.setResponse(path, responseStr, null);
66 mCookieManager.setAcceptCookie(false);
67 mCookieManager.removeAllCookie();
68 assertFalse(mCookieManager.acceptCookie());
69 assertFalse(mCookieManager.hasCookies());
72 setCookie("test1", "value1");
73 assertNull(mCookieManager.getCookie(url));
75 List<Pair<String, String>> responseHeaders = new ArrayList<Pair<String, String>>();
77 Pair.create("Set-Cookie", "header-test1=header-value1; path=" + path));
78 url = webServer.setResponse(path, responseStr, responseHeaders);
80 assertNull(mCookieManager.getCookie(url));
82 mCookieManager.setAcceptCookie(true);
83 assertTrue(mCookieManager.acceptCookie());
85 url = webServer.setResponse(path, responseStr, null);
87 setCookie("test2", "value2");
89 String cookie = mCookieManager.getCookie(url);
90 assertNotNull(cookie);
91 validateCookies(cookie, "test2");
93 mCookieManager.removeAllCookie();
94 responseHeaders = new ArrayList<Pair<String, String>>();
96 Pair.create("Set-Cookie", "header-test2=header-value2 path=" + path));
97 url = webServer.setResponse(path, responseStr, responseHeaders);
100 cookie = mCookieManager.getCookie(url);
101 assertNotNull(cookie);
102 validateCookies(cookie, "header-test2");
104 // Clean up all cookies.
105 mCookieManager.removeAllCookie();
107 if (webServer != null) webServer.shutdown();
111 private void setCookie(final String name, final String value) throws Exception {
112 String jsCommand = "javascript:void((function(){" +
113 "var expirationDate = new Date();" +
114 "expirationDate.setDate(expirationDate.getDate() + 5);" +
115 "document.cookie='" + name + "=" + value +
116 "; expires=' + expirationDate.toUTCString();" +
118 loadJavaScriptUrl(jsCommand);
121 private void waitForCookie(final String url) throws InterruptedException {
122 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
124 public boolean isSatisfied() {
125 return mCookieManager.getCookie(url) != null;
130 private void validateCookies(String responseCookie, String... expectedCookieNames) {
131 String[] cookies = responseCookie.split(";");
132 Set<String> foundCookieNames = new HashSet<String>();
133 for (String cookie : cookies) {
134 foundCookieNames.add(cookie.substring(0, cookie.indexOf("=")).trim());
136 MoreAsserts.assertEquals(
137 foundCookieNames, new HashSet<String>(Arrays.asList(expectedCookieNames)));
141 @Feature({"RemoveAllCookies"})
142 public void testRemoveAllCookie() throws InterruptedException {
144 mCookieManager.setAcceptCookie(true);
145 assertTrue(mCookieManager.acceptCookie());
147 // First there should be no cookie stored.
148 mCookieManager.removeAllCookie();
149 mCookieManager.flushCookieStore();
150 assertFalse(mCookieManager.hasCookies());
152 String url = "http://www.example.com";
153 String cookie = "name=test";
154 mCookieManager.setCookie(url, cookie);
155 assertEquals(cookie, mCookieManager.getCookie(url));
157 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
159 public boolean isSatisfied() {
160 return mCookieManager.hasCookies();
164 // Clean up all cookies.
165 mCookieManager.removeAllCookie();
166 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
168 public boolean isSatisfied() {
169 return !mCookieManager.hasCookies();
175 @Feature({"CookieExpiration"})
176 @SuppressWarnings("deprecation")
177 public void testCookieExpiration() throws InterruptedException {
179 mCookieManager.setAcceptCookie(true);
180 assertTrue(mCookieManager.acceptCookie());
181 mCookieManager.removeAllCookie();
182 assertFalse(mCookieManager.hasCookies());
184 final String url = "http://www.example.com";
185 final String cookie1 = "cookie1=peter";
186 final String cookie2 = "cookie2=sue";
187 final String cookie3 = "cookie3=marc";
189 mCookieManager.setCookie(url, cookie1);
191 Date date = new Date();
192 date.setTime(date.getTime() + 1000 * 600);
193 String value2 = cookie2 + "; expires=" + date.toGMTString();
195 mCookieManager.setCookie(url, value2);
197 long expiration = 3000;
199 date.setTime(date.getTime() + expiration);
200 String value3 = cookie3 + "; expires=" + date.toGMTString();
202 mCookieManager.setCookie(url, value3);
204 String allCookies = mCookieManager.getCookie(url);
205 assertTrue(allCookies.contains(cookie1));
206 assertTrue(allCookies.contains(cookie2));
207 assertTrue(allCookies.contains(cookie3));
209 mCookieManager.removeSessionCookie();
210 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
212 public boolean isSatisfied() {
213 String c = mCookieManager.getCookie(url);
214 return !c.contains(cookie1) && c.contains(cookie2) && c.contains(cookie3);
218 // Wait for cookie to expire.
219 Thread.sleep(expiration + 1000);
220 mCookieManager.removeExpiredCookie();
221 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
223 public boolean isSatisfied() {
224 String c = mCookieManager.getCookie(url);
225 return !c.contains(cookie1) && c.contains(cookie2) && !c.contains(cookie3);
229 mCookieManager.removeAllCookie();
230 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
232 public boolean isSatisfied() {
233 return mCookieManager.getCookie(url) == null;