Chromium Code Reviews| 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..ec2f374f0f414ccdb9fb3865351e74788c034ecc 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,50 @@ |
| -<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) { |
| + 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; |
|
foolip
2016/06/02 09:37:03
This line makes the structure of the test harder t
Srirama
2016/06/02 13:29:37
Acknowledged.
|
| + |
| + 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> |