| function blob_url_reload_test(t, revoke_before_reload) { |
| const run_result = 'test_frame_OK'; |
| const blob_contents = '<!doctype html>\n<meta charset="utf-8">\n' + |
| '<script>window.test_result = "' + run_result + '";</script>'; |
| 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(() => { |
| if (revoke_before_reload) |
| URL.revokeObjectURL(url); |
| assert_equals(frame.contentWindow.test_result, run_result); |
| frame.contentWindow.test_result = null; |
| frame.onload = t.step_func_done(() => { |
| assert_equals(frame.contentWindow.test_result, run_result); |
| }); |
| // Slight delay before reloading to ensure revoke actually has had a chance |
| // to be processed. |
| t.step_timeout(() => { |
| frame.contentWindow.location.reload(); |
| }, 250); |
| }); |
| } |
| |
| async_test(t => { |
| blob_url_reload_test(t, false); |
| }, 'Reloading a blob URL succeeds.'); |
| |
| |
| async_test(t => { |
| blob_url_reload_test(t, true); |
| }, 'Reloading a blob URL succeeds even if the URL was revoked.'); |