async_test(t => { const run_result = 'test_script_OK'; const blob_contents = 'window.test_result = "' + run_result + '";'; const blob = new Blob([blob_contents]); const url = URL.createObjectURL(blob); const e = document.createElement('script'); e.setAttribute('src', url); e.onload = t.step_func_done(() => { assert_equals(window.test_result, run_result); }); document.body.appendChild(e); }, 'Blob URLs can be used in '; const blob = new Blob([blob_contents], {type: 'text/html'}); const url = URL.createObjectURL(blob); const frame = document.createElement('iframe'); frame.setAttribute('src', url); frame.setAttribute('style', 'display:none;'); document.body.appendChild(frame); frame.onload = t.step_func_done(() => { assert_equals(frame.contentWindow.test_result, run_result); }); }, 'Blob URLs can be used in iframes, and are treated same origin'); async_test(t => { const blob_contents = '\n\n' + '\n' + '\n' + '
\n' + '
'; const blob = new Blob([blob_contents], {type: 'text/html'}); const url = URL.createObjectURL(blob); const frame = document.createElement('iframe'); frame.setAttribute('src', url + '#block2'); document.body.appendChild(frame); frame.contentWindow.onscroll = t.step_func_done(() => { assert_equals(frame.contentWindow.scrollY, 5000); }); }, 'Blob URL fragment is implemented.');