| Index: third_party/WebKit/LayoutTests/media/video-source-moved.html
|
| diff --git a/third_party/WebKit/LayoutTests/media/video-source-moved.html b/third_party/WebKit/LayoutTests/media/video-source-moved.html
|
| index d497015a19b8f7e68d6fb342d611399d48641ec1..2dadf6917431d67272c28ad8527226df98f5ea10 100644
|
| --- a/third_party/WebKit/LayoutTests/media/video-source-moved.html
|
| +++ b/third_party/WebKit/LayoutTests/media/video-source-moved.html
|
| @@ -1,207 +1,125 @@
|
| -<!doctype HTML>
|
| -<html>
|
| - <head>
|
| - <title>moving <source> element 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 :
|
| - [
|
| - { fcn : moveToEnd, errorCount : 0, moved : null, done : false, iteration : 1},
|
| - { fcn : moveToEnd, errorCount : 0, moved : null, done : false, iteration : 2},
|
| - { fcn : moveToEnd, errorCount : 0, moved : null, done : false, iteration : 3},
|
| - { fcn : moveEarlier, errorCount : 0, moved : null, iteration : 1 },
|
| - { fcn : moveEarlier, errorCount : 0, moved : null, iteration : 2 },
|
| - { fcn : moveEarlier, errorCount : 0, moved : null, iteration : 3 },
|
| - { fcn : moveEarlier, errorCount : 0, moved : null, iteration : 4 }
|
| - ]
|
| - };
|
| -
|
| - function findCurrentSourceElement()
|
| - {
|
| - var sources = video.getElementsByTagName('source');
|
| - var currentSrc = video.currentSrc;
|
| - var ndx;
|
| - for (ndx = 0; ndx < sources.length; ++ndx) {
|
| - if (sources[ndx].src == currentSrc)
|
| - break;
|
| - }
|
| - if (ndx >= sources.length) {
|
| - failTest(currentSrc + " not found in <source> list");
|
| - return null;
|
| - }
|
| - return sources[ndx];
|
| - }
|
| -
|
| - function moveEarlier(test, event)
|
| - {
|
| - if (test.done)
|
| - return;
|
| -
|
| - switch (++test.errorCount)
|
| - {
|
| - case 1:
|
| - // Do nothing on the first error event
|
| - break;
|
| -
|
| - case 2:
|
| - var current = findCurrentSourceElement();
|
| - switch (test.iteration)
|
| - {
|
| - case 1:
|
| - consoleWrite("Moving <b>current<" + "/b> <source> element to beginning of list, it should not be processed again.");
|
| - test.moved = video.removeChild(current);
|
| - break;
|
| - case 2:
|
| - consoleWrite("Moving <b>next<" + "/b> <source> element to beginning of list, it should never processed.");
|
| - test.moved = video.removeChild(current.nextSibling);
|
| - break;
|
| - case 3:
|
| - consoleWrite("<span> inserted after <b>current<" + "/b> <source> element before it is removed, processing should proceed normally.");
|
| - var span = document.createElement("span")
|
| - span.appendChild(document.createTextNode("Your browser doesn't support HTML5 video!"));
|
| - video.insertBefore(span, current.nextSibling);
|
| - test.moved = video.removeChild(current);
|
| - break;
|
| - case 4:
|
| - consoleWrite("<span> inserted after <b>next<" + "/b> <source> element before it is removed, processing should proceed normally.");
|
| - var span = document.createElement("span")
|
| - span.appendChild(document.createTextNode("Your browser doesn't support HTML5 video!"));
|
| - video.insertBefore(span, current.nextSibling.nextSibling);
|
| - test.moved = video.removeChild(current.nextSibling);
|
| - break;
|
| - default:
|
| - failTest("Malformed test data!");
|
| - break;
|
| - }
|
| -
|
| - testExpected(test.moved, null, '!=');
|
| - video.insertBefore(test.moved, video.firstChild);
|
| - break;
|
| -
|
| - default:
|
| - // We should never get an error for the element we moved.
|
| - if (event.target == test.moved) {
|
| - failTest("Error fired for <source> moved to beginning of list.");
|
| - test.done = true;
|
| - return;
|
| - } else if (!event.target.nextSibling) {
|
| - logResult(true, "<source> moved was not processed");
|
| - setTimeout(configureNextTest, 100);
|
| - }
|
| - break;
|
| - }
|
| - }
|
| -
|
| - function moveToEnd(test, event)
|
| - {
|
| - switch (++test.errorCount)
|
| - {
|
| - case 1:
|
| - // Do nothing on the first error event
|
| - break;
|
| -
|
| - case 2:
|
| - var current = findCurrentSourceElement();
|
| - switch (test.iteration)
|
| - {
|
| - case 1:
|
| - consoleWrite("Moving <b>previous<" + "/b> <source> element to end of list, it should be processed again.");
|
| - test.moved = video.removeChild(current.previousSibling);
|
| - break;
|
| - case 2:
|
| - consoleWrite("Moving <b>current<" + "/b> <source> element, it should be processed again.");
|
| - test.moved = video.removeChild(current);
|
| - break;
|
| - case 3:
|
| - consoleWrite("Moving <b>next<" + "/b> <source> element, it should be processed again.");
|
| - test.moved = video.removeChild(current.nextSibling);
|
| - break;
|
| - default:
|
| - failTest("Malformed test data!");
|
| - break;
|
| - }
|
| -
|
| - testExpected(test.moved, null, '!=');
|
| - video.appendChild(test.moved);
|
| - break;
|
| -
|
| - default:
|
| - if (event.target == test.moved) {
|
| - logResult(true, "<source> moved was processed a second time.");
|
| - setTimeout(configureNextTest, 100);
|
| - } else if (!event.target.nextSibling) {
|
| - // We should never reach the end of the source list since the tests stops
|
| - // when the error fires for the moved element.
|
| - failTest("Error never fired for <source> moved!");
|
| - }
|
| - break;
|
| - }
|
| - }
|
| -
|
| - function runOneTest(evt)
|
| - {
|
| - var test = testInfo.tests[testInfo.current];
|
| - test.fcn(test, evt);
|
| - }
|
| -
|
| - function addSource(index)
|
| - {
|
| - var 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<br>");
|
| - endTest();
|
| - return;
|
| - }
|
| -
|
| - testInfo.errorCount = 0;
|
| - video = mediaElement = document.createElement('video');
|
| - document.body.appendChild(video);
|
| -
|
| - // Add a bunch of source elements with bogus urls because we want to rearrange 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);
|
| +<!DOCTYPE html>
|
| +<title>Test to make sure a "source" moved after the media element begins processing is handled correctly.</title>
|
| +<script src="../resources/testharness.js"></script>
|
| +<script src="../resources/testharnessreport.js"></script>
|
| +<script src="media-file.js"></script>
|
| +<script>
|
| +for(var i = 0; i < 7; i++) {
|
| + async_test(function(t) {
|
| + var testInfo = [
|
| + { func : moveToEnd, errorCount : 0, moved : null, elementToMove: function(video, current) {
|
| + // Moving previous "source" element to end of list, it should be processed again.
|
| + return video.removeChild(current.previousSibling);
|
| + } },
|
| + { func : moveToEnd, errorCount : 0, moved : null, elementToMove: function(video, current) {
|
| + // Moving current "source" element, it should be processed again.
|
| + return video.removeChild(current);
|
| + } },
|
| + { func : moveToEnd, errorCount : 0, moved : null, elementToMove: function(video, current) {
|
| + // Moving next "source" element, it should be processed again.
|
| + return video.removeChild(current.nextSibling);
|
| + } },
|
| + { func : moveEarlier, errorCount : 0, moved : null, elementToMove: function(video, current) {
|
| + // Moving current "source" element to beginning of list, it should not be processed again.
|
| + return video.removeChild(current);
|
| + } },
|
| + { func : moveEarlier, errorCount : 0, moved : null, elementToMove: function(video, current) {
|
| + // Moving next "source" element to beginning of list, it should never processed.
|
| + return video.removeChild(current.nextSibling);
|
| + } },
|
| + { func : moveEarlier, errorCount : 0, moved : null, elementToMove: function(video, current) {
|
| + // span inserted after current "source" element before it is removed, processing should proceed normally.
|
| + var span = document.createElement("span")
|
| + span.appendChild(document.createTextNode("Your browser doesn't support HTML5 video!"));
|
| + video.insertBefore(span, current.nextSibling);
|
| + return video.removeChild(current);
|
| + } },
|
| + { func : moveEarlier, errorCount : 0, moved : null, elementToMove: function(video, current) {
|
| + // span inserted after next "source" element before it is removed, processing should proceed normally.
|
| + var span = document.createElement("span")
|
| + span.appendChild(document.createTextNode("Your browser doesn't support HTML5 video!"));
|
| + video.insertBefore(span, current.nextSibling.nextSibling);
|
| + return video.removeChild(current.nextSibling);
|
| + } }
|
| + ];
|
| +
|
| + var test = testInfo[i];
|
| + var video = document.createElement("video");
|
| +
|
| + // Add a bunch of source elements with bogus urls because we want to rearrange
|
| + // 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) {
|
| + var source = document.createElement("source");
|
| + source.src = findMediaFile("video", index + "-" + Date.now());
|
| + source.type = mimeTypeForExtension(source.src.split(".").pop());
|
| + video.appendChild(source);
|
| +
|
| + source.onerror = t.step_func(function(event) {
|
| + test.func(event);
|
| + });
|
| + }
|
| +
|
| + function findCurrentSourceElement() {
|
| + var sources = video.childNodes;
|
| + var currentSrc = video.currentSrc;
|
| + var index;
|
| + for (index = 0; index < sources.length; ++index) {
|
| + if (sources[index].src == currentSrc)
|
| + break;
|
| }
|
|
|
| - 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);
|
| + assert_less_than(index, sources.length, currentSrc + " not found in <source> list");
|
| + return sources[index];
|
| + }
|
| +
|
| + function moveEarlier(event) {
|
| + switch (++test.errorCount) {
|
| + case 1:
|
| + // Do nothing on the first error event
|
| + break;
|
| +
|
| + case 2:
|
| + var current = findCurrentSourceElement();
|
| + test.moved = test.elementToMove(video, current);
|
| + assert_not_equals(test.moved, null);
|
| + video.insertBefore(test.moved, video.firstChild);
|
| + break;
|
| +
|
| + default:
|
| + // We should never get an error for the element we moved.
|
| + assert_not_equals(event.target, test.moved);
|
| + if (event.target.nextSibling == null)
|
| + t.done();
|
| + break;
|
| }
|
| -
|
| - function setup()
|
| - {
|
| - document.addEventListener("error", runOneTest, true);
|
| - configureNextTest();
|
| + }
|
| +
|
| + function moveToEnd(event) {
|
| + switch (++test.errorCount) {
|
| + case 1:
|
| + // Do nothing on the first error event
|
| + break;
|
| +
|
| + case 2:
|
| + var current = findCurrentSourceElement();
|
| + test.moved = test.elementToMove(video, current);
|
| + assert_not_equals(test.moved, null);
|
| + video.appendChild(test.moved);
|
| + break;
|
| +
|
| + default:
|
| + assert_true(event.target == test.moved || event.target.nextSibling != null);
|
| + if (event.target == test.moved)
|
| + t.done();
|
| + break;
|
| }
|
| -
|
| - </script>
|
| - </head>
|
| -
|
| - <body>
|
| - <div>Test to make sure a <source> moved after the media element begins processing
|
| - is handled correctly.</div>
|
| - <script>setup()</script>
|
| - </body>
|
| -</html>
|
| + }
|
| + });
|
| +}
|
| +</script>
|
|
|