Home | History | Annotate | Download | only in test
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 package org.chromium.android_webview.test;
      6 
      7 import android.content.Context;
      8 import android.test.suitebuilder.annotation.MediumTest;
      9 import android.test.suitebuilder.annotation.SmallTest;
     10 
     11 import org.chromium.android_webview.AwBrowserProcess;
     12 import org.chromium.android_webview.AwContents;
     13 import org.chromium.android_webview.AwCookieManager;
     14 import org.chromium.android_webview.AwWebResourceResponse;
     15 import org.chromium.android_webview.test.util.CommonResources;
     16 import org.chromium.android_webview.test.util.CookieUtils;
     17 import org.chromium.base.test.util.Feature;
     18 import org.chromium.content.app.ContentMain;
     19 import org.chromium.net.test.util.TestWebServer;
     20 
     21 
     22 /**
     23  * Tests for CookieManager/Chromium startup ordering weirdness.
     24  */
     25 public class CookieManagerStartupTest extends AwTestBase {
     26 
     27     private TestAwContentsClient mContentsClient;
     28     private AwContents mAwContents;
     29 
     30     @Override
     31     protected void setUp() throws Exception {
     32         super.setUp();
     33         ContentMain.initApplicationContext(getActivity().getApplicationContext());
     34     }
     35 
     36     @Override
     37     protected boolean needsBrowserProcessStarted() {
     38         return false;
     39     }
     40 
     41     private void startChromium() throws Exception {
     42         startChromiumWithClient(new TestAwContentsClient());
     43     }
     44 
     45     private void startChromiumWithClient(TestAwContentsClient contentsClient) throws Exception {
     46         final Context context = getActivity();
     47         getInstrumentation().runOnMainSync(new Runnable() {
     48             @Override
     49             public void run() {
     50                 AwBrowserProcess.start(context);
     51             }
     52         });
     53 
     54         mContentsClient = contentsClient;
     55         final AwTestContainerView testContainerView =
     56                 createAwTestContainerViewOnMainSync(mContentsClient);
     57         mAwContents = testContainerView.getAwContents();
     58         mAwContents.getSettings().setJavaScriptEnabled(true);
     59     }
     60 
     61     @MediumTest
     62     @Feature({"AndroidWebView"})
     63     public void testStartup() throws Throwable {
     64         TestWebServer webServer = null;
     65         try {
     66             webServer = new TestWebServer(false);
     67             String path = "/cookie_test.html";
     68             String url = webServer.setResponse(path, CommonResources.ABOUT_HTML, null);
     69 
     70             AwCookieManager cookieManager = new AwCookieManager();
     71             assertNotNull(cookieManager);
     72 
     73             CookieUtils.clearCookies(this, cookieManager);
     74             assertFalse(cookieManager.hasCookies());
     75 
     76             cookieManager.setAcceptCookie(true);
     77             assertTrue(cookieManager.acceptCookie());
     78 
     79             cookieManager.setCookie(url, "count=41");
     80 
     81             startChromium();
     82             loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url);
     83             executeJavaScriptAndWaitForResult(
     84                     mAwContents,
     85                     mContentsClient,
     86                     "var c=document.cookie.split('=');document.cookie=c[0]+'='+(1+(+c[1]));");
     87 
     88             assertEquals("count=42", cookieManager.getCookie(url));
     89         } finally {
     90             if (webServer != null) webServer.shutdown();
     91         }
     92     }
     93 
     94     @SmallTest
     95     @Feature({"AndroidWebView", "Privacy"})
     96     public void testAllowFileSchemeCookies() throws Throwable {
     97         AwCookieManager cookieManager = new AwCookieManager();
     98         assertFalse(cookieManager.allowFileSchemeCookies());
     99         cookieManager.setAcceptFileSchemeCookies(true);
    100         assertTrue(cookieManager.allowFileSchemeCookies());
    101         cookieManager.setAcceptFileSchemeCookies(false);
    102         assertFalse(cookieManager.allowFileSchemeCookies());
    103     }
    104 
    105     @SmallTest
    106     @Feature({"AndroidWebView", "Privacy"})
    107     public void testAllowCookies() throws Throwable {
    108         AwCookieManager cookieManager = new AwCookieManager();
    109         assertTrue(cookieManager.acceptCookie());
    110         cookieManager.setAcceptCookie(false);
    111         assertFalse(cookieManager.acceptCookie());
    112         cookieManager.setAcceptCookie(true);
    113         assertTrue(cookieManager.acceptCookie());
    114     }
    115 
    116     // https://code.google.com/p/chromium/issues/detail?id=374203
    117     @MediumTest
    118     @Feature({"AndroidWebView"})
    119     public void testShouldInterceptRequestDeadlock() throws Throwable {
    120         String url = "http://www.example.com";
    121         TestAwContentsClient contentsClient = new TestAwContentsClient() {
    122             @Override
    123             public AwWebResourceResponse shouldInterceptRequest(
    124                     ShouldInterceptRequestParams params) {
    125                 (new AwCookieManager()).getCookie("www.example.com");
    126                 return null;
    127             }
    128         };
    129         startChromiumWithClient(contentsClient);
    130         loadUrlSync(mAwContents, contentsClient.getOnPageFinishedHelper(), url);
    131     }
    132 }
    133