Update web-platform-tests to revision ad219567030d1f99f7310f52a17546b57b70d29e

This commit is contained in:
WPT Sync Bot 2019-02-14 20:36:47 -05:00
parent 2c63d1296b
commit a7e62acbe8
129 changed files with 4156 additions and 590 deletions

View file

@ -0,0 +1,193 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/document_domain_frame.sub.js"></script>
<body>
<script>
promise_test(async (t) => {
let frame1 = await createFrame(t, "control1-1", "{{domains[www1]}}");
let frame2 = await createFrame(t, "control1-2", "{{domains[www1]}}");
let result = await postMessageToFrame(frame1, { 'poke-at-sibling': "control1-2" });
assert_equals(result.data, "omg!");
}, "Access allowed if same-origin with no 'document.domain' modification. (Sanity check)");
promise_test(async (t) => {
let frame1 = await createFrame(t, "control2-1", "{{domains[www1]}}");
let frame2 = await createFrame(t, "control2-2", "{{domains[www2]}}");
let result = await postMessageToFrame(frame1, { 'poke-at-sibling': "control2-2" });
assert_equals(result.data, "SecurityError");
}, "Access not allowed if different-origin with no 'document.domain' modification. (Sanity check)");
promise_test(async (t) => {
let frame1 = await createFrame(t, "one-set-one-not-1", "{{domains[www1]}}");
let frame2 = await createFrame(t, "one-set-one-not-2", "{{domains[www1]}}");
await postMessageToFrame(frame1, { domain: "{{domains[www1]}}" });
let result = await postMessageToFrame(frame1, { 'poke-at-sibling': "one-set-one-not-2" });
assert_equals(result.data, "SecurityError");
result = await postMessageToFrame(frame2, { 'poke-at-sibling': "one-set-one-not-1" });
assert_equals(result.data, "SecurityError");
}, "Access disallowed if same-origin but only one sets document.domain.");
promise_test(async (t) => {
var frame1 = await createFrame(t, "both-set-to-existing-1", "{{domains[www1]}}");
var frame2 = await createFrame(t, "both-set-to-existing-2", "{{domains[www1]}}");
let result = await postMessageToFrame(frame1, { domain: "{{domains[www1]}}" });
assert_equals(result.data, "Done");
result = await postMessageToFrame(frame2, { domain: "{{domains[www1]}}" });
assert_equals(result.data, "Done");
result = await postMessageToFrame(frame1, { 'poke-at-sibling': "both-set-to-existing-2" });
assert_equals(result.data, "omg!");
result = await postMessageToFrame(frame2, { 'poke-at-sibling': "both-set-to-existing-1" });
assert_equals(result.data, "omg!");
}, "Access allowed if same-origin and both set document.domain to existing value.");
promise_test(async (t) => {
var frame1 = await createFrame(t, "both-set-to-parent-1", "{{domains[www1]}}");
var frame2 = await createFrame(t, "both-set-to-parent-2", "{{domains[www2]}}");
let result = await postMessageToFrame(frame1, { domain: "{{domains[]}}" });
assert_equals(result.data, "Done");
result = await postMessageToFrame(frame2, { domain: "{{domains[]}}" });
assert_equals(result.data, "Done");
result = await postMessageToFrame(frame1, { 'poke-at-sibling': "both-set-to-parent-2" });
assert_equals(result.data, "omg!");
result = await postMessageToFrame(frame2, { 'poke-at-sibling': "both-set-to-parent-1" });
assert_equals(result.data, "omg!");
}, "Access allowed if different-origin but both set document.domain to parent domain.");
promise_test(async (t) => {
var frame1 = await createFrame(t, "allow-then-revoke-1", "{{domains[www1]}}");
var frame2 = await createFrame(t, "allow-then-revoke-2", "{{domains[www1]}}");
let result = await postMessageToFrame(frame1, { domain: "{{domains[www1]}}" });
assert_equals(result.data, "Done");
result = await postMessageToFrame(frame2, { domain: "{{domains[www1]}}" });
assert_equals(result.data, "Done");
result = await postMessageToFrame(frame1, { 'poke-at-sibling': "allow-then-revoke-2" });
assert_equals(result.data, "omg!");
result = await postMessageToFrame(frame2, { 'poke-at-sibling': "allow-then-revoke-1" });
assert_equals(result.data, "omg!");
result = await postMessageToFrame(frame1, { domain: "{{domains[]}}" });
assert_equals(result.data, "Done");
result = await postMessageToFrame(frame1, { 'poke-at-sibling': "allow-then-revoke-2" });
assert_equals(result.data, "SecurityError");
result = await postMessageToFrame(frame2, { 'poke-at-sibling': "allow-then-revoke-1" });
assert_equals(result.data, "SecurityError");
}, "Access disallowed again if same-origin, both set document-domain to existing value, then one sets to parent.");
promise_test(async (t) => {
let frame1 = await createFrame(t, "revoke-Window-1", "{{domains[www1]}}");
let frame2 = await createFrame(t, "revoke-Window-2", "{{domains[www1]}}");
let result = await postMessageToFrame(frame1, { cache: ["parent", "revoke-Window-2"] });
assert_equals(result.data, "cached");
result = await postMessageToFrame(frame1, 'touch-cached');
assert_equals(result.data, "Reachable 1");
result = await postMessageToFrame(frame2, { cache: ["parent", "revoke-Window-1"] });
assert_equals(result.data, "cached");
result = await postMessageToFrame(frame1, 'touch-cached');
assert_equals(result.data, "Reachable 1");
result = await postMessageToFrame(frame1, { domain: "{{domains[www1]}}" });
assert_equals(result.data, "Done");
result = await postMessageToFrame(frame1, 'touch-cached');
assert_equals(result.data, "SecurityError");
result = await postMessageToFrame(frame2, 'touch-cached');
assert_equals(result.data, "SecurityError");
}, "Access is revoked to Window object when we stop being same effective script origin due to document.domain.");
promise_test(async (t) => {
let frame1 = await createFrame(t, "revoke-Location-1", "{{hosts[][www1]}}");
let frame2 = await createFrame(t, "revoke-Location-2", "{{domains[www1]}}");
let result = await postMessageToFrame(frame1, { cache: ["parent", "revoke-Location-2", "location"] });
assert_equals(result.data, "cached");
result = await postMessageToFrame(frame1, 'touch-cached');
assert_equals(result.data, "Reachable 3");
result = await postMessageToFrame(frame2, { cache: ["parent", "revoke-Location-1", "location"] });
assert_equals(result.data, "cached");
result = await postMessageToFrame(frame1, 'touch-cached');
assert_equals(result.data, "Reachable 3");
result = await postMessageToFrame(frame1, { domain: "{{domains[www1]}}" });
assert_equals(result.data, "Done");
result = await postMessageToFrame(frame1, 'touch-cached');
assert_equals(result.data, "SecurityError");
result = await postMessageToFrame(frame2, 'touch-cached');
assert_equals(result.data, "SecurityError");
}, "Access is revoked to Location object when we stop being same effective script origin due to document.domain.");
promise_test(async (t) => {
let frame1 = await createFrame(t, "no-revoke-Document-1", "{{domains[www1]}}");
let frame2 = await createFrame(t, "no-revoke-Document-2", "{{domains[www1]}}");
let result = await postMessageToFrame(frame1, { cache: ["parent", "no-revoke-Document-2", "document"] });
assert_equals(result.data, "cached");
result = await postMessageToFrame(frame1, 'touch-cached');
assert_equals(result.data, "Reachable 4");
result = await postMessageToFrame(frame2, { cache: ["parent", "no-revoke-Document-1", "document"] });
assert_equals(result.data, "cached");
result = await postMessageToFrame(frame1, 'touch-cached');
assert_equals(result.data, "Reachable 4");
result = await postMessageToFrame(frame1, { domain: "{{domains[www1]}}" });
assert_equals(result.data, "Done");
result = await postMessageToFrame(frame1, 'touch-cached');
assert_equals(result.data, "Reachable 4");
result = await postMessageToFrame(frame2, 'touch-cached');
assert_equals(result.data, "Reachable 4");
}, "Access is not revoked to Document object when we stop being same effective script origin due to document.domain.");
promise_test(async (t) => {
let frame1 = await createFrame(t, "no-revoke-object-1", "{{domains[www1]}}");
let frame2 = await createFrame(t, "no-revoke-object-2", "{{domains[www1]}}");
let result = await postMessageToFrame(frame1, { cache: ["parent", "no-revoke-object-2", "bar"] });
assert_equals(result.data, "cached");
result = await postMessageToFrame(frame1, 'touch-cached');
assert_equals(result.data, "Reachable 2");
result = await postMessageToFrame(frame2, { cache: ["parent", "no-revoke-object-1", "bar"] });
assert_equals(result.data, "cached");
result = await postMessageToFrame(frame1, 'touch-cached');
assert_equals(result.data, "Reachable 2");
result = await postMessageToFrame(frame1, { domain: "{{domains[www1]}}" });
assert_equals(result.data, "Done");
result = await postMessageToFrame(frame1, 'touch-cached');
assert_equals(result.data, "Reachable 2");
result = await postMessageToFrame(frame2, 'touch-cached');
assert_equals(result.data, "Reachable 2");
}, "Access is not revoked to random object when we stop being same effective script origin due to document.domain.");
</script>

View file

@ -0,0 +1,52 @@
<!DOCTYPE html>
<script>
let cache = window;
// "foo" needs to be a var so it's a property on the global.
var foo = 'Reachable 1';
// "bar" needs to be a var so it's a property on the global.
var bar = { foo: 'Reachable 2' };
location.foo = 'Reachable 3';
document.foo = 'Reachable 4';
window.addEventListener('message', e => {
if (e.data.domain !== undefined) {
try {
document.domain = e.data.domain;
e.ports[0].postMessage('Done');
} catch(error) {
e.ports[0].postMessage(error.name);
}
} else if (e.data['poke-at-sibling'] !== undefined) {
try {
var sekrit = parent[e.data['poke-at-sibling']].document.body.querySelector('#sekrit').value;
e.ports[0].postMessage(sekrit);
} catch(error) {
e.ports[0].postMessage(error.name);
}
} else if (e.data.cache != undefined) {
let path = e.data.cache;
try {
while (path.length != 0) {
cache = cache[path.shift()];
}
e.ports[0].postMessage('cached');
} catch (error) {
e.ports[0].postMessage(error.name);
}
} else if (e.data == 'touch-cached') {
try {
e.ports[0].postMessage(cache.foo);
} catch (error) {
e.ports[0].postMessage(error.name);
}
} else if (e.data == 'poke-at-parent') {
try {
var sekrit = window.parent.document.body.querySelector('#sekrit').value;
e.ports[0].postMessage(sekrit);
} catch(error) {
e.ports[0].postMessage(error.name);
}
}
});
window.parent.postMessage('Hi!', '*');
</script>
<input id="sekrit" value="omg!">

View file

@ -0,0 +1,65 @@
/**
* Utilities to be used with document_domain_frame.html.
*/
/**
* Send a message to the frame and resolve a promise when a response is received.
*
* Supported messages:
*
* 1) { domain: something }. Has the subframe try to set document.domain to the
* given value, and message back 'Done' if that succeeds or an error name if it
* fails.
*
* 2) 'poke-at-parent'. Has the subframe try to synchronously attempt to access
* the parent's DOM, read out a string value, and message it back to the parent.
* Again, sends back the error name if that fails.
*
* 3) { 'poke-at-sibling': name }. Has the subframe try to synchronously
* attempt to access the DOM of the sibling with the given name, read out a
* string value, and message it back to the parent.
*/
function postMessageToFrame(frame, message) {
return new Promise(resolve => {
var c = new MessageChannel();
c.port1.onmessage = e => {
resolve({ data: e.data, frame: frame })
};
frame.contentWindow.postMessage(message, '*', [c.port2]);
});
}
/**
* Create a frame that loads document_domain_frame.html and resolves a promise
* when the frame is loaded enough to be sending and receiving messages.
*
* If a "name" argument is provided, that name is used for the iframe, so
*
* If a "hostname" argument is provided, that hostname is used for the load, to
* allow testing details of the behavior when different sorts of hostnames are
* used.
*/
function createFrame(t, name, hostname) {
return new Promise(resolve => {
var i = document.createElement('iframe');
if (hostname) {
i.src = `//${hostname}:{{location[port]}}/html/browsers/origin/relaxing-the-same-origin-restriction/support/document_domain_frame.html`;
} else {
i.src = "support/document_domain_frame.html";
}
if (name) {
i.name = name;
}
var listener = m => {
if (m.source == i.contentWindow)
resolve(i);
}
window.addEventListener('message', listener);
t.add_cleanup(() => {
i.remove();
window.removeEventListener('message', listener);
});
document.body.appendChild(i);
});
}

View file

@ -0,0 +1,18 @@
test(() => {
const frame = document.createElement("iframe"),
name = "A",
name2 = "B";
frame.setAttribute("name", name);
document.body.append(frame);
const frameW = frame.contentWindow;
assert_equals(frameW.name, name);
frameW.name = name2;
assert_equals(frame.getAttribute("name"), name);
assert_equals(frameW.name, name2);
frame.remove();
assert_equals(frame.getAttribute("name"), name);
assert_equals(frameW.name, "");
frameW.name = name2;
assert_equals(frame.getAttribute("name"), name);
assert_equals(frameW.name, "");
}, "Window object's name IDL attribute");