| Index: third_party/WebKit/LayoutTests/media/media-continues-playing-after-replace-source.html
|
| diff --git a/third_party/WebKit/LayoutTests/media/media-continues-playing-after-replace-source.html b/third_party/WebKit/LayoutTests/media/media-continues-playing-after-replace-source.html
|
| index f1ede32c8a8e869e6ba5708578ab654ca03db083..fb9aaed8c717672e3ec64d96abf8e878e392cd7e 100644
|
| --- a/third_party/WebKit/LayoutTests/media/media-continues-playing-after-replace-source.html
|
| +++ b/third_party/WebKit/LayoutTests/media/media-continues-playing-after-replace-source.html
|
| @@ -1,111 +1,51 @@
|
| -<html>
|
| - <title>Test media source replacement</title>
|
| - <body>
|
| -
|
| - <p>Test that media keeps playing when the source element is replaced.</p>
|
| -
|
| - <!-- TODO(foolip): Convert test to testharness.js. crbug.com/588956
|
| - (Please avoid writing new tests using video-test.js) -->
|
| - <script src=video-test.js></script>
|
| - <script src=media-file.js></script>
|
| - <script src=../resources/gc.js></script>
|
| - <script>
|
| - var timeupdateEventCount = 0;
|
| - var skippedCount = 0;
|
| - var sourceReplaced = false;
|
| -
|
| - function swapAudio() {
|
| - v = document.getElementsByTagName('audio')[0];
|
| - v.removeChild(v.childNodes[0]);
|
| - var s = document.createElement('source');
|
| - s.src = findMediaFile("audio", "content/test");
|
| - v.appendChild(s);
|
| - }
|
| -
|
| - function errorListener(event)
|
| - {
|
| - logResult(false, "Caught 'error' event, audio.error.code = " + this.error.code);
|
| - endTest();
|
| - }
|
| -
|
| - function canplaythroughListener(event)
|
| - {
|
| - consoleWrite("EVENT(canplaythrough)");
|
| - testElement = this;
|
| - testExpected("testElement.currentTime", 0);
|
| - this.play();
|
| - }
|
| -
|
| - function playingListener(event)
|
| - {
|
| - consoleWrite("EVENT(playing)");
|
| - }
|
| -
|
| - function timeupdateListener(event)
|
| - {
|
| - ++timeupdateEventCount;
|
| -
|
| - if (timeupdateEventCount-skippedCount == 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) {
|
| - if (skippedCount >= 1 || this.currentTime > 0) {
|
| - testElement = this;
|
| - testExpected("testElement.currentTime", 0, '>');
|
| - } else {
|
| - // The time is not 0 as expected. Make sure same
|
| - // source keeps playing by waiting for one more event.
|
| - ++skippedCount;
|
| - }
|
| - }
|
| - } else if (timeupdateEventCount-skippedCount >= 2) {
|
| - // We wait 2 timeupdate events so we are sure the media engine
|
| - // is playing the media, and make sure time is advancing.
|
| - testElement = this;
|
| - testExpected("testElement.currentTime", 0, '>');
|
| - if (!sourceReplaced) {
|
| - consoleWrite("Replacing the media's source element:");
|
| - sourceReplaced = true;
|
| - timeupdateEventCount = 0;
|
| - skippedCount = 0;
|
| - // The ports are not consistent in regards to whether
|
| - // the canplaythrough and playing events are triggered
|
| - // a second time, so stop listening for them. This was
|
| - // done to help the cr-linux test pass, and does not
|
| - // necessarily indicate a problem.
|
| - this.removeEventListener('playing', playingListener);
|
| - this.removeEventListener('canplaythrough', canplaythroughListener);
|
| - swapAudio();
|
| - } else {
|
| - this.removeEventListener('timeupdate', timeupdateListener);
|
| - this.pause();
|
| - endTest();
|
| - }
|
| +<!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>
|
| +<script src="media-file.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 = findMediaFile("audio", "content/silence");
|
| + 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 = findMediaFile("audio", "content/test");
|
| + audio.appendChild(newSource);
|
| + } else {
|
| + t.done();
|
| }
|
| }
|
| + });
|
|
|
| - function testAudioElement(count)
|
| - {
|
| - timeupdateEventCount = 0;
|
| - skippedCount = 0;
|
| - var audioElement = document.getElementsByTagName('audio')[count];
|
| - //audioElement.removeChild(audioElement.childNodes[0]);
|
| - audioElement.addEventListener('error', errorListener);
|
| - audioElement.addEventListener('canplaythrough', canplaythroughListener);
|
| - audioElement.addEventListener('timeupdate', timeupdateListener);
|
| - audioElement.addEventListener('playing', playingListener);
|
| -
|
| - var s = document.createElement('source');
|
| - s.src = findMediaFile("audio", "content/silence");
|
| - audioElement.appendChild(s);
|
| -
|
| - }
|
| -
|
| - document.write("<audio controls></audio>");
|
| - testAudioElement(0);
|
| - gc();
|
| - </script>
|
| -
|
| - </body>
|
| -</html>
|
| + assert_equals(audio.currentTime, 0);
|
| + audio.play();
|
| +});
|
| +</script>
|
|
|