fune/browser/components/preferences/in-content/tests/browser_cert_export.js
Neil Deakin cb10352f4b Bug 1482389, replace TreeBoxObject with XULTreeElement inherited from XULElement, r=peterv,paolo
--HG--
rename : dom/webidl/TreeBoxObject.webidl => dom/chrome-webidl/XULTreeElement.webidl
rename : layout/xul/tree/TreeBoxObject.cpp => dom/xul/XULTreeElement.cpp
rename : layout/xul/tree/TreeBoxObject.h => dom/xul/XULTreeElement.h
2018-12-04 11:25:30 -05:00

73 lines
2.7 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
var MockFilePicker = SpecialPowers.MockFilePicker;
function createTemporarySaveDirectory() {
var saveDir = Services.dirsvc.get("TmpD", Ci.nsIFile);
saveDir.append("testsavedir");
if (!saveDir.exists()) {
info("create testsavedir!");
saveDir.create(Ci.nsIFile.DIRECTORY_TYPE, 0o755);
}
info("return from createTempSaveDir: " + saveDir.path);
return saveDir;
}
add_task(async function checkCertExportWorks() {
await openPreferencesViaOpenPreferencesAPI("privacy", {leaveOpen: true});
let certButton = gBrowser.selectedBrowser.contentDocument.getElementById("viewCertificatesButton");
certButton.scrollIntoView();
let certDialogLoaded = promiseLoadSubDialog("chrome://pippki/content/certManager.xul");
certButton.click();
let dialogWin = await certDialogLoaded;
let doc = dialogWin.document;
doc.getElementById("certmanagertabs").selectedTab = doc.getElementById("ca_tab");
let expectedCert;
let treeView = doc.getElementById("ca-tree").view;
// Select any which cert. Ignore parent rows (ie rows without certs):
for (let i = 0; i < treeView.rowCount; i++) {
treeView.selection.select(i);
dialogWin.getSelectedCerts();
let certs = dialogWin.selected_certs; // yuck... but this is how the dialog works.
if (certs && certs.length == 1 && certs[0]) {
expectedCert = certs[0];
// OK, we managed to select a cert!
break;
}
}
let exportButton = doc.getElementById("ca_exportButton");
is(exportButton.disabled, false, "Should enable export button");
// Create the folder the link will be saved into.
var destDir = createTemporarySaveDirectory();
var destFile = destDir.clone();
MockFilePicker.init(window);
registerCleanupFunction(function() {
MockFilePicker.cleanup();
destDir.remove(true);
});
MockFilePicker.displayDirectory = destDir;
MockFilePicker.showCallback = function(fp) {
info("showCallback");
let fileName = fp.defaultString;
info("fileName: " + fileName);
destFile.append(fileName);
MockFilePicker.setFiles([destFile]);
MockFilePicker.filterIndex = 0; // Save an x509 PEM copy of the cert.
info("done showCallback");
};
let finishedExporting = TestUtils.topicObserved("cert-export-finished");
exportButton.click();
await finishedExporting;
if (destFile && destFile.exists()) {
let contents = await OS.File.read(destFile.path, {encoding: "utf-8"});
is(contents, dialogWin.getPEMString(expectedCert), "Should have written correct contents");
} else {
ok(false, "No cert saved!");
}
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});