summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html
blob: 6b3b3104ef38a9cbc1596961e62cb7804489dd94 (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
<!DOCTYPE html>
<meta charset="utf-8">
<title>Navigation resulted download in sandbox is allowed by allow-downloads.</title>
<meta name="timeout" content="long" />
<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="/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 token = "{{$id:uuid()}}";
    var iframe = document.createElement("iframe");
    iframe.srcdoc = "<a>Download</a>";
    iframe.sandbox = "allow-same-origin allow-downloads";
    iframe.onload = t.step_func(function () {
        iframe.contentWindow.addEventListener(
            "unload", t.unreached_func("Unexpected navigation."));
        var anchor = iframe.contentDocument.getElementsByTagName('a')[0];
        // Set |finish-delay| to let the server stream a response over a  period
        // of time, so it's able to catch potential download cancellation by
        // detecting a socket close.
        anchor.href = "support/download_stash.py?token=" + token + "&finish-delay=" + StreamDownloadFinishDelay();
        anchor.click();
        AssertDownloadSuccess(t, token, StreamDownloadFinishDelay() + DownloadVerifyDelay());
    });

    document.body.appendChild(iframe);
}, "Navigation resulted download in sandbox is allowed by allow-downloads.");

async_test(t => {
    const token = "{{$id:uuid()}}";
    var iframe = document.createElement("iframe");

    const folder = location.origin+"/html/semantics/embedded-content/the-iframe-element/";
    const href = `${folder}support/download_stash.py?token=${token}&finish-delay=${StreamDownloadFinishDelay() }`;
    const objectDoc =`<a href="${href}">download</a>
    <${"script"}> document.querySelector("a").click(); </${"script"}>`;

    iframe.srcdoc = `<object data='data:text/html,${objectDoc}'></object>`;
    iframe.sandbox = "allow-same-origin  allow-scripts allow-downloads";
    iframe.addEventListener("load",()=>{
        AssertDownloadSuccess(t, token, StreamDownloadFinishDelay() + DownloadVerifyDelay());
    })
    document.body.appendChild(iframe);
}, "Navigation resulted download in sandbox from <object> is allowed by allow-downloads.");

</script>
</body>