diff options
Diffstat (limited to 'dom/downloads/tests/test_downloads_pause_resume.html')
-rw-r--r-- | dom/downloads/tests/test_downloads_pause_resume.html | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/dom/downloads/tests/test_downloads_pause_resume.html b/dom/downloads/tests/test_downloads_pause_resume.html new file mode 100644 index 000000000..76e249e5a --- /dev/null +++ b/dom/downloads/tests/test_downloads_pause_resume.html @@ -0,0 +1,121 @@ +<!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> |