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