content/media/test/test_preload_actions.html

Fri, 16 Jan 2015 04:50:19 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 04:50:19 +0100
branch
TOR_BUG_9701
changeset 13
44a2da4a2ab2
permissions
-rw-r--r--

Replace accessor implementation with direct member state manipulation, by
request https://trac.torproject.org/projects/tor/ticket/9701#comment:32

michael@0 1 <!DOCTYPE HTML>
michael@0 2 <html>
michael@0 3 <!--
michael@0 4 https://bugzilla.mozilla.org/show_bug.cgi?id=548523
michael@0 5 -->
michael@0 6 <head>
michael@0 7 <title>Test for Bug 548523</title>
michael@0 8 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
michael@0 9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
michael@0 10 <script type="text/javascript" src="manifest.js"></script>
michael@0 11 </head>
michael@0 12 <body>
michael@0 13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=548523">Mozilla Bug 548523</a>
michael@0 14 <p id="display"></p>
michael@0 15 <div id="content" style="display: none">
michael@0 16
michael@0 17 </div>
michael@0 18 <!-- <button onClick="SimpleTest.finish();">Finish</button> -->
michael@0 19 <div>Tests complete: <span id="log" style="font-size: small;"></span></div>
michael@0 20 <pre id="test">
michael@0 21 <script type="application/javascript">
michael@0 22
michael@0 23 /** Test for Bug 548523 **/
michael@0 24
michael@0 25 var manager = new MediaTestManager;
michael@0 26
michael@0 27 manager.onFinished = function() {
michael@0 28 is(gotLoadEvent, true, "Should not have delayed the load event indefinitely");
michael@0 29 };
michael@0 30
michael@0 31 var test = getPlayableVideo(gSeekTests);
michael@0 32 var baseName = test.name;
michael@0 33 var gTest = test;
michael@0 34 var bogusSrc = "bogus.duh";
michael@0 35 var bogusType = "video/bogus";
michael@0 36 var gotLoadEvent = false;
michael@0 37 var finished = false;
michael@0 38
michael@0 39 addLoadEvent(function() {gotLoadEvent=true;});
michael@0 40
michael@0 41 function log(m) {
michael@0 42 var l = document.getElementById("log");
michael@0 43 l.innerHTML += m;
michael@0 44 }
michael@0 45
michael@0 46 function maybeFinish(v, n) {
michael@0 47 if (v._finished) {
michael@0 48 return;
michael@0 49 }
michael@0 50 v._finished = true;
michael@0 51 log(n + ",");
michael@0 52 removeNodeAndSource(v);
michael@0 53 manager.finished(v.token);
michael@0 54 }
michael@0 55
michael@0 56 function filename(uri) {
michael@0 57 return uri.substr(uri.lastIndexOf("/")+1);
michael@0 58 }
michael@0 59
michael@0 60 // Every test must have a setup(v) function, and must call maybeFinish() when test is complete.
michael@0 61 var tests = [
michael@0 62 {
michael@0 63 // 1. Add preload:none video with src to document. Load should halt at NETWORK_IDLE and HAVE_NOTHING,
michael@0 64 // after receiving a suspend event. Should not receive loaded events until after we call load().
michael@0 65 // Note the suspend event is explictly sent by our "stop the load" code, but other tests can't rely
michael@0 66 // on it for the preload:metadata case, as there can be multiple suspend events when loading metadata.
michael@0 67 suspend:
michael@0 68 function(e) {
michael@0 69 var v = e.target;
michael@0 70 is(v._gotLoadStart, true, "(1) Must get loadstart.");
michael@0 71 is(v._gotLoadedMetaData, false, "(1) Must not get loadedmetadata.");
michael@0 72 is(v.readyState, v.HAVE_NOTHING, "(1) ReadyState must be HAVE_NOTHING");
michael@0 73 // bug 962949
michael@0 74 // is(v.networkState, v.NETWORK_IDLE, "(1) NetworkState must be NETWORK_IDLE");
michael@0 75 maybeFinish(v, 1);
michael@0 76 },
michael@0 77
michael@0 78 setup:
michael@0 79 function(v) {
michael@0 80 v._gotLoadStart = false;
michael@0 81 v._gotLoadedMetaData = false;
michael@0 82 v.preload = "none";
michael@0 83 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 84 v.addEventListener("loadstart", function(e){v._gotLoadStart = true;}, false);
michael@0 85 v.addEventListener("suspend", this.suspend, false);
michael@0 86 v.src = test.name;
michael@0 87 document.body.appendChild(v); // Causes implicit load, which will be halted due to preload:none.
michael@0 88 },
michael@0 89
michael@0 90 name: "test1",
michael@0 91 },
michael@0 92 {
michael@0 93 // 2. Add preload:metadata video with src to document. Should halt with NETWORK_IDLE, HAVE_CURRENT_DATA
michael@0 94 // after suspend event and after loadedmetadata.
michael@0 95 loadeddata:
michael@0 96 function(e) {
michael@0 97 var v = e.target;
michael@0 98 is(v._gotLoadStart, true, "(2) Must get loadstart.");
michael@0 99 is(v._gotLoadedMetaData, true, "(2) Must get loadedmetadata.");
michael@0 100 ok(v.readyState >= v.HAVE_CURRENT_DATA, "(2) ReadyState must be >= HAVE_CURRENT_DATA");
michael@0 101 // bug 962949
michael@0 102 // is(v.networkState, v.NETWORK_IDLE, "(2) NetworkState must be NETWORK_IDLE");
michael@0 103 maybeFinish(v, 2);
michael@0 104 },
michael@0 105
michael@0 106 setup:
michael@0 107 function(v) {
michael@0 108 v._gotLoadStart = false;
michael@0 109 v._gotLoadedMetaData = false;
michael@0 110 v.preload = "metadata";
michael@0 111 v.addEventListener("loadstart", function(e){v._gotLoadStart = true;}, false);
michael@0 112 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 113 v.addEventListener("loadeddata", this.loadeddata, false);
michael@0 114 v.src = test.name;
michael@0 115 document.body.appendChild(v); // Causes implicit load, which will be halted after
michael@0 116 // metadata due to preload:metadata.
michael@0 117 },
michael@0 118
michael@0 119 name: "test2",
michael@0 120 },
michael@0 121 {
michael@0 122 // 3. Add preload:auto to document. Should receive canplaythrough eventually.
michael@0 123 canplaythrough:
michael@0 124 function(e) {
michael@0 125 var v = e.target;
michael@0 126 is(v._gotLoadStart, true, "(3) Must get loadstart.");
michael@0 127 is(v._gotLoadedMetaData, true, "(3) Must get loadedmetadata.");
michael@0 128 maybeFinish(v, 3);
michael@0 129 },
michael@0 130
michael@0 131 setup:
michael@0 132 function(v) {
michael@0 133 v._gotLoadStart = false;
michael@0 134 v._gotLoadedMetaData = false;
michael@0 135 v.preload = "auto";
michael@0 136 v.addEventListener("loadstart", function(e){v._gotLoadStart = true;}, false);
michael@0 137 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 138 v.addEventListener("canplaythrough", this.canplaythrough, false);
michael@0 139 v.src = test.name; // Causes implicit load.
michael@0 140 document.body.appendChild(v);
michael@0 141 },
michael@0 142
michael@0 143 name: "test3",
michael@0 144 },
michael@0 145 {
michael@0 146 // 4. Add preload:none video to document. Call play(), should load then play through.
michael@0 147 suspend:
michael@0 148 function(e) {
michael@0 149 var v = e.target;
michael@0 150 if (v._gotSuspend) {
michael@0 151 return; // We can receive multiple suspend events, like the one after download completes.
michael@0 152 }
michael@0 153 v._gotSuspend = true;
michael@0 154 is(v._gotLoadStart, true, "(4) Must get loadstart.");
michael@0 155 is(v._gotLoadedMetaData, false, "(4) Must not get loadedmetadata.");
michael@0 156 is(v.readyState, v.HAVE_NOTHING, "(4) ReadyState must be HAVE_NOTHING");
michael@0 157 // bug 962949
michael@0 158 // is(v.networkState, v.NETWORK_IDLE, "(4) NetworkState must be NETWORK_IDLE");
michael@0 159 v.play(); // Should load and play through.
michael@0 160 },
michael@0 161
michael@0 162 ended:
michael@0 163 function(e) {
michael@0 164 ok(true, "(4) Got playback ended");
michael@0 165 maybeFinish(e.target, 4);
michael@0 166 },
michael@0 167
michael@0 168 setup:
michael@0 169 function(v) {
michael@0 170 v._gotLoadStart = false;
michael@0 171 v._gotLoadedMetaData = false;
michael@0 172 v._gotSuspend = false;
michael@0 173 v.preload = "none";
michael@0 174 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 175 v.addEventListener("loadstart", function(e){v._gotLoadStart = true;}, false);
michael@0 176 v.addEventListener("suspend", this.suspend, false);
michael@0 177 v.addEventListener("ended", this.ended, false);
michael@0 178 v.src = test.name;
michael@0 179 document.body.appendChild(v);
michael@0 180 },
michael@0 181
michael@0 182 name: "test4",
michael@0 183 },
michael@0 184 {
michael@0 185 // 5. preload:none video without resource, add to document, will implicitly start a
michael@0 186 // preload:none load. Add a src, it shouldn't load.
michael@0 187 suspend:
michael@0 188 function(e) {
michael@0 189 var v = e.target;
michael@0 190 is(v._gotLoadStart, true, "(5) Must get loadstart.");
michael@0 191 is(v._gotLoadedMetaData, false, "(5) Must not get loadedmetadata.");
michael@0 192 is(v.readyState, v.HAVE_NOTHING, "(5) ReadyState must be HAVE_NOTHING");
michael@0 193 // bug 962949
michael@0 194 // is(v.networkState, v.NETWORK_IDLE, "(5) NetworkState must be NETWORK_IDLE");
michael@0 195 maybeFinish(v, 5);
michael@0 196 },
michael@0 197
michael@0 198 setup:
michael@0 199 function(v) {
michael@0 200 v._gotLoadStart = false;
michael@0 201 v._gotLoadedMetaData = false;
michael@0 202 v.preload = "none";
michael@0 203 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 204 v.addEventListener("loadstart", function(e){v._gotLoadStart = true;}, false);
michael@0 205 v.addEventListener("suspend", this.suspend, false);
michael@0 206 document.body.appendChild(v); // Causes implicit load, which will be halted due to no resource.
michael@0 207 v.src = test.name; // Load should start, and halt at preload:none.
michael@0 208 },
michael@0 209
michael@0 210 name: "test5",
michael@0 211 },
michael@0 212 {
michael@0 213 // 6. preload:none video without resource, add to document, will implicitly start a
michael@0 214 // preload:none load. Add a source, it shouldn't load.
michael@0 215 suspend:
michael@0 216 function(e) {
michael@0 217 var v = e.target;
michael@0 218 is(v._gotLoadStart, true, "(6) Must get loadstart.");
michael@0 219 is(v._gotLoadedMetaData, false, "(6) Must not get loadedmetadata.");
michael@0 220 is(v.readyState, v.HAVE_NOTHING, "(6) ReadyState must be HAVE_NOTHING");
michael@0 221 // bug 962949
michael@0 222 // is(v.networkState, v.NETWORK_IDLE, "(6) NetworkState must be NETWORK_IDLE");
michael@0 223 maybeFinish(v, 6);
michael@0 224 },
michael@0 225
michael@0 226 setup:
michael@0 227 function(v) {
michael@0 228 v._gotLoadStart = false;
michael@0 229 v._gotLoadedMetaData = false;
michael@0 230 v.preload = "none";
michael@0 231 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 232 v.addEventListener("loadstart", function(e){v._gotLoadStart = true;}, false);
michael@0 233 v.addEventListener("suspend", this.suspend, false);
michael@0 234 document.body.appendChild(v); // Causes implicit load, which will be halted due to no resource.
michael@0 235 var s = document.createElement("source");
michael@0 236 s.src = test.name;
michael@0 237 s.type = test.type;
michael@0 238 v.appendChild(s); // Load should start, and halt at preload:none.
michael@0 239 },
michael@0 240
michael@0 241 name: "test6",
michael@0 242 },
michael@0 243 {
michael@0 244 // 7. create a preload:none document with multiple sources, the first of which is invalid.
michael@0 245 // Add to document, then play. It should load and play through the second source.
michael@0 246 suspend:
michael@0 247 function(e) {
michael@0 248 var v = e.target;
michael@0 249 if (v._gotSuspend)
michael@0 250 return; // We can receive multiple suspend events, like the one after download completes.
michael@0 251 v._gotSuspend = true;
michael@0 252 is(v._gotLoadStart, true, "(7) Must get loadstart.");
michael@0 253 is(v._gotLoadedMetaData, false, "(7) Must not get loadedmetadata.");
michael@0 254 is(v.readyState, v.HAVE_NOTHING, "(7) ReadyState must be HAVE_NOTHING");
michael@0 255 // bug 962949
michael@0 256 // is(v.networkState, v.NETWORK_IDLE, "(7) NetworkState must be NETWORK_IDLE");
michael@0 257 v.play(); // Should load and play through.
michael@0 258 },
michael@0 259
michael@0 260 ended:
michael@0 261 function(e) {
michael@0 262 ok(true, "(7) Got playback ended");
michael@0 263 var v = e.target;
michael@0 264 is(v._gotErrorEvent, true, "(7) Should get error event from first source load failure");
michael@0 265 maybeFinish(v, 7);
michael@0 266 },
michael@0 267
michael@0 268 setup:
michael@0 269 function(v) {
michael@0 270 v._gotLoadStart = false;
michael@0 271 v._gotLoadedMetaData = false;
michael@0 272 v.preload = "none";
michael@0 273 v._gotErrorEvent = false;
michael@0 274 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 275 v.addEventListener("loadstart", function(e){v._gotLoadStart = true;}, false);
michael@0 276 v.addEventListener("suspend", this.suspend, false);
michael@0 277 v.addEventListener("ended", this.ended, false);
michael@0 278 var s1 = document.createElement("source");
michael@0 279 s1.src = "not-a-real-file.404"
michael@0 280 s1.type = test.type;
michael@0 281 s1.addEventListener("error", function(e){v._gotErrorEvent = true;}, false);
michael@0 282 v.appendChild(s1);
michael@0 283 var s2 = document.createElement("source");
michael@0 284 s2.src = test.name;
michael@0 285 s2.type = test.type;
michael@0 286 v.appendChild(s2);
michael@0 287 document.body.appendChild(v); // Causes implicit load, which will be halt at preload:none on the second resource.
michael@0 288 },
michael@0 289
michael@0 290 name: "test7",
michael@0 291 },
michael@0 292 {
michael@0 293 // 8. Change preload value from none to metadata should cause metadata to be loaded.
michael@0 294 loadeddata:
michael@0 295 function(e) {
michael@0 296 var v = e.target;
michael@0 297 is(v._gotLoadedMetaData, true, "(8) Must get loadedmetadata.");
michael@0 298 ok(v.readyState >= v.HAVE_CURRENT_DATA, "(8) ReadyState must be >= HAVE_CURRENT_DATA on suspend.");
michael@0 299 // bug 962949
michael@0 300 // is(v.networkState, v.NETWORK_IDLE, "(8) NetworkState must be NETWORK_IDLE when load is halted");
michael@0 301 maybeFinish(v, 8);
michael@0 302 },
michael@0 303
michael@0 304 setup:
michael@0 305 function(v) {
michael@0 306 v._gotLoadedMetaData = false;
michael@0 307 v.preload = "none";
michael@0 308 v.addEventListener("loadstart", function(e){v.preload = "metadata";}, false);
michael@0 309 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 310 v.addEventListener("loadeddata", this.loadeddata, false);
michael@0 311 v.src = test.name; // Causes implicit load.
michael@0 312 document.body.appendChild(v);
michael@0 313 },
michael@0 314
michael@0 315 name: "test8",
michael@0 316 },
michael@0 317 /*{
michael@0 318 // 9. Change preload value from metadata to auto should cause entire media to be loaded.
michael@0 319 // For some reason we don't always receive the canplaythrough event, particuarly on this test.
michael@0 320 // We've disabled this test until bug 568402 is fixed.
michael@0 321 canplaythrough:
michael@0 322 function(e) {
michael@0 323 var v = e.target;
michael@0 324 is(v._gotLoadStart, true, "(9) Must get loadstart.");
michael@0 325 is(v._gotLoadedMetaData, true, "(9) Must get loadedmetadata.");
michael@0 326 maybeFinish(v, 9);
michael@0 327 },
michael@0 328
michael@0 329 setup:
michael@0 330 function(v) {
michael@0 331 v._gotLoadStart = false;
michael@0 332 v._gotLoadedMetaData = false;
michael@0 333 v.preload = "metadata";
michael@0 334 v.addEventListener("loadstart", function(e){v._gotLoadStart = true;}, false);
michael@0 335 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 336 v.addEventListener("loadeddata", function(){v.preload = "auto"}, false);
michael@0 337 v.addEventListener("canplaythrough", this.canplaythrough, false);
michael@0 338 v.src = test.name; // Causes implicit load.
michael@0 339 document.body.appendChild(v);
michael@0 340 },
michael@0 341 },*/
michael@0 342 {
michael@0 343 // 10. Change preload value from none to auto should cause entire media to be loaded.
michael@0 344 canplaythrough:
michael@0 345 function(e) {
michael@0 346 var v = e.target;
michael@0 347 is(v._gotLoadedMetaData, true, "(10) Must get loadedmetadata.");
michael@0 348 maybeFinish(v, 10);
michael@0 349 },
michael@0 350
michael@0 351 setup:
michael@0 352 function(v) {
michael@0 353 v._gotLoadedMetaData = false;
michael@0 354 v.preload = "none";
michael@0 355 v.addEventListener("loadstart", function(e){v.preload = "auto";}, false);
michael@0 356 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 357 v.addEventListener("canplaythrough", this.canplaythrough, false);
michael@0 358 v.src = test.name; // Causes implicit load.
michael@0 359 document.body.appendChild(v);
michael@0 360 },
michael@0 361
michael@0 362 name: "test10",
michael@0 363 },
michael@0 364 {
michael@0 365 // 11. Change preload value from none to metadata should cause metadata to load.
michael@0 366 loadeddata:
michael@0 367 function(e) {
michael@0 368 var v = e.target;
michael@0 369 is(v._gotLoadedMetaData, true, "(11) Must get loadedmetadata.");
michael@0 370 ok(v.readyState >= v.HAVE_CURRENT_DATA, "(11) ReadyState must be >= HAVE_CURRENT_DATA.");
michael@0 371 // bug 962949
michael@0 372 // is(v.networkState, v.NETWORK_IDLE, "(11) NetworkState must be NETWORK_IDLE.");
michael@0 373 maybeFinish(v, 11);
michael@0 374 },
michael@0 375
michael@0 376 setup:
michael@0 377 function(v) {
michael@0 378 v._gotLoadedMetaData = false;
michael@0 379 v.preload = "none";
michael@0 380 v.addEventListener("loadstart", function(e){v.preload = "metadata";}, false);
michael@0 381 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 382 v.addEventListener("loadeddata", this.loadeddata, false);
michael@0 383 v.src = test.name; // Causes implicit load.
michael@0 384 document.body.appendChild(v);
michael@0 385 },
michael@0 386
michael@0 387 name: "test11",
michael@0 388 },
michael@0 389 /*{
michael@0 390 // 12. Change preload value from auto to metadata after load started,
michael@0 391 // should still do full load, should not halt after metadata only.
michael@0 392 // disable this test since the spec is no longer found in the document
michael@0 393 // http://dev.w3.org/html5/spec-preview/media-elements.html
michael@0 394 canplaythrough:
michael@0 395 function(e) {
michael@0 396 var v = e.target;
michael@0 397 is(v._gotLoadedMetaData, true, "(12) Must get loadedmetadata.");
michael@0 398 is(v._gotLoadStart, true, "(12) Must get loadstart.");
michael@0 399 maybeFinish(v, 12);
michael@0 400 },
michael@0 401
michael@0 402 setup:
michael@0 403 function(v) {
michael@0 404 v._gotLoadStart = false;
michael@0 405 v._gotLoadedMetaData = false;
michael@0 406 v.preload = "auto";
michael@0 407 v.addEventListener("loadstart", function(e){v._gotLoadStart = true;}, false);
michael@0 408 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 409 v.addEventListener("canplaythrough", this.canplaythrough, false);
michael@0 410 v.src = test.name; // Causes implicit load.
michael@0 411 document.body.appendChild(v);
michael@0 412 v.preload = "metadata";
michael@0 413 },
michael@0 414
michael@0 415 name: "test12",
michael@0 416 },*/
michael@0 417 {
michael@0 418 // 13. Change preload value from auto to none after specifying a src
michael@0 419 // should load according to preload none, no buffering should have taken place
michael@0 420 suspend:
michael@0 421 function(e) {
michael@0 422 var v = e.target;
michael@0 423 is(v._gotLoadStart, true, "(13) Must get loadstart.");
michael@0 424 is(v._gotLoadedMetaData, false, "(13) Must not get loadedmetadata.");
michael@0 425 is(v.readyState, v.HAVE_NOTHING, "(13) ReadyState must be HAVE_NOTHING");
michael@0 426 // bug 962949
michael@0 427 // is(v.networkState, v.NETWORK_IDLE, "(13) NetworkState must be NETWORK_IDLE");
michael@0 428 maybeFinish(v, 13);
michael@0 429 },
michael@0 430
michael@0 431 setup:
michael@0 432 function(v) {
michael@0 433 v._gotLoadStart = false;
michael@0 434 v._gotLoadedMetaData = false;
michael@0 435 v.preload = "auto";
michael@0 436 v.src = test.name;
michael@0 437 v.preload = "none";
michael@0 438 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 439 v.addEventListener("loadstart", function(e){v._gotLoadStart = true;}, false);
michael@0 440 v.addEventListener("suspend", this.suspend, false);
michael@0 441 document.body.appendChild(v); // Causes implicit load, should load according to preload none
michael@0 442 var s = document.createElement("source");
michael@0 443 },
michael@0 444
michael@0 445 name: "test13",
michael@0 446 },
michael@0 447 {
michael@0 448 // 14. Add preload:metadata video with src to document. Play(), should play through.
michael@0 449 loadeddata:
michael@0 450 function(e) {
michael@0 451 var v = e.target;
michael@0 452 is(v._gotLoadStart, true, "(14) Must get loadstart.");
michael@0 453 is(v._gotLoadedMetaData, true, "(14) Must get loadedmetadata.");
michael@0 454 ok(v.readyState >= v.HAVE_CURRENT_DATA, "(14) ReadyState must be >= HAVE_CURRENT_DATA");
michael@0 455 // bug 962949
michael@0 456 // is(v.networkState, v.NETWORK_IDLE, "(14) NetworkState must be NETWORK_IDLE");
michael@0 457 v.play();
michael@0 458 },
michael@0 459
michael@0 460 ended:
michael@0 461 function(e) {
michael@0 462 ok(true, "(14) Got playback ended");
michael@0 463 var v = e.target;
michael@0 464 maybeFinish(v, 14);
michael@0 465 },
michael@0 466
michael@0 467 setup:
michael@0 468 function(v) {
michael@0 469 v._gotLoadStart = false;
michael@0 470 v._gotLoadedMetaData = false;
michael@0 471 v.preload = "metadata";
michael@0 472 v.addEventListener("loadstart", function(e){v._gotLoadStart = true;}, false);
michael@0 473 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 474 v.addEventListener("ended", this.ended, false);
michael@0 475 v.addEventListener("loadeddata", this.loadeddata, false);
michael@0 476 v.src = test.name;
michael@0 477 document.body.appendChild(v); // Causes implicit load, which will be halted after
michael@0 478 // metadata due to preload:metadata.
michael@0 479 },
michael@0 480
michael@0 481 name: "test14",
michael@0 482 },
michael@0 483 {
michael@0 484 // 15. Autoplay should override preload:none.
michael@0 485 ended:
michael@0 486 function(e) {
michael@0 487 ok(true, "(15) Got playback ended.");
michael@0 488 var v = e.target;
michael@0 489 maybeFinish(v, 15);
michael@0 490 },
michael@0 491
michael@0 492 setup:
michael@0 493 function(v) {
michael@0 494 v._gotLoadStart = false;
michael@0 495 v._gotLoadedMetaData = false;
michael@0 496 v.preload = "none";
michael@0 497 v.autoplay = true;
michael@0 498 v.addEventListener("loadstart", function(e){v._gotLoadStart = true;}, false);
michael@0 499 v.addEventListener("loadedmetadata", function(e){v._gotLoadedMetaData = true;}, false);
michael@0 500 v.addEventListener("ended", this.ended, false);
michael@0 501 v.src = test.name; // Causes implicit load.
michael@0 502 document.body.appendChild(v);
michael@0 503 },
michael@0 504
michael@0 505 name: "test15",
michael@0 506 },
michael@0 507 {
michael@0 508 // 16. Autoplay should override preload:metadata.
michael@0 509 ended:
michael@0 510 function(e) {
michael@0 511 ok(true, "(16) Got playback ended.");
michael@0 512 var v = e.target;
michael@0 513 maybeFinish(v, 16);
michael@0 514 },
michael@0 515
michael@0 516 setup:
michael@0 517 function(v) {
michael@0 518 v.preload = "metadata";
michael@0 519 v.autoplay = true;
michael@0 520 v.addEventListener("ended", this.ended, false);
michael@0 521 v.src = test.name; // Causes implicit load.
michael@0 522 document.body.appendChild(v);
michael@0 523 },
michael@0 524
michael@0 525 name: "test16",
michael@0 526 },
michael@0 527 {
michael@0 528 // 17. On a preload:none video, adding autoplay should disable preload none, i.e. don't break autoplay!
michael@0 529 ended:
michael@0 530 function(e) {
michael@0 531 ok(true, "(17) Got playback ended.");
michael@0 532 var v = e.target;
michael@0 533 maybeFinish(v, 17);
michael@0 534 },
michael@0 535
michael@0 536 setup:
michael@0 537 function(v) {
michael@0 538 v.addEventListener("ended", this.ended, false);
michael@0 539 v.preload = "none";
michael@0 540 document.body.appendChild(v); // Causes implicit load, which will be halted due to preload:none.
michael@0 541 v.autoplay = true;
michael@0 542 v.src = test.name;
michael@0 543 },
michael@0 544
michael@0 545 name: "test17",
michael@0 546 },
michael@0 547 {
michael@0 548 // 18. On a preload='none' video, call play() before load algorithms's sync
michael@0 549 // has run, the play() call should override preload='none'.
michael@0 550 ended:
michael@0 551 function(e) {
michael@0 552 ok(true, "(18) Got playback ended.");
michael@0 553 var v = e.target;
michael@0 554 maybeFinish(v, 18);
michael@0 555 },
michael@0 556
michael@0 557 setup:
michael@0 558 function(v) {
michael@0 559 v.addEventListener("ended", this.ended, false);
michael@0 560 v.preload = "none";
michael@0 561 v.src = test.name; // Schedules async section to continue load algorithm.
michael@0 562 document.body.appendChild(v);
michael@0 563 v.play(); // Should cause preload:none to be overridden.
michael@0 564 },
michael@0 565
michael@0 566 name: "test18",
michael@0 567 },
michael@0 568 {
michael@0 569 // 19. Set preload='auto' on first video source then switching preload='none' and swapping the video source to another.
michael@0 570 // The second video should not start playing as it's preload state has been changed to 'none' from 'auto'
michael@0 571 loadedmetadata: function(e) {
michael@0 572 var v = e.target;
michael@0 573 is(v.preload === "auto", true, "(19) preload is initially auto");
michael@0 574 setTimeout(function() {
michael@0 575 // set preload state to none and switch video sources
michael@0 576 v.preload="none";
michael@0 577 v.src = test.name + "?asdf";
michael@0 578 setTimeout(function() {
michael@0 579 is(v.readyState === 0, true, "(19) no buffering has taken place");
michael@0 580 maybeFinish(v, 19);
michael@0 581 }, 2000);
michael@0 582 }, 2000);
michael@0 583
michael@0 584 },
michael@0 585
michael@0 586 setup:
michael@0 587 function(v) {
michael@0 588 var that = this;
michael@0 589 v.preload = "auto";
michael@0 590 v.src = test.name;
michael@0 591 // add a listener for when the video has loaded, so we know preload auto has worked
michael@0 592 v.addEventListener( "loadedmetadata", this.loadedmetadata, false);
michael@0 593 document.body.appendChild(v);
michael@0 594 },
michael@0 595
michael@0 596 name: "test19",
michael@0 597 }
michael@0 598 ];
michael@0 599
michael@0 600 var iterationCount = 0;
michael@0 601 function startTest(test, token) {
michael@0 602 if (test == tests[0]) {
michael@0 603 ++iterationCount;
michael@0 604 info("iterationCount=" + iterationCount);
michael@0 605 }
michael@0 606 if (iterationCount == 2) {
michael@0 607 // Do this series of tests on logically different resources
michael@0 608 test.name = baseName + "?" + Math.floor(Math.random()*100000);
michael@0 609 }
michael@0 610 var v = document.createElement("video");
michael@0 611 v.token = token;
michael@0 612 test.setup(v);
michael@0 613 manager.started(token);
michael@0 614 }
michael@0 615
michael@0 616 var twiceTests = tests.concat(tests);
michael@0 617 SimpleTest.waitForExplicitFinish();
michael@0 618 SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}, beginTest);
michael@0 619 function beginTest() {
michael@0 620 manager.runTests(twiceTests, startTest);
michael@0 621 }
michael@0 622 </script>
michael@0 623 </pre>
michael@0 624 </body>
michael@0 625 </html>

mercurial