106 lines
3.6 KiB
JavaScript
106 lines
3.6 KiB
JavaScript
Components.utils.import("resource://gre/modules/FileUtils.jsm");
|
|
Components.utils.import("resource://gre/modules/Task.jsm");
|
|
|
|
var gMimeSvc = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService);
|
|
var gHandlerSvc = Cc["@mozilla.org/uriloader/handler-service;1"].getService(Ci.nsIHandlerService);
|
|
|
|
function createMockedHandlerApp() {
|
|
// Mock the executable
|
|
let mockedExecutable = FileUtils.getFile("TmpD", ["mockedExecutable"]);
|
|
if (!mockedExecutable.exists()) {
|
|
mockedExecutable.create(Ci.nsIFile.NORMAL_FILE_TYPE, 0o755);
|
|
}
|
|
|
|
// Mock the handler app
|
|
let mockedHandlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"]
|
|
.createInstance(Ci.nsILocalHandlerApp);
|
|
mockedHandlerApp.executable = mockedExecutable;
|
|
mockedHandlerApp.detailedDescription = "Mocked handler app";
|
|
|
|
registerCleanupFunction(function() {
|
|
// remove the mocked executable from disk.
|
|
if (mockedExecutable.exists()) {
|
|
mockedExecutable.remove(true);
|
|
}
|
|
});
|
|
|
|
return mockedHandlerApp;
|
|
}
|
|
|
|
function createMockedObjects(createHandlerApp) {
|
|
// Mock the mime info
|
|
let internalMockedMIME = gMimeSvc.getFromTypeAndExtension("text/x-test-handler", null);
|
|
internalMockedMIME.alwaysAskBeforeHandling = true;
|
|
internalMockedMIME.preferredAction = Ci.nsIHandlerInfo.useHelperApp;
|
|
internalMockedMIME.appendExtension("abc");
|
|
if (createHandlerApp) {
|
|
let mockedHandlerApp = createMockedHandlerApp();
|
|
internalMockedMIME.description = mockedHandlerApp.detailedDescription;
|
|
internalMockedMIME.possibleApplicationHandlers.appendElement(mockedHandlerApp, false);
|
|
internalMockedMIME.preferredApplicationHandler = mockedHandlerApp;
|
|
}
|
|
|
|
// Proxy for the mocked MIME info for faking the read-only attributes
|
|
let mockedMIME = new Proxy(internalMockedMIME, {
|
|
get: function (target, property) {
|
|
switch (property) {
|
|
case "hasDefaultHandler":
|
|
return true;
|
|
case "defaultDescription":
|
|
return "Default description";
|
|
default:
|
|
return target[property];
|
|
}
|
|
},
|
|
});
|
|
|
|
// Mock the launcher:
|
|
let mockedLauncher = {
|
|
MIMEInfo: mockedMIME,
|
|
source: Services.io.newURI("http://www.mozilla.org/", null, null),
|
|
suggestedFileName: "test_download_dialog.abc",
|
|
targetFileIsExecutable: false,
|
|
saveToDisk() {},
|
|
cancel() {},
|
|
launchWithApplication() {},
|
|
setWebProgressListener() {},
|
|
saveDestinationAvailable() {},
|
|
contentLength: 42,
|
|
targetFile: null, // never read
|
|
// PRTime is microseconds since epoch, Date.now() returns milliseconds:
|
|
timeDownloadStarted: Date.now() * 1000,
|
|
QueryInterface: XPCOMUtils.generateQI([Ci.nsICancelable, Ci.nsIHelperAppLauncher])
|
|
};
|
|
|
|
registerCleanupFunction(function() {
|
|
// remove the mocked mime info from database.
|
|
let mockHandlerInfo = gMimeSvc.getFromTypeAndExtension("text/x-test-handler", null);
|
|
if (gHandlerSvc.exists(mockHandlerInfo)) {
|
|
gHandlerSvc.remove(mockHandlerInfo);
|
|
}
|
|
});
|
|
|
|
return mockedLauncher;
|
|
}
|
|
|
|
function* openHelperAppDialog(launcher) {
|
|
let helperAppDialog = Cc["@mozilla.org/helperapplauncherdialog;1"].
|
|
createInstance(Ci.nsIHelperAppLauncherDialog);
|
|
|
|
let helperAppDialogShownPromise = BrowserTestUtils.domWindowOpened();
|
|
try {
|
|
helperAppDialog.show(launcher, window, "foopy");
|
|
} catch (ex) {
|
|
ok(false, "Trying to show unknownContentType.xul failed with exception: " + ex);
|
|
Cu.reportError(ex);
|
|
}
|
|
let dlg = yield helperAppDialogShownPromise;
|
|
|
|
yield BrowserTestUtils.waitForEvent(dlg, "load", false);
|
|
|
|
is(dlg.location.href, "chrome://mozapps/content/downloads/unknownContentType.xul",
|
|
"Got correct dialog");
|
|
|
|
return dlg;
|
|
}
|