Chromium Code Reviews| 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 616e1996a78d168d55ce6b981ccceb5afe3e069e..d4e2e796c426cde9ae6f7a53a68d5b3a29f0e19c 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js |
| @@ -37,7 +37,7 @@ WebInspector.SecurityPanel.Origin; |
| * @typedef {Object} |
| * @property {!SecurityAgent.SecurityState} securityState - Current security state of the origin. |
| * @property {?NetworkAgent.SecurityDetails} securityDetails - Security details of the origin, if available. |
| - * @property {?Promise<!NetworkAgent.CertificateDetails>} certificateDetailsPromise - Certificate details of the origin. Only available if securityDetails are available. |
| + * @property {?Promise<>} certificateDetailsPromise - Certificate details of the origin. |
| * @property {?WebInspector.SecurityOriginView} originView - Current SecurityOriginView corresponding to origin. |
| */ |
| WebInspector.SecurityPanel.OriginState; |
| @@ -172,7 +172,6 @@ WebInspector.SecurityPanel.prototype = { |
| var securityDetails = request.securityDetails(); |
| if (securityDetails) { |
| originState.securityDetails = securityDetails; |
| - originState.certificateDetailsPromise = request.networkManager().certificateDetailsPromise(securityDetails.certificateId); |
| } |
| this._origins.set(origin, originState); |
| @@ -228,6 +227,15 @@ WebInspector.SecurityPanel.prototype = { |
| }, |
| /** |
| + * @param {!SecurityAgent.CertificateId} certificateId |
| + */ |
| + showCertificateViewer: function(certificateId) |
| + { |
| + var securityModel = WebInspector.SecurityModel.fromTarget(this._target); |
| + securityModel.showCertificateViewer(certificateId); |
| + }, |
| + |
| + /** |
| * @param {!SecurityAgent.SecurityState} stateA |
| * @param {!SecurityAgent.SecurityState} stateB |
| * @return {!SecurityAgent.SecurityState} |
| @@ -323,9 +331,10 @@ WebInspector.SecurityPanel._instance = function() |
| /** |
| * @param {string} text |
| * @param {!SecurityAgent.CertificateId} certificateId |
| + * @param {!WebInspector.SecurityPanel} panel |
| * @return {!Element} |
| */ |
| -WebInspector.SecurityPanel.createCertificateViewerButton = function(text, certificateId) |
| +WebInspector.SecurityPanel.createCertificateViewerButton = function (text, certificateId, panel) |
| { |
| /** |
| * @param {!Event} e |
| @@ -333,7 +342,25 @@ WebInspector.SecurityPanel.createCertificateViewerButton = function(text, certif |
| function showCertificateViewer(e) |
| { |
| e.consume(); |
| - WebInspector.multitargetNetworkManager.showCertificateViewer(/** @type {number} */ (certificateId)); |
| + panel.showCertificateViewer(certificateId); |
| + } |
| + |
| + return createTextButton(text, showCertificateViewer, "security-certificate-button"); |
| +} |
| + |
| +/** |
| + * @param {string} text |
| + * @param {number} certificateHash |
| + * @return {!Element} |
| + */ |
| +WebInspector.SecurityPanel.createCertificateViewerButton2 = function (text, certificateHash) |
|
jam
2016/08/31 22:13:28
I'll remove createCertificateViewerButton in a fol
|
| +{ |
| + /** |
| + * @param {!Event} e |
| + */ |
| + function showCertificateViewer(e) { |
| + e.consume(); |
| + WebInspector.multitargetNetworkManager.showCertificateViewer(certificateHash); |
| } |
| return createTextButton(text, showCertificateViewer, "security-certificate-button"); |
| @@ -599,7 +626,7 @@ WebInspector.SecurityMainView.prototype = { |
| text.createChild("div").textContent = explanation.description; |
| if (explanation.certificateId) { |
| - text.appendChild(WebInspector.SecurityPanel.createCertificateViewerButton(WebInspector.UIString("View certificate"), explanation.certificateId)); |
| + text.appendChild(WebInspector.SecurityPanel.createCertificateViewerButton(WebInspector.UIString("View certificate"), explanation.certificateId, this._panel)); |
| } |
| return text; |
| @@ -840,79 +867,65 @@ WebInspector.SecurityOriginView = function(panel, origin, originState) |
| sctSection.createChild("div", "origin-view-section-title").textContent = WebInspector.UIString("Certificate Transparency"); |
| } |
| - /** |
| - * @this {WebInspector.SecurityOriginView} |
| - * @param {?NetworkAgent.CertificateDetails} certificateDetails |
| - */ |
| - function displayCertificateDetails(certificateDetails) |
| - { |
| - var sanDiv = this._createSanDiv(certificateDetails.subject); |
| - var validFromString = new Date(1000 * certificateDetails.validFrom).toUTCString(); |
| - var validUntilString = new Date(1000 * certificateDetails.validTo).toUTCString(); |
| - |
| - var table = new WebInspector.SecurityDetailsTable(); |
| - certificateSection.appendChild(table.element()); |
| - table.addRow(WebInspector.UIString("Subject"), certificateDetails.subject.name); |
| - table.addRow(WebInspector.UIString("SAN"), sanDiv); |
| - table.addRow(WebInspector.UIString("Valid From"), validFromString); |
| - table.addRow(WebInspector.UIString("Valid Until"), validUntilString); |
| - table.addRow(WebInspector.UIString("Issuer"), certificateDetails.issuer); |
| - table.addRow("", WebInspector.SecurityPanel.createCertificateViewerButton(WebInspector.UIString("Open full certificate details"), originState.securityDetails.certificateId)); |
| - |
| - if (!originState.securityDetails.signedCertificateTimestampList.length) |
| - 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++) |
| - { |
| - var sct = originState.securityDetails.signedCertificateTimestampList[i]; |
| - sctSummaryTable.addRow(WebInspector.UIString("SCT"), sct.logDescription + " (" + sct.origin + ", " + sct.status + ")"); |
| - } |
| + var sanDiv = this._createSanDiv(originState.securityDetails.sanList); |
|
jam
2016/08/31 22:13:28
this code isn't changed, just indentation was modi
|
| + var validFromString = new Date(1000 * originState.securityDetails.validFrom).toUTCString(); |
| + var validUntilString = new Date(1000 * originState.securityDetails.validTo).toUTCString(); |
| - // 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()); |
| - var sct = originState.securityDetails.signedCertificateTimestampList[i]; |
| - sctTable.addRow(WebInspector.UIString("Log Name"), sct.logDescription); |
| - sctTable.addRow(WebInspector.UIString("Log ID"), sct.logId.replace(/(.{2})/g,"$1 ")); |
| - sctTable.addRow(WebInspector.UIString("Validation Status"), sct.status); |
| - sctTable.addRow(WebInspector.UIString("Source"), sct.origin); |
| - sctTable.addRow(WebInspector.UIString("Issued At"), new Date(sct.timestamp).toUTCString()); |
| - sctTable.addRow(WebInspector.UIString("Hash Algorithm"), sct.hashAlgorithm); |
| - sctTable.addRow(WebInspector.UIString("Signature Algorithm"), sct.signatureAlgorithm); |
| - sctTable.addRow(WebInspector.UIString("Signature Data"), sct.signatureData.replace(/(.{2})/g,"$1 ")); |
| - } |
| + table = new WebInspector.SecurityDetailsTable(); |
| + certificateSection.appendChild(table.element()); |
| + table.addRow(WebInspector.UIString("Subject"), originState.securityDetails.subjectName); |
| + table.addRow(WebInspector.UIString("SAN"), sanDiv); |
| + table.addRow(WebInspector.UIString("Valid From"), validFromString); |
| + table.addRow(WebInspector.UIString("Valid Until"), validUntilString); |
| + table.addRow(WebInspector.UIString("Issuer"), originState.securityDetails.issuer); |
| + table.addRow("", WebInspector.SecurityPanel.createCertificateViewerButton2(WebInspector.UIString("Open full certificate details"), originState.securityDetails.certificateHash)); |
| - // 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); |
| + if (!originState.securityDetails.signedCertificateTimestampList.length) |
| + 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++) |
| + { |
| + var sct = originState.securityDetails.signedCertificateTimestampList[i]; |
| + sctSummaryTable.addRow(WebInspector.UIString("SCT"), sct.logDescription + " (" + sct.origin + ", " + sct.status + ")"); |
| } |
| - function displayCertificateDetailsUnavailable() |
| + // 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++) |
| { |
| - certificateSection.createChild("div").textContent = WebInspector.UIString("Certificate details unavailable."); |
| + var sctTable = new WebInspector.SecurityDetailsTable(); |
| + sctTableWrapper.appendChild(sctTable.element()); |
| + var sct = originState.securityDetails.signedCertificateTimestampList[i]; |
| + sctTable.addRow(WebInspector.UIString("Log Name"), sct.logDescription); |
| + sctTable.addRow(WebInspector.UIString("Log ID"), sct.logId.replace(/(.{2})/g,"$1 ")); |
| + sctTable.addRow(WebInspector.UIString("Validation Status"), sct.status); |
| + sctTable.addRow(WebInspector.UIString("Source"), sct.origin); |
| + sctTable.addRow(WebInspector.UIString("Issued At"), new Date(sct.timestamp).toUTCString()); |
| + sctTable.addRow(WebInspector.UIString("Hash Algorithm"), sct.hashAlgorithm); |
| + sctTable.addRow(WebInspector.UIString("Signature Algorithm"), sct.signatureAlgorithm); |
| + sctTable.addRow(WebInspector.UIString("Signature Data"), sct.signatureData.replace(/(.{2})/g,"$1 ")); |
| } |
| - originState.certificateDetailsPromise.then(displayCertificateDetails.bind(this), displayCertificateDetailsUnavailable); |
| + // 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); |
| var noteSection = this.element.createChild("div", "origin-view-section"); |
| // TODO(lgarron): Fix the issue and then remove this section. See comment in SecurityPanel._processRequest(). |
| @@ -931,13 +944,12 @@ WebInspector.SecurityOriginView = function(panel, origin, originState) |
| WebInspector.SecurityOriginView.prototype = { |
| /** |
| - * @param {!NetworkAgent.CertificateSubject} certificateSubject |
| + * @param {!Array<string>} sanList |
| * *return {!Element} |
| */ |
| - _createSanDiv: function(certificateSubject) |
| + _createSanDiv: function(sanList) |
| { |
| var sanDiv = createElement("div"); |
| - var sanList = certificateSubject.sanDnsNames.concat(certificateSubject.sanIpAddresses); |
| if (sanList.length === 0) { |
| sanDiv.textContent = WebInspector.UIString("(N/A)"); |
| sanDiv.classList.add("empty-san"); |