| <!doctype html> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| async_test(t => { |
| window.onload = t.step_func(() => { |
| let start_url = location.href; |
| let abort_signal; |
| let onabort_called = false; |
| let navigateErrorException; |
| appHistory.onnavigateerror = t.step_func(e => { |
| assert_equals(e.constructor, ErrorEvent); |
| navigateErrorException = e.error; |
| assert_equals(e.filename, start_url); |
| assert_greater_than(e.lineno, 0); |
| assert_greater_than(e.colno, 0); |
| }); |
| appHistory.onnavigatesuccess = t.unreached_func("onnavigatesuccess"); |
| appHistory.onnavigate = t.step_func(e => { |
| abort_signal = e.signal; |
| abort_signal.onabort = () => onabort_called = true; |
| e.transitionWhile(new Promise(resolve => t.step_timeout(resolve, 0))); |
| }); |
| let navigate_promise = appHistory.navigate("?1"); |
| window.stop(); |
| assert_true(abort_signal.aborted); |
| assert_true(onabort_called); |
| promise_rejects_dom(t, 'AbortError', navigate_promise).then(() => { |
| return navigate_promise.catch(e => assert_equals(e, navigateErrorException)); |
| }).then(() => { |
| // Complete the test asynchronously to ensure that onnavigatesuccess |
| // didn't fire on a microtask. |
| t.step_timeout(t.step_func_done(() => {}), 5); |
| }); |
| }); |
| }, "window.stop() cancels AppHistoryNavigateEvent's transitionWhile() and signals AppHistoryNavigateEvent's signal"); |
| </script> |