Update web-platform-tests to revision 122a4672fa0dc554a6e7528fa3487fd907c792ee

This commit is contained in:
WPT Sync Bot 2019-03-23 21:54:52 -04:00
parent fb1123495f
commit 93d826f7ba
301 changed files with 4775 additions and 1769 deletions

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
promise_test(async () => {
var portal = document.createElement("portal");
portal.src = "resources/portal-activate-inside-portal.html";
let waitForMessage = new Promise((resolve, reject) => {
var bc = new BroadcastChannel("portals-activate-inside-portal");
bc.onmessage = e => {
bc.close();
resolve(e.data);
}
document.body.appendChild(portal);
});
var error = await waitForMessage;
assert_equals(error, "InvalidStateError");
}, "activating a nested portal should throw an error");
</script>
</body>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
promise_test(async t => {
let waitForMessage = new Promise((resolve, reject) => {
var bc = new BroadcastChannel("portals-activate-twice");
bc.onmessage = e => {
resolve(e.data);
}
});
window.open("resources/portal-activate-twice-window-1.html");
let error = await waitForMessage;
assert_equals(error, "InvalidStateError");
}, "Calling activate when a portal is already activating should fail");
promise_test(async t => {
let waitForMessage = new Promise((resolve, reject) => {
var bc = new BroadcastChannel("portals-activate-twice");
bc.onmessage = e => {
resolve(e.data);
}
});
window.open("resources/portal-activate-twice-window-2.html");
let error = await waitForMessage;
assert_equals(error, "InvalidStateError");
});
</script>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<title>Tests that a portal can adopt its predecessor</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
async_test(function(t) {
var bc = new BroadcastChannel("portal-test");
bc.onmessage = t.step_func_done(function(e) {
assert_equals(e.data, "passed");
bc.close();
});
window.open("resources/portals-adopt-predecessor.html");
}, "Tests that a portal can adopt its predecessor.");
</script>

View file

@ -0,0 +1,131 @@
<!DOCTYPE html>
<title>Test postMessage on HTMLPortalElement</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
const sameOriginUrl = "resources/portal-post-message-portal.html"
const crossOriginUrl = "http://{{hosts[alt][www]}}:{{ports[http][0]}}/portals/resources/portal-post-message-cross-origin-portal.sub.html"
async function createAndInsertPortal(portalSrc) {
var portal = document.createElement("portal");
portal.src = portalSrc;
document.body.append(portal);
var loadPromise = new Promise((resolve, reject) => {
var bc = new BroadcastChannel("portals-post-message");
bc.onmessage = e => {
bc.close();
resolve();
};
});
await loadPromise;
return portal;
}
function postMessage(portal, ...postMessageArgs) {
return new Promise((resolve, reject) => {
portal.postMessage(...postMessageArgs);
var bc = new BroadcastChannel("portals-post-message");
bc.onmessage = e => {
bc.close();
resolve(e.data);
};
});
}
promise_test(async () => {
var portal = await createAndInsertPortal(sameOriginUrl);
var message = "test message";
var {origin, data} = await postMessage(portal, message, "*");
assert_equals(data, message);
assert_equals(origin, window.location.origin);
}, "postMessage message received by portalHost");
promise_test(async () => {
var portal = await createAndInsertPortal(crossOriginUrl);
var message = "test message";
var {origin, data} = await postMessage(portal, message, "*");
assert_equals(data, message);
assert_equals(origin, window.location.origin);
}, "postMessage message received by portalHost in cross-origin portal");
promise_test(async () => {
var portal = await createAndInsertPortal(sameOriginUrl);
var message = "test message";
var {data} = await postMessage(portal, message);
assert_equals(data, message);
var {data} = await postMessage(portal, message, "/");
assert_equals(data, message);
var {data} = await postMessage(portal, message,
"http://{{host}}:{{ports[http][0]}}");
assert_equals(data, message);
}, "postMessage received by portal host in same-origin portal for multiple valid target origins");
promise_test(async () => {
var portal = await createAndInsertPortal(crossOriginUrl);
var message = "test message";
var {data} = await postMessage(portal, message,
"http://{{hosts[alt][www]}}:{{ports[http][0]}}");
assert_equals(data, message);
}, "postMessage received by portal host in cross-origin portal when target origin is specified");
promise_test(async t => {
var portal = document.createElement("portal");
return promise_rejects(t, "InvalidStateError",
postMessage(portal, "test message"));
}, "cannot call postMessage on portal without portal browsing context");
async function waitForMessage(channelName) {
var bc = new BroadcastChannel(channelName);
return new Promise((resolve, reject) => {
bc.onmessage = e => {
bc.close();
resolve(e.data);
}
});
}
promise_test(async t => {
window.open("resources/portal-post-message-before-activate-window.html");
let {postMessageTS, activateTS} = await waitForMessage(
"portals-post-message-before-activate");
assert_less_than_equal(postMessageTS, activateTS);
}, "postMessage before activate should work and preserve order");
promise_test(async t => {
window.open("resources/portal-post-message-during-activate-window.html");
let error = await waitForMessage("portals-post-message-during-activate");
assert_equals(error, "InvalidStateError");
}, "postMessage during activate throws error");
promise_test(async t => {
window.open("resources/portal-post-message-after-activate-window.html");
let error = await waitForMessage("portals-post-message-after-activate");
assert_equals(error, "InvalidStateError");
}, "postMessage after activate throws error");
// TODO(adithyas): Use async_test instead of promise_test (for tests that
// use a timeout) once we implement postMessage in the other direction and
// no longer need to use broadcast channel.
const TIMEOUT_DURATION_MS = 1000;
promise_test(async t => {
var portal = await createAndInsertPortal(crossOriginUrl);
return new Promise((resolve, reject) => {
postMessage(portal, "test").then(() => { reject("message delivered"); });
t.step_timeout(resolve, TIMEOUT_DURATION_MS);
});
}, "message should not be delivered to cross-origin portal when targetOrigin is not specified");
promise_test(async t => {
var portal = await createAndInsertPortal(sameOriginUrl);
return new Promise((resolve, reject) => {
postMessage(portal, "test", "http://differentorigin.com:8002").then(
() => { reject("message delivered"); });
t.step_timeout(resolve, TIMEOUT_DURATION_MS);
});
}, "message should not be delivered to portal when targetOrigin does not match");
</script>
</body>

View file

@ -0,0 +1,17 @@
<!DOCTYPE html>
<body>
<script>
var portal = document.createElement("portal");
portal.src = "simple-portal.html";
var bc = new BroadcastChannel("simple-portal");
bc.onmessage = () => {
bc.close();
portal.activate().catch(e => {
var bc2 = new BroadcastChannel("portals-activate-inside-portal");
bc2.postMessage(e.name);
bc2.close();
});
}
document.body.appendChild(portal);
</script>
</body>

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<body>
<script>
var portal = document.createElement("portal");
portal.src = "simple-portal.html"
var bc = new BroadcastChannel("simple-portal");
bc.onmessage = () => {
bc.close();
portal.activate();
portal.activate().catch(e => {
var bc2 = new BroadcastChannel("portals-activate-twice");
bc2.postMessage(e.name, "*");
bc2.close();
});
}
document.body.append(portal);
</script>
</body>

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<body>
<script>
var portal1 = document.createElement("portal");
portal1.src = "simple-portal.html"
var portal2 = document.createElement("portal");
portal2.src = "simple-portal.html"
var bc = new BroadcastChannel("simple-portal");
var waitForPortalsToLoad = new Promise((resolve, reject) => {
var count = 0;
bc.onmessage = () => {
count++;
if (count == 2) {
bc.close();
resolve();
}
}
});
waitForPortalsToLoad.then(() => {
portal1.activate();
portal2.activate().catch(e => {
var bc2 = new BroadcastChannel("portals-activate-twice");
bc2.postMessage(e.name, "*");
bc2.close();
});
});
document.body.append(portal1);
document.body.append(portal2);
</script>
</body>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<body>
<script>
var portal = document.createElement("portal");
portal.src = "portal-post-message-portal.html";
document.body.appendChild(portal);
var bc = new BroadcastChannel("portals-post-message");
bc.onmessage = () => {
bc.close();
portal.activate().then(() => {
error = "";
try {
portal.postMessage("message");
}
catch(err) {
error = err.name;
}
bc = new BroadcastChannel("portals-post-message-after-activate");
bc.postMessage(error);
bc.close();
});
}
</script>
</body>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<script>
var postMessagePromise = new Promise((resolve, reject) => {
window.portalHost.addEventListener("message", () => {
resolve(performance.now());
});
});
var activatePromise = new Promise((resolve, reject) => {
window.onportalactivate = () => {
resolve(performance.now());
}
});
var bc = new BroadcastChannel("portal");
bc.postMessage("loaded");
bc.close();
Promise.all([postMessagePromise, activatePromise])
.then(values => {
bc = new BroadcastChannel("portals-post-message-before-activate");
bc.postMessage({
postMessageTS: values[0],
activateTS: values[1]
});
bc.close();
});
</script>

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<body>
<script>
var portal = document.createElement("portal");
portal.src = "portal-post-message-before-activate-portal.html";
document.body.appendChild(portal);
var bc = new BroadcastChannel("portal");
bc.onmessage = () => {
portal.postMessage("message");
portal.activate();
bc.close();
}
</script>
</body>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<body>
<script>
let forwardingIframe = document.createElement('iframe');
let channelName = new URL(location).searchParams.get('broadcastchannel');
forwardingIframe.src =
`http://{{host}}:{{ports[http][0]}}/portals/resources/portal-forward-with-broadcast.html?broadcastchannel=portals-post-message`;
forwardingIframe.onload = () => {
forwardingIframe.contentWindow.postMessage("loaded", "*");
}
document.body.appendChild(forwardingIframe);
window.portalHost.addEventListener("message", e => {
var message = {
origin: e.origin,
data: e.data
};
forwardingIframe.contentWindow.postMessage(message, "*");
});
</script>
</body>

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<body>
<script>
var portal = document.createElement("portal");
portal.src = "portal-post-message-portal.html";
document.body.appendChild(portal);
var bc = new BroadcastChannel("portals-post-message");
bc.onmessage = () => {
bc.close();
portal.activate();
error = "";
try {
portal.postMessage("message");
} catch (err) {
error = err.name;
}
bc = new BroadcastChannel("portals-post-message-during-activate");
bc.postMessage(error);
bc.close();
}
</script>
</body>

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<script>
var bc = new BroadcastChannel("portals-post-message");
bc.postMessage("loaded");
bc.close();
window.portalHost.addEventListener("message", e => {
var message = {
origin: e.origin,
data: e.data
};
bc = new BroadcastChannel("portals-post-message");
bc.postMessage(message);
bc.close();
});
</script>

View file

@ -0,0 +1,17 @@
<!doctype html>
<script>
window.onportalactivate = function(e) {
var portal = e.adoptPredecessor();
document.body.appendChild(portal);
if (portal instanceof HTMLPortalElement) {
var bc_adopted = new BroadcastChannel("portal-adopted");
bc_adopted.postMessage("adopted");
bc_adopted.close();
}
}
var bc_loaded = new BroadcastChannel("portal-loaded");
bc_loaded.postMessage("loaded");
bc_loaded.close();
</script>

View file

@ -0,0 +1,20 @@
<!doctype html>
<body>
<portal src="portals-adopt-predecessor-portal.html"></portal>
</body>
<script>
var bc_loaded = new BroadcastChannel("portal-loaded");
bc_loaded.onmessage = function(e) {
document.querySelector("portal").activate();
bc_loaded.close();
var bc_adopted = new BroadcastChannel("portal-adopted");
bc_adopted.onmessage = function(e) {
bc_adopted.close();
var bc_test = new BroadcastChannel("portal-test");
bc_test.postMessage("passed");
bc_test.close();
}
}
</script>

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<body>
<script>
var bc = new BroadcastChannel("simple-portal");
bc.postMessage("loaded");
bc.close();
</script>
</body>