Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js

Issue 1772603002: Addition of Certificate Transparency details to Security panel of DevTools (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: renamed a variable Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698