summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/cookies/attributes/resources/domain-child.sub.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/cookies/attributes/resources/domain-child.sub.html')
-rw-r--r--testing/web-platform/tests/cookies/attributes/resources/domain-child.sub.html401
1 files changed, 401 insertions, 0 deletions
diff --git a/testing/web-platform/tests/cookies/attributes/resources/domain-child.sub.html b/testing/web-platform/tests/cookies/attributes/resources/domain-child.sub.html
new file mode 100644
index 0000000000..515079b783
--- /dev/null
+++ b/testing/web-platform/tests/cookies/attributes/resources/domain-child.sub.html
@@ -0,0 +1,401 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>Test cookie domain attribute parsing</title>
+ <meta name=help href="https://tools.ietf.org/html/rfc6265#section-5.2.3">
+ <meta name="timeout" content="long">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/cookies/resources/cookie-test.js"></script>
+ </head>
+ <body>
+ <script>
+ const path = "path=/cookies/attributes"
+ const port = "{{ports[http][0]}}";
+ const host = "{{host}}"; // example.org
+ const wwwHost = "{{domains[www]}}"; // home.example.org
+ const www1Host = "{{domains[www1]}}"; // sibling.example.org
+ const www2wwwHost = "{{domains[www2.www]}}"; // subdomain.home.example.org
+
+ // naive helper method to return the TLD for a given domain
+ const getTLD = domain => {
+ let match = /\.[a-z]+$/.exec(domain);
+ if (match) {
+ return match[0];
+ } else {
+ throw 'Domain is malformed!';
+ }
+ }
+
+ // helper to take a domain like "www.example.org"
+ // and return a string like "www.eXaMpLe.org"
+ const makeBizarre = domain => {
+ let bizarre = "";
+ let domainArray = domain.split(".");
+ let secondLevel = domainArray[domainArray.length - 2];
+ for (let i in secondLevel) {
+ if (i % 2 == 1) {
+ bizarre += secondLevel[i].toUpperCase();
+ } else {
+ bizarre += secondLevel[i];
+ }
+ }
+ domainArray[domainArray.length - 2] = bizarre;
+ return domainArray.join(".");
+ }
+
+ // helper to change the current TLD to a TLD that doesn't exist, and is
+ // unlikely to exist in the future. (the main point is that the TLD
+ // *changes*, so there is no domain match, but we cant' predict how WPT
+ // servers may be set up in the wild so picking any valid TLD has the risk
+ // of future (unintentional) domain matching.
+ const changeTLD = domain => {
+ let domainArray = domain.split(".");
+ domainArray[domainArray.length - 1] += "zzz";
+ return domainArray.join(".");
+ }
+
+ const domainTests = [
+ {
+ cookie: `test=1; domain=${wwwHost}`,
+ expected: "test=1",
+ name: "Return cookie for a domain match",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=2; domain=${wwwHost}`,
+ expected: "",
+ name: "No cookie returned for domain mismatch (subdomains differ post-redirect)",
+ location: `http://${www1Host}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=3; domain=.${wwwHost}`,
+ expected: "test=3",
+ name: "Return cookie for a domain match with leading '.'",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=4; domain=${wwwHost}`,
+ expected: "test=4",
+ name: "Return cookie for domain match (domain attribute is suffix of the host name and first level subdomain)",
+ location: `http://${www2wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=5; domain=.${wwwHost}`,
+ expected: "test=5",
+ name: "Return cookie for domain match (domain attribute is suffix of the host name and first level subdomain, with leading '.')",
+ location: `http://${www2wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=6; domain=.${wwwHost}`,
+ expected: "",
+ name: "No cookie returned for domain mismatch (subdomains differ, with leading '.')",
+ location: `http://${www1Host}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=7; domain=${www1Host}`,
+ expected: "",
+ name: "No cookie returned for domain mismatch when cookie was created (which would match after the redirect, with one subdomain level)",
+ location: `http://${www1Host}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=8; domain=.${host}`,
+ expected: "test=8",
+ name: "Return cookie for domain match (domain attribute is suffix of the host name, with leading '.')",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=9; domain=${host}`,
+ expected: "test=9",
+ name: "Return cookie for domain match (domain attribute is suffix of the host name)",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=10; domain=..${wwwHost}`,
+ expected: "",
+ name: "No cookie returned for domain attribute with double leading '.'",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=11; domain=www..${host}`,
+ expected: "",
+ name: "No cookie returned for domain attribute with subdomain followed by ..",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=12; domain= .${wwwHost}`,
+ expected: "test=12",
+ name: "Return cookie for a domain match with leading whitespace and '.'",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=13; domain= . ${wwwHost}`,
+ expected: "",
+ name: "No cookie returned for domain attribute with whitespace that surrounds a leading '.'",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=14; domain=${wwwHost}.`,
+ expected: "",
+ name: "No cookie returned for domain attribute with trailing '.'",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=15; domain=${wwwHost}..`,
+ expected: "",
+ name: "No cookie returned for domain attribute with trailing '..'",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=16; domain=${wwwHost} .`,
+ expected: "",
+ name: "No cookie returned for domain attribute with trailing whitespace and '.'",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=17; domain=${getTLD(host)}`,
+ expected: "",
+ name: "No cookie returned for domain attribute with TLD as value",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=18; domain=.${getTLD(host)}`,
+ expected: "",
+ name: "No cookie returned for domain attribute with TLD as value, with leading '.'",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=18b; domain=.${getTLD(host)}.`,
+ expected: "",
+ name: "No cookie returned for domain attribute with TLD as value, with leading and trailing '.'",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: [`testA=19; domain=${wwwHost}`, `testB=19; domain=.${wwwHost}`],
+ expected: "testA=19; testB=19",
+ name: "Return multiple cookies that match on domain (without and with leading '.')",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: [`testB=20; domain=.${wwwHost}`, `testA=20; domain=${wwwHost}`],
+ expected: "testB=20; testA=20",
+ name: "Return multiple cookies that match on domain (with and without leading '.')",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=21; domain="${wwwHost}"`,
+ expected: "",
+ name: "No cookie returned for domain attribute value between quotes",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: [`testA=22; domain=${wwwHost}`, `testB=22; domain=.${host}`],
+ expected: "testA=22; testB=22",
+ name: "Return multiple cookies that match on subdomain and domain (without and with leading '.')",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: [`testB=23; domain=.${host}`, `testA=23; domain=${wwwHost}`],
+ expected: "testB=23; testA=23",
+ name: "Return multiple cookies that match on domain and subdomain (with and without leading '.')",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=24; domain=.${host}; domain=${wwwHost}`,
+ expected: "",
+ name: "No cookie returned when domain attribute does not domain-match (and first does)",
+ location: `http://${www1Host}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=25; domain=${wwwHost}; domain=.${host}`,
+ expected: "test=25",
+ name: "Return cookie for domain attribute match (first does not, but second does)",
+ location: `http://${www1Host}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=26; domain=${makeBizarre(wwwHost)}`,
+ expected: "test=26",
+ name: "Return cookie for domain match (with bizarre capitalization for domain attribute value)",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=27; domain="${wwwHost}:${port}"`,
+ expected: "",
+ name: "No cookie returned for domain attribute value with port",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=28; domain=${www2wwwHost}`,
+ expected: "",
+ name: "No cookie returned for domain mismatch when cookie was created (which would match after the redirect, with two subdomain levels)",
+ location: `http://${www2wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=29`,
+ expected: "",
+ name: "No cookie returned for cookie set on different domain (with no domain attribute)",
+ location: `http://${www2wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: "test=30; domain=",
+ expected: "test=30",
+ name: "Return cookie set with bare domain= attribute",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=31; domain=${wwwHost}`,
+ expected: "test=31",
+ name: "Return cookie that domain-matches with bizarre-cased URL",
+ location: `http://${makeBizarre(wwwHost)}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=32; domain=${wwwHost}; domain=${changeTLD(wwwHost)}`,
+ expected: "",
+ name: "No cookie returned for domain attribute mismatch (first attribute matches, but second does not)",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=33; domain=${changeTLD(wwwHost)}; domain=${wwwHost}`,
+ expected: "test=33",
+ name: "Return cookie for domain match (first attribute doesn't, but second does)",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=34; domain=${wwwHost}; domain=${changeTLD(wwwHost)}; domain=${wwwHost}`,
+ expected: "test=34",
+ name: "Return cookie for domain match (first attribute matches, second doesn't, third does)",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=35; domain=${changeTLD(wwwHost)}; domain=${wwwHost}; domain=${changeTLD(wwwHost)}`,
+ expected: "",
+ name: "No cookie returned for domain attribute mismatch (first attribute doesn't, second does, third doesn't)",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=36; domain=${wwwHost}; domain=${wwwHost}`,
+ expected: "test=36",
+ name: "Return cookie for domain match (with two identical domain attributes)",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=37; domain=${wwwHost}; domain=${host}`,
+ expected: "test=37",
+ name: "Return cookie for domain match (with first domain attribute a match for host name and second as suffix of host name)",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=38; domain=${host}; domain=${wwwHost}`,
+ expected: "test=38",
+ name: "Return cookie for domain match (with first domain attribute as suffix of host name and second a match for host name)",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=39; domain=.${www1Host}`,
+ expected: "",
+ name: "No cookie set on domain mismatch before a (domain matching) redirect",
+ location: `http://${www1Host}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=40; domain=.${www2wwwHost}`,
+ expected: "",
+ name: "No cookie set on domain mismatch before a (domain matching) redirect (for second level subdomain)",
+ location: `http://${www2wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=41; domain=${host}; domain=`,
+ expected: "test=41",
+ name: "Return cookie for domain match (with first domain attribute as suffix of host name and second a bare attribute)",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=42; domain=${www1Host}; domain=`,
+ expected: "test=42",
+ name: "Cookie returned for bare domain attribute following mismatched domain attribute (after redirect to same-origin page).",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=43; domain=${www1Host}; domain=`,
+ expected: "",
+ name: "No cookie returned for domain mismatch (first attribute is a different subdomain and second is bare)",
+ location: `http://${www2wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: [`test=not44; domain=${wwwHost}`, `test=44; domain=.${wwwHost}`],
+ expected: "test=44",
+ name: "Cookies with same name, path, and domain (differing only in leading '.') overwrite each other ('.' second)",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: [`test=not45; domain=.${wwwHost}`, `test=45; domain=${wwwHost}`],
+ expected: "test=45",
+ name: "Cookies with same name, path, and domain (differing only in leading '.') overwrite each other ('.' first)",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=46; domain=.`,
+ expected: "",
+ name: "No cookie returned for domain with single dot ('.') value.",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: `test=46b; domain=.; domain=${host}`,
+ expected: "test=46b",
+ name: "Return cookie with valid domain after domain with single dot ('.') value.",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: ["test=47", `test=47b; domain=${host}`,`test=47b; domain=${www1Host}; domain=`],
+ expected: "test=47b; test=47b",
+ name: "Empty domain treated as host cookie 1",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: ["test=48", `test=48b; domain=${host}`,`test=48b; domain=${host}; domain=`],
+ expected: "test=48b; test=48b",
+ name: "Empty domain treated as host cookie 2",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: ["test=49", `test=49b; domain=${host}`,`test=49b; domain=`],
+ expected: "test=49b; test=49b",
+ name: "Empty domain treated as host cookie 3",
+ location: `http://${wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: ["test=50", `test=50b; domain=${host}`,`test=50b; domain=${www1Host}; domain=`],
+ expected: "test=50b",
+ name: "No host cookies returned for host cookies after non-host redirect 1",
+ location: `http://${www2wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: ["test=51", `test=51b; domain=${host}`,`test=51b; domain=${host}; domain=`],
+ expected: "test=51b",
+ name: "No host cookies returned for host cookies after non-host redirect 2",
+ location: `http://${www2wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ {
+ cookie: ["test=52", `test=52b; domain=${host}`,`test=52b; domain=`],
+ expected: "test=52b",
+ name: "No host cookies returned for host cookies after non-host redirect 3",
+ location: `http://${www2wwwHost}:${port}/cookies/attributes/resources/path.html`,
+ },
+ ];
+
+ for (const test of domainTests) {
+ if (Array.isArray(test.cookie)) {
+ for (let i in test.cookie) {
+ test.cookie[i] += `; ${path}`;
+ }
+ } else {
+ test.cookie += `; ${path}`;
+ }
+
+ httpRedirectCookieTest(test.cookie, test.expected, test.name,
+ test.location);
+ }
+ </script>
+ </body>
+</html>