Index: android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerTest.java |
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerTest.java |
index c96fdeb0ef5f752fd41f366c65c75187ce69cfd8..084061af134bda05e3118fdea5112544fe6771a7 100644 |
--- a/android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerTest.java |
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerTest.java |
@@ -17,6 +17,8 @@ import org.chromium.android_webview.AwSettings; |
import org.chromium.android_webview.test.util.CookieUtils; |
import org.chromium.android_webview.test.util.JSUtils; |
import org.chromium.base.test.util.Feature; |
+import org.chromium.content.browser.test.util.JavaScriptUtils; |
+import org.chromium.content_public.browser.WebContents; |
import org.chromium.net.test.util.TestWebServer; |
import java.util.ArrayList; |
@@ -401,6 +403,76 @@ public class CookieManagerTest extends AwTestBase { |
} |
} |
+ @MediumTest |
Torne
2016/10/14 09:59:24
Can you put the common code for these tests in a s
yhirano
2016/10/19 11:32:13
Done.
|
+ @Feature({"AndroidWebView", "Privacy"}) |
+ public void testThirdPartyCookieForWebSocketDisabledCase() throws Throwable { |
jbudorick
2016/10/18 17:27:30
If possible, new tests should use EmbeddedTestServ
yhirano
2016/10/19 14:45:00
We need to add a response header (Sec-WebSocket-Ac
jbudorick
2016/10/19 15:40:40
Ah. Yeah, we haven't implemented that yet. Given t
|
+ TestWebServer webServer = TestWebServer.start(); |
+ try { |
+ // Turn global allow on. |
+ mCookieManager.setAcceptCookie(true); |
+ assertTrue(mCookieManager.acceptCookie()); |
+ |
+ // When third party cookies are disabled... |
+ mAwContents.getSettings().setAcceptThirdPartyCookies(false); |
+ assertFalse(mAwContents.getSettings().getAcceptThirdPartyCookies()); |
+ |
+ // |cookieUrl| is a third-party url that sets a cookie on response. |
+ String cookieUrl = toThirdPartyUrl( |
+ makeCookieWebSocketUrl(webServer, "/cookie_1", "test1", "value1")); |
+ // This html file includes a script establishing a WebSocket connection to |cookieUrl|. |
+ String url = makeWebSocketScriptUrl(webServer, "/content_1.html", cookieUrl); |
+ loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url); |
+ final String connecting = "0"; // WebSocket.CONNECTING |
+ final String closed = "3"; // WebSocket.CLOSED |
+ String readyState = connecting; |
+ WebContents webContents = mAwContents.getWebContents(); |
+ while (!readyState.equals(closed)) { |
+ readyState = JavaScriptUtils.executeJavaScriptAndWaitForResult( |
+ webContents, "ws.readyState"); |
+ } |
+ assertEquals("true", |
+ JavaScriptUtils.executeJavaScriptAndWaitForResult(webContents, "hasOpened")); |
+ assertNull(mCookieManager.getCookie(cookieUrl)); |
+ } finally { |
+ webServer.shutdown(); |
+ } |
+ } |
+ |
+ @MediumTest |
+ @Feature({"AndroidWebView", "Privacy"}) |
+ public void testThirdPartyCookieForWebSocketEnabledCase() throws Throwable { |
+ TestWebServer webServer = TestWebServer.start(); |
+ try { |
+ // Turn global allow on. |
+ mCookieManager.setAcceptCookie(true); |
+ assertTrue(mCookieManager.acceptCookie()); |
+ |
+ // When third party cookies are enabled... |
+ mAwContents.getSettings().setAcceptThirdPartyCookies(true); |
+ assertTrue(mAwContents.getSettings().getAcceptThirdPartyCookies()); |
+ |
+ // |cookieUrl| is a third-party url that sets a cookie on response. |
+ String cookieUrl = toThirdPartyUrl( |
+ makeCookieWebSocketUrl(webServer, "/cookie_1", "test1", "value1")); |
+ // This html file includes a script establishing a WebSocket connection to |cookieUrl|. |
+ String url = makeWebSocketScriptUrl(webServer, "/content_1.html", cookieUrl); |
+ loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url); |
+ WebContents webContents = mAwContents.getWebContents(); |
+ final String connecting = "0"; // WebSocket.CONNECTING |
+ final String closed = "3"; // WebSocket.CLOSED |
+ String readyState = connecting; |
+ while (!readyState.equals(closed)) { |
+ readyState = JavaScriptUtils.executeJavaScriptAndWaitForResult( |
+ webContents, "ws.readyState"); |
+ } |
+ assertEquals("true", |
+ JavaScriptUtils.executeJavaScriptAndWaitForResult(webContents, "hasOpened")); |
+ assertEquals("test1=value1", mCookieManager.getCookie(cookieUrl)); |
+ } finally { |
+ webServer.shutdown(); |
+ } |
+ } |
+ |
/** |
* Creates a response on the TestWebServer which attempts to set a cookie when fetched. |
* @param webServer the webServer on which to create the response |
@@ -418,6 +490,22 @@ public class CookieManagerTest extends AwTestBase { |
} |
/** |
+ * Creates a response on the TestWebServer which attempts to set a cookie when establishing a |
+ * WebSocket connection. |
+ * @param webServer the webServer on which to create the response |
+ * @param path the path component of the url (e.g "/cookie_test.html") |
+ * @param key the key of the cookie |
+ * @param value the value of the cookie |
+ * @return the url which gets the response |
+ */ |
+ private String makeCookieWebSocketUrl( |
+ TestWebServer webServer, String path, String key, String value) { |
+ List<Pair<String, String>> responseHeaders = new ArrayList<Pair<String, String>>(); |
+ responseHeaders.add(Pair.create("Set-Cookie", key + "=" + value + "; path=" + path)); |
+ return webServer.setResponseForWebSocket(path, responseHeaders); |
+ } |
+ |
+ /** |
* Creates a response on the TestWebServer which contains a script tag with an external src. |
* @param webServer the webServer on which to create the response |
* @param path the path component of the url (e.g "/my_thing_with_script.html") |
@@ -430,6 +518,24 @@ public class CookieManagerTest extends AwTestBase { |
return webServer.setResponse(path, responseStr, null); |
} |
+ /** |
+ * Creates a response on the TestWebServer which contains a script establishing a WebSocket |
+ * connection. |
+ * @param webServer the webServer on which to create the response |
+ * @param path the path component of the url (e.g "/my_thing_with_script.html") |
+ * @param url the url which which should appear as the src of the script tag. |
+ * @return the url which gets the response |
+ */ |
+ private String makeWebSocketScriptUrl(TestWebServer webServer, String path, String url) { |
+ String responseStr = "<html><head><title>Content!</title></head>" |
+ + "<body><script>\n" |
+ + "let ws = new WebSocket('" + url.replaceAll("^http", "ws") + "');\n" |
+ + "let hasOpened = false;\n" |
+ + "ws.onopen = () => hasOpened = true;\n" |
+ + "</script></body></html>"; |
+ return webServer.setResponse(path, responseStr, null); |
+ } |
+ |
@MediumTest |
@Feature({"AndroidWebView", "Privacy"}) |
public void testThirdPartyJavascriptCookie() throws Throwable { |