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

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

Issue 1589703002: Surface SCT (Signed Certificate Timestamp) counts in the Security panel. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments by rsleevi@ and pfeldman@. Created 4 years, 11 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 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 } 171 }
172 } else { 172 } else {
173 // TODO(lgarron): Store a (deduplicated) list of different security details we have seen. https://crbug.com/503170 173 // TODO(lgarron): Store a (deduplicated) list of different security details we have seen. https://crbug.com/503170
174 var originState = {}; 174 var originState = {};
175 originState.securityState = securityState; 175 originState.securityState = securityState;
176 176
177 var securityDetails = request.securityDetails(); 177 var securityDetails = request.securityDetails();
178 if (securityDetails) { 178 if (securityDetails) {
179 originState.securityDetails = securityDetails; 179 originState.securityDetails = securityDetails;
180 originState.certificateDetailsPromise = request.target().network Manager.certificateDetailsPromise(securityDetails.certificateId); 180 originState.certificateDetailsPromise = request.target().network Manager.certificateDetailsPromise(securityDetails.certificateId);
181
182 if (securityDetails.certificateValidationDetails)
183 originState.certificateTransparencySummaryPromise = request. target().networkManager.certificateTransparencySummaryPromise(securityDetails.ce rtificateValidationDetails);
181 } 184 }
182 185
183 this._origins.set(origin, originState); 186 this._origins.set(origin, originState);
184 187
185 this._sidebarTree.addOrigin(origin, securityState); 188 this._sidebarTree.addOrigin(origin, securityState);
186 189
187 // Don't construct the origin view yet (let it happen lazily). 190 // Don't construct the origin view yet (let it happen lazily).
188 } 191 }
189 }, 192 },
190 193
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 var validFromString = new Date(1000 * certificateDetails.validFrom). toUTCString(); 794 var validFromString = new Date(1000 * certificateDetails.validFrom). toUTCString();
792 var validUntilString = new Date(1000 * certificateDetails.validTo).t oUTCString(); 795 var validUntilString = new Date(1000 * certificateDetails.validTo).t oUTCString();
793 796
794 var table = new WebInspector.SecurityDetailsTable(); 797 var table = new WebInspector.SecurityDetailsTable();
795 certificateSection.appendChild(table.element()); 798 certificateSection.appendChild(table.element());
796 table.addRow("Subject", certificateDetails.subject.name); 799 table.addRow("Subject", certificateDetails.subject.name);
797 table.addRow("SAN", sanDiv); 800 table.addRow("SAN", sanDiv);
798 table.addRow("Valid From", validFromString); 801 table.addRow("Valid From", validFromString);
799 table.addRow("Valid Until", validUntilString); 802 table.addRow("Valid Until", validUntilString);
800 table.addRow("Issuer", certificateDetails.issuer); 803 table.addRow("Issuer", certificateDetails.issuer);
804 var sctValueDiv = table.addRow("SCTs", WebInspector.UIString("-"));
801 table.addRow("", WebInspector.SecurityPanel.createCertificateViewerB utton(WebInspector.UIString("Open full certificate details"), originState.securi tyDetails.certificateId)); 805 table.addRow("", WebInspector.SecurityPanel.createCertificateViewerB utton(WebInspector.UIString("Open full certificate details"), originState.securi tyDetails.certificateId));
802 // TODO(lgarron): Make SCT status available in certificate details a nd show it here. 806
807 var sctValue = WebInspector.UIString("-");
808 var validationDetails = originState.securityDetails.certificateValid ationDetails;
809 if (validationDetails) {
810
811 var sctTypeList = [];
812
813 if (validationDetails.numValidScts)
814 sctTypeList.push(WebInspector.UIString("%d valid SCT%s", val idationDetails.numValidScts, (validationDetails.numValidScts > 1) ? "s" : ""));
815 if (validationDetails.numInvalidScts)
816 sctTypeList.push(WebInspector.UIString("%d invalid SCT%s", v alidationDetails.numInvalidScts, (validationDetails.numInvalidScts > 1) ? "s" : ""));
817 if (validationDetails.numUnknownScts)
818 sctTypeList.push(WebInspector.UIString("%d SCT%s from unknow n logs", validationDetails.numUnknownScts, (validationDetails.numUnknownScts > 1 ) ? "s" : ""));
819
820 var sctTypeCounts = (sctTypeList.length == 0) ? WebInspector.UIS tring("0 SCTs") : sctTypeList.join(", ");
821
822 if (originState.certificateTransparencySummaryPromise) {
823 /**
824 * @param {function(string)} summary
825 */
826 function resolve(summary)
827 {
828 sctValueDiv.textContent = WebInspector.UIString("%s (%s) ", summary, sctTypeCounts);
829 }
830 function reject()
831 {
832 sctValueDiv.textContent = sctTypeCounts;
833 }
834 originState.certificateTransparencySummaryPromise.then(resol ve, reject);
835
836 } else {
837 // Fall back and just display the counts.
838 sctValueDiv.textContent = sctTypeCounts;
839 }
840 }
841
803 } 842 }
804 843
805 function displayCertificateDetailsUnavailable () 844 function displayCertificateDetailsUnavailable ()
806 { 845 {
807 certificateSection.createChild("div").textContent = WebInspector.UIS tring("Certificate details unavailable."); 846 certificateSection.createChild("div").textContent = WebInspector.UIS tring("Certificate details unavailable.");
808 } 847 }
809 848
810 originState.certificateDetailsPromise.then(displayCertificateDetails.bin d(this), displayCertificateDetailsUnavailable); 849 originState.certificateDetailsPromise.then(displayCertificateDetails.bin d(this), displayCertificateDetailsUnavailable);
811 850
812 var noteSection = this.element.createChild("div", "origin-view-section") ; 851 var noteSection = this.element.createChild("div", "origin-view-section") ;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 * @return: {!Element} 936 * @return: {!Element}
898 */ 937 */
899 element: function() 938 element: function()
900 { 939 {
901 return this._element; 940 return this._element;
902 }, 941 },
903 942
904 /** 943 /**
905 * @param {string} key 944 * @param {string} key
906 * @param {string|!Node} value 945 * @param {string|!Node} value
946 * @return: {!Element} -- the div containing the value.
907 */ 947 */
908 addRow: function(key, value) 948 addRow: function(key, value)
lgarron 2016/01/22 22:51:28 Although I added a return value, I decided to keep
909 { 949 {
910 var row = this._element.createChild("div", "details-table-row"); 950 var row = this._element.createChild("div", "details-table-row");
911 row.createChild("div").textContent = key; 951 row.createChild("div").textContent = key;
912 952
913 var valueDiv = row.createChild("div"); 953 var valueDiv = row.createChild("div");
914 if (typeof value === "string") { 954 if (typeof value === "string") {
915 valueDiv.textContent = value; 955 valueDiv.textContent = value;
916 } else { 956 } else {
917 valueDiv.appendChild(value); 957 valueDiv.appendChild(value);
918 } 958 }
959 return valueDiv;
919 } 960 }
920 } 961 }
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js ('k') | third_party/WebKit/Source/devtools/protocol.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698