b38a260bc3fba05ef06109564652d60390d044b7
[platform/framework/web/crosswalk.git] / src / xwalk / test / android / core / javatests / src / org / xwalk / core / xwview / test / CookieManagerTest.java
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.
5
6 package org.xwalk.core.xwview.test;
7
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;
14
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;
18
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;
24 import java.util.Set;
25
26 import org.xwalk.core.XWalkView;
27 import org.xwalk.core.internal.XWalkCookieManager;
28 import org.xwalk.core.internal.XWalkClient;
29
30 /**
31  * Tests for the CookieManager.
32  */
33 public class CookieManagerTest extends XWalkViewTestBase {
34
35     private XWalkCookieManager mCookieManager = null;
36
37     @Override
38     public void setUp() throws Exception {
39         super.setUp();
40
41         mCookieManager = new XWalkCookieManager();
42         setXWalkClient(new XWalkViewTestBase.TestXWalkClient());
43     }
44
45     @SmallTest
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());
53     }
54
55     @MediumTest
56     @Feature({"AcceptCookie"})
57     public void testAcceptCookie() throws Throwable {
58         TestWebServer webServer = null;
59         try {
60             webServer = new TestWebServer(false);
61             String path = "/cookie_test.html";
62             String responseStr =
63                     "<html><head><title>TEST!</title></head><body>HELLO!</body></html>";
64             String url = webServer.setResponse(path, responseStr, null);
65
66             mCookieManager.setAcceptCookie(false);
67             mCookieManager.removeAllCookie();
68             assertFalse(mCookieManager.acceptCookie());
69             assertFalse(mCookieManager.hasCookies());
70
71             loadUrlSync(url);
72             setCookie("test1", "value1");
73             assertNull(mCookieManager.getCookie(url));
74
75             List<Pair<String, String>> responseHeaders = new ArrayList<Pair<String, String>>();
76             responseHeaders.add(
77                     Pair.create("Set-Cookie", "header-test1=header-value1; path=" + path));
78             url = webServer.setResponse(path, responseStr, responseHeaders);
79             loadUrlSync(url);
80             assertNull(mCookieManager.getCookie(url));
81
82             mCookieManager.setAcceptCookie(true);
83             assertTrue(mCookieManager.acceptCookie());
84
85             url = webServer.setResponse(path, responseStr, null);
86             loadUrlSync(url);
87             setCookie("test2", "value2");
88             waitForCookie(url);
89             String cookie = mCookieManager.getCookie(url);
90             assertNotNull(cookie);
91             validateCookies(cookie, "test2");
92
93             mCookieManager.removeAllCookie();
94             responseHeaders = new ArrayList<Pair<String, String>>();
95             responseHeaders.add(
96                     Pair.create("Set-Cookie", "header-test2=header-value2 path=" + path));
97             url = webServer.setResponse(path, responseStr, responseHeaders);
98             loadUrlSync(url);
99             waitForCookie(url);
100             cookie = mCookieManager.getCookie(url);
101             assertNotNull(cookie);
102             validateCookies(cookie, "header-test2");
103
104             // Clean up all cookies.
105             mCookieManager.removeAllCookie();
106         } finally {
107             if (webServer != null) webServer.shutdown();
108         }
109     }
110
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();" +
117                 "})())";
118         loadJavaScriptUrl(jsCommand);
119     }
120
121     private void waitForCookie(final String url) throws InterruptedException {
122         assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
123             @Override
124             public boolean isSatisfied() {
125                 return mCookieManager.getCookie(url) != null;
126             }
127         }, 6000, 50));
128     }
129
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());
135         }
136         MoreAsserts.assertEquals(
137                 foundCookieNames, new HashSet<String>(Arrays.asList(expectedCookieNames)));
138     }
139
140     @MediumTest
141     @Feature({"RemoveAllCookies"})
142     public void testRemoveAllCookie() throws InterruptedException {
143         // Enable cookie.
144         mCookieManager.setAcceptCookie(true);
145         assertTrue(mCookieManager.acceptCookie());
146
147         // First there should be no cookie stored.
148         mCookieManager.removeAllCookie();
149         mCookieManager.flushCookieStore();
150         assertFalse(mCookieManager.hasCookies());
151
152         String url = "http://www.example.com";
153         String cookie = "name=test";
154         mCookieManager.setCookie(url, cookie);
155         assertEquals(cookie, mCookieManager.getCookie(url));
156
157         assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
158             @Override
159             public boolean isSatisfied() {
160                 return mCookieManager.hasCookies();
161             }
162         }));
163
164         // Clean up all cookies.
165         mCookieManager.removeAllCookie();
166         assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
167             @Override
168             public boolean isSatisfied() {
169                 return !mCookieManager.hasCookies();
170             }
171         }));
172     }
173
174     @MediumTest
175     @Feature({"CookieExpiration"})
176     @SuppressWarnings("deprecation")
177     public void testCookieExpiration() throws InterruptedException {
178         // Enable cookie.
179         mCookieManager.setAcceptCookie(true);
180         assertTrue(mCookieManager.acceptCookie());
181         mCookieManager.removeAllCookie();
182         assertFalse(mCookieManager.hasCookies());
183
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";
188         // Session cookie.
189         mCookieManager.setCookie(url, cookie1);
190
191         Date date = new Date();
192         date.setTime(date.getTime() + 1000 * 600);
193         String value2 = cookie2 + "; expires=" + date.toGMTString();
194         // Expires in 10min.
195         mCookieManager.setCookie(url, value2);
196
197         long expiration = 3000;
198         date = new Date();
199         date.setTime(date.getTime() + expiration);
200         String value3 = cookie3 + "; expires=" + date.toGMTString();
201         // Expires in 3s.
202         mCookieManager.setCookie(url, value3);
203
204         String allCookies = mCookieManager.getCookie(url);
205         assertTrue(allCookies.contains(cookie1));
206         assertTrue(allCookies.contains(cookie2));
207         assertTrue(allCookies.contains(cookie3));
208
209         mCookieManager.removeSessionCookie();
210         assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
211             @Override
212             public boolean isSatisfied() {
213                 String c = mCookieManager.getCookie(url);
214                 return !c.contains(cookie1) && c.contains(cookie2) && c.contains(cookie3);
215             }
216         }));
217
218         // Wait for cookie to expire.
219         Thread.sleep(expiration + 1000);
220         mCookieManager.removeExpiredCookie();
221         assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
222             @Override
223             public boolean isSatisfied() {
224                 String c = mCookieManager.getCookie(url);
225                 return !c.contains(cookie1) && c.contains(cookie2) && !c.contains(cookie3);
226             }
227         }));
228
229         mCookieManager.removeAllCookie();
230         assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
231             @Override
232             public boolean isSatisfied() {
233                 return mCookieManager.getCookie(url) == null;
234             }
235         }));
236     }
237 }