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 5package org.chromium.android_webview.test; 6 7import android.content.Context; 8import android.test.suitebuilder.annotation.MediumTest; 9import android.test.suitebuilder.annotation.SmallTest; 10 11import org.chromium.android_webview.AwBrowserProcess; 12import org.chromium.android_webview.AwContents; 13import org.chromium.android_webview.AwCookieManager; 14import org.chromium.android_webview.AwWebResourceResponse; 15import org.chromium.android_webview.test.util.CommonResources; 16import org.chromium.android_webview.test.util.CookieUtils; 17import org.chromium.base.test.util.Feature; 18import org.chromium.content.app.ContentMain; 19import org.chromium.net.test.util.TestWebServer; 20 21 22/** 23 * Tests for CookieManager/Chromium startup ordering weirdness. 24 */ 25public 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