summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.tentative.html
blob: df469323199291f42034ec4b1dc8d440fe76b572 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<!DOCTYPE html>
<meta charset="utf-8">
<title>&lt;a download&gt; 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>