| // META: script=resources/fetch-tests.js |
| |
| function xhr_should_succeed(test, url) { |
| return new Promise((resolve, reject) => { |
| const xhr = new XMLHttpRequest(); |
| xhr.open('GET', url); |
| xhr.onload = test.step_func(() => { |
| assert_equals(xhr.status, 200); |
| assert_equals(xhr.statusText, 'OK'); |
| resolve(xhr.response); |
| }); |
| xhr.onerror = () => reject('Got unexpected error event'); |
| xhr.send(); |
| }); |
| } |
| |
| function xhr_should_fail(test, url, method = 'GET') { |
| const xhr = new XMLHttpRequest(); |
| xhr.open(method, url); |
| const result1 = new Promise((resolve, reject) => { |
| xhr.onload = () => reject('Got unexpected load event'); |
| xhr.onerror = resolve; |
| }); |
| const result2 = new Promise(resolve => { |
| xhr.onreadystatechange = test.step_func(() => { |
| if (xhr.readyState !== xhr.DONE) return; |
| assert_equals(xhr.status, 0); |
| resolve(); |
| }); |
| }); |
| xhr.send(); |
| return Promise.all([result1, result2]); |
| } |
| |
| fetch_tests('XHR', xhr_should_succeed, xhr_should_fail); |
| |
| async_test(t => { |
| const blob_contents = 'test blob contents'; |
| const blob_type = 'image/png'; |
| const blob = new Blob([blob_contents], {type: blob_type}); |
| const url = URL.createObjectURL(blob); |
| const xhr = new XMLHttpRequest(); |
| xhr.open('GET', url); |
| xhr.onloadend = t.step_func_done(() => { |
| assert_equals(xhr.getResponseHeader('Content-Type'), blob_type); |
| }); |
| xhr.send(); |
| }, 'XHR should return Content-Type from Blob'); |
| |
| async_test(t => { |
| const blob_contents = 'test blob contents'; |
| const blob = new Blob([blob_contents]); |
| const url = URL.createObjectURL(blob); |
| const xhr = new XMLHttpRequest(); |
| xhr.open('GET', url); |
| |
| // Revoke the object URL. XHR should take a reference to the blob as soon as |
| // it receives it in open(), so the request succeeds even though we revoke the |
| // URL before calling send(). |
| URL.revokeObjectURL(url); |
| |
| xhr.onload = t.step_func_done(() => { |
| assert_equals(xhr.response, blob_contents); |
| }); |
| xhr.onerror = t.unreached_func('Got unexpected error event'); |
| |
| xhr.send(); |
| }, 'Revoke blob URL after open(), will fetch'); |