<!DOCTYPE html> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=938023 --> <head> <title>Test for Bug 938023 Downloads API</title> <script type="text/javascript" src="/MochiKit/MochiKit.js"></script> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="clear_all_done_helper.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=938023">Mozilla Bug 938023</a> <p id="display"></p> <div id="content" style="display: none"> </div> <a href="serve_file.sjs?contentType=application/octet-stream&size=102400&rate=1024" download="test.bin" id="download1">Large Download</a> <pre id="test"> <script class="testbody" type="text/javascript;version=1.7"> // Testing pausing a download and then resuming it. SimpleTest.waitForExplicitFinish(); var index = -1; function next(args) { index += 1; if (index >= steps.length) { ok(false, "Shouldn't get here!"); return; } try { steps[index](args); } catch(ex) { ok(false, "Caught exception", ex); } } var pausing = false; var resuming = false; // Catch all error function. function error() { ok(false, "API failure"); SimpleTest.finish(); } function checkDownloadList(downloads) { ok(downloads.length == 0, "No downloads left"); SimpleTest.finish(); } function checkResumeSucceeded(download) { ok(download.state == "succeeded", "Download resumed successfully."); clearAllDoneHelper(true).then(checkDownloadList, error); } function downloadChange(evt) { var download = evt.download; info("got download event, state: " + download.state + " current bytes: " + download.currentBytes + " pausing?: " + pausing + " resuming?: " + resuming); if (download.state == "downloading" && !pausing) { pausing = true; download.pause(); } else if (download.state == "stopped" && !resuming) { resuming = true; ok(pausing, "Download stopped by pause()"); download.resume() .then(function() { checkResumeSucceeded(download); }, error); } } var steps = [ // Start by setting the pref to true. function() { SpecialPowers.pushPrefEnv({ set: [["dom.mozDownloads.enabled", true]] }, next); }, // Setup permission and clear current list. function() { SpecialPowers.pushPermissions([ {type: "downloads", allow: true, context: document} ], function() { clearAllDoneHelper(true).then(next, error); }); }, function(downloads) { ok(downloads.length == 0, "Start with an empty download list."); next(); }, // Setup the event listeners. function() { navigator.mozDownloadManager.ondownloadstart = function(evt) { ok(true, "Download started"); evt.download.addEventListener("statechange", downloadChange); } next(); }, // Click on the <a download> to start the download. function() { document.getElementById("download1").click(); } ]; next(); </script> </pre> </body> </html>