| <!DOCTYPE html> |
| <title>Test "ended" event fires again after changing source after "ended" event.</title> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <audio autoplay></audio> |
| <script> |
| async_test(function(t) { |
| var endedCount = 0; |
| var audio = document.querySelector("audio"); |
| |
| audio.onended = t.step_func(function() { |
| switch (++endedCount) |
| { |
| case 1: |
| assert_greater_than(audio.playbackRate, 0); |
| assert_true(audio.ended); |
| |
| // Verify ended stays true even if playbackRate == 0 |
| // since that is technically still "forward". |
| audio.playbackRate = 0; |
| assert_true(audio.ended); |
| |
| try { |
| audio.playbackRate = -0.1; |
| } catch (exception) { |
| // "Backward" playback is not supported. |
| assert_equals(exception.name, "NotSupportedError") |
| } |
| |
| // Change src but don't seek so that internal state isn't reset. |
| audio.src = "content/silence.oga"; |
| assert_false(audio.ended); |
| |
| break; |
| case 2: |
| assert_true(audio.ended); |
| t.done(); |
| break; |
| } |
| }); |
| |
| audio.src = "content/silence.oga" |
| }); |
| </script> |