tenfourfox/webapprt/test/chrome/browser_download.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

126 lines
3.8 KiB
JavaScript

Cu.import("resource://gre/modules/Services.jsm");
var { Downloads } = Cu.import("resource://gre/modules/Downloads.jsm", {});
Cu.import("resource://gre/modules/Task.jsm");
Cu.import("resource://gre/modules/NetUtil.jsm");
function getFile(aFilename) {
// The download database may contain targets stored as file URLs or native
// paths. This can still be true for previously stored items, even if new
// items are stored using their file URL. See also bug 239948 comment 12.
if (aFilename.startsWith("file:")) {
// Assume the file URL we obtained from the downloads database or from the
// "spec" property of the target has the UTF-8 charset.
let fileUrl = NetUtil.newURI(aFilename).QueryInterface(Ci.nsIFileURL);
return fileUrl.file.clone();
}
// The downloads database contains a native path. Try to create a local
// file, though this may throw an exception if the path is invalid.
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
file.initWithPath(aFilename);
return file;
}
var fileDownloaded = false;
var download = new DummyDownload("download.test");
download.state = 1;
download.percentComplete = 100;
var winObserver = function(win, topic) {
if (topic == "domwindowopened") {
win.addEventListener("load", function onLoadWindow() {
win.removeEventListener("load", onLoadWindow, false);
if (win.document.documentURI ==
"chrome://mozapps/content/downloads/unknownContentType.xul") {
ok(true, "Download dialog shown");
executeSoon(() => {
let button = win.document.documentElement.getButton("accept");
button.disabled = false;
win.document.documentElement.acceptDialog();
});
} else if (win.document.documentURI ==
"chrome://webapprt/content/downloads/downloads.xul") {
ok(true, "Download manager window shown");
ok(fileDownloaded, "File downloaded");
waitDownloadListPopulation(win).then(() => {
test_downloadList(win, [download]);
finish();
});
}
}, false);
}
}
Services.ww.registerNotification(winObserver);
var MockFilePicker = SpecialPowers.MockFilePicker;
MockFilePicker.init(window);
MockFilePicker.returnFiles = [download.file];
MockFilePicker.showCallback = function() {
ok(true, "File picker shown");
return MockFilePicker.returnOK;
}
var downloadListener = {
onDownloadAdded: function(aDownload) {
if (aDownload.succeeded) {
let downloadedFile = getFile(aDownload.target.path);
ok(downloadedFile.exists(), "Download completed");
is(downloadedFile.fileSize, 10, "Downloaded file has correct size");
fileDownloaded = true;
try {
downloadedFile.remove(true);
} catch (ex) {
}
}
},
onDownloadChanged: function(aDownload) {
if (aDownload.succeeded) {
let downloadedFile = getFile(aDownload.target.path);
ok(downloadedFile.exists(), "Download completed");
is(downloadedFile.fileSize, 10, "Downloaded file has correct size");
fileDownloaded = true;
try {
downloadedFile.remove(true);
} catch (ex) {
}
}
},
};
var downloadList;
registerCleanupFunction(function() {
Services.wm.getMostRecentWindow("Download:Manager").close();
Services.ww.unregisterNotification(winObserver);
MockFilePicker.cleanup();
if (downloadList) {
return downloadList.removeView(downloadListener);
}
});
function test() {
waitForExplicitFinish();
loadWebapp("download.webapp", undefined, function onLoad() {
Task.spawn(function*() {
downloadList = yield Downloads.getList(Downloads.ALL);
yield downloadList.addView(downloadListener);
gAppBrowser.contentDocument.getElementById("download").click();
}).catch(function(e) {
ok(false, "Error during test: " + e);
SimpleTest.finish();
});
});
}