diff options
Diffstat (limited to 'dom/downloads/tests')
-rw-r--r-- | dom/downloads/tests/clear_all_done_helper.js | 67 | ||||
-rw-r--r-- | dom/downloads/tests/mochitest.ini | 15 | ||||
-rw-r--r-- | dom/downloads/tests/serve_file.sjs | 170 | ||||
-rw-r--r-- | dom/downloads/tests/test_downloads_bad_file.html | 93 | ||||
-rw-r--r-- | dom/downloads/tests/test_downloads_basic.html | 128 | ||||
-rw-r--r-- | dom/downloads/tests/test_downloads_large.html | 110 | ||||
-rw-r--r-- | dom/downloads/tests/test_downloads_navigator_object.html | 75 | ||||
-rw-r--r-- | dom/downloads/tests/test_downloads_pause_remove.html | 117 | ||||
-rw-r--r-- | dom/downloads/tests/test_downloads_pause_resume.html | 121 |
9 files changed, 0 insertions, 896 deletions
diff --git a/dom/downloads/tests/clear_all_done_helper.js b/dom/downloads/tests/clear_all_done_helper.js deleted file mode 100644 index 62fa1a2f3..000000000 --- a/dom/downloads/tests/clear_all_done_helper.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * A helper to clear out the existing downloads known to the mozDownloadManager - * / downloads.js. - * - * It exists because previously mozDownloadManager.clearAllDone() thought that - * when it returned that all the completed downloads would be cleared out. It - * was wrong and this led to various intermittent test failurse. In discussion - * on https://bugzil.la/979446#c13 and onwards, it was decided that - * clearAllDone() was in the wrong and that the jsdownloads API it depends on - * was not going to change to make it be in the right. - * - * The existing uses of clearAllDone() in tests seemed to be about: - * - Exploding if there was somehow still a download in progress - * - Clearing out the download list at the start of a test so that calls to - * getDownloads() wouldn't have to worry about existing downloads, etc. - * - * From discussion, the right way to handle clearing is to wait for the expected - * removal events to occur for the existing downloads. So that's what we do. - * We still generate a test failure if there are any in-progress downloads. - * - * @param {Boolean} [getDownloads=false] - * If true, invoke getDownloads after clearing the download list and return - * its value. - */ -function clearAllDoneHelper(getDownloads) { - var clearedPromise = new Promise(function(resolve, reject) { - function gotDownloads(downloads) { - // If there are no downloads, we're already done. - if (downloads.length === 0) { - resolve(); - return; - } - - // Track the set of expected downloads that will be finalized. - var expectedIds = new Set(); - function changeHandler(evt) { - var download = evt.download; - if (download.state === "finalized") { - expectedIds.delete(download.id); - if (expectedIds.size === 0) { - resolve(); - } - } - } - downloads.forEach(function(download) { - if (download.state === "downloading") { - ok(false, "A download is still active: " + download.path); - reject("Active download"); - } - download.onstatechange = changeHandler; - expectedIds.add(download.id); - }); - navigator.mozDownloadManager.clearAllDone(); - } - function gotBadNews(err) { - ok(false, "Problem clearing all downloads: " + err); - reject(err); - } - navigator.mozDownloadManager.getDownloads().then(gotDownloads, gotBadNews); - }); - if (!getDownloads) { - return clearedPromise; - } - return clearedPromise.then(function() { - return navigator.mozDownloadManager.getDownloads(); - }); -} diff --git a/dom/downloads/tests/mochitest.ini b/dom/downloads/tests/mochitest.ini deleted file mode 100644 index e13e4d887..000000000 --- a/dom/downloads/tests/mochitest.ini +++ /dev/null @@ -1,15 +0,0 @@ -[DEFAULT] -# The actual requirement for mozDownloadManager is MOZ_GONK because of -# the nsIVolumeService dependency. Until https://bugzil.la/1130264 is -# addressed, there is no way for mulet to run these tests. -run-if = toolkit == 'gonk' -support-files = - serve_file.sjs - clear_all_done_helper.js - -[test_downloads_navigator_object.html] -[test_downloads_basic.html] -[test_downloads_large.html] -[test_downloads_bad_file.html] -[test_downloads_pause_remove.html] -[test_downloads_pause_resume.html] diff --git a/dom/downloads/tests/serve_file.sjs b/dom/downloads/tests/serve_file.sjs deleted file mode 100644 index d0171d7ca..000000000 --- a/dom/downloads/tests/serve_file.sjs +++ /dev/null @@ -1,170 +0,0 @@ -// Serves a file with a given mime type and size at an optionally given rate. - -function getQuery(request) { - var query = {}; - request.queryString.split('&').forEach(function (val) { - var [name, value] = val.split('='); - query[name] = unescape(value); - }); - return query; -} - -function handleResponse() { - // Is this a rate limited response? - if (this.state.rate > 0) { - // Calculate how many bytes we have left to send. - var bytesToWrite = this.state.totalBytes - this.state.sentBytes; - - // Do we have any bytes left to send? If not we'll just fall thru and - // cancel our repeating timer and finalize the response. - if (bytesToWrite > 0) { - // Figure out how many bytes to send, based on the rate limit. - bytesToWrite = - (bytesToWrite > this.state.rate) ? this.state.rate : bytesToWrite; - - for (let i = 0; i < bytesToWrite; i++) { - try { - this.response.bodyOutputStream.write("0", 1); - } catch (e) { - // Connection was closed by client. - if (e == Components.results.NS_ERROR_NOT_AVAILABLE) { - // There's no harm in calling this multiple times. - this.response.finish(); - - // It's possible that our timer wasn't cancelled in time - // and we'll be called again. - if (this.timer) { - this.timer.cancel(); - this.timer = null; - } - - return; - } - } - } - - // Update the number of bytes we've sent to the client. - this.state.sentBytes += bytesToWrite; - - // Wait until the next call to do anything else. - return; - } - } - else { - // Not rate limited, write it all out. - for (let i = 0; i < this.state.totalBytes; i++) { - this.response.write("0"); - } - } - - // Finalize the response. - this.response.finish(); - - // All done sending, go ahead and cancel our repeating timer. - this.timer.cancel(); - - // Clear the timer. - this.timer = null; -} - -function handleRequest(request, response) { - var query = getQuery(request); - - // sending at a specific rate requires our response to be asynchronous so - // we handle all requests asynchronously. See handleResponse(). - response.processAsync(); - - // Default status when responding. - var version = "1.1"; - var statusCode = 200; - var description = "OK"; - - // Default values for content type, size and rate. - var contentType = "text/plain"; - var contentRange = null; - var size = 1024; - var rate = 0; - - // optional content type to be used by our response. - if ("contentType" in query) { - contentType = query["contentType"]; - } - - // optional size (in bytes) for generated file. - if ("size" in query) { - size = parseInt(query["size"]); - } - - // optional range request check. - if (request.hasHeader("range")) { - version = "1.1"; - statusCode = 206; - description = "Partial Content"; - - // We'll only support simple range byte style requests. - var [offset, total] = request.getHeader("range").slice("bytes=".length).split("-"); - // Enforce valid Number values. - offset = parseInt(offset); - offset = isNaN(offset) ? 0 : offset; - // Same. - total = parseInt(total); - total = isNaN(total) ? 0 : total; - - // We'll need to original total size as part of the Content-Range header - // value in our response. - var originalSize = size; - - // If we have a total size requested, we must make sure to send that number - // of bytes only (minus the start offset). - if (total && total < size) { - size = total - offset; - } else if (offset) { - // Looks like we just have a byte offset to deal with. - size = size - offset; - } - - // We specifically need to add a Content-Range header to all responses for - // requests that include a range request header. - contentRange = "bytes " + offset + "-" + (size - 1) + "/" + originalSize; - } - - // optional rate (in bytes/s) at which to send the file. - if ("rate" in query) { - rate = parseInt(query["rate"]); - } - - // The context for the responseHandler. - var context = { - response: response, - state: { - contentType: contentType, - totalBytes: size, - sentBytes: 0, - rate: rate - }, - timer: null - }; - - // The notify implementation for the timer. - context.notify = handleResponse.bind(context); - - context.timer = - Components.classes["@mozilla.org/timer;1"] - .createInstance(Components.interfaces.nsITimer); - - // generate the content. - response.setStatusLine(version, statusCode, description); - response.setHeader("Content-Type", contentType, false); - if (contentRange) { - response.setHeader("Content-Range", contentRange, false); - } - response.setHeader("Content-Length", size.toString(), false); - - // initialize the timer and start writing out the response. - context.timer.initWithCallback( - context, - 1000, - Components.interfaces.nsITimer.TYPE_REPEATING_SLACK - ); - -} diff --git a/dom/downloads/tests/test_downloads_bad_file.html b/dom/downloads/tests/test_downloads_bad_file.html deleted file mode 100644 index a2b3992e6..000000000 --- a/dom/downloads/tests/test_downloads_bad_file.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE html> -<html> -<!-- -https://bugzilla.mozilla.org/show_bug.cgi?id=960749 ---> -<head> - <title>Test for Bug 960749 Downloads API</title> - <script type="text/javascript" src="/MochiKit/MochiKit.js"></script> - <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.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=960749">Mozilla Bug 960749</a> -<p id="display"></p> -<div id="content" style="display: none"> -</div> -<a href="serve_file.sjs?contentType=application/octet-stream&size=1024" download=".<.EVIL.>\ / : * ? " |file.bin" id="download1">Download #1</a> -<pre id="test"> -<script class="testbody" type="text/javascript;version=1.7"> - -// Testing a simple download, waiting for it to be done. - -SimpleTest.waitForExplicitFinish(); - -var index = -1; -var expected = "_.EVIL.__ _ _ _ _ _ _file.bin"; - -function next() { - index += 1; - if (index >= steps.length) { - ok(false, "Shouldn't get here!"); - return; - } - try { - steps[index](); - } catch(ex) { - ok(false, "Caught exception", ex); - } -} - -function checkTargetFilename(download) { - ok(download.path.endsWith(expected), - "Download path leaf name '" + download.path + - "' should match '" + expected + "' filename."); - - SimpleTest.finish(); -} - -function downloadChange(evt) { - var download = evt.download; - - if (download.state === "succeeded") { - checkTargetFilename(download); - } -} - -function downloadStart(evt) { - var download = evt.download; - download.onstatechange = downloadChange; -} - -var steps = [ - // Start by setting the pref to true. - function() { - SpecialPowers.pushPrefEnv({ - set: [["dom.mozDownloads.enabled", true]] - }, next); - }, - - // Setup the event listeners. - function() { - SpecialPowers.pushPermissions([ - {type: "downloads", allow: true, context: document} - ], function() { - navigator.mozDownloadManager.ondownloadstart = downloadStart; - next(); - }); - }, - - // Click on the <a download> to start the download. - function() { - document.getElementById("download1").click(); - } -]; - -next(); - -</script> -</pre> -</body> -</html> - diff --git a/dom/downloads/tests/test_downloads_basic.html b/dom/downloads/tests/test_downloads_basic.html deleted file mode 100644 index 051a1faa1..000000000 --- a/dom/downloads/tests/test_downloads_basic.html +++ /dev/null @@ -1,128 +0,0 @@ -<!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> - <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=1024" download="test.bin" id="download1">Download #1</a> -<pre id="test"> -<script class="testbody" type="text/javascript;version=1.7"> - -// Testing a simple download, waiting for it to be done. - -SimpleTest.waitForExplicitFinish(); - -var index = -1; -var todayDate = new Date(); -var baseServeURL = "http://mochi.test:8888/tests/dom/downloads/tests/"; -var lastKnownCurrentBytes = 0; - -function next() { - index += 1; - if (index >= steps.length) { - ok(false, "Shouldn't get here!"); - return; - } - try { - steps[index](); - } catch(ex) { - ok(false, "Caught exception", ex); - } -} - -function checkConsistentDownloadAttributes(download) { - var href = document.getElementById("download1").getAttribute("href"); - var expectedServeURL = baseServeURL + href; - var destinationRegEx = /test\(?[0-9]*\)?\.bin$/; - - // bug 945323: Download path isn't honoring download attribute - ok(destinationRegEx.test(download.path), - "Download path '" + download.path + - "' should match '" + destinationRegEx + "' regexp."); - - ok(download.startTime >= todayDate, - "Download start time should be greater than or equal to today"); - - is(download.error, null, "Download does not have an error"); - - is(download.url, expectedServeURL, - "Download URL = " + expectedServeURL); - ok(download.id !== null, "Download id is defined"); - is(download.contentType, "application/octet-stream", - "Download content type is application/octet-stream"); -} - -function downloadChange(evt) { - var download = evt.download; - checkConsistentDownloadAttributes(download); - is(download.totalBytes, 1024, "Download total size is 1024 bytes"); - - if (download.state === "succeeded") { - is(download.currentBytes, 1024, "Download current size is 1024 bytes"); - SimpleTest.finish(); - } else if (download.state === "downloading") { - // Note that this case may or may not trigger, depending on whether the - // download is initially reported with 0 bytes (we should happen) or with - // 1024 bytes (we should not happen). If we do happen, an additional 8 - // TEST-PASS events should be logged. - ok(download.currentBytes > lastKnownCurrentBytes, - "Download current size is larger than last download change event"); - lastKnownCurrentBytes = download.currentBytes; - } else { - ok(false, "Unexpected download state = " + download.state); - } -} - -function downloadStart(evt) { - var download = evt.download; - checkConsistentDownloadAttributes(download); - - // We used to check that the currentBytes was 0. This was incorrect. It - // is very common to first hear about the download already at 1024 bytes. - is(download.state, "downloading", "Download state is downloading"); - - download.onstatechange = downloadChange; -} - -var steps = [ - // Start by setting the pref to true. - function() { - SpecialPowers.pushPrefEnv({ - set: [["dom.mozDownloads.enabled", true]] - }, next); - }, - - // Setup the event listeners. - function() { - SpecialPowers.pushPermissions([ - {type: "downloads", allow: true, context: document} - ], function() { - navigator.mozDownloadManager.ondownloadstart = downloadStart; - next(); - }); - }, - - // Click on the <a download> to start the download. - function() { - document.getElementById("download1").click(); - } -]; - -next(); - -</script> -</pre> -</body> -</html> - diff --git a/dom/downloads/tests/test_downloads_large.html b/dom/downloads/tests/test_downloads_large.html deleted file mode 100644 index 9f7f73c19..000000000 --- a/dom/downloads/tests/test_downloads_large.html +++ /dev/null @@ -1,110 +0,0 @@ -<!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" download="test.bin" id="download1">Large Download</a> -<pre id="test"> -<script class="testbody" type="text/javascript;version=1.7"> - -// Testing downloading a file, then checking getDownloads() and clearAllDone(). - -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); - } -} - -// Catch all error function. -function error() { - ok(false, "API failure"); - SimpleTest.finish(); -} - -function getDownloads(downloads) { - ok(downloads.length == 1, "One downloads after getDownloads"); - clearAllDoneHelper(true).then(clearAllDone, error); -} - -function clearAllDone(downloads) { - ok(downloads.length == 0, "No downloads after clearAllDone"); - SimpleTest.finish(); -} - -function downloadChange(evt) { - var download = evt.download; - - if (download.state == "succeeded") { - ok(download.totalBytes == 102400, "Download size is 100k bytes."); - navigator.mozDownloadManager.getDownloads().then(getDownloads, 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> diff --git a/dom/downloads/tests/test_downloads_navigator_object.html b/dom/downloads/tests/test_downloads_navigator_object.html deleted file mode 100644 index 1c38388b7..000000000 --- a/dom/downloads/tests/test_downloads_navigator_object.html +++ /dev/null @@ -1,75 +0,0 @@ -<!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> - <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"> -<iframe></iframe> -</div> -<pre id="test"> -<script class="testbody" type="text/javascript;version=1.7"> - -SimpleTest.waitForExplicitFinish(); - -var index = -1; - -function next() { - index += 1; - if (index >= steps.length) { - ok(false, "Shouldn't get here!"); - return; - } - try { - steps[index](); - } catch(ex) { - ok(false, "Caught exception", ex); - } -} - -var steps = [ - // Start by setting the pref to true. - function() { - SpecialPowers.pushPrefEnv({ - set: [["dom.mozDownloads.enabled", true]] - }, next); - }, - - function() { - SpecialPowers.pushPermissions([ - {type: "downloads", allow: 0, context: document} - ], function() { - is(frames[0].navigator.mozDownloadManager, null, "navigator.mozDownloadManager is null when the page doesn't have permissions"); - next(); - }); - }, - - function() { - SpecialPowers.pushPrefEnv({ - set: [["dom.mozDownloads.enabled", false]] - }, function() { - is(navigator.mozDownloadManager, undefined, "navigator.mozDownloadManager is undefined"); - next(); - }); - }, - - function() { - SimpleTest.finish(); - } -]; - -next(); - -</script> -</pre> -</body> -</html> diff --git a/dom/downloads/tests/test_downloads_pause_remove.html b/dom/downloads/tests/test_downloads_pause_remove.html deleted file mode 100644 index 3b410a667..000000000 --- a/dom/downloads/tests/test_downloads_pause_remove.html +++ /dev/null @@ -1,117 +0,0 @@ -<!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 removing 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; - -// 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 checkRemoved(download) { - ok(download.state == "finalized", "Download removed."); - navigator.mozDownloadManager.getDownloads() - .then(checkDownloadList, error); -} - -function downloadChange(evt) { - var download = evt.download; - - if (download.state == "downloading" && !pausing) { - pausing = true; - download.pause(); - } else if (download.state == "stopped") { - ok(pausing, "Download stopped by pause()"); - navigator.mozDownloadManager.remove(download) - .then(checkRemoved, 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> diff --git a/dom/downloads/tests/test_downloads_pause_resume.html b/dom/downloads/tests/test_downloads_pause_resume.html deleted file mode 100644 index 76e249e5a..000000000 --- a/dom/downloads/tests/test_downloads_pause_resume.html +++ /dev/null @@ -1,121 +0,0 @@ -<!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> |