| Index: third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js b/third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js
|
| index 2bc3e5f51ccdabe1cbaf2892e73c393dae294821..30b47c7fe5f67ac0b831fe74db34d246edfc72dd 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js
|
| @@ -781,6 +781,12 @@ WebInspector.SecurityOriginView = function(panel, origin, originState)
|
| var certificateSection = this.element.createChild("div", "origin-view-section");
|
| certificateSection.createChild("div", "origin-view-section-title").textContent = WebInspector.UIString("Certificate");
|
|
|
| + if (originState.securityDetails.signedCertificateTimestampList.length > 0) {
|
| + // Create the Certificate Transparency section outside the callback, so that it appears in the right place.
|
| + var sctSection = this.element.createChild("div", "origin-view-section");
|
| + sctSection.createChild("div", "origin-view-section-title").textContent = WebInspector.UIString("Certificate Transparency");
|
| + }
|
| +
|
| /**
|
| * @this {WebInspector.SecurityOriginView}
|
| * @param {?NetworkAgent.CertificateDetails} certificateDetails
|
| @@ -800,6 +806,54 @@ WebInspector.SecurityOriginView = function(panel, origin, originState)
|
| table.addRow(WebInspector.UIString("Issuer"), certificateDetails.issuer);
|
| table.addRow(WebInspector.UIString("SCTs"), this.sctSummary(originState.securityDetails.certificateValidationDetails));
|
| table.addRow("", WebInspector.SecurityPanel.createCertificateViewerButton(WebInspector.UIString("Open full certificate details"), originState.securityDetails.certificateId));
|
| +
|
| + if (originState.securityDetails.signedCertificateTimestampList.length <= 0)
|
| + return;
|
| +
|
| + // Show summary of SCT(s) of Certificate Transparency.
|
| + var sctSummaryTable = new WebInspector.SecurityDetailsTable();
|
| + sctSummaryTable.element().classList.add("sct-summary");
|
| + sctSection.appendChild(sctSummaryTable.element());
|
| + for (var i = 0; i < originState.securityDetails.signedCertificateTimestampList.length; i++)
|
| + {
|
| + sctSummaryTable.addRow(WebInspector.UIString("SCT"), originState.securityDetails.signedCertificateTimestampList[i].logDescription + " (" +
|
| + originState.securityDetails.signedCertificateTimestampList[i].origin + ", " +
|
| + originState.securityDetails.signedCertificateTimestampList[i].status + ")");
|
| + }
|
| +
|
| + // Show detailed SCT(s) of Certificate Transparency.
|
| + var sctTableWrapper = sctSection.createChild("div", "sct-details");
|
| + sctTableWrapper.classList.add("hidden");
|
| + for (var i = 0; i < originState.securityDetails.signedCertificateTimestampList.length; i++)
|
| + {
|
| + var sctTable = new WebInspector.SecurityDetailsTable();
|
| + sctTableWrapper.appendChild(sctTable.element());
|
| + sctTable.addRow(WebInspector.UIString("Log Name"), originState.securityDetails.signedCertificateTimestampList[i].logDescription);
|
| + sctTable.addRow(WebInspector.UIString("Log ID"), originState.securityDetails.signedCertificateTimestampList[i].logId.replace(/(.{2})/g,"$1 "));
|
| + sctTable.addRow(WebInspector.UIString("Validation Status"), originState.securityDetails.signedCertificateTimestampList[i].status);
|
| + sctTable.addRow(WebInspector.UIString("Origin"), originState.securityDetails.signedCertificateTimestampList[i].origin);
|
| + sctTable.addRow(WebInspector.UIString("Issued At"), new Date(originState.securityDetails.signedCertificateTimestampList[i].timestamp).toUTCString());
|
| + sctTable.addRow(WebInspector.UIString("Version"), originState.securityDetails.signedCertificateTimestampList[i].version);
|
| + sctTable.addRow(WebInspector.UIString("Hash Algorithm"), originState.securityDetails.signedCertificateTimestampList[i].hashAlgorithm);
|
| + sctTable.addRow(WebInspector.UIString("Sign Algorithm"), originState.securityDetails.signedCertificateTimestampList[i].signatureAlgorithm);
|
| + sctTable.addRow(WebInspector.UIString("Signature Data"), originState.securityDetails.signedCertificateTimestampList[i].signatureData.replace(/(.{2})/g,"$1 "));
|
| + }
|
| +
|
| + // Add link to toggle between displaying of the summary of the SCT(s) and the detailed SCT(s).
|
| + var toggleSctsDetailsLink = sctSection.createChild("div", "link");
|
| + toggleSctsDetailsLink.classList.add("sct-toggle");
|
| + toggleSctsDetailsLink.textContent = WebInspector.UIString("Show full details");
|
| + function toggleSctDetailsDisplay()
|
| + {
|
| + var isDetailsShown = !sctTableWrapper.classList.contains("hidden");
|
| + if (isDetailsShown)
|
| + toggleSctsDetailsLink.textContent = WebInspector.UIString("Show full details");
|
| + else
|
| + toggleSctsDetailsLink.textContent = WebInspector.UIString("Hide full details");
|
| + sctSummaryTable.element().classList.toggle("hidden");
|
| + sctTableWrapper.classList.toggle("hidden");
|
| + }
|
| + toggleSctsDetailsLink.addEventListener("click", toggleSctDetailsDisplay, false);
|
| }
|
|
|
| function displayCertificateDetailsUnavailable ()
|
|
|