<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Blob and File reference URL Test(3)</title>
    <link rel=help href="http://dev.w3.org/2006/webapi/FileAPI/#convenienceAPI">
    <link rel=author title="Breezewish" href="mailto:me@breeswish.org">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
</head>
<body>
    <form name="upload">
        <input type="file" id="fileChooser">
    </form>

    <div>
        <p>Test steps:</p>
        <ol>
            <li>Download the <a href="support/file_test3.html">file</a>.</li>
            <li>Select the file in the file inputbox and the test will start.</li>
        </ol>
    </div>

    <div id="log"></div>

    <script>

        var fileChooser = document.querySelector('#fileChooser');

        setup({explicit_done: true});
        setup({explicit_timeout: true});

        on_event(fileChooser, 'change', function() {

            async_test(function(t) {

                var url = URL.createObjectURL(fileChooser.files[0]);

                var e = document.createElement('iframe');
                e.setAttribute('src', url);
                e.setAttribute('style', 'display:none;');
                document.body.appendChild(e);

                e.contentWindow.document.body.onload = t.step_func_done(function() {
                    assert_equals(e.contentWindow.test_result, 'test3_OK');
                });

            }, 'Check whether the iframe content could be accessed when using Blob/File URL in the same origin.');

            async_test(function(t) {

                var url = URL.createObjectURL(fileChooser.files[0]);
                url += '#block2';

                var e = document.createElement('iframe');
                e.setAttribute('src', url);
                document.body.appendChild(e);

                e.contentWindow.document.body.onload = t.step_func_done(function() {
                    assert_equals(e.contentWindow.scrollY, 5000);
                });

            }, 'Check whether the Blob/File URL fragment is implemented.');

            done();

        });

    </script>
</body>
</html>
