Auto merge of #28139 - servo-wpt-sync:wpt_update_03-02-2021, r=servo-wpt-sync

Sync WPT with upstream (03-02-2021)

Automated downstream sync of changes from upstream as of 03-02-2021.
[no-wpt-sync]
r? @servo-wpt-sync
This commit is contained in:
bors-servo 2021-02-03 13:53:38 -05:00 committed by GitHub
commit 00b98796bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
230 changed files with 1832 additions and 1867 deletions

View file

@ -0,0 +1,5 @@
[url-charset.window.html]
expected: TIMEOUT
[Blob charset should override any auto-detected charset.]
expected: TIMEOUT

View file

@ -4,7 +4,7 @@
expected: TIMEOUT
[Opening a blob URL in a new window immediately before revoking it works.]
expected: FAIL
expected: TIMEOUT
[Fetching a blob URL immediately before revoking it works in an iframe.]
expected: FAIL

View file

@ -1,4 +0,0 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

@ -309,30 +309,24 @@
[Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK]
expected: NOTRUN
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL

View file

@ -53,9 +53,3 @@
[combined text/javascript ]
expected: FAIL
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript error]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

@ -0,0 +1,2 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener of discarded nested browsing context]
expected: FAIL

View file

@ -0,0 +1,4 @@
[2d.transformation.translate3d.html]
[translate3d() function modifies the underlying matrix appropriately]
expected: FAIL

View file

@ -1,16 +1,17 @@
[supported-elements.html]
expected: TIMEOUT
[Contenteditable element should support autofocus]
expected: FAIL
[Host element with delegatesFocus including no focusable descendants should be skipped]
expected: FAIL
expected: NOTRUN
[Element with tabindex should support autofocus]
expected: FAIL
[Area element should support autofocus]
expected: FAIL
expected: NOTRUN
[Host element with delegatesFocus should support autofocus]
expected: FAIL
expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_escaping-3.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT
expected: FAIL

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html]
expected: TIMEOUT
expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN

View file

@ -1,4 +0,0 @@
[form-double-submit.html]
[default submit action should supersede onclick submit()]
expected: FAIL

View file

@ -1,16 +1,4 @@
[select-event.html]
[input type text: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type password: select() a second time (must not fire select)]
expected: FAIL
[input type search: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type search: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart a second time (must not fire select)]
expected: FAIL
@ -20,54 +8,63 @@
[textarea: selectionDirection a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type url: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type text: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type search: selectionStart a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type tel: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type url: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type search: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type text: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type text: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type search: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type search: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type password: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type search: selectionDirection a second time (must not fire select)]
expected: FAIL
[textarea: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type tel: selectionStart a second time (must not fire select)]
[input type password: selectionStart a second time (must not fire select)]
expected: FAIL
[input type url: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[textarea: selectionStart a second time (must not fire select)]
expected: FAIL
[input type tel: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type password: selectionEnd a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type url: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type text: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type tel: select() a second time (must not fire select)]
expected: FAIL
[input type search: setRangeText() a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type url: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL

View file

@ -0,0 +1,2 @@
[script-onerror-insertion-point-2.html]
expected: TIMEOUT

View file

@ -1,4 +0,0 @@
[module-delayed.html]
[async document.write in a module]
expected: FAIL

View file

@ -1,5 +1,4 @@
[iframe-inheritance-srcdoc.html]
expected: TIMEOUT
[iframes srcdoc correctly inherit the ancestor's referrer policy]
expected: FAIL

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -1,4 +1,5 @@
[audiocontext-not-fully-active.html]
expected: TIMEOUT
[frame in navigated remote-site frame]
expected: FAIL

View file

@ -0,0 +1,5 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[url-charset.window.html]
expected: TIMEOUT
[Blob charset should override any auto-detected charset.]
expected: TIMEOUT

View file

@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
expected: FAIL
expected: TIMEOUT
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: TIMEOUT

File diff suppressed because it is too large Load diff

View file

@ -1,67 +0,0 @@
[domain-tests.html]
[domain0036 - domain0036]
expected: FAIL
[domain0035 - domain0035]
expected: FAIL
[domain0029 - domain0029]
expected: FAIL
[domain0022 - domain0022]
expected: FAIL
[domain0005 - domain0005]
expected: FAIL
[optional-domain0041 - optional-domain0041]
expected: FAIL
[domain0003 - domain0003]
expected: FAIL
[domain0019 - domain0019]
expected: FAIL
[domain0040 - domain0040]
expected: FAIL
[domain0025 - domain0025]
expected: FAIL
[domain0020 - domain0020]
expected: FAIL
[domain0001 - domain0001]
expected: FAIL
[domain0038 - domain0038]
expected: FAIL
[domain0039 - domain0039]
expected: FAIL
[domain0033 - domain0033]
expected: FAIL
[domain0031 - domain0031]
expected: FAIL
[domain0023 - domain0023]
expected: FAIL
[domain0012 - domain0012]
expected: FAIL
[domain0008 - domain0008]
expected: FAIL
[domain0009 - domain0009]
expected: FAIL
[domain0026 - domain0026]
expected: FAIL
[domain0004 - domain0004]
expected: FAIL

View file

@ -1,4 +0,0 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

@ -309,30 +309,24 @@
[fetch(): separate response Content-Type: text/plain ]
expected: NOTRUN
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL

View file

@ -53,9 +53,3 @@
[combined text/javascript ]
expected: FAIL
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript error]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

@ -0,0 +1,2 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL

View file

@ -0,0 +1,4 @@
[2d.transformation.translate3d.html]
[translate3d() function modifies the underlying matrix appropriately]
expected: FAIL

View file

@ -1,4 +1,5 @@
[supported-elements.html]
expected: TIMEOUT
[Contenteditable element should support autofocus]
expected: FAIL
@ -6,11 +7,11 @@
expected: FAIL
[Host element with delegatesFocus including no focusable descendants should be skipped]
expected: FAIL
expected: NOTRUN
[Area element should support autofocus]
expected: FAIL
expected: NOTRUN
[Host element with delegatesFocus should support autofocus]
expected: FAIL
expected: TIMEOUT

View file

@ -1,6 +1,5 @@
[iframe_sandbox_popups_escaping-3.html]
type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT
expected: FAIL

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-1.html]
type: testharness
expected: TIMEOUT
expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN

View file

@ -1,4 +0,0 @@
[form-double-submit.html]
[default submit action should supersede onclick submit()]
expected: FAIL

View file

@ -1,16 +1,4 @@
[select-event.html]
[input type text: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type password: select() a second time (must not fire select)]
expected: FAIL
[input type search: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type search: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart a second time (must not fire select)]
expected: FAIL
@ -20,54 +8,63 @@
[textarea: selectionDirection a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type url: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type text: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type search: selectionStart a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type tel: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type url: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type search: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type text: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type text: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type search: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type search: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type password: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type search: selectionDirection a second time (must not fire select)]
expected: FAIL
[textarea: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type tel: selectionStart a second time (must not fire select)]
[input type password: selectionStart a second time (must not fire select)]
expected: FAIL
[input type url: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[textarea: selectionStart a second time (must not fire select)]
expected: FAIL
[input type tel: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type password: selectionEnd a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type url: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type text: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type tel: select() a second time (must not fire select)]
expected: FAIL
[input type search: setRangeText() a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type url: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL

View file

@ -0,0 +1,2 @@
[script-onerror-insertion-point-2.html]
expected: TIMEOUT

View file

@ -1,4 +0,0 @@
[module-delayed.html]
[async document.write in a module]
expected: FAIL

View file

@ -1,5 +1,4 @@
[iframe-inheritance-srcdoc.html]
expected: TIMEOUT
[iframes srcdoc correctly inherit the ancestor's referrer policy]
expected: FAIL

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -1,4 +1,5 @@
[audiocontext-not-fully-active.html]
expected: TIMEOUT
[frame in navigated remote-site frame]
expected: FAIL

View file

@ -0,0 +1,5 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -77,6 +77,9 @@ jobs:
pool:
vmImage: 'ubuntu-18.04'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.8.x'
- template: tools/ci/azure/checkout.yml
- script: |
set -euo pipefail

View file

@ -10,6 +10,10 @@ jobs:
build-and-tag:
runs-on: ubuntu-18.04
steps:
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Checkout
uses: actions/checkout@v1
with:

View file

@ -15,7 +15,7 @@
function describe(value) {
let type, str;
if (typeof value === 'object' && value) {
type = value.__proto__.constructor.name;
type = Object.getPrototypeOf(value).constructor.name;
// Handle Number(-0), etc.
str = Object.is(value.valueOf(), -0) ? '-0' : String(value);
} else {
@ -54,7 +54,7 @@ function cloneObjectTest(value, verifyFunc) {
cloneTest(value, async (orig, clone) => {
assert_not_equals(orig, clone);
assert_equals(typeof clone, 'object');
assert_equals(orig.__proto__, clone.__proto__);
assert_equals(Object.getPrototypeOf(orig), Object.getPrototypeOf(clone));
await verifyFunc(orig, clone);
});
}
@ -141,7 +141,7 @@ const strings = [
].forEach(value => cloneTest(value, (orig, clone) => {
assert_not_equals(orig, clone);
assert_equals(typeof clone, 'object');
assert_equals(orig.__proto__, clone.__proto__);
assert_equals(Object.getPrototypeOf(orig), Object.getPrototypeOf(clone));
assert_equals(orig.valueOf(), clone.valueOf());
}));
@ -261,7 +261,7 @@ cloneObjectTest({foo: true, bar: false}, (orig, clone) => {
new DOMRect,
new DOMRectReadOnly(),
].forEach(value => cloneObjectTest(value, (orig, clone) => {
Object.keys(orig.__proto__).forEach(key => {
Object.keys(Object.getPrototypeOf(orig)).forEach(key => {
assert_equals(orig[key], clone[key], `Property ${key}`);
});
}));

View file

@ -9,14 +9,7 @@
//
// --enable-blink-features=MojoJS,MojoJSTest
async function loadChromiumResources() {
const chromiumResources = [
'/gen/third_party/blink/public/mojom/contacts/contacts_manager.mojom.js',
'/gen/components/payments/mojom/payment_request_data.mojom.js',
];
await loadMojoResources(chromiumResources);
await loadScript('/resources/chromium/contacts_manager_mock.js');
await import('/resources/chromium/contacts_manager_mock.js');
}
// User Agents must provide their own implementation of `WebContacts`,

View file

@ -0,0 +1,23 @@
<!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/testharnessreport.js"></script>
<script src="/cookies/resources/cookie-test.js"></script>
</head>
<body>
<script>
const port = "{{ports[http][0]}}";
const wwwHost = "{{domains[www]}}";
test(t => {
const win = window.open(`http://${wwwHost}:${port}/cookies/attributes/resources/domain-child.sub.html`);
fetch_tests_from_window(win);
});
</script>
</body>
</html>

View file

@ -154,6 +154,11 @@
expected: "test25",
name: "Ignore name- and value-less `Set-Cookie: \\t`",
},
{
cookie: "test=26; domain=.parser.test; ;; ;=; ,,, ===,abc,=; abracadabra! max-age=20;=;;",
expected: "",
name: "Ignore cookie with domain that won't domain match (along with other invalid noise)",
},
];
for (const test of invalidAttributeTests) {

View file

@ -0,0 +1,351 @@
<!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="/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: "",
name: "No cookie returned for domain mismatch (with domain mismatch as first domain attribute and second a bare attribute)",
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`,
},
];
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>

View file

@ -1,7 +1,22 @@
window.expireCookie = (cookie) => {
function expireCookie(cookie) {
const cookies = Array.isArray(cookie) ? cookie : [cookie];
for (let c of cookies) {
document.cookie = c += "; max-age=0";
}
}
window.getCookies = () => document.cookie;
function getCookies() {
return document.cookie;
}
window.addEventListener("message", (e) => {
if (e.data == "getCookies") {
const cookies = getCookies();
e.source.postMessage({"cookies": cookies}, '*');
}
if (typeof e.data == "object" && 'expireCookie' in e.data) {
expireCookie(e.data.expireCookie);
e.source.postMessage("expired", '*');
}
});

View file

@ -0,0 +1 @@
Access-Control-Allow-Origin: *

View file

@ -1,74 +0,0 @@
<!doctype html>
<html>
<head>
<meta charset=utf-8>
<title>Tests cookie setting domain functionality</title>
<meta name="timeout" content="long">
<meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/cookie-http-state-template.js"></script>
</head>
<body>
<div id="log"></div>
<div id="iframes"></div>
<script>
setup({ explicit_timeout: true });
const TEST_CASES = [
{file: "domain0001", name: "domain0001"},
{file: "domain0002", name: "domain0002"},
{file: "domain0003", name: "domain0003"},
{file: "domain0004", name: "domain0004"},
{file: "domain0005", name: "domain0005"},
{file: "domain0006", name: "domain0006"},
{file: "domain0007", name: "domain0007"},
{file: "domain0008", name: "domain0008"},
{file: "domain0009", name: "domain0009"},
{file: "domain0010", name: "domain0010"},
{file: "domain0011", name: "domain0011"},
{file: "domain0012", name: "domain0012"},
{file: "domain0013", name: "domain0013"},
{file: "domain0014", name: "domain0014"},
{file: "domain0015", name: "domain0015"},
{file: "domain0016", name: "domain0016"},
{file: "domain0017", name: "domain0017"},
{file: "domain0018", name: "domain0018"},
{file: "domain0019", name: "domain0019"},
{file: "domain0020", name: "domain0020"},
{file: "domain0021", name: "domain0021"},
{file: "domain0022", name: "domain0022"},
{file: "domain0023", name: "domain0023"},
{file: "domain0024", name: "domain0024"},
{file: "domain0025", name: "domain0025"},
{file: "domain0026", name: "domain0026"},
{file: "domain0027", name: "domain0027"},
{file: "domain0028", name: "domain0028"},
{file: "domain0029", name: "domain0029"},
{file: "optional-domain0030", name: "optional-domain0030"},
{file: "domain0031", name: "domain0031"},
{file: "domain0033", name: "domain0033"},
{file: "domain0034", name: "domain0034"},
{file: "domain0035", name: "domain0035"},
{file: "domain0036", name: "domain0036"},
{file: "domain0037", name: "domain0037"},
{file: "domain0038", name: "domain0038"},
{file: "domain0039", name: "domain0039"},
{file: "domain0040", name: "domain0040"},
{file: "domain0041", name: "domain0041"},
{file: "domain0042", name: "domain0042"},
{file: "optional-domain0041", name: "optional-domain0041"},
{file: "optional-domain0042", name: "optional-domain0042"},
{file: "optional-domain0043", name: "optional-domain0043"},
];
for (const i in TEST_CASES) {
const t = TEST_CASES[i];
promise_test(createCookieTest(t.file),
t.file + " - " + t.name);
}
</script>
</body>
</html>

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=home.example.org
Location: http://home.example.org:8888/cookie-parser-result?domain0001

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=home.example.org
Location: http://sibling.example.org:8888/cookie-parser-result?domain0002

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=.home.example.org
Location: http://home.example.org:8888/cookie-parser-result?domain0003

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=home.example.org
Location: http://subdomain.home.example.org:8888/cookie-parser-result?domain0004

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=.home.example.org
Location: http://subdomain.home.example.org:8888/cookie-parser-result?domain0005

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=.home.example.org
Location: http://sibling.example.org:8888/cookie-parser-result?domain0006

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=sibling.example.org
Location: http://sibling.example.org:8888/cookie-parser-result?domain0007

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=.example.org
Location: http://home.example.org:8888/cookie-parser-result?domain0008

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=example.org
Location: http://home.example.org:8888/cookie-parser-result?domain0009

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=..home.example.org
Location: http://home.example.org:8888/cookie-parser-result?domain0010

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=home..example.org
Location: http://home.example.org:8888/cookie-parser-result?domain0011

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain= .home.example.org
Location: http://home.example.org:8888/cookie-parser-result?domain0012

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain= . home.example.org
Location: http://home.example.org:8888/cookie-parser-result?domain0013

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=home.example.org.
Location: http://home.example.org:8888/cookie-parser-result?domain0014

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=home.example.org..
Location: http://home.example.org:8888/cookie-parser-result?domain0015

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=home.example.org .
Location: http://home.example.org:8888/cookie-parser-result?domain0016

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=.org
Location: http://home.example.org:8888/cookie-parser-result?domain0017

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain=.org.
Location: http://home.example.org:8888/cookie-parser-result?domain0018

View file

@ -1,3 +0,0 @@
Set-Cookie: foo=bar; domain=home.example.org
Set-Cookie: foo2=bar2; domain=.home.example.org
Location: http://home.example.org:8888/cookie-parser-result?domain0019

View file

@ -1,3 +0,0 @@
Set-Cookie: foo2=bar2; domain=.home.example.org
Set-Cookie: foo=bar; domain=home.example.org
Location: http://home.example.org:8888/cookie-parser-result?domain0020

View file

@ -1,2 +0,0 @@
Set-Cookie: foo=bar; domain="home.example.org"
Location: http://home.example.org:8888/cookie-parser-result?domain0021

View file

@ -1,3 +0,0 @@
Set-Cookie: foo=bar; domain=home.example.org
Set-Cookie: foo2=bar2; domain=.example.org
Location: http://home.example.org:8888/cookie-parser-result?domain0022

Some files were not shown because too many files have changed in this diff Show more