| <!doctype html> |
| <title>await a stable state and sync event handlers</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id=log></div> |
| <video></video> |
| <script> |
| var v; |
| var t = async_test(function(t) { |
| v = document.querySelector('video'); |
| var a = document.createElement('a'); |
| a.onclick = t.step_func(function() { |
| v.setAttribute('src', '#'); // invokes media load which invokes resource selection |
| assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState in onclick handler'); |
| }); |
| a.click(); // sync fires click, so sets src |
| // now we should still await a stable state because the script hasn't |
| // finished, the event handler has just returned |
| assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState after click()'); |
| v.removeAttribute('src'); |
| }); |
| t.step(function() { |
| // now the sync section of resource selection should have run and should |
| // have found no src="" or <source> thus networkState being set to NETWORK_EMPTY. |
| // if the sync section was run when onclick returned, then networkState |
| // would be either NETWORK_LOADING or NETWORK_NO_SOURCE. |
| assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState after src removed'); |
| t.done(); |
| }); |
| </script> |