<!DOCTYPE html>
<meta charset="utf-8">
<title><a download> triggered download in sandbox is blocked.</title>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-iframe-sandbox">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-iframe-element">
<script src="/common/utils.js"></script>
<script src="/resources/testharness.js"></script>
<script src='/resources/testharnessreport.js'></script>
<script src="support/iframe_sandbox_download_helper.js"></script>
<body>
<script>
"use strict";
async_test(t => {
const download_token = token();
var iframe = document.createElement("iframe");
iframe.srcdoc = "<a>Download</a>";
iframe.sandbox = "allow-same-origin";
iframe.onload = t.step_func(function () {
iframe.contentWindow.addEventListener(
"unload", t.unreached_func("Unexpected navigation."));
let anchor = iframe.contentDocument.getElementsByTagName('a')[0];
anchor.href = `support/download_stash.py?token=${download_token}` +
`&finish-delay=${StreamDownloadFinishDelay()}`;
anchor.download = null;
anchor.click();
AssertDownloadFailure(t, download_token, StreamDownloadFinishDelay() +
DownloadVerifyDelay());
});
document.body.appendChild(iframe);
}, "<a download> triggered download in sandbox is blocked.");
async_test(t => {
const download_token = token();
let iframe = document.createElement("iframe");
iframe.srcdoc = '<a>Download</a>';
iframe.sandbox = "allow-same-origin";
iframe.onload = t.step_func(function () {
iframe.contentWindow.addEventListener(
"unload", t.unreached_func("Unexpected navigation."));
let anchor = iframe.contentDocument.getElementsByTagName('a')[0];
anchor.href = `support/download_stash.py?token=${download_token}`;
anchor.download = null;
anchor.click();
AssertDownloadFailure(t, download_token, DownloadVerifyDelay());
});
document.body.appendChild(iframe);
}, '<a download> triggered download in sandbox is blocked ' +
'before a request is made.');
['', 'target="_blank" ', 'target="_blank" rel="noopener" '].forEach(
attributes => async_test(t => {
const download_token = token();
let iframe = document.createElement("iframe");
iframe.srcdoc = `<a ${attributes}>Download</a>`;
iframe.sandbox = "allow-same-origin allow-popups";
iframe.onload = t.step_func(function () {
iframe.contentWindow.addEventListener(
"unload", t.unreached_func("Unexpected navigation."));
let anchor = iframe.contentDocument.getElementsByTagName('a')[0];
anchor.href = `support/download_stash.py?token=${download_token}` +
`&finish-delay=${StreamDownloadFinishDelay()}`;
anchor.click();
AssertDownloadFailure(t, download_token, StreamDownloadFinishDelay() +
DownloadVerifyDelay());
});
document.body.appendChild(iframe);
}, `<a ${attributes}> triggered download in sandbox is blocked.`));
</script>
</body>