зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1334975 - Get rid of nsIFilePicker.show() use in gecko, r=ochameau
This commit is contained in:
Родитель
9b8c984305
Коммит
24004054a8
|
@ -47,22 +47,23 @@ module.exports = createClass({
|
|||
fp.init(window,
|
||||
Strings.GetStringFromName("selectAddonFromFile2"),
|
||||
Ci.nsIFilePicker.modeOpen);
|
||||
let res = fp.show();
|
||||
if (res == Ci.nsIFilePicker.returnCancel || !fp.file) {
|
||||
return;
|
||||
}
|
||||
let file = fp.file;
|
||||
// AddonManager.installTemporaryAddon accepts either
|
||||
// addon directory or final xpi file.
|
||||
if (!file.isDirectory() && !file.leafName.endsWith(".xpi")) {
|
||||
file = file.parent;
|
||||
}
|
||||
fp.open(res => {
|
||||
if (res == Ci.nsIFilePicker.returnCancel || !fp.file) {
|
||||
return;
|
||||
}
|
||||
let file = fp.file;
|
||||
// AddonManager.installTemporaryAddon accepts either
|
||||
// addon directory or final xpi file.
|
||||
if (!file.isDirectory() && !file.leafName.endsWith(".xpi")) {
|
||||
file = file.parent;
|
||||
}
|
||||
|
||||
AddonManager.installTemporaryAddon(file)
|
||||
.catch(e => {
|
||||
console.error(e);
|
||||
this.setState({ installError: e.message });
|
||||
});
|
||||
AddonManager.installTemporaryAddon(file)
|
||||
.catch(e => {
|
||||
console.error(e);
|
||||
this.setState({ installError: e.message });
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
render() {
|
||||
|
|
|
@ -113,7 +113,7 @@ function getTabList(document) {
|
|||
function* installAddon({document, path, name, isWebExtension}) {
|
||||
// Mock the file picker to select a test addon
|
||||
let MockFilePicker = SpecialPowers.MockFilePicker;
|
||||
MockFilePicker.init(null);
|
||||
MockFilePicker.init(window);
|
||||
let file = getSupportsFile(path);
|
||||
MockFilePicker.returnFiles = [file.file];
|
||||
|
||||
|
|
|
@ -357,38 +357,40 @@ var SnapshotsListView = Heritage.extend(WidgetMethods, {
|
|||
fp.appendFilter(L10N.getStr("snapshotsList.saveDialogJSONFilter"), "*.json");
|
||||
fp.appendFilter(L10N.getStr("snapshotsList.saveDialogAllFilter"), "*.*");
|
||||
|
||||
if (fp.show() != Ci.nsIFilePicker.returnOK) {
|
||||
return;
|
||||
}
|
||||
|
||||
let channel = NetUtil.newChannel({
|
||||
uri: NetUtil.newURI(fp.file), loadUsingSystemPrincipal: true});
|
||||
channel.contentType = "text/plain";
|
||||
|
||||
NetUtil.asyncFetch(channel, (inputStream, status) => {
|
||||
if (!Components.isSuccessCode(status)) {
|
||||
console.error("Could not import recorded animation frame snapshot file.");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
let string = NetUtil.readInputStreamToString(inputStream, inputStream.available());
|
||||
var data = JSON.parse(string);
|
||||
} catch (e) {
|
||||
console.error("Could not read animation frame snapshot file.");
|
||||
return;
|
||||
}
|
||||
if (data.fileType != CALLS_LIST_SERIALIZER_IDENTIFIER) {
|
||||
console.error("Unrecognized animation frame snapshot file.");
|
||||
fp.open(rv => {
|
||||
if (rv != Ci.nsIFilePicker.returnOK) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add a `isLoadedFromDisk` flag on everything to avoid sending invalid
|
||||
// requests to the backend, since we're not dealing with actors anymore.
|
||||
let snapshotItem = this.addSnapshot();
|
||||
snapshotItem.isLoadedFromDisk = true;
|
||||
data.calls.forEach(e => e.isLoadedFromDisk = true);
|
||||
let channel = NetUtil.newChannel({
|
||||
uri: NetUtil.newURI(fp.file), loadUsingSystemPrincipal: true});
|
||||
channel.contentType = "text/plain";
|
||||
|
||||
this.customizeSnapshot(snapshotItem, data.calls, data);
|
||||
NetUtil.asyncFetch(channel, (inputStream, status) => {
|
||||
if (!Components.isSuccessCode(status)) {
|
||||
console.error("Could not import recorded animation frame snapshot file.");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
let string = NetUtil.readInputStreamToString(inputStream, inputStream.available());
|
||||
var data = JSON.parse(string);
|
||||
} catch (e) {
|
||||
console.error("Could not read animation frame snapshot file.");
|
||||
return;
|
||||
}
|
||||
if (data.fileType != CALLS_LIST_SERIALIZER_IDENTIFIER) {
|
||||
console.error("Unrecognized animation frame snapshot file.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Add a `isLoadedFromDisk` flag on everything to avoid sending invalid
|
||||
// requests to the backend, since we're not dealing with actors anymore.
|
||||
let snapshotItem = this.addSnapshot();
|
||||
snapshotItem.isLoadedFromDisk = true;
|
||||
data.calls.forEach(e => e.isLoadedFromDisk = true);
|
||||
|
||||
this.customizeSnapshot(snapshotItem, data.calls, data);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
|
|
|
@ -50,11 +50,11 @@ var JsonView = {
|
|||
* in the parent process.
|
||||
*/
|
||||
onSave: function (message) {
|
||||
let value = message.data;
|
||||
let file = JsonViewUtils.getTargetFile();
|
||||
if (file) {
|
||||
JsonViewUtils.saveToFile(file, value);
|
||||
}
|
||||
JsonViewUtils.getTargetFile(file => {
|
||||
if (file) {
|
||||
JsonViewUtils.saveToFile(file, message.data);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -23,21 +23,24 @@ const OPEN_FLAGS = {
|
|||
* Open File Save As dialog and let the user to pick proper file location.
|
||||
*/
|
||||
exports.getTargetFile = function () {
|
||||
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
|
||||
return new Promise(resolve => {
|
||||
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
|
||||
|
||||
let win = getMostRecentBrowserWindow();
|
||||
fp.init(win, null, Ci.nsIFilePicker.modeSave);
|
||||
fp.appendFilter("JSON Files", "*.json; *.jsonp;");
|
||||
fp.appendFilters(Ci.nsIFilePicker.filterText);
|
||||
fp.appendFilters(Ci.nsIFilePicker.filterAll);
|
||||
fp.filterIndex = 0;
|
||||
let win = getMostRecentBrowserWindow();
|
||||
fp.init(win, null, Ci.nsIFilePicker.modeSave);
|
||||
fp.appendFilter("JSON Files", "*.json; *.jsonp;");
|
||||
fp.appendFilters(Ci.nsIFilePicker.filterText);
|
||||
fp.appendFilters(Ci.nsIFilePicker.filterAll);
|
||||
fp.filterIndex = 0;
|
||||
|
||||
let rv = fp.show();
|
||||
if (rv == Ci.nsIFilePicker.returnOK || rv == Ci.nsIFilePicker.returnReplace) {
|
||||
return fp.file;
|
||||
}
|
||||
|
||||
return null;
|
||||
fp.open(rv => {
|
||||
if (rv == Ci.nsIFilePicker.returnOK || rv == Ci.nsIFilePicker.returnReplace) {
|
||||
resolve(fp.file);
|
||||
} else {
|
||||
resolve(null);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -56,7 +56,7 @@ var HarUtils = {
|
|||
* Open File Save As dialog and let the user pick the proper file
|
||||
* location for generated HAR log.
|
||||
*/
|
||||
getTargetFile: function (fileName, jsonp, compress) {
|
||||
getTargetFile: function (fileName, jsonp, compress, cb) {
|
||||
let browser = getMostRecentBrowserWindow();
|
||||
|
||||
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
|
||||
|
@ -68,12 +68,13 @@ var HarUtils = {
|
|||
|
||||
fp.defaultString = this.getHarFileName(fileName, jsonp, compress);
|
||||
|
||||
let rv = fp.show();
|
||||
if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
|
||||
return fp.file;
|
||||
}
|
||||
|
||||
return null;
|
||||
fp.open(rv => {
|
||||
if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
|
||||
cb(fp.file);
|
||||
} else {
|
||||
cb(null);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getHarFileName: function (defaultFileName, jsonp, compress) {
|
||||
|
|
|
@ -359,9 +359,11 @@ var PerformanceView = {
|
|||
fp.appendFilter(L10N.getStr("recordingsList.saveDialogJSONFilter"), "*.json");
|
||||
fp.appendFilter(L10N.getStr("recordingsList.saveDialogAllFilter"), "*.*");
|
||||
|
||||
if (fp.show() == Ci.nsIFilePicker.returnOK) {
|
||||
this.emit(EVENTS.UI_IMPORT_RECORDING, fp.file);
|
||||
}
|
||||
fp.open(rv => {
|
||||
if (rv == Ci.nsIFilePicker.returnOK) {
|
||||
this.emit(EVENTS.UI_IMPORT_RECORDING, fp.file);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -110,62 +110,65 @@ function doOK() {
|
|||
return false;
|
||||
}
|
||||
|
||||
let folder;
|
||||
|
||||
/* Chrome mochitest support */
|
||||
let testOptions = window.arguments[0].testOptions;
|
||||
if (testOptions) {
|
||||
folder = testOptions.folder;
|
||||
} else {
|
||||
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
|
||||
fp.init(window, "Select directory where to create app directory", Ci.nsIFilePicker.modeGetFolder);
|
||||
let res = fp.show();
|
||||
if (res == Ci.nsIFilePicker.returnCancel) {
|
||||
console.error("No directory selected");
|
||||
return false;
|
||||
let promise = new Promise((resolve, reject) => {
|
||||
let testOptions = window.arguments[0].testOptions;
|
||||
if (testOptions) {
|
||||
resolve(testOptions.folder);
|
||||
} else {
|
||||
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
|
||||
fp.init(window, "Select directory where to create app directory", Ci.nsIFilePicker.modeGetFolder);
|
||||
fp.open(res => {
|
||||
if (res == Ci.nsIFilePicker.returnCancel) {
|
||||
console.error("No directory selected");
|
||||
reject(null);
|
||||
} else {
|
||||
resolve(fp.file);
|
||||
}
|
||||
});
|
||||
}
|
||||
folder = fp.file;
|
||||
}
|
||||
|
||||
// Create subfolder with fs-friendly name of project
|
||||
let subfolder = projectName.replace(/[\\/:*?"<>|]/g, "").toLowerCase();
|
||||
let win = Services.wm.getMostRecentWindow("devtools:webide");
|
||||
folder.append(subfolder);
|
||||
|
||||
try {
|
||||
folder.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
|
||||
} catch (e) {
|
||||
win.UI.reportError("error_folderCreationFailed");
|
||||
window.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Download boilerplate zip
|
||||
let template = gTemplateList[templatelistNode.selectedIndex];
|
||||
let source = template.file;
|
||||
let target = folder.clone();
|
||||
target.append(subfolder + ".zip");
|
||||
});
|
||||
|
||||
let bail = (e) => {
|
||||
console.error(e);
|
||||
window.close();
|
||||
};
|
||||
|
||||
Downloads.fetch(source, target).then(() => {
|
||||
ZipUtils.extractFiles(target, folder);
|
||||
target.remove(false);
|
||||
AppProjects.addPackaged(folder).then((project) => {
|
||||
window.arguments[0].location = project.location;
|
||||
AppManager.validateAndUpdateProject(project).then(() => {
|
||||
if (project.manifest) {
|
||||
project.manifest.name = projectName;
|
||||
AppManager.writeManifest(project).then(() => {
|
||||
AppManager.validateAndUpdateProject(project).then(
|
||||
() => {window.close();}, bail);
|
||||
}, bail);
|
||||
} else {
|
||||
bail("Manifest not found");
|
||||
}
|
||||
promise.then(folder => {
|
||||
// Create subfolder with fs-friendly name of project
|
||||
let subfolder = projectName.replace(/[\\/:*?"<>|]/g, "").toLowerCase();
|
||||
let win = Services.wm.getMostRecentWindow("devtools:webide");
|
||||
folder.append(subfolder);
|
||||
|
||||
try {
|
||||
folder.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
|
||||
} catch (e) {
|
||||
win.UI.reportError("error_folderCreationFailed");
|
||||
window.close();
|
||||
return;
|
||||
}
|
||||
|
||||
// Download boilerplate zip
|
||||
let template = gTemplateList[templatelistNode.selectedIndex];
|
||||
let source = template.file;
|
||||
let target = folder.clone();
|
||||
target.append(subfolder + ".zip");
|
||||
Downloads.fetch(source, target).then(() => {
|
||||
ZipUtils.extractFiles(target, folder);
|
||||
target.remove(false);
|
||||
AppProjects.addPackaged(folder).then((project) => {
|
||||
window.arguments[0].location = project.location;
|
||||
AppManager.validateAndUpdateProject(project).then(() => {
|
||||
if (project.manifest) {
|
||||
project.manifest.name = projectName;
|
||||
AppManager.writeManifest(project).then(() => {
|
||||
AppManager.validateAndUpdateProject(project).then(
|
||||
() => {window.close();}, bail);
|
||||
}, bail);
|
||||
} else {
|
||||
bail("Manifest not found");
|
||||
}
|
||||
}, bail);
|
||||
}, bail);
|
||||
}, bail);
|
||||
}, bail);
|
||||
|
|
|
@ -289,12 +289,13 @@ var SimulatorEditor = {
|
|||
case "version":
|
||||
switch (input.value) {
|
||||
case "pick":
|
||||
let file = utils.getCustomBinary(window);
|
||||
if (file) {
|
||||
this.version = file.path;
|
||||
}
|
||||
// Whatever happens, don't stay on the "pick" option.
|
||||
this.updateVersionSelector();
|
||||
utils.getCustomBinary(window).then(file => {
|
||||
if (file) {
|
||||
this.version = file.path;
|
||||
}
|
||||
// Whatever happens, don't stay on the "pick" option.
|
||||
this.updateVersionSelector();
|
||||
});
|
||||
break;
|
||||
case "custom":
|
||||
this.version = input[input.selectedIndex].textContent;
|
||||
|
@ -306,12 +307,13 @@ var SimulatorEditor = {
|
|||
case "profile":
|
||||
switch (input.value) {
|
||||
case "pick":
|
||||
let directory = utils.getCustomProfile(window);
|
||||
if (directory) {
|
||||
this.profile = directory.path;
|
||||
}
|
||||
// Whatever happens, don't stay on the "pick" option.
|
||||
this.updateProfileSelector();
|
||||
utils.getCustomProfile(window).then(directory => {
|
||||
if (directory) {
|
||||
this.profile = directory.path;
|
||||
}
|
||||
// Whatever happens, don't stay on the "pick" option.
|
||||
this.updateProfileSelector();
|
||||
});
|
||||
break;
|
||||
case "custom":
|
||||
this.profile = input[input.selectedIndex].textContent;
|
||||
|
|
|
@ -92,7 +92,7 @@ ProjectList.prototype = {
|
|||
let parentWindow = this._parentWindow;
|
||||
let UI = this._UI;
|
||||
return UI.busyUntil(Task.spawn(function* () {
|
||||
let directory = utils.getPackagedDirectory(parentWindow, location);
|
||||
let directory = yield utils.getPackagedDirectory(parentWindow, location);
|
||||
|
||||
if (!directory) {
|
||||
// User cancelled directory selection
|
||||
|
|
|
@ -15,15 +15,20 @@ exports.doesFileExist = doesFileExist;
|
|||
|
||||
function _getFile(location, ...pickerParams) {
|
||||
if (location) {
|
||||
return new FileUtils.File(location);
|
||||
return Promise.resolve(new FileUtils.File(location));
|
||||
}
|
||||
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
|
||||
fp.init(...pickerParams);
|
||||
let res = fp.show();
|
||||
if (res == Ci.nsIFilePicker.returnCancel) {
|
||||
return null;
|
||||
}
|
||||
return fp.file;
|
||||
|
||||
return new Promise(resolve => {
|
||||
fp.open(res => {
|
||||
if (res == Ci.nsIFilePicker.returnCancel) {
|
||||
resolve(null);
|
||||
} else {
|
||||
resolve(fp.file);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function getCustomBinary(window, location) {
|
||||
|
|
|
@ -167,10 +167,12 @@ function openFile()
|
|||
.createInstance(nsIFilePicker);
|
||||
fp.init(window, "Select a File", nsIFilePicker.modeOpen);
|
||||
fp.appendFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterAll);
|
||||
if (fp.show() == nsIFilePicker.returnOK && fp.fileURL.spec &&
|
||||
fp.fileURL.spec.length > 0) {
|
||||
gBrowser.loadURI(fp.fileURL.spec);
|
||||
}
|
||||
fp.open(rv => {
|
||||
if (rv == nsIFilePicker.returnOK && fp.fileURL.spec &&
|
||||
fp.fileURL.spec.length > 0) {
|
||||
gBrowser.loadURI(fp.fileURL.spec);
|
||||
}
|
||||
});
|
||||
}
|
||||
const LDB_RDFNS = "http://mozilla.org/newlayout/LDB-rdf#";
|
||||
const NC_RDFNS = "http://home.netscape.com/NC-rdf#";
|
||||
|
@ -264,17 +266,19 @@ RTestIndexList.prototype = {
|
|||
fp.init(window, "New Regression Test List", nsIFilePicker.modeOpen);
|
||||
fp.appendFilters(nsIFilePicker.filterAll);
|
||||
fp.defaultString = "rtest.lst";
|
||||
if (fp.show() != nsIFilePicker.returnOK)
|
||||
return;
|
||||
fp.open(rv => {
|
||||
if (rv != nsIFilePicker.returnOK) {
|
||||
return;
|
||||
}
|
||||
|
||||
var file = fp.file.persistentDescriptor;
|
||||
var resource = this.mRDFService.GetResource(file);
|
||||
var literal = this.mRDFService.GetLiteral(file);
|
||||
this.mDataSource.Assert(this.mLDB_Root, this.mNC_Child, resource, true);
|
||||
this.mDataSource.Assert(resource, this.mNC_Name, literal, true);
|
||||
|
||||
this.save();
|
||||
var file = fp.file.persistentDescriptor;
|
||||
var resource = this.mRDFService.GetResource(file);
|
||||
var literal = this.mRDFService.GetLiteral(file);
|
||||
this.mDataSource.Assert(this.mLDB_Root, this.mNC_Child, resource, true);
|
||||
this.mDataSource.Assert(resource, this.mNC_Name, literal, true);
|
||||
|
||||
this.save();
|
||||
});
|
||||
},
|
||||
|
||||
remove : function(file)
|
||||
|
|
|
@ -332,10 +332,11 @@ function backupCerts()
|
|||
fp.appendFilter(bundle.getString("file_browse_PKCS12_spec"),
|
||||
"*.p12");
|
||||
fp.appendFilters(nsIFilePicker.filterAll);
|
||||
var rv = fp.show();
|
||||
if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
|
||||
certdb.exportPKCS12File(fp.file, selected_certs.length, selected_certs);
|
||||
}
|
||||
fp.open(rv => {
|
||||
if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
|
||||
certdb.exportPKCS12File(fp.file, selected_certs.length, selected_certs);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function backupAllCerts()
|
||||
|
@ -367,7 +368,11 @@ function restoreCerts()
|
|||
fp.appendFilter(bundle.getString("file_browse_Certificate_spec"),
|
||||
gCertFileTypes);
|
||||
fp.appendFilters(nsIFilePicker.filterAll);
|
||||
if (fp.show() == nsIFilePicker.returnOK) {
|
||||
fp.open(rv => {
|
||||
if (rv != nsIFilePicker.returnOK) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If this is an X509 user certificate, import it as one.
|
||||
|
||||
var isX509FileType = false;
|
||||
|
@ -407,7 +412,7 @@ function restoreCerts()
|
|||
caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT);
|
||||
caTreeView.selection.clearSelection();
|
||||
enableBackupAllButton();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function exportCerts()
|
||||
|
@ -485,11 +490,13 @@ function addCACerts()
|
|||
fp.appendFilter(bundle.getString("file_browse_Certificate_spec"),
|
||||
gCertFileTypes);
|
||||
fp.appendFilters(nsIFilePicker.filterAll);
|
||||
if (fp.show() == nsIFilePicker.returnOK) {
|
||||
certdb.importCertsFromFile(fp.file, nsIX509Cert.CA_CERT);
|
||||
caTreeView.loadCerts(nsIX509Cert.CA_CERT);
|
||||
caTreeView.selection.clearSelection();
|
||||
}
|
||||
fp.open(rv => {
|
||||
if (rv == nsIFilePicker.returnOK) {
|
||||
certdb.importCertsFromFile(fp.file, nsIX509Cert.CA_CERT);
|
||||
caTreeView.loadCerts(nsIX509Cert.CA_CERT);
|
||||
caTreeView.selection.clearSelection();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function onSmartCardChange()
|
||||
|
@ -519,14 +526,16 @@ function addEmailCert()
|
|||
fp.appendFilter(bundle.getString("file_browse_Certificate_spec"),
|
||||
gCertFileTypes);
|
||||
fp.appendFilters(nsIFilePicker.filterAll);
|
||||
if (fp.show() == nsIFilePicker.returnOK) {
|
||||
certdb.importCertsFromFile(fp.file, nsIX509Cert.EMAIL_CERT);
|
||||
var certcache = certdb.getCerts();
|
||||
emailTreeView.loadCertsFromCache(certcache, nsIX509Cert.EMAIL_CERT);
|
||||
emailTreeView.selection.clearSelection();
|
||||
caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT);
|
||||
caTreeView.selection.clearSelection();
|
||||
}
|
||||
fp.open(rv => {
|
||||
if (rv == nsIFilePicker.returnOK) {
|
||||
certdb.importCertsFromFile(fp.file, nsIX509Cert.EMAIL_CERT);
|
||||
var certcache = certdb.getCerts();
|
||||
emailTreeView.loadCertsFromCache(certcache, nsIX509Cert.EMAIL_CERT);
|
||||
emailTreeView.selection.clearSelection();
|
||||
caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT);
|
||||
caTreeView.selection.clearSelection();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function addException()
|
||||
|
|
|
@ -76,6 +76,7 @@ this.MockFilePicker = {
|
|||
this.returnFiles = [];
|
||||
this.returnValue = null;
|
||||
this.showCallback = null;
|
||||
this.afterOpenCallback = null;
|
||||
this.shown = false;
|
||||
this.showing = false;
|
||||
},
|
||||
|
@ -210,6 +211,9 @@ MockFilePickerInstance.prototype = {
|
|||
};
|
||||
},
|
||||
show: function() {
|
||||
throw "This is not implemented";
|
||||
},
|
||||
_openInternal: function() {
|
||||
MockFilePicker.displayDirectory = this.displayDirectory;
|
||||
MockFilePicker.shown = true;
|
||||
if (typeof MockFilePicker.showCallback == "function") {
|
||||
|
@ -224,12 +228,17 @@ MockFilePickerInstance.prototype = {
|
|||
this.window.setTimeout(function() {
|
||||
let result = Components.interfaces.nsIFilePicker.returnCancel;
|
||||
try {
|
||||
result = this.show();
|
||||
result = this._openInternal();
|
||||
} catch(ex) {
|
||||
}
|
||||
if (aFilePickerShownCallback) {
|
||||
aFilePickerShownCallback.done(result);
|
||||
}
|
||||
if (typeof MockFilePicker.afterOpenCallback == "function") {
|
||||
this.window.setTimeout(() => {
|
||||
MockFilePicker.afterOpenCallback(this);
|
||||
}, 0);
|
||||
}
|
||||
}.bind(this), 0);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -193,15 +193,17 @@ AppPicker.prototype =
|
|||
fp.displayDirectory =
|
||||
fileLoc.get(startLocation, Components.interfaces.nsILocalFile);
|
||||
|
||||
if (fp.show() == nsIFilePicker.returnOK && fp.file) {
|
||||
var localHandlerApp =
|
||||
Components.classes["@mozilla.org/uriloader/local-handler-app;1"].
|
||||
createInstance(Components.interfaces.nsILocalHandlerApp);
|
||||
localHandlerApp.executable = fp.file;
|
||||
fp.open(rv => {
|
||||
if (rv == nsIFilePicker.returnOK && fp.file) {
|
||||
var localHandlerApp =
|
||||
Components.classes["@mozilla.org/uriloader/local-handler-app;1"].
|
||||
createInstance(Components.interfaces.nsILocalHandlerApp);
|
||||
localHandlerApp.executable = fp.file;
|
||||
|
||||
this._incomingParams.handlerApp = localHandlerApp;
|
||||
window.close();
|
||||
}
|
||||
this._incomingParams.handlerApp = localHandlerApp;
|
||||
window.close();
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -302,7 +302,11 @@ function onLoad() {
|
|||
|
||||
// ---------------------------------------------------
|
||||
function onAccept() {
|
||||
if (gPrintSettings != null) {
|
||||
let promise;
|
||||
|
||||
if (gPrintSettings == null) {
|
||||
promise = Promise.resolve();
|
||||
} else {
|
||||
var print_howToEnableUI = gPrintSetInterface.kFrameEnableNone;
|
||||
|
||||
// save these out so they can be picked up by the device spec
|
||||
|
@ -310,66 +314,75 @@ function onAccept() {
|
|||
print_howToEnableUI = gPrintSettings.howToEnableFrameUI;
|
||||
gPrintSettings.printToFile = dialog.fileCheck.checked;
|
||||
|
||||
if (gPrintSettings.printToFile && !chooseFile())
|
||||
return false;
|
||||
|
||||
if (dialog.allpagesRadio.selected) {
|
||||
gPrintSettings.printRange = gPrintSetInterface.kRangeAllPages;
|
||||
} else if (dialog.rangeRadio.selected) {
|
||||
gPrintSettings.printRange = gPrintSetInterface.kRangeSpecifiedPageRange;
|
||||
} else if (dialog.selectionRadio.selected) {
|
||||
gPrintSettings.printRange = gPrintSetInterface.kRangeSelection;
|
||||
if (gPrintSettings.printToFile) {
|
||||
promise = chooseFile();
|
||||
} else {
|
||||
promise = Promise.resolve();
|
||||
}
|
||||
gPrintSettings.startPageRange = dialog.frompageInput.value;
|
||||
gPrintSettings.endPageRange = dialog.topageInput.value;
|
||||
gPrintSettings.numCopies = dialog.numCopiesInput.value;
|
||||
|
||||
var frametype = gPrintSetInterface.kNoFrames;
|
||||
if (print_howToEnableUI != gPrintSetInterface.kFrameEnableNone) {
|
||||
if (dialog.aslaidoutRadio.selected) {
|
||||
frametype = gPrintSetInterface.kFramesAsIs;
|
||||
} else if (dialog.selectedframeRadio.selected) {
|
||||
frametype = gPrintSetInterface.kSelectedFrame;
|
||||
} else if (dialog.eachframesepRadio.selected) {
|
||||
frametype = gPrintSetInterface.kEachFrameSep;
|
||||
} else {
|
||||
frametype = gPrintSetInterface.kSelectedFrame;
|
||||
promise = promise.then(() => {
|
||||
if (dialog.allpagesRadio.selected) {
|
||||
gPrintSettings.printRange = gPrintSetInterface.kRangeAllPages;
|
||||
} else if (dialog.rangeRadio.selected) {
|
||||
gPrintSettings.printRange = gPrintSetInterface.kRangeSpecifiedPageRange;
|
||||
} else if (dialog.selectionRadio.selected) {
|
||||
gPrintSettings.printRange = gPrintSetInterface.kRangeSelection;
|
||||
}
|
||||
gPrintSettings.startPageRange = dialog.frompageInput.value;
|
||||
gPrintSettings.endPageRange = dialog.topageInput.value;
|
||||
gPrintSettings.numCopies = dialog.numCopiesInput.value;
|
||||
|
||||
var frametype = gPrintSetInterface.kNoFrames;
|
||||
if (print_howToEnableUI != gPrintSetInterface.kFrameEnableNone) {
|
||||
if (dialog.aslaidoutRadio.selected) {
|
||||
frametype = gPrintSetInterface.kFramesAsIs;
|
||||
} else if (dialog.selectedframeRadio.selected) {
|
||||
frametype = gPrintSetInterface.kSelectedFrame;
|
||||
} else if (dialog.eachframesepRadio.selected) {
|
||||
frametype = gPrintSetInterface.kEachFrameSep;
|
||||
} else {
|
||||
frametype = gPrintSetInterface.kSelectedFrame;
|
||||
}
|
||||
}
|
||||
gPrintSettings.printFrameType = frametype;
|
||||
if (doDebug) {
|
||||
dump("onAccept*********************************************\n");
|
||||
dump("frametype " + frametype + "\n");
|
||||
dump("numCopies " + gPrintSettings.numCopies + "\n");
|
||||
dump("printRange " + gPrintSettings.printRange + "\n");
|
||||
dump("printerName " + gPrintSettings.printerName + "\n");
|
||||
dump("startPageRange " + gPrintSettings.startPageRange + "\n");
|
||||
dump("endPageRange " + gPrintSettings.endPageRange + "\n");
|
||||
dump("printToFile " + gPrintSettings.printToFile + "\n");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
promise.then(() => {
|
||||
var saveToPrefs = false;
|
||||
|
||||
saveToPrefs = gPrefs.getBoolPref("print.save_print_settings");
|
||||
|
||||
if (saveToPrefs && printService != null) {
|
||||
var flags = gPrintSetInterface.kInitSavePaperSize |
|
||||
gPrintSetInterface.kInitSaveEdges |
|
||||
gPrintSetInterface.kInitSaveInColor |
|
||||
gPrintSetInterface.kInitSaveShrinkToFit |
|
||||
gPrintSetInterface.kInitSaveScaling;
|
||||
printService.savePrintSettingsToPrefs(gPrintSettings, true, flags);
|
||||
}
|
||||
gPrintSettings.printFrameType = frametype;
|
||||
if (doDebug) {
|
||||
dump("onAccept*********************************************\n");
|
||||
dump("frametype " + frametype + "\n");
|
||||
dump("numCopies " + gPrintSettings.numCopies + "\n");
|
||||
dump("printRange " + gPrintSettings.printRange + "\n");
|
||||
dump("printerName " + gPrintSettings.printerName + "\n");
|
||||
dump("startPageRange " + gPrintSettings.startPageRange + "\n");
|
||||
dump("endPageRange " + gPrintSettings.endPageRange + "\n");
|
||||
dump("printToFile " + gPrintSettings.printToFile + "\n");
|
||||
|
||||
// set return value to "print"
|
||||
if (paramBlock) {
|
||||
paramBlock.SetInt(0, 1);
|
||||
} else {
|
||||
dump("*** FATAL ERROR: No paramBlock\n");
|
||||
}
|
||||
}
|
||||
|
||||
var saveToPrefs = false;
|
||||
window.close();
|
||||
});
|
||||
|
||||
saveToPrefs = gPrefs.getBoolPref("print.save_print_settings");
|
||||
|
||||
if (saveToPrefs && printService != null) {
|
||||
var flags = gPrintSetInterface.kInitSavePaperSize |
|
||||
gPrintSetInterface.kInitSaveEdges |
|
||||
gPrintSetInterface.kInitSaveInColor |
|
||||
gPrintSetInterface.kInitSaveShrinkToFit |
|
||||
gPrintSetInterface.kInitSaveScaling;
|
||||
printService.savePrintSettingsToPrefs(gPrintSettings, true, flags);
|
||||
}
|
||||
|
||||
// set return value to "print"
|
||||
if (paramBlock) {
|
||||
paramBlock.SetInt(0, 1);
|
||||
} else {
|
||||
dump("*** FATAL ERROR: No paramBlock\n");
|
||||
}
|
||||
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------
|
||||
|
@ -387,19 +400,17 @@ function onCancel() {
|
|||
// ---------------------------------------------------
|
||||
const nsIFilePicker = Components.interfaces.nsIFilePicker;
|
||||
function chooseFile() {
|
||||
try {
|
||||
return new Promise(resolve => {
|
||||
var fp = Components.classes["@mozilla.org/filepicker;1"]
|
||||
.createInstance(nsIFilePicker);
|
||||
fp.init(window, dialog.fpDialog.getAttribute("label"), nsIFilePicker.modeSave);
|
||||
fp.appendFilters(nsIFilePicker.filterAll);
|
||||
if (fp.show() != Components.interfaces.nsIFilePicker.returnCancel &&
|
||||
fp.file && fp.file.path) {
|
||||
gPrintSettings.toFileName = fp.file.path;
|
||||
return true;
|
||||
}
|
||||
} catch (ex) {
|
||||
dump(ex);
|
||||
}
|
||||
|
||||
return false;
|
||||
fp.open(rv => {
|
||||
if (rv != Components.interfaces.nsIFilePicker.returnCancel &&
|
||||
fp.file && fp.file.path) {
|
||||
gPrintSettings.toFileName = fp.file.path;
|
||||
resolve(null);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -316,53 +316,55 @@ nsUnknownContentTypeDialog.prototype = {
|
|||
if (lastDir && isUsableDirectory(lastDir))
|
||||
picker.displayDirectory = lastDir;
|
||||
|
||||
if (picker.show() == nsIFilePicker.returnCancel) {
|
||||
// null result means user cancelled.
|
||||
aLauncher.saveDestinationAvailable(null);
|
||||
return;
|
||||
}
|
||||
|
||||
// Be sure to save the directory the user chose through the Save As...
|
||||
// dialog as the new browser.download.dir since the old one
|
||||
// didn't exist.
|
||||
result = picker.file;
|
||||
|
||||
if (result) {
|
||||
try {
|
||||
// Remove the file so that it's not there when we ensure non-existence later;
|
||||
// this is safe because for the file to exist, the user would have had to
|
||||
// confirm that he wanted the file overwritten.
|
||||
// Only remove file if final name exists
|
||||
if (result.exists() && this.getFinalLeafName(result.leafName) == result.leafName)
|
||||
result.remove(false);
|
||||
}
|
||||
catch (ex) {
|
||||
// As it turns out, the failure to remove the file, for example due to
|
||||
// permission error, will be handled below eventually somehow.
|
||||
picker.open(returnValue => {
|
||||
if (returnValue == nsIFilePicker.returnCancel) {
|
||||
// null result means user cancelled.
|
||||
aLauncher.saveDestinationAvailable(null);
|
||||
return;
|
||||
}
|
||||
|
||||
var newDir = result.parent.QueryInterface(Components.interfaces.nsILocalFile);
|
||||
// Be sure to save the directory the user chose through the Save As...
|
||||
// dialog as the new browser.download.dir since the old one
|
||||
// didn't exist.
|
||||
result = picker.file;
|
||||
|
||||
// Do not store the last save directory as a pref inside the private browsing mode
|
||||
gDownloadLastDir.setFile(aLauncher.source, newDir);
|
||||
|
||||
try {
|
||||
result = this.validateLeafName(newDir, result.leafName, null);
|
||||
}
|
||||
catch (ex) {
|
||||
// When the chosen download directory is write-protected,
|
||||
// display an informative error message.
|
||||
// In all cases, download will be stopped.
|
||||
|
||||
if (ex.result == Components.results.NS_ERROR_FILE_ACCESS_DENIED) {
|
||||
this.displayBadPermissionAlert();
|
||||
aLauncher.saveDestinationAvailable(null);
|
||||
return;
|
||||
if (result) {
|
||||
try {
|
||||
// Remove the file so that it's not there when we ensure non-existence later;
|
||||
// this is safe because for the file to exist, the user would have had to
|
||||
// confirm that he wanted the file overwritten.
|
||||
// Only remove file if final name exists
|
||||
if (result.exists() && this.getFinalLeafName(result.leafName) == result.leafName)
|
||||
result.remove(false);
|
||||
}
|
||||
catch (ex) {
|
||||
// As it turns out, the failure to remove the file, for example due to
|
||||
// permission error, will be handled below eventually somehow.
|
||||
}
|
||||
|
||||
var newDir = result.parent.QueryInterface(Components.interfaces.nsILocalFile);
|
||||
|
||||
// Do not store the last save directory as a pref inside the private browsing mode
|
||||
gDownloadLastDir.setFile(aLauncher.source, newDir);
|
||||
|
||||
try {
|
||||
result = this.validateLeafName(newDir, result.leafName, null);
|
||||
}
|
||||
catch (ex) {
|
||||
// When the chosen download directory is write-protected,
|
||||
// display an informative error message.
|
||||
// In all cases, download will be stopped.
|
||||
|
||||
if (ex.result == Components.results.NS_ERROR_FILE_ACCESS_DENIED) {
|
||||
this.displayBadPermissionAlert();
|
||||
aLauncher.saveDestinationAvailable(null);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
aLauncher.saveDestinationAvailable(result);
|
||||
aLauncher.saveDestinationAvailable(result);
|
||||
});
|
||||
}.bind(this));
|
||||
}.bind(this)).then(null, Components.utils.reportError);
|
||||
},
|
||||
|
|
|
@ -1411,17 +1411,19 @@ var gViewController = {
|
|||
fp.appendFilters(nsIFilePicker.filterAll);
|
||||
} catch (e) { }
|
||||
|
||||
if (fp.show() != nsIFilePicker.returnOK)
|
||||
return;
|
||||
fp.open(result => {
|
||||
if (result != nsIFilePicker.returnOK)
|
||||
return;
|
||||
|
||||
let browser = getBrowserElement();
|
||||
let files = fp.files;
|
||||
while (files.hasMoreElements()) {
|
||||
let file = files.getNext();
|
||||
AddonManager.getInstallForFile(file, install => {
|
||||
AddonManager.installAddonFromAOM(browser, document.documentURI, install);
|
||||
});
|
||||
}
|
||||
let browser = getBrowserElement();
|
||||
let files = fp.files;
|
||||
while (files.hasMoreElements()) {
|
||||
let file = files.getNext();
|
||||
AddonManager.getInstallForFile(file, install => {
|
||||
AddonManager.installAddonFromAOM(browser, document.documentURI, install);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -374,10 +374,12 @@
|
|||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
if (filePicker.show() != Ci.nsIFilePicker.returnCancel) {
|
||||
this.value = filePicker.file.path;
|
||||
this.inputChanged();
|
||||
}
|
||||
filePicker.open(rv => {
|
||||
if (rv != Ci.nsIFilePicker.returnCancel && filePicker.file) {
|
||||
this.value = filePicker.file.path;
|
||||
this.inputChanged();
|
||||
}
|
||||
});
|
||||
]]>
|
||||
</body>
|
||||
</method>
|
||||
|
|
|
@ -277,20 +277,25 @@ add_test(function() {
|
|||
is(input.color, "#FF9900", "Color picker should have updated value");
|
||||
is(Services.prefs.getCharPref("extensions.inlinesettings1.color"), "#FF9900", "Color pref should have been updated");
|
||||
|
||||
try {
|
||||
ok(!settings[6].hasAttribute("first-row"), "Not the first row");
|
||||
var button = gManagerWindow.document.getAnonymousElementByAttribute(settings[6], "anonid", "button");
|
||||
input = gManagerWindow.document.getAnonymousElementByAttribute(settings[6], "anonid", "input");
|
||||
is(input.value, "", "Label value should be empty");
|
||||
is(input.tooltipText, "", "Label tooltip should be empty");
|
||||
ok(!settings[6].hasAttribute("first-row"), "Not the first row");
|
||||
var button = gManagerWindow.document.getAnonymousElementByAttribute(settings[6], "anonid", "button");
|
||||
input = gManagerWindow.document.getAnonymousElementByAttribute(settings[6], "anonid", "input");
|
||||
is(input.value, "", "Label value should be empty");
|
||||
is(input.tooltipText, "", "Label tooltip should be empty");
|
||||
|
||||
var testFile = Services.dirsvc.get("ProfD", Ci.nsIFile);
|
||||
testFile.append("\u2622");
|
||||
var curProcD = Services.dirsvc.get("CurProcD", Ci.nsIFile);
|
||||
var testFile = Services.dirsvc.get("ProfD", Ci.nsIFile);
|
||||
testFile.append("\u2622");
|
||||
var curProcD = Services.dirsvc.get("CurProcD", Ci.nsIFile);
|
||||
|
||||
MockFilePicker.returnFiles = [testFile];
|
||||
MockFilePicker.returnValue = Ci.nsIFilePicker.returnOK;
|
||||
MockFilePicker.returnFiles = [testFile];
|
||||
MockFilePicker.returnValue = Ci.nsIFilePicker.returnOK;
|
||||
|
||||
let promise = new Promise(resolve => {
|
||||
MockFilePicker.afterOpenCallback = resolve;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
});
|
||||
|
||||
promise.then(() => {
|
||||
is(MockFilePicker.mode, Ci.nsIFilePicker.modeOpen, "File picker mode should be open file");
|
||||
is(input.value, testFile.path, "Label value should match file chosen");
|
||||
is(input.tooltipText, testFile.path, "Label tooltip should match file chosen");
|
||||
|
@ -298,7 +303,12 @@ add_test(function() {
|
|||
|
||||
MockFilePicker.returnFiles = [curProcD];
|
||||
MockFilePicker.returnValue = Ci.nsIFilePicker.returnCancel;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
|
||||
return new Promise(resolve => {
|
||||
MockFilePicker.afterOpenCallback = resolve;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
});
|
||||
}).then(() => {
|
||||
is(MockFilePicker.mode, Ci.nsIFilePicker.modeOpen, "File picker mode should be open file");
|
||||
is(input.value, testFile.path, "Label value should not have changed");
|
||||
is(input.tooltipText, testFile.path, "Label tooltip should not have changed");
|
||||
|
@ -312,7 +322,12 @@ add_test(function() {
|
|||
|
||||
MockFilePicker.returnFiles = [testFile];
|
||||
MockFilePicker.returnValue = Ci.nsIFilePicker.returnOK;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
|
||||
return new Promise(resolve => {
|
||||
MockFilePicker.afterOpenCallback = resolve;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
});
|
||||
}).then(() => {
|
||||
is(MockFilePicker.mode, Ci.nsIFilePicker.modeGetFolder, "File picker mode should be directory");
|
||||
is(input.value, testFile.path, "Label value should match file chosen");
|
||||
is(input.tooltipText, testFile.path, "Label tooltip should match file chosen");
|
||||
|
@ -320,7 +335,12 @@ add_test(function() {
|
|||
|
||||
MockFilePicker.returnFiles = [curProcD];
|
||||
MockFilePicker.returnValue = Ci.nsIFilePicker.returnCancel;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
|
||||
return new Promise(resolve => {
|
||||
MockFilePicker.afterOpenCallback = resolve;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
});
|
||||
}).then(() => {
|
||||
is(MockFilePicker.mode, Ci.nsIFilePicker.modeGetFolder, "File picker mode should be directory");
|
||||
is(input.value, testFile.path, "Label value should not have changed");
|
||||
is(input.tooltipText, testFile.path, "Label tooltip should not have changed");
|
||||
|
@ -329,12 +349,12 @@ add_test(function() {
|
|||
var unsizedInput = gManagerWindow.document.getAnonymousElementByAttribute(settings[2], "anonid", "input");
|
||||
var sizedInput = gManagerWindow.document.getAnonymousElementByAttribute(settings[8], "anonid", "input");
|
||||
is(unsizedInput.clientWidth > sizedInput.clientWidth, true, "Input with size attribute should be smaller than input without");
|
||||
} finally {
|
||||
}).then(() => {
|
||||
button = gManagerWindow.document.getElementById("detail-prefs-btn");
|
||||
is_element_hidden(button, "Preferences button should not be visible");
|
||||
|
||||
gCategoryUtilities.openType("extension", run_next_test);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -269,23 +269,28 @@ add_test(function() {
|
|||
is(input.color, "#FF9900", "Color picker should have updated value");
|
||||
is(Services.prefs.getCharPref("extensions.inlinesettings1.color"), "#FF9900", "Color pref should have been updated");
|
||||
|
||||
try {
|
||||
ok(!settings[6].hasAttribute("first-row"), "Not the first row");
|
||||
var button = gManagerWindow.document.getAnonymousElementByAttribute(settings[6], "anonid", "button");
|
||||
ok(!settings[6].hasAttribute("first-row"), "Not the first row");
|
||||
var button = gManagerWindow.document.getAnonymousElementByAttribute(settings[6], "anonid", "button");
|
||||
|
||||
// Workaround for bug 1155324 - we need to ensure that the button is scrolled into view.
|
||||
button.scrollIntoView();
|
||||
// Workaround for bug 1155324 - we need to ensure that the button is scrolled into view.
|
||||
button.scrollIntoView();
|
||||
|
||||
input = gManagerWindow.document.getAnonymousElementByAttribute(settings[6], "anonid", "input");
|
||||
is(input.value, "", "Label value should be empty");
|
||||
is(input.tooltipText, "", "Label tooltip should be empty");
|
||||
input = gManagerWindow.document.getAnonymousElementByAttribute(settings[6], "anonid", "input");
|
||||
is(input.value, "", "Label value should be empty");
|
||||
is(input.tooltipText, "", "Label tooltip should be empty");
|
||||
|
||||
var profD = Services.dirsvc.get("ProfD", Ci.nsIFile);
|
||||
var curProcD = Services.dirsvc.get("CurProcD", Ci.nsIFile);
|
||||
var profD = Services.dirsvc.get("ProfD", Ci.nsIFile);
|
||||
var curProcD = Services.dirsvc.get("CurProcD", Ci.nsIFile);
|
||||
|
||||
MockFilePicker.returnFiles = [profD];
|
||||
MockFilePicker.returnValue = Ci.nsIFilePicker.returnOK;
|
||||
MockFilePicker.returnFiles = [profD];
|
||||
MockFilePicker.returnValue = Ci.nsIFilePicker.returnOK;
|
||||
|
||||
let promise = new Promise(resolve => {
|
||||
MockFilePicker.afterOpenCallback = resolve;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
});
|
||||
|
||||
promise.then(() => {
|
||||
is(MockFilePicker.mode, Ci.nsIFilePicker.modeOpen, "File picker mode should be open file");
|
||||
is(input.value, profD.path, "Label value should match file chosen");
|
||||
is(input.tooltipText, profD.path, "Label tooltip should match file chosen");
|
||||
|
@ -293,7 +298,12 @@ add_test(function() {
|
|||
|
||||
MockFilePicker.returnFiles = [curProcD];
|
||||
MockFilePicker.returnValue = Ci.nsIFilePicker.returnCancel;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
|
||||
return promise = new Promise(resolve => {
|
||||
MockFilePicker.afterOpenCallback = resolve;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
});
|
||||
}).then(() => {
|
||||
is(MockFilePicker.mode, Ci.nsIFilePicker.modeOpen, "File picker mode should be open file");
|
||||
is(input.value, profD.path, "Label value should not have changed");
|
||||
is(input.tooltipText, profD.path, "Label tooltip should not have changed");
|
||||
|
@ -307,7 +317,12 @@ add_test(function() {
|
|||
|
||||
MockFilePicker.returnFiles = [profD];
|
||||
MockFilePicker.returnValue = Ci.nsIFilePicker.returnOK;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
|
||||
return new Promise(resolve => {
|
||||
MockFilePicker.afterOpenCallback = resolve;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
});
|
||||
}).then(() => {
|
||||
is(MockFilePicker.mode, Ci.nsIFilePicker.modeGetFolder, "File picker mode should be directory");
|
||||
is(input.value, profD.path, "Label value should match file chosen");
|
||||
is(input.tooltipText, profD.path, "Label tooltip should match file chosen");
|
||||
|
@ -315,18 +330,22 @@ add_test(function() {
|
|||
|
||||
MockFilePicker.returnFiles = [curProcD];
|
||||
MockFilePicker.returnValue = Ci.nsIFilePicker.returnCancel;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
|
||||
return new Promise(resolve => {
|
||||
MockFilePicker.afterOpenCallback = resolve;
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
});
|
||||
}).then(() => {
|
||||
is(MockFilePicker.mode, Ci.nsIFilePicker.modeGetFolder, "File picker mode should be directory");
|
||||
is(input.value, profD.path, "Label value should not have changed");
|
||||
is(input.tooltipText, profD.path, "Label tooltip should not have changed");
|
||||
is(Services.prefs.getCharPref("extensions.inlinesettings1.directory"), profD.path, "Directory pref should not have changed");
|
||||
|
||||
} finally {
|
||||
}).then(() => {
|
||||
button = gManagerWindow.document.getElementById("detail-prefs-btn");
|
||||
is_element_hidden(button, "Preferences button should not be visible");
|
||||
|
||||
gCategoryUtilities.openType("extension", run_next_test);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -166,35 +166,37 @@ var dialog = {
|
|||
fp.init(window, title, Ci.nsIFilePicker.modeOpen);
|
||||
fp.appendFilters(Ci.nsIFilePicker.filterApps);
|
||||
|
||||
if (fp.show() == Ci.nsIFilePicker.returnOK && fp.file) {
|
||||
let uri = Cc["@mozilla.org/network/util;1"].
|
||||
getService(Ci.nsIIOService).
|
||||
newFileURI(fp.file);
|
||||
fp.open(rv => {
|
||||
if (rv == Ci.nsIFilePicker.returnOK && fp.file) {
|
||||
let uri = Cc["@mozilla.org/network/util;1"].
|
||||
getService(Ci.nsIIOService).
|
||||
newFileURI(fp.file);
|
||||
|
||||
let handlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"].
|
||||
createInstance(Ci.nsILocalHandlerApp);
|
||||
handlerApp.executable = fp.file;
|
||||
let handlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"].
|
||||
createInstance(Ci.nsILocalHandlerApp);
|
||||
handlerApp.executable = fp.file;
|
||||
|
||||
// if this application is already in the list, select it and don't add it again
|
||||
let parent = document.getElementById("items");
|
||||
for (let i = 0; i < parent.childNodes.length; ++i) {
|
||||
let elm = parent.childNodes[i];
|
||||
if (elm.obj instanceof Ci.nsILocalHandlerApp && elm.obj.equals(handlerApp)) {
|
||||
parent.selectedItem = elm;
|
||||
parent.ensureSelectedElementIsVisible();
|
||||
return;
|
||||
// if this application is already in the list, select it and don't add it again
|
||||
let parent = document.getElementById("items");
|
||||
for (let i = 0; i < parent.childNodes.length; ++i) {
|
||||
let elm = parent.childNodes[i];
|
||||
if (elm.obj instanceof Ci.nsILocalHandlerApp && elm.obj.equals(handlerApp)) {
|
||||
parent.selectedItem = elm;
|
||||
parent.ensureSelectedElementIsVisible();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
let elm = document.createElement("richlistitem");
|
||||
elm.setAttribute("type", "handler");
|
||||
elm.setAttribute("name", fp.file.leafName);
|
||||
elm.setAttribute("image", "moz-icon://" + uri.spec + "?size=32");
|
||||
elm.obj = handlerApp;
|
||||
|
||||
parent.selectedItem = parent.insertBefore(elm, parent.firstChild);
|
||||
parent.ensureSelectedElementIsVisible();
|
||||
}
|
||||
|
||||
let elm = document.createElement("richlistitem");
|
||||
elm.setAttribute("type", "handler");
|
||||
elm.setAttribute("name", fp.file.leafName);
|
||||
elm.setAttribute("image", "moz-icon://" + uri.spec + "?size=32");
|
||||
elm.obj = handlerApp;
|
||||
|
||||
parent.selectedItem = parent.insertBefore(elm, parent.firstChild);
|
||||
parent.ensureSelectedElementIsVisible();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -165,6 +165,8 @@ interface nsIFilePicker : nsISupports
|
|||
attribute boolean addToRecentDocs;
|
||||
|
||||
/**
|
||||
* This method is **deprecated**. Please use open()
|
||||
*
|
||||
* Show File Dialog. The dialog is displayed modally.
|
||||
*
|
||||
* @return returnOK if the user selects OK, returnCancel if the user selects cancel
|
||||
|
|
Загрузка…
Ссылка в новой задаче