mirror of
https://github.com/SerenityOS/serenity
synced 2024-07-23 11:04:40 +00:00
LibWeb: Convert the cookie test page to a text test
This commit is contained in:
parent
0989a81a48
commit
00510e40d9
|
@ -1,55 +0,0 @@
|
|||
<body>
|
||||
<h3>Valid cookies:</h3>
|
||||
<br /><input type=button onclick="setCookie(this.value)" value="cookie1=value1; max-age=5; path=/res/html" />
|
||||
<br /><input type=button onclick="setCookie(this.value)" value="cookie2=value2; expires=Sat, 23 Jan 2060 08:10:36 GMT" />
|
||||
<br /><input type=button onclick="setCookie(this.value)" value="cookie3=value3" />
|
||||
<br /><input type=button onclick="setCookie(this.value)" value="cookie4=value4;SameSite=Lax" />
|
||||
<br /><input type=button onclick="setCookie(this.value)" value="cookie5=value5;SameSite=Strict" />
|
||||
<br /><input type=button onclick="setCookie(this.value)" value="cookie6=value6;SameSite=None" />
|
||||
<br /><input type=button onclick="setPrettyLargeCookie()" value="cookie7=xxxxx..[2048 x's]" />
|
||||
<br />
|
||||
|
||||
<h3>Invalid cookies (the browser should reject these):</h3>
|
||||
<br /><input id=invalid1 type=button onclick="setCookie(this.value)" value="cookie4=value4; domain=serenityos.org" />
|
||||
<label for=invalid1>The Domain attribute does not domain-match this page</label>
|
||||
<br /><input id=invalid2 type=button onclick="setCookie(this.value)" value="cookie5=value5; httponly" />
|
||||
<label for=invalid2>The cookie is HttpOnly thus cannot be set via JavaScript</label>
|
||||
<br /><input id=invalid3 type=button onclick="setCookie(this.value)" value="cookie6=value6; max-age=-1" />
|
||||
<label for=invalid3>The cookie expired in the past</label>
|
||||
<br /><input id=invalid4 type=button onclick="setCookie(this.value)" value="cookie7=value7; expires=Mon, 23 Jan 1989 08:10:36 GMT" />
|
||||
<label for=invalid4>The cookie expired in the past</label>
|
||||
<br /><input id=invalid5 type=button onclick="setTooLargeCookie()" value="cookie10=[more than 4096 chars]" />
|
||||
<label for=invalid5>The cookie is too large</label>
|
||||
<br /><input id=invalid6 type=button onclick="setCookie(this.value)" value="cookie11=value11; domain=uk.gov" />
|
||||
<label for=invalid6>The cookie's domain is on the Public Suffix List</label>
|
||||
<br /><input id=invalid7 type=button onclick="setCookie(this.value)" value="cookie12=value12; expires=Sat, 31 Feb 2060 08:10:36 GMT" />
|
||||
<label for=invalid4>The cookie has a date that does not exist</label>
|
||||
<br />
|
||||
|
||||
<h3>Unretrievable cookies (the browser should accept these but not display them):</h3>
|
||||
<br /><input id=locked1 type=button onclick="setCookie(this.value)" value="cookie8=value8; path=/not/this/path" />
|
||||
<label for=locked1>The Path attribute does not path-match this page</label>
|
||||
<br /><input id=locked2 type=button onclick="setCookie(this.value)" value="cookie9=value9; secure" />
|
||||
<label for=locked2>The cookie is Secure thus cannot be viewed by a file:// page</label>
|
||||
<br />
|
||||
|
||||
<pre>document.cookie = <span id=cookies></span></pre>
|
||||
|
||||
<script>
|
||||
function setCookie(cookie) {
|
||||
document.cookie = cookie;
|
||||
document.getElementById('cookies').innerHTML = document.cookie;
|
||||
}
|
||||
|
||||
function setPrettyLargeCookie() {
|
||||
setCookie('cookie7=' + 'x'.repeat(2048));
|
||||
}
|
||||
|
||||
function setTooLargeCookie() {
|
||||
const cookie = 'name=' + 'x'.repeat(4 << 10);
|
||||
setCookie(cookie);
|
||||
}
|
||||
|
||||
document.getElementById('cookies').innerHTML = document.cookie;
|
||||
</script>
|
||||
</body>
|
|
@ -173,7 +173,6 @@
|
|||
<li><a href="mouse-events.html">mouse events</a></li>
|
||||
<li><a href="message-channel.html">MessageChannel</a></li>
|
||||
<li><a href="websocket.html">WebSocket API Test</a></li>
|
||||
<li><a href="cookie.html">document.cookie</a></li>
|
||||
<li><a href="event-bubbling-and-multiple-listeners.html">event bubbling and multiple listeners</a></li>
|
||||
<li><a href="raf.html">requestAnimationFrame</a></li>
|
||||
<li><a href="events.html">simple DOM events</a></li>
|
||||
|
|
20
Tests/LibWeb/Text/expected/cookie.txt
Normal file
20
Tests/LibWeb/Text/expected/cookie.txt
Normal file
|
@ -0,0 +1,20 @@
|
|||
Basic test: "cookie=value"
|
||||
Multiple cookies: "cookie1=value1; cookie2=value2; cookie3=value3"
|
||||
Large value: "cookie=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||
Overly large value: ""
|
||||
HTTP only: ""
|
||||
Public suffix: ""
|
||||
SameSite=Lax: "cookie=value"
|
||||
SameSite=Strict: "cookie=value"
|
||||
SameSite=None: "cookie=value"
|
||||
Max-Age (before expiration): "cookie-max-age=value"
|
||||
Expires (before expiration): "cookie-expires=value; cookie-max-age=value"
|
||||
Max-Age (after expiration): ""
|
||||
Expires (after expiration): ""
|
||||
Max-Age in past: ""
|
||||
Expires in past: ""
|
||||
Invalid expiry (date does not exist): "cookie=value"
|
||||
Invalid expiry (missing time): "cookie=value"
|
||||
Invalid expiry (missing day): "cookie=value"
|
||||
Invalid expiry (missing month): "cookie=value"
|
||||
Invalid expiry (missing year): "cookie=value"
|
153
Tests/LibWeb/Text/input/cookie.html
Normal file
153
Tests/LibWeb/Text/input/cookie.html
Normal file
|
@ -0,0 +1,153 @@
|
|||
<div id="test"></div>
|
||||
<script src="include.js"></script>
|
||||
<script>
|
||||
const printCookies = label => {
|
||||
// There's no specified order for multiple cookies, and it's a bit non-deterministic in our implementation.
|
||||
// Sort the cookies alphabetically here for ease of testing.
|
||||
const cookies = document.cookie.split("; ").sort().join("; ");
|
||||
println(`${label}: "${cookies}"`);
|
||||
};
|
||||
|
||||
const deleteCookie = name => {
|
||||
document.cookie = `${name}=""; max-age=-9999`;
|
||||
};
|
||||
|
||||
const basicTest = () => {
|
||||
document.cookie = "cookie=value";
|
||||
printCookies("Basic test");
|
||||
|
||||
deleteCookie("cookie");
|
||||
};
|
||||
|
||||
const multipleCookiesTest = () => {
|
||||
document.cookie = "cookie1=value1";
|
||||
document.cookie = "cookie2=value2";
|
||||
document.cookie = "cookie3=value3";
|
||||
|
||||
printCookies("Multiple cookies");
|
||||
|
||||
deleteCookie("cookie1");
|
||||
deleteCookie("cookie2");
|
||||
deleteCookie("cookie3");
|
||||
};
|
||||
|
||||
const largeValueTest = () => {
|
||||
const value = "x".repeat(256);
|
||||
|
||||
document.cookie = `cookie=${value}`;
|
||||
printCookies("Large value");
|
||||
|
||||
deleteCookie("cookie");
|
||||
};
|
||||
|
||||
const overlyLargeValueTest = () => {
|
||||
const value = "x".repeat(4096 - "cookie=".length + 1);
|
||||
|
||||
document.cookie = `cookie=${value}`;
|
||||
printCookies("Overly large value");
|
||||
};
|
||||
|
||||
const httpOnlyTest = () => {
|
||||
document.cookie = "cookie=value; httponly";
|
||||
printCookies("HTTP only");
|
||||
};
|
||||
|
||||
const publicSuffixTest = () => {
|
||||
document.cookie = "cookie=value; domain=uk.gov";
|
||||
printCookies("Public suffix");
|
||||
};
|
||||
|
||||
const sameSiteTest = () => {
|
||||
document.cookie = "cookie=value; SameSite=Lax";
|
||||
printCookies("SameSite=Lax");
|
||||
deleteCookie("cookie");
|
||||
|
||||
document.cookie = "cookie=value; SameSite=Strict";
|
||||
printCookies("SameSite=Strict");
|
||||
deleteCookie("cookie");
|
||||
|
||||
document.cookie = "cookie=value; SameSite=None";
|
||||
printCookies("SameSite=None");
|
||||
deleteCookie("cookie");
|
||||
};
|
||||
|
||||
const maxAgeTest1 = () => {
|
||||
document.cookie = "cookie-max-age=value; max-age=1";
|
||||
printCookies("Max-Age (before expiration)");
|
||||
};
|
||||
|
||||
const maxAgeTest2 = () => {
|
||||
printCookies("Max-Age (after expiration)");
|
||||
};
|
||||
|
||||
const maxAgeInPastTest = () => {
|
||||
document.cookie = "cookie=value; max-age=-1";
|
||||
printCookies("Max-Age in past");
|
||||
};
|
||||
|
||||
const expiresTest1 = () => {
|
||||
let expiry = new Date(Date.now() + 1000);
|
||||
expiry = expiry.toUTCString();
|
||||
|
||||
document.cookie = `cookie-expires=value; expires=${expiry}`;
|
||||
printCookies("Expires (before expiration)");
|
||||
};
|
||||
|
||||
const expiresTest2 = () => {
|
||||
printCookies("Expires (after expiration)");
|
||||
};
|
||||
|
||||
const expiresInPastTest = () => {
|
||||
document.cookie = "cookie=value; expires=Mon, 23 Jan 1989 08:10:36 GMT";
|
||||
printCookies("Expires in past");
|
||||
};
|
||||
|
||||
// Note that in these cases, the attribute is simply ignored, rather than the cookie being rejected.
|
||||
const invalidExpiryTest = () => {
|
||||
document.cookie = "cookie=value; expires=Sat, 31 Feb 2060 08:10:36 GMT";
|
||||
printCookies("Invalid expiry (date does not exist)");
|
||||
deleteCookie("cookie");
|
||||
|
||||
document.cookie = "cookie=value; expires=Sat, 31 Feb 2060 GMT";
|
||||
printCookies("Invalid expiry (missing time)");
|
||||
deleteCookie("cookie");
|
||||
|
||||
document.cookie = "cookie=value; expires=Sat, Feb 2060 08:10:36 GMT";
|
||||
printCookies("Invalid expiry (missing day)");
|
||||
deleteCookie("cookie");
|
||||
|
||||
document.cookie = "cookie=value; expires=Sat, 31 2060 08:10:36 GMT";
|
||||
printCookies("Invalid expiry (missing month)");
|
||||
deleteCookie("cookie");
|
||||
|
||||
document.cookie = "cookie=value; expires=Sat, 31 Feb 08:10:36 GMT";
|
||||
printCookies("Invalid expiry (missing year)");
|
||||
deleteCookie("cookie");
|
||||
};
|
||||
|
||||
asyncTest(done => {
|
||||
basicTest();
|
||||
multipleCookiesTest();
|
||||
|
||||
largeValueTest();
|
||||
overlyLargeValueTest();
|
||||
|
||||
httpOnlyTest();
|
||||
publicSuffixTest();
|
||||
sameSiteTest();
|
||||
|
||||
maxAgeTest1();
|
||||
expiresTest1();
|
||||
|
||||
setTimeout(() => {
|
||||
maxAgeTest2();
|
||||
expiresTest2();
|
||||
|
||||
maxAgeInPastTest();
|
||||
expiresInPastTest();
|
||||
invalidExpiryTest();
|
||||
|
||||
done();
|
||||
}, 1200);
|
||||
});
|
||||
</script>
|
Loading…
Reference in a new issue