1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.webkit.cts; 18 19 import android.test.AndroidTestCase; 20 import android.webkit.CookieManager; 21 import android.webkit.CookieSyncManager; 22 23 /** 24 * Original framework tests for CookieManager 25 */ 26 public class CookieTest extends AndroidTestCase { 27 28 private CookieManager mCookieManager; 29 private static final long WAIT_TIME = 50; 30 31 @Override 32 protected void setUp() throws Exception { 33 super.setUp(); 34 CookieSyncManager.createInstance(getContext()); 35 mCookieManager = CookieManager.getInstance(); 36 mCookieManager.removeAllCookie(); 37 // cookies are removed asynchronously, wait a bit for cookies to be removed 38 int maxWait = 10; 39 for (int i=0; i < maxWait; i++) { 40 // this is unfortuately non-deterministic, but ensure sleep a least once to limit 41 // chance of remove thread running after test has begun 42 Thread.sleep(WAIT_TIME); 43 if (!mCookieManager.hasCookies()) { 44 break; 45 } 46 } 47 assertFalse(mCookieManager.hasCookies()); 48 49 } 50 51 public void testParse() { 52 String url = "http://www.foo.com"; 53 54 // basic 55 mCookieManager.setCookie(url, "a=b"); 56 String cookie = mCookieManager.getCookie(url); 57 assertTrue(cookie.equals("a=b")); 58 59 // quoted 60 mCookieManager.setCookie(url, "c=\"d;\""); 61 cookie = mCookieManager.getCookie(url); 62 63 assertTrue(cookie.contains("a=b")); 64 assertTrue(cookie.contains("c=\"d;\"")); 65 } 66 67 public void testDomain() { 68 String url = "http://www.foo.com"; 69 70 // basic 71 mCookieManager.setCookie(url, "a=b"); 72 String cookie = mCookieManager.getCookie(url); 73 assertTrue(cookie.equals("a=b")); 74 75 // no cross domain cookie 76 cookie = mCookieManager.getCookie("http://bar.com"); 77 assertTrue(cookie == null); 78 79 // more than one cookie 80 mCookieManager.setCookie(url, "c=d; domain=.foo.com"); 81 cookie = mCookieManager.getCookie(url); 82 assertTrue(cookie.contains("a=b;")); 83 assertTrue(cookie.contains("c=d")); 84 85 // host cookie should not be accessible from a sub-domain. 86 cookie = mCookieManager.getCookie("http://bar.www.foo.com"); 87 assertTrue(cookie.equals("c=d")); 88 89 // test setting a domain= that doesn't start w/ a dot, should 90 // treat it as a domain cookie, as if there was a pre-pended dot. 91 mCookieManager.setCookie(url, "e=f; domain=www.foo.com"); 92 cookie = mCookieManager.getCookie(url); 93 assertTrue(cookie.contains("a=b")); 94 assertTrue(cookie.contains("c=d")); 95 assertTrue(cookie.contains("e=f")); 96 97 cookie = mCookieManager.getCookie("http://sub.www.foo.com"); 98 assertTrue(cookie.contains("c=d")); 99 assertTrue(cookie.contains("e=f")); 100 101 cookie = mCookieManager.getCookie("http://foo.com"); 102 assertTrue(cookie.equals("c=d")); 103 } 104 105 public void testSubDomain() { 106 String url_abcd = "http://a.b.c.d.com"; 107 String url_bcd = "http://b.c.d.com"; 108 String url_cd = "http://c.d.com"; 109 String url_d = "http://d.com"; 110 111 mCookieManager.setCookie(url_abcd, "a=1; domain=.a.b.c.d.com"); 112 mCookieManager.setCookie(url_abcd, "b=2; domain=.b.c.d.com"); 113 mCookieManager.setCookie(url_abcd, "c=3; domain=.c.d.com"); 114 mCookieManager.setCookie(url_abcd, "d=4; domain=.d.com"); 115 116 String cookie = mCookieManager.getCookie(url_abcd); 117 assertTrue(cookie.contains("a=1")); 118 assertTrue(cookie.contains("b=2")); 119 assertTrue(cookie.contains("c=3")); 120 assertTrue(cookie.contains("d=4")); 121 cookie = mCookieManager.getCookie(url_bcd); 122 assertTrue(cookie.contains("b=2")); 123 assertTrue(cookie.contains("c=3")); 124 assertTrue(cookie.contains("d=4")); 125 cookie = mCookieManager.getCookie(url_cd); 126 assertTrue(cookie.contains("c=3")); 127 assertTrue(cookie.contains("d=4")); 128 cookie = mCookieManager.getCookie(url_d); 129 assertTrue(cookie.equals("d=4")); 130 131 // check that the same cookie can exist on different sub-domains. 132 mCookieManager.setCookie(url_bcd, "x=bcd; domain=.b.c.d.com"); 133 mCookieManager.setCookie(url_bcd, "x=cd; domain=.c.d.com"); 134 cookie = mCookieManager.getCookie(url_bcd); 135 assertTrue(cookie.contains("b=2")); 136 assertTrue(cookie.contains("c=3")); 137 assertTrue(cookie.contains("d=4")); 138 assertTrue(cookie.contains("x=bcd")); 139 assertTrue(cookie.contains("x=cd")); 140 cookie = mCookieManager.getCookie(url_cd); 141 assertTrue(cookie.contains("c=3")); 142 assertTrue(cookie.contains("d=4")); 143 assertTrue(cookie.contains("x=cd")); 144 } 145 146 public void testInvalidDomain() { 147 String url = "http://foo.bar.com"; 148 149 mCookieManager.setCookie(url, "a=1; domain=.yo.foo.bar.com"); 150 String cookie = mCookieManager.getCookie(url); 151 assertTrue(cookie == null); 152 153 mCookieManager.setCookie(url, "b=2; domain=.foo.com"); 154 cookie = mCookieManager.getCookie(url); 155 assertTrue(cookie == null); 156 157 mCookieManager.setCookie(url, "c=3; domain=.bar.foo.com"); 158 cookie = mCookieManager.getCookie(url); 159 assertTrue(cookie == null); 160 161 mCookieManager.setCookie(url, "d=4; domain=.foo.bar.com.net"); 162 cookie = mCookieManager.getCookie(url); 163 assertTrue(cookie == null); 164 165 mCookieManager.setCookie(url, "e=5; domain=.ar.com"); 166 cookie = mCookieManager.getCookie(url); 167 assertTrue(cookie == null); 168 169 mCookieManager.setCookie(url, "f=6; domain=.com"); 170 cookie = mCookieManager.getCookie(url); 171 assertTrue(cookie == null); 172 173 mCookieManager.setCookie(url, "g=7; domain=.co.uk"); 174 cookie = mCookieManager.getCookie(url); 175 assertTrue(cookie == null); 176 177 mCookieManager.setCookie(url, "h=8; domain=.foo.bar.com.com"); 178 cookie = mCookieManager.getCookie(url); 179 assertTrue(cookie == null); 180 } 181 182 public void testPath() { 183 String url = "http://www.foo.com"; 184 185 mCookieManager.setCookie(url, "a=b; path=/wee"); 186 String cookie = mCookieManager.getCookie(url + "/wee"); 187 assertTrue(cookie.equals("a=b")); 188 cookie = mCookieManager.getCookie(url + "/wee/"); 189 assertTrue(cookie.equals("a=b")); 190 cookie = mCookieManager.getCookie(url + "/wee/hee"); 191 assertTrue(cookie.equals("a=b")); 192 cookie = mCookieManager.getCookie(url + "/wee/hee/more"); 193 assertTrue(cookie.equals("a=b")); 194 cookie = mCookieManager.getCookie(url + "/weehee"); 195 assertTrue(cookie == null); 196 cookie = mCookieManager.getCookie(url); 197 assertTrue(cookie == null); 198 199 mCookieManager.setCookie(url, "a=c; path="); 200 cookie = mCookieManager.getCookie(url + "/wee"); 201 // order of contents matters in this case, per spec 202 assertTrue(cookie.equals("a=b; a=c")); 203 cookie = mCookieManager.getCookie(url); 204 assertTrue(cookie.equals("a=c")); 205 206 mCookieManager.setCookie(url, "a=d"); 207 cookie = mCookieManager.getCookie(url + "/wee"); 208 assertTrue(cookie.equals("a=b; a=d")); 209 } 210 211 public void testEmptyValue() { 212 String url = "http://www.foobar.com"; 213 214 mCookieManager.setCookie(url, "bar="); 215 String cookie = mCookieManager.getCookie(url); 216 assertTrue(cookie.equals("bar=")); 217 218 mCookieManager.setCookie(url, "foobar=;"); 219 cookie = mCookieManager.getCookie(url); 220 assertTrue(cookie.equals("bar=; foobar=")); 221 222 mCookieManager.setCookie(url, "baz=; path=/wee"); 223 cookie = mCookieManager.getCookie(url + "/wee"); 224 assertTrue(cookie.equals("baz=; bar=; foobar=")); 225 } 226 } 227