blob: 9296a99985b7432be33f5c7bff001be0be28cc2b [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>
Test allow attribute with "web-share" and share() method
</title>
<meta name="viewport" content="initial-scale=1, width=device-width" />
<script src="/js-test-resources/ui-helper.js"></script>
<script src="../resources/js-test-pre.js"></script>
<script>
testRunner?.dumpAsText();
testRunner?.waitUntilDone();
function waitFor(target, eventName) {
return new Promise((resolve) => {
target.addEventListener(eventName, resolve, { once: true });
});
}
function userActivation(element) {
const promise = UIHelper.isIOSFamily()
? UIHelper.tapElement(element)
: UIHelper.activateElement(element);
return promise;
}
const iframeDetails = [
{
enabled: "false",
src: "https://localhost:8443/webshare/resources/webshare-postmessage.html",
},
{
enabled: "true",
src: "./resources/webshare-postmessage.html",
},
{
allow: "web-share",
enabled: "true",
src: "https://localhost:8443/webshare/resources/webshare-postmessage.html",
},
{
allow: "web-share",
enabled: "true",
src: "./resources/webshare-postmessage.html",
},
{
allow: "web-share *",
enabled: "true",
src: "https://localhost:8443/webshare/resources/webshare-postmessage.html",
},
{
allow: "web-share *",
enabled: "true",
src: "./resources/webshare-postmessage.html",
},
{
allow: "web-share 'none'",
enabled: "false",
src: "https://localhost:8443/webshare/resources/webshare-postmessage.html",
},
{
allow: "web-share 'none'",
enabled: "false",
src: "./resources/webshare-postmessage.html",
},
{
allow: "web-share 'self'",
enabled: "false",
src: "https://localhost:8443/webshare/resources/webshare-postmessage.html",
},
{
allow: "web-share 'self'",
enabled: "true",
src: "./resources/webshare-postmessage.html",
},
{
allow: "web-share https://localhost:8443",
enabled: "true",
src: "https://localhost:8443/webshare/resources/webshare-postmessage.html",
},
{
allow: "web-share https://localhost:8443",
enabled: "false",
src: "./resources/webshare-postmessage.html",
},
];
async function loadIframe(details) {
const iframe = document.createElement("iframe");
if (details.hasOwnProperty("allow")) {
iframe.setAttribute("allow", details.allow);
}
iframe.dataset.enabled = details.enabled;
iframe.src = details.src;
document.body.appendChild(iframe);
await waitFor(iframe, "load");
return iframe;
}
async function runTests () {
for (const details of iframeDetails) {
const iframe = await loadIframe(details);
const { enabled } = iframe.dataset;
const isAllowed = enabled === "true";
const action = "call share()";
iframe.contentWindow.postMessage({ action }, "*");
const { data: activateMe } = await waitFor(window, "message");
if (activateMe !== "activate me!") {
throw new Error("Expected an activate request:" + activateMe);
}
await userActivation(iframe);
const { data } = await waitFor(window, "message");
const { exceptionMessage, exceptionName, result } = data;
const msg = `iframe src: "${iframe.src}" with allow="${
iframe.allow
}" ${
isAllowed ? "is allowed to" : "MUST NOT be allowed to"
} ${action}. ${exceptionName ?? ""} ${exceptionMessage ?? ""}`;
switch (result) {
case "share completed":
isAllowed ? testPassed(msg) : testFailed(msg);
break;
case "threw":
if (
!isAllowed &&
exceptionName === "NotAllowedError" &&
exceptionMessage.endsWith("Feature-Policy (web-share)")
) {
testPassed(msg);
} else {
testFailed(msg);
}
break;
default:
testFailed(msg + ` - result was: ${result}`);
}
iframe.remove();
}
testRunner.notifyDone();
}
</script>
</head>
<body onload="runTests()">
</html>