blob: 7f21ecf7c36003baad085d75ee4a6c674dada39b [file] [edit]
def main(request, response):
query = request.url_parts.query or ""
if query == "clear=1":
return (
[
(b"Content-Type", b"text/plain"),
(b"Set-Cookie", b"WK-websocket-test=0; Path=/; Max-Age=-1"),
(b"Set-Cookie", b"WK-websocket-test-secure=0; Path=/; Secure; HttpOnly; Max-Age=-1"),
],
b"Cookies are cleared.",
)
# Phase 1: bounce away from localhost to https://web-platform.test. Loading
# the response over https (with a non-loopback hostname) is what lets the
# Secure cookie be set in a way that does not depend on CFNetwork's loopback
# "potentially trustworthy" treatment.
if query != "phase=test":
return (
[(b"Content-Type", b"text/html")],
b"""<html><body><script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
testRunner.setAllowsAnySSLCertificate(true);
}
location.href = "https://web-platform.test:9443/WebKit/websockets/secure-cookie-secure-connection.https.py?phase=test";
</script></body></html>""",
)
# Phase 2: served over https://web-platform.test, set both cookies and
# verify both are sent over wss.
return (
[
(b"Content-Type", b"text/html"),
(b"Set-Cookie", b"WK-websocket-test=1; Path=/"),
(b"Set-Cookie", b"WK-websocket-test-secure=1; Path=/; Secure; HttpOnly"),
],
b"""<html>
<head>
<script src="/webkit-test-resources/js-test-pre.js"></script>
</head>
<body>
<p>Test WebSocket sends Secure cookies over secure connections.</p>
<p>On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".</p>
<div id="console"></div>
<script>
window.jsTestIsAsync = true;
var cookie;
function normalizeCookie(c) { return c.split('; ').sort().join('; '); }
function clearCookies() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://web-platform.test:9443/WebKit/websockets/secure-cookie-secure-connection.https.py?clear=1", false);
xhr.send(null);
}
var ws = new WebSocket("wss://web-platform.test:49002/echo-cookie");
ws.onopen = function() { debug("WebSocket open"); };
ws.onmessage = function(evt) { cookie = evt.data; ws.close(); };
ws.onclose = function() {
debug("WebSocket closed");
cookie = normalizeCookie(cookie);
shouldBe("cookie", '"WK-websocket-test-secure=1; WK-websocket-test=1"');
clearCookies();
finishJSTest();
};
</script>
<script src="/webkit-test-resources/js-test-post.js"></script>
</body>
</html>""",
)