| OLD | NEW |
| 1 <!DOCTYPE HTML> | 1 <!DOCTYPE html> |
| 2 <title>Test media loading behaviour with different "preload" values.</title> |
| 3 <script src="../resources/testharness.js"></script> |
| 4 <script src="../resources/testharnessreport.js"></script> |
| 5 <script src="media-file.js"></script> |
| 6 <script> |
| 7 var movies = [ |
| 8 // should not buffer, "preload" is "none". |
| 9 { preload: "none", shouldBuffer: false, autoPlay: false }, |
| 10 // should buffer because "autoplay" is set. |
| 11 { preload: "none", shouldBuffer: true, autoPlay: true }, |
| 12 // should buffer, because load() is called. |
| 13 { preload: "none", shouldBuffer: true, autoPlay: false, load: "" }, |
| 14 // should buffer, because play() is called. |
| 15 { preload: "none", shouldBuffer: true, autoPlay: false, play: "" }, |
| 16 // should buffer because "preload" is "metadata". |
| 17 { preload: "metadata", shouldBuffer: true, autoPlay: false }, |
| 18 // should buffer because "preload" is "auto". |
| 19 { preload: "auto", shouldBuffer: true, autoPlay: false } |
| 20 ]; |
| 2 | 21 |
| 3 <html> | 22 for (var movie of movies) { |
| 4 <head> | 23 async_test(function(t) { |
| 5 <script src=media-file.js></script> | 24 var video = document.createElement("video"); |
| 6 <!-- TODO(foolip): Convert test to testharness.js. crbug.com/588956 | 25 video.onerror = t.step_func(function() {}); |
| 7 (Please avoid writing new tests using video-test.js) --> | 26 video.onloadstart = t.step_func(function() {}); |
| 8 <script src=video-test.js></script> | 27 video.onplay = t.step_func(function() {}); |
| 9 | 28 |
| 10 <script> | 29 video.onloadedmetadata = t.step_func_done(function() { |
| 11 var timer = null; | 30 assert_true(movie.shouldBuffer); |
| 12 var movieInfo = | 31 }); |
| 13 { | |
| 14 current : -1, | |
| 15 movies : | |
| 16 [ | |
| 17 { | |
| 18 // should not buffer, 'preload' is 'none' | |
| 19 preload : "none", | |
| 20 shouldBuffer : false, | |
| 21 autoPlay : false, | |
| 22 playInsteadOfLoad : false, | |
| 23 description : "until 'play()' is called", | |
| 24 }, | |
| 25 { | |
| 26 // should buffer, because load() is called. | |
| 27 preload : "none", | |
| 28 shouldBuffer : true, | |
| 29 autoPlay : false, | |
| 30 playInsteadOfLoad : false, | |
| 31 description : "because 'load()' is called", | |
| 32 }, | |
| 33 { | |
| 34 // should buffer, because play() is called. | |
| 35 preload : "none", | |
| 36 shouldBuffer : true, | |
| 37 autoPlay : false, | |
| 38 playInsteadOfLoad : true, | |
| 39 description : "because 'play()' is called", | |
| 40 }, | |
| 41 { | |
| 42 preload : "metadata", | |
| 43 shouldBuffer : true, | |
| 44 autoPlay : false, | |
| 45 playInsteadOfLoad : false, | |
| 46 description : "", | |
| 47 }, | |
| 48 { | |
| 49 preload : "auto", | |
| 50 shouldBuffer : true, | |
| 51 autoPlay : false, | |
| 52 playInsteadOfLoad : false, | |
| 53 description : "", | |
| 54 }, | |
| 55 { | |
| 56 // should buffer because 'autoplay' is set | |
| 57 preload : "none", | |
| 58 shouldBuffer : true, | |
| 59 autoPlay : true, | |
| 60 playInsteadOfLoad : false, | |
| 61 description : " because of 'autoplay'", | |
| 62 }, | |
| 63 ] | |
| 64 }; | |
| 65 var timer = null; | |
| 66 | 32 |
| 67 function checkLoad() | 33 setupAttribute("preload", movie.preload); |
| 68 { | 34 setupAttribute("autoplay", movie.autoPlay); |
| 69 var movie = movieInfo.movies[movieInfo.current]; | 35 video.src = findMediaFile("video", "content/test"); |
| 70 | 36 |
| 71 logResult(true, "did not buffer automatically"); | 37 if (movie.hasOwnProperty("play")) |
| 38 video.play(); |
| 39 else if (movie.hasOwnProperty("load")) |
| 40 video.load(); |
| 72 | 41 |
| 73 // start playback, which should force data to load | 42 if (!movie.shouldBuffer) { |
| 43 setTimeout(function() { |
| 44 // start playback, which should force data to load. |
| 74 movie.shouldBuffer = true; | 45 movie.shouldBuffer = true; |
| 75 run("video.play()"); | 46 video.play(); |
| 76 } | 47 }, 200); |
| 48 } |
| 77 | 49 |
| 78 function loadedmetadata() | 50 function setupAttribute(attr, value) { |
| 79 { | 51 if (value) |
| 80 var movie = movieInfo.movies[movieInfo.current]; | 52 video.setAttribute(attr, value); |
| 81 | 53 else |
| 82 clearTimeout(timer); | 54 video.removeAttribute(attr); |
| 83 logResult(movie.shouldBuffer, "buffered automatically"); | 55 } |
| 84 openNextMovie(); | 56 }); |
| 85 } | 57 } |
| 86 | 58 </script> |
| 87 function setupAttribute(attr, value) | |
| 88 { | |
| 89 if (value) | |
| 90 run("video.setAttribute('" + attr + "', '" + value + "')"); | |
| 91 else | |
| 92 run("video.removeAttribute('" + attr + "')"); | |
| 93 } | |
| 94 | |
| 95 function openNextMovie() | |
| 96 { | |
| 97 consoleWrite(""); | |
| 98 | |
| 99 movieInfo.current++; | |
| 100 if (movieInfo.current >= movieInfo.movies.length) | |
| 101 { | |
| 102 endTest(); | |
| 103 return; | |
| 104 } | |
| 105 | |
| 106 var movie = movieInfo.movies[movieInfo.current]; | |
| 107 var url = findMediaFile("video", "content/test"); | |
| 108 var desc = "Will load with <em>'preload=" + movie.preload + "'</
em>" | |
| 109 + ", <b>should" + (movie.shouldBuffer ? "" : " not")
+ " </b> buffer automatically " | |
| 110 + movie.description; | |
| 111 consoleWrite(desc); | |
| 112 | |
| 113 setupAttribute('preload', movie.preload); | |
| 114 setupAttribute('autoplay', movie.autoPlay); | |
| 115 | |
| 116 video.src = url; | |
| 117 if (movieInfo.current > 0) { | |
| 118 if (movie.playInsteadOfLoad) { | |
| 119 run("video.play()"); | |
| 120 } else { | |
| 121 run("video.load()"); | |
| 122 } | |
| 123 } | |
| 124 if (!movie.shouldBuffer) | |
| 125 timer = setTimeout(checkLoad, 200); | |
| 126 } | |
| 127 | |
| 128 function start() | |
| 129 { | |
| 130 findMediaElement(); | |
| 131 | |
| 132 waitForEvent("error"); | |
| 133 waitForEvent("loadstart"); | |
| 134 waitForEvent("play"); | |
| 135 waitForEvent('loadedmetadata', loadedmetadata); | |
| 136 | |
| 137 openNextMovie(); | |
| 138 } | |
| 139 | |
| 140 </script> | |
| 141 </head> | |
| 142 | |
| 143 <body onload="start()"> | |
| 144 <p>Test to see if media loads automatically when 'preload' is specified.
</p> | |
| 145 <video controls ></video> | |
| 146 </body> | |
| 147 </html> | |
| OLD | NEW |