193 lines
7.8 KiB
JavaScript
193 lines
7.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const url =
|
|
"about:certificate?cert=MIIEsDCCA5igAwIBAgIUKX%2FPsMs9ycAQSBCbMXNQJtA5Am4wDQYJKoZIhvcNAQELBQAwITEfMB0GA1UEAwwWQ2VydHZpZXdlciBUZXN0IElzc3VlcjAiGA8yMDIwMDEwMTAwMDAwMFoYDzIwNDkwMTAxMDAwMDAwWjAiMSAwHgYDVQQDDBdDZXJ0dmlld2VyIFRlc3QgU3ViamVjdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALqIUahEjhbWQf1utogGNhA9PBPZ6uQ1SrTs9WhXbCR7wcclqODYH72xnAabbhqG8mvir1p1a2pkcQh6pVqnRYf3HNUknAJ%2BzUP8HmnQOCApk6sgw0nk27lMwmtsDu0Vgg%2Fxfq1pGrHTAjqLKkHup3DgDw2N%2FWYLK7AkkqR9uYhheZCxV5A90jvF4LhIH6g304hD7ycW2FW3ZlqqfgKQLzp7EIAGJMwcbJetlmFbt%2BKWEsB1MaMMkd20yvf8rR0l0wnvuRcOp2jhs3svIm9p47SKlWEd7ibWJZ2rkQhONsscJAQsvxaLL%2BXxj5kXMbiz%2Fkkj%2BnJRxDHVA6zaGAo17Y0CAwEAAaOCAdkwggHVMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAYYWaHR0cDovL2xvY2FsaG9zdDo4ODg4LzAPBgNVHRMBAf8EBTADAQH%2FMCgGA1UdIAQhMB8wBwYFZ4EMAQEwFAYSKwYBBAHrSYUahRqFGgGDdAkBMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA4GA1UdDwEB%2FwQEAwIBhjAWBgNVHREEDzANggtleGFtcGxlLmNvbTCCASUGCisGAQQB1nkCBAIEggEVBIIBEQEPAHUAKrgwRDO5FN7S8x5CB%2FJRwXo3oJJoUtkIAgb4Xlc5FioAAAGUHyl8AAAABAMARjBEAiBcdVGfExFQzV2K3iCjvAYwkf%2Byc3VfMWTs%2FctCgApw5gIgRafynpUWWNFU5IGinUAH9iDXVEOW7ZgmkZtwCwQThQ8AlgDNeRdNGEsWeEl3r8cOu4yKezTP7Z%2B7GD6Lprh70wkA0gAAAZQfKXwAAAAEAwBnMGUCMQDtBic%2BoWg6VLTYGkN0hEiWPOY%2BvoEXA%2BzXPXLwolQGWdTsRUboVudeZVW3k6n3APMCMH8jluFThKPCL0BhJLvmN49NV3jvCO3wSUSUPneJciRVtv0otIlh5ng8PqFrFBHo%2BDANBgkqhkiG9w0BAQsFAAOCAQEAW8qizE6SMno2irSWQEGznA7xLXqVWFM5rW%2F6SA9uynXIGaaoKtkkWQy4qa7RI7vgACCwyoBJCr3Y7ypneKJUB%2BfTD0QIA5HH3ohz%2FUqI5SdezUCUQVd8lscdSEIvcyV35Gw5r3EAL%2BcFRk4UgeFewGwYCW61YPS72NzHGLfLA6%2FNpiZJongsqaYFb98fvk0DIFnmiyIcWfqO7n%2FpNAbh1wvkGhQ1qWKH6jZs2XC7RueaZuo88XCJTqIWs87p0LqUrkfrBNizVSGouCn9euoUC1ngwOKeSzAuPR4k3OGOD3V6bBQ5EI7gAIv1hqyBvHFC1mvCEKv0qJHlycrRRPNIug%3D%3D";
|
|
|
|
Services.scriptloader.loadSubScript(
|
|
"chrome://mochitests/content/browser/toolkit/components/certviewer/tests/browser/adjustedCerts.js",
|
|
this
|
|
);
|
|
|
|
add_task(async function test() {
|
|
Assert.ok(adjustedCerts, "adjustedCerts found");
|
|
|
|
let tabName = adjustedCerts[0].tabName;
|
|
let certItems = adjustedCerts[0].certItems;
|
|
|
|
await BrowserTestUtils.withNewTab(url, async function (browser) {
|
|
await SpecialPowers.spawn(
|
|
browser,
|
|
[certItems, tabName],
|
|
async function (adjustedCerts, expectedTabName) {
|
|
let certificateSection = await ContentTaskUtils.waitForCondition(() => {
|
|
return content.document.querySelector("certificate-section");
|
|
}, "Certificate section found");
|
|
|
|
let infoGroups =
|
|
certificateSection.shadowRoot.querySelectorAll("info-group");
|
|
Assert.ok(infoGroups, "infoGroups found");
|
|
Assert.equal(
|
|
infoGroups.length,
|
|
adjustedCerts.length,
|
|
"infoGroups must have the same length of adjustedCerts"
|
|
);
|
|
|
|
let tabName =
|
|
certificateSection.shadowRoot.querySelector(
|
|
".tab[idnumber='0']"
|
|
).textContent;
|
|
Assert.equal(tabName, expectedTabName, "Tab name should be the same");
|
|
|
|
function getElementByAttribute(source, property, target) {
|
|
for (let elem of source) {
|
|
if (elem.hasOwnProperty(property) && elem[property] === target) {
|
|
return elem;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function checkBooleans(got, expected) {
|
|
info(
|
|
"If adjustedCertElments returned true, this value should be Yes, otherwise it should be No"
|
|
);
|
|
let gotBool;
|
|
if (got === "Yes") {
|
|
gotBool = true;
|
|
} else if (got === "No") {
|
|
gotBool = false;
|
|
} else {
|
|
gotBool = null;
|
|
}
|
|
Assert.equal(
|
|
gotBool,
|
|
expected,
|
|
`Expected ${expected}, got ${gotBool}`
|
|
);
|
|
}
|
|
|
|
for (let infoGroup of infoGroups) {
|
|
let sectionId = infoGroup.shadowRoot
|
|
.querySelector(".info-group-title")
|
|
.getAttribute("data-l10n-id")
|
|
.replace("certificate-viewer-", "");
|
|
|
|
let adjustedCertsElem = getElementByAttribute(
|
|
adjustedCerts,
|
|
"sectionId",
|
|
sectionId
|
|
);
|
|
Assert.ok(adjustedCertsElem, "The element exists in adjustedCerts");
|
|
|
|
let infoItems = infoGroup.shadowRoot.querySelectorAll("info-item");
|
|
Assert.equal(
|
|
infoItems.length,
|
|
adjustedCertsElem.sectionItems.length,
|
|
"sectionItems must be the same length"
|
|
);
|
|
|
|
let i = 0;
|
|
// Message ID mappings
|
|
let stringMapping = {
|
|
signaturealgorithm: "signature-algorithm",
|
|
};
|
|
for (let infoItem of infoItems) {
|
|
let infoItemLabel = infoItem.shadowRoot
|
|
.querySelector("label")
|
|
.getAttribute("data-l10n-id");
|
|
let infoElem = infoItem.shadowRoot.querySelector(".info");
|
|
let infoItemInfo = infoElem.textContent;
|
|
let adjustedCertsElemLabel =
|
|
adjustedCertsElem.sectionItems[i].labelId;
|
|
let adjustedCertsElemInfo = adjustedCertsElem.sectionItems[i].info;
|
|
|
|
if (adjustedCertsElemLabel == null) {
|
|
adjustedCertsElemLabel = "";
|
|
}
|
|
adjustedCertsElemLabel = adjustedCertsElemLabel
|
|
.replace(/\s+/g, "-")
|
|
.replace(/\./g, "")
|
|
.replace(/\//g, "")
|
|
.replace(/--/g, "-")
|
|
.toLowerCase();
|
|
adjustedCertsElemLabel =
|
|
stringMapping[adjustedCertsElemLabel] || adjustedCertsElemLabel;
|
|
|
|
if (adjustedCertsElemInfo == null) {
|
|
adjustedCertsElemInfo = "";
|
|
}
|
|
if (typeof adjustedCertsElemInfo === "boolean") {
|
|
checkBooleans(infoItemInfo, adjustedCertsElemInfo);
|
|
continue;
|
|
}
|
|
|
|
if (
|
|
adjustedCertsElemLabel === "timestamp" ||
|
|
adjustedCertsElemLabel === "not-after" ||
|
|
adjustedCertsElemLabel === "not-before"
|
|
) {
|
|
Assert.equal(
|
|
infoElem.textContent,
|
|
adjustedCertsElemInfo.utc,
|
|
"Timestamps must be equal"
|
|
);
|
|
i++;
|
|
continue;
|
|
}
|
|
if (adjustedCertsElemLabel === "download") {
|
|
Assert.equal(infoElem.children.length, 2, "Should have 2 links.");
|
|
for (let kid of infoElem.children) {
|
|
Assert.equal(
|
|
kid.localName,
|
|
"a",
|
|
"Should get a cert/chain link."
|
|
);
|
|
Assert.ok(
|
|
kid.download.endsWith("pem"),
|
|
"Link `download` attribute should point to pem file."
|
|
);
|
|
Assert.ok(
|
|
kid.dataset.l10nId.includes("pem"),
|
|
"Link should be labeled"
|
|
);
|
|
Assert.equal(
|
|
kid.dataset.l10nId.includes("chain"),
|
|
kid.download.includes("chain"),
|
|
"Download label and filename should match"
|
|
);
|
|
}
|
|
// Remaining tests in browser_downloadLink.js
|
|
|
|
i++;
|
|
continue;
|
|
}
|
|
|
|
if (Array.isArray(adjustedCertsElemInfo)) {
|
|
// there is a case where we have a boolean
|
|
adjustedCertsElemInfo = adjustedCertsElemInfo
|
|
.toString()
|
|
.replace(/,/g, ", ");
|
|
}
|
|
|
|
Assert.ok(
|
|
infoItemLabel.includes(adjustedCertsElemLabel),
|
|
"data-l10n-id must contain the original label"
|
|
);
|
|
|
|
Assert.equal(
|
|
infoItemInfo,
|
|
adjustedCertsElemInfo,
|
|
"Info must be equal"
|
|
);
|
|
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
);
|
|
});
|
|
});
|