| <!DOCTYPE html> |
| <title>Test that media keeps playing when the source element is replaced.</title> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <audio></audio> |
| <script> |
| async_test(function(t) { |
| // TODO(srirama.m): Improve the test for better understanding |
| var timeupdateEventCount = 0; |
| var sourceReplaced = false; |
| |
| var audio = document.querySelector("audio"); |
| var source = document.createElement("source"); |
| source.src = "content/silence.oga"; |
| audio.appendChild(source); |
| |
| audio.onerror = t.unreached_func(); |
| |
| audio.ontimeupdate = t.step_func(function() { |
| ++timeupdateEventCount; |
| |
| if (timeupdateEventCount == 1) { |
| // If the media play has started it should continue even if |
| // source was replaced. Wait for two timeupdate events to |
| // make sure the same source keeps playing. |
| if (sourceReplaced) |
| assert_greater_than(audio.currentTime, 0); |
| } else if (timeupdateEventCount == 2) { |
| // We wait 2 timeupdate events so we are sure the media engine |
| // is playing the media, and make sure time is advancing. |
| assert_greater_than(audio.currentTime, 0); |
| if (!sourceReplaced) { |
| // Replacing the media's source element. |
| sourceReplaced = true; |
| timeupdateEventCount = 0; |
| |
| audio.removeChild(source); |
| var newSource = document.createElement("source"); |
| newSource.src = "content/test.oga"; |
| audio.appendChild(newSource); |
| } else { |
| t.done(); |
| } |
| } |
| }); |
| |
| assert_equals(audio.currentTime, 0); |
| audio.play(); |
| }); |
| </script> |