Home | History | Annotate | Download | only in cts
      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