Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @constructor | 6 * @constructor |
| 7 * @extends {WebInspector.PanelWithSidebar} | 7 * @extends {WebInspector.PanelWithSidebar} |
| 8 * @implements {WebInspector.TargetManager.Observer} | 8 * @implements {WebInspector.TargetManager.Observer} |
| 9 */ | 9 */ |
| 10 WebInspector.SecurityPanel = function() | 10 WebInspector.SecurityPanel = function() |
| (...skipping 768 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 779 var table = new WebInspector.SecurityDetailsTable(); | 779 var table = new WebInspector.SecurityDetailsTable(); |
| 780 connectionSection.appendChild(table.element()); | 780 connectionSection.appendChild(table.element()); |
| 781 table.addRow("Protocol", originState.securityDetails.protocol); | 781 table.addRow("Protocol", originState.securityDetails.protocol); |
| 782 table.addRow("Key Exchange", originState.securityDetails.keyExchange); | 782 table.addRow("Key Exchange", originState.securityDetails.keyExchange); |
| 783 table.addRow("Cipher Suite", originState.securityDetails.cipher + (origi nState.securityDetails.mac ? " with " + originState.securityDetails.mac : "")); | 783 table.addRow("Cipher Suite", originState.securityDetails.cipher + (origi nState.securityDetails.mac ? " with " + originState.securityDetails.mac : "")); |
| 784 | 784 |
| 785 // Create the certificate section outside the callback, so that it appea rs in the right place. | 785 // Create the certificate section outside the callback, so that it appea rs in the right place. |
| 786 var certificateSection = this.element.createChild("div", "origin-view-se ction"); | 786 var certificateSection = this.element.createChild("div", "origin-view-se ction"); |
| 787 certificateSection.createChild("div", "origin-view-section-title").textC ontent = WebInspector.UIString("Certificate"); | 787 certificateSection.createChild("div", "origin-view-section-title").textC ontent = WebInspector.UIString("Certificate"); |
| 788 | 788 |
| 789 if (originState.securityDetails.signedCertificateTimestampList.length > 0) { | |
| 790 // Create the Certificate Transparency section outside the callback, so that it appears in the right place. | |
| 791 var sctSection = this.element.createChild("div", "origin-view-sectio n"); | |
| 792 sctSection.createChild("div", "origin-view-section-title").textConte nt = WebInspector.UIString("Certificate Transparency"); | |
| 793 } | |
| 794 | |
| 789 /** | 795 /** |
| 790 * @this {WebInspector.SecurityOriginView} | 796 * @this {WebInspector.SecurityOriginView} |
| 791 * @param {?NetworkAgent.CertificateDetails} certificateDetails | 797 * @param {?NetworkAgent.CertificateDetails} certificateDetails |
| 792 */ | 798 */ |
| 793 function displayCertificateDetails(certificateDetails) | 799 function displayCertificateDetails(certificateDetails) |
| 794 { | 800 { |
| 795 var sanDiv = this._createSanDiv(certificateDetails.subject); | 801 var sanDiv = this._createSanDiv(certificateDetails.subject); |
| 796 var validFromString = new Date(1000 * certificateDetails.validFrom). toUTCString(); | 802 var validFromString = new Date(1000 * certificateDetails.validFrom). toUTCString(); |
| 797 var validUntilString = new Date(1000 * certificateDetails.validTo).t oUTCString(); | 803 var validUntilString = new Date(1000 * certificateDetails.validTo).t oUTCString(); |
| 798 | 804 |
| 799 var table = new WebInspector.SecurityDetailsTable(); | 805 var table = new WebInspector.SecurityDetailsTable(); |
| 800 certificateSection.appendChild(table.element()); | 806 certificateSection.appendChild(table.element()); |
| 801 table.addRow(WebInspector.UIString("Subject"), certificateDetails.su bject.name); | 807 table.addRow(WebInspector.UIString("Subject"), certificateDetails.su bject.name); |
| 802 table.addRow(WebInspector.UIString("SAN"), sanDiv); | 808 table.addRow(WebInspector.UIString("SAN"), sanDiv); |
| 803 table.addRow(WebInspector.UIString("Valid From"), validFromString); | 809 table.addRow(WebInspector.UIString("Valid From"), validFromString); |
| 804 table.addRow(WebInspector.UIString("Valid Until"), validUntilString) ; | 810 table.addRow(WebInspector.UIString("Valid Until"), validUntilString) ; |
| 805 table.addRow(WebInspector.UIString("Issuer"), certificateDetails.iss uer); | 811 table.addRow(WebInspector.UIString("Issuer"), certificateDetails.iss uer); |
| 806 table.addRow(WebInspector.UIString("SCTs"), this.sctSummary(originSt ate.securityDetails.certificateValidationDetails)); | 812 table.addRow(WebInspector.UIString("SCTs"), this.sctSummary(originSt ate.securityDetails.certificateValidationDetails)); |
| 807 table.addRow("", WebInspector.SecurityPanel.createCertificateViewerB utton(WebInspector.UIString("Open full certificate details"), originState.securi tyDetails.certificateId)); | 813 table.addRow("", WebInspector.SecurityPanel.createCertificateViewerB utton(WebInspector.UIString("Open full certificate details"), originState.securi tyDetails.certificateId)); |
| 814 | |
| 815 if (originState.securityDetails.signedCertificateTimestampList.lengt h <= 0) | |
| 816 return; | |
| 817 | |
| 818 // Show summary of SCT(s) of Certificate Transparency. | |
| 819 var sctSummaryTable = new WebInspector.SecurityDetailsTable(); | |
| 820 sctSummaryTable.element().classList.add("sct-summary"); | |
| 821 sctSection.appendChild(sctSummaryTable.element()); | |
| 822 for (var i = 0; i < originState.securityDetails.signedCertificateTim estampList.length; i++) | |
| 823 { | |
| 824 sctSummaryTable.addRow(WebInspector.UIString("SCT"), originState .securityDetails.signedCertificateTimestampList[i].logDescription + " (" + | |
| 825 originState.securityDetails.signedCertificateTimestampList[i ].origin + ", " + | |
| 826 originState.securityDetails.signedCertificateTimestampList[i ].status + ")"); | |
| 827 } | |
| 828 | |
| 829 // Show detailed SCT(s) of Certificate Transparency. | |
| 830 var sctTableWrapper = sctSection.createChild("div", "sct-details"); | |
| 831 sctTableWrapper.classList.add("hidden"); | |
| 832 for (var i = 0; i < originState.securityDetails.signedCertificateTim estampList.length; i++) | |
| 833 { | |
| 834 var sctTable = new WebInspector.SecurityDetailsTable(); | |
| 835 sctTableWrapper.appendChild(sctTable.element()); | |
| 836 sctTable.addRow(WebInspector.UIString("Log Name"), originState.s ecurityDetails.signedCertificateTimestampList[i].logDescription); | |
| 837 sctTable.addRow(WebInspector.UIString("Log ID"), originState.sec urityDetails.signedCertificateTimestampList[i].logId.replace(/(.{2})/g,"$1 ")); | |
|
Eran Messeri
2016/05/25 10:47:04
Nit: The Log ID is mostly superfluous when the Log
| |
| 838 sctTable.addRow(WebInspector.UIString("Validation Status"), orig inState.securityDetails.signedCertificateTimestampList[i].status); | |
| 839 sctTable.addRow(WebInspector.UIString("Origin"), originState.sec urityDetails.signedCertificateTimestampList[i].origin); | |
| 840 sctTable.addRow(WebInspector.UIString("Issued At"), new Date(ori ginState.securityDetails.signedCertificateTimestampList[i].timestamp).toUTCStrin g()); | |
| 841 sctTable.addRow(WebInspector.UIString("Version"), originState.se curityDetails.signedCertificateTimestampList[i].version); | |
| 842 sctTable.addRow(WebInspector.UIString("Hash Algorithm"), originS tate.securityDetails.signedCertificateTimestampList[i].hashAlgorithm); | |
| 843 sctTable.addRow(WebInspector.UIString("Signature Algorithm"), or iginState.securityDetails.signedCertificateTimestampList[i].signatureAlgorithm); | |
| 844 sctTable.addRow(WebInspector.UIString("Signature Data"), originS tate.securityDetails.signedCertificateTimestampList[i].signatureData.replace(/(. {2})/g,"$1 ")); | |
| 845 } | |
| 846 | |
| 847 // Add link to toggle between displaying of the summary of the SCT(s ) and the detailed SCT(s). | |
| 848 var toggleSctsDetailsLink = sctSection.createChild("div", "link"); | |
| 849 toggleSctsDetailsLink.classList.add("sct-toggle"); | |
| 850 toggleSctsDetailsLink.textContent = WebInspector.UIString("Show full details"); | |
| 851 function toggleSctDetailsDisplay() | |
| 852 { | |
| 853 var isDetailsShown = !sctTableWrapper.classList.contains("hidden "); | |
| 854 if (isDetailsShown) | |
| 855 toggleSctsDetailsLink.textContent = WebInspector.UIString("S how full details"); | |
| 856 else | |
| 857 toggleSctsDetailsLink.textContent = WebInspector.UIString("H ide full details"); | |
| 858 sctSummaryTable.element().classList.toggle("hidden"); | |
| 859 sctTableWrapper.classList.toggle("hidden"); | |
| 860 } | |
| 861 toggleSctsDetailsLink.addEventListener("click", toggleSctDetailsDisp lay, false); | |
| 808 } | 862 } |
| 809 | 863 |
| 810 function displayCertificateDetailsUnavailable() | 864 function displayCertificateDetailsUnavailable() |
| 811 { | 865 { |
| 812 certificateSection.createChild("div").textContent = WebInspector.UIS tring("Certificate details unavailable."); | 866 certificateSection.createChild("div").textContent = WebInspector.UIS tring("Certificate details unavailable."); |
| 813 } | 867 } |
| 814 | 868 |
| 815 originState.certificateDetailsPromise.then(displayCertificateDetails.bin d(this), displayCertificateDetailsUnavailable); | 869 originState.certificateDetailsPromise.then(displayCertificateDetails.bin d(this), displayCertificateDetailsUnavailable); |
| 816 | 870 |
| 817 var noteSection = this.element.createChild("div", "origin-view-section") ; | 871 var noteSection = this.element.createChild("div", "origin-view-section") ; |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 936 row.createChild("div").textContent = key; | 990 row.createChild("div").textContent = key; |
| 937 | 991 |
| 938 var valueDiv = row.createChild("div"); | 992 var valueDiv = row.createChild("div"); |
| 939 if (typeof value === "string") { | 993 if (typeof value === "string") { |
| 940 valueDiv.textContent = value; | 994 valueDiv.textContent = value; |
| 941 } else { | 995 } else { |
| 942 valueDiv.appendChild(value); | 996 valueDiv.appendChild(value); |
| 943 } | 997 } |
| 944 } | 998 } |
| 945 } | 999 } |
| OLD | NEW |