Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/media/video-source-removed.html |
| diff --git a/third_party/WebKit/LayoutTests/media/video-source-removed.html b/third_party/WebKit/LayoutTests/media/video-source-removed.html |
| index 50485d47e59de86fba20771909b6a8aedd8b3419..9b5350a638a32028a5ec11f4cc3021d1e5ca013e 100644 |
| --- a/third_party/WebKit/LayoutTests/media/video-source-removed.html |
| +++ b/third_party/WebKit/LayoutTests/media/video-source-removed.html |
| @@ -1,94 +1,57 @@ |
| -<!doctype HTML> |
| -<html> |
| - <head> |
| - <title>crash after removing <source> test</title> |
| - <!-- 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> |
| - |
| - var testInfo = |
| - { |
| - current : -1, |
| - tests : [removeChild, innerHTML, replaceChild] |
| - }; |
| - |
| - function removeChild(sources) |
| - { |
| - consoleWrite("Removing all <source> elements with <i>removeChild()<" + "/i>"); |
| - for (var ndx = 0; ndx < sources.length; ++ndx) { |
| - consoleWrite(" -> removeChild(" + ndx + ")"); |
| - video.removeChild(sources[ndx]); |
| - } |
| - } |
| - |
| - function innerHTML() |
| - { |
| - consoleWrite("Removing all <source> by setting <i>.innerHTML<" + "/i>"); |
| - consoleWrite(" -> video.innerHTML = ''"); |
| - } |
| - |
| - function replaceChild(sources) |
| - { |
| - consoleWrite("Removing all <source> elements with <i>replaceChild()<" + "/i>"); |
| - var span = document.createElement("span") |
| - span.appendChild(document.createTextNode("Yo")); |
| - for (var ndx = 0; ndx < sources.length; ++ndx) { |
| - consoleWrite(" -> replaceChild(" + ndx + ")"); |
| - video.replaceChild(span, sources[ndx]); |
| - } |
| - } |
| - |
| - function runOneTest() |
| - { |
| - testInfo.tests[testInfo.current](document.querySelectorAll('source')); |
| - setTimeout(configureNextTest, 100); |
| - } |
| - |
| - function addSource(index) |
| - { |
| - source = document.createElement('source'); |
| - source.src = findMediaFile("video", index + "-" + Date.now()); |
| - source.type = mimeTypeForExtension(source.src.split('.').pop()); |
| - video.appendChild(source); |
| - } |
| - |
| - function runNextTest() |
| - { |
| - consoleWrite(""); |
| - if (++testInfo.current >= testInfo.tests.length) { |
| - consoleWrite("PASS: A crash did not occur when removing <source> elements.<br>"); |
| - endTest(); |
| - return; |
| - } |
| - |
| - video = mediaElement = document.createElement('video'); |
| - document.body.appendChild(video); |
| - video.addEventListener("loadstart", runOneTest); |
| - |
| - // Add a bunch of source elements with bogus urls because we want to remove elements |
| - // after the media engine begins processing sources, and we can't predict the delay |
| - // between when the media element fires an 'error' event and our handler is called, |
| - // but we need to guarantee that there are <source> elements that haven't been processed |
| - // when we run the test. |
| - for (var ndx = 1; ndx <= 10; ndx++) |
| - addSource(ndx); |
| - } |
| - |
| - function configureNextTest() |
| - { |
| - var videos = document.querySelectorAll('video'); |
| - for (var ndx = 0; ndx < videos.length; ++ndx) |
| - videos[ndx].parentNode.removeChild(videos[ndx]); |
| - video = mediaElement = null; |
| - setTimeout(runNextTest, 100); |
| - } |
| - </script> |
| - </head> |
| - |
| - <body> |
| - Test to make sure removing a media element's <source>(s) does not cause a crash. |
| - <script>configureNextTest()</script> |
| - </body> |
| -</html> |
| +<!DOCTYPE html> |
| +<title>Test to make sure removing a media element's source(s) does not cause a crash.</title> |
| +<script src="../resources/testharness.js"></script> |
| +<script src="../resources/testharnessreport.js"></script> |
| +<script src="media-file.js"></script> |
| +<script> |
| +function test_remove_source(testFunction) { |
| + async_test(function(t) { |
| + var video = document.createElement("video"); |
| + |
| + video.onloadstart = t.step_func(function() { |
| + testFunction(video); |
| + setTimeout(t.step_func_done(), 100); |
|
fs
2016/07/05 13:33:04
Not quite sure why we need 100ms here. I guess it'
Srirama
2016/07/05 14:55:28
yes, for the crash reason.
|
| + }); |
| + |
| + // Add a bunch of source elements with bogus urls because we want to remove elements |
| + // after the media engine begins processing sources, and we can't predict the delay |
| + // between when the media element fires an "error" event and our handler is called, |
| + // but we need to guarantee that there are <source> elements that haven't been |
| + // processed when we run the test. |
| + for (var index = 1; index <= 10; index++) |
| + addSource(index); |
| + |
| + function addSource(index) { |
| + source = document.createElement("source"); |
| + source.src = findMediaFile("video", index + "-" + Date.now()); |
| + source.type = mimeTypeForExtension(source.src.split(".").pop()); |
| + video.appendChild(source); |
| + } |
| + }, "source elements removed using " + testFunction.name + "()"); |
| +} |
| + |
| +function removeChild(video) { |
| + // Removing all "source" elements with "removeChild()". |
| + var sources = video.childNodes; |
| + for (var source of sources) |
| + video.removeChild(source); |
| +} |
| + |
| +function innerHTML(video) { |
| + // Removing all "source" elements by setting "innerHTML". |
| + video.innerHTML = ""; |
| +} |
| + |
| +function replaceChild(video) { |
| + // Removing all "source" elements with "replaceChild()". |
| + var sources = video.childNodes; |
| + var span = document.createElement("span"); |
| + span.appendChild(document.createTextNode("Yo")); |
| + for (var source of sources) |
| + video.replaceChild(span, source); |
| +} |
| + |
| +test_remove_source(removeChild); |
| +test_remove_source(innerHTML); |
| +test_remove_source(replaceChild); |
| +</script> |