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

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

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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 f2112b7affb487b9903172021c880440a7462431..db94d5bc2e544267de27c624d322b8b69a41c990 100644
--- a/third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js
+++ b/third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js
@@ -1,20 +1,21 @@
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
/**
- * @constructor
- * @extends {WebInspector.PanelWithSidebar}
* @implements {WebInspector.TargetManager.Observer}
+ * @unrestricted
*/
-WebInspector.SecurityPanel = function()
-{
- WebInspector.PanelWithSidebar.call(this, "security");
+WebInspector.SecurityPanel = class extends WebInspector.PanelWithSidebar {
+ constructor() {
+ super('security');
this._mainView = new WebInspector.SecurityMainView(this);
- this._sidebarMainViewElement = new WebInspector.SecurityPanelSidebarTreeElement(WebInspector.UIString("Overview"), this._setVisibleView.bind(this, this._mainView), "security-main-view-sidebar-tree-item", "lock-icon");
- this._sidebarTree = new WebInspector.SecurityPanelSidebarTree(this._sidebarMainViewElement, this.showOrigin.bind(this));
+ this._sidebarMainViewElement = new WebInspector.SecurityPanelSidebarTreeElement(
+ WebInspector.UIString('Overview'), this._setVisibleView.bind(this, this._mainView),
+ 'security-main-view-sidebar-tree-item', 'lock-icon');
+ this._sidebarTree =
+ new WebInspector.SecurityPanelSidebarTree(this._sidebarMainViewElement, this.showOrigin.bind(this));
this.panelSidebarElement().appendChild(this._sidebarTree.element);
/** @type {!Map<!NetworkAgent.LoaderId, !WebInspector.NetworkRequest>} */
@@ -29,383 +30,364 @@ WebInspector.SecurityPanel = function()
/** @type {!Map<!WebInspector.Target, !Array<!WebInspector.EventTarget.EventDescriptor>>}*/
this._eventListeners = new Map();
WebInspector.targetManager.observeTargets(this, WebInspector.Target.Capability.Network);
-};
-
-/** @typedef {string} */
-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<>} certificateDetailsPromise - Certificate details of the origin.
- * @property {?WebInspector.SecurityOriginView} originView - Current SecurityOriginView corresponding to origin.
- */
-WebInspector.SecurityPanel.OriginState;
-
-WebInspector.SecurityPanel.prototype = {
- /**
- * @param {!SecurityAgent.SecurityState} securityState
- */
- setRanInsecureContentStyle: function(securityState)
- {
- this._ranInsecureContentStyle = securityState;
- },
-
- /**
- * @param {!SecurityAgent.SecurityState} securityState
- */
- setDisplayedInsecureContentStyle: function(securityState)
- {
- this._displayedInsecureContentStyle = securityState;
- },
-
- /**
- * @param {!SecurityAgent.SecurityState} newSecurityState
- * @param {!Array<!SecurityAgent.SecurityStateExplanation>} explanations
- * @param {?SecurityAgent.InsecureContentStatus} insecureContentStatus
- * @param {boolean} schemeIsCryptographic
- */
- _updateSecurityState: function(newSecurityState, explanations, insecureContentStatus, schemeIsCryptographic)
- {
- this._sidebarMainViewElement.setSecurityState(newSecurityState);
- this._mainView.updateSecurityState(newSecurityState, explanations, insecureContentStatus, schemeIsCryptographic);
- },
-
- /**
- * @param {!WebInspector.Event} event
- */
- _onSecurityStateChanged: function(event)
- {
- var data = /** @type {!WebInspector.PageSecurityState} */ (event.data);
- var securityState = /** @type {!SecurityAgent.SecurityState} */ (data.securityState);
- var explanations = /** @type {!Array<!SecurityAgent.SecurityStateExplanation>} */ (data.explanations);
- var insecureContentStatus = /** @type {?SecurityAgent.InsecureContentStatus} */ (data.insecureContentStatus);
- var schemeIsCryptographic = /** @type {boolean} */ (data.schemeIsCryptographic);
- this._updateSecurityState(securityState, explanations, insecureContentStatus, schemeIsCryptographic);
- },
-
- selectAndSwitchToMainView: function()
- {
- // The sidebar element will trigger displaying the main view. Rather than making a redundant call to display the main view, we rely on this.
- this._sidebarMainViewElement.select();
- },
- /**
- * @param {!WebInspector.SecurityPanel.Origin} origin
- */
- showOrigin: function(origin)
- {
- var originState = this._origins.get(origin);
- if (!originState.originView)
- originState.originView = new WebInspector.SecurityOriginView(this, origin, originState);
-
- this._setVisibleView(originState.originView);
- },
-
- wasShown: function()
- {
- WebInspector.Panel.prototype.wasShown.call(this);
- if (!this._visibleView)
- this.selectAndSwitchToMainView();
- },
-
- /**
- * @override
- */
- focus: function()
- {
- this._sidebarTree.focus();
- },
-
- /**
- * @param {!WebInspector.VBox} view
- */
- _setVisibleView: function(view)
- {
- if (this._visibleView === view)
- return;
-
- if (this._visibleView)
- this._visibleView.detach();
-
- this._visibleView = view;
-
- if (view)
- this.splitWidget().setMainWidget(view);
- },
-
- /**
- * @param {!WebInspector.Event} event
- */
- _onResponseReceived: function(event)
- {
- var request = /** @type {!WebInspector.NetworkRequest} */ (event.data);
- if (request.resourceType() === WebInspector.resourceTypes.Document)
- this._lastResponseReceivedForLoaderId.set(request.loaderId, request);
- },
-
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _processRequest: function(request)
- {
- var origin = WebInspector.ParsedURL.extractOrigin(request.url);
-
- if (!origin) {
- // We don't handle resources like data: URIs. Most of them don't affect the lock icon.
- return;
- }
-
- var securityState = /** @type {!SecurityAgent.SecurityState} */ (request.securityState());
-
- if (request.mixedContentType === NetworkAgent.RequestMixedContentType.Blockable && this._ranInsecureContentStyle)
- securityState = this._ranInsecureContentStyle;
- else if (request.mixedContentType === NetworkAgent.RequestMixedContentType.OptionallyBlockable && this._displayedInsecureContentStyle)
- securityState = this._displayedInsecureContentStyle;
-
- if (this._origins.has(origin)) {
- var originState = this._origins.get(origin);
- var oldSecurityState = originState.securityState;
- originState.securityState = this._securityStateMin(oldSecurityState, securityState);
- if (oldSecurityState !== originState.securityState) {
- this._sidebarTree.updateOrigin(origin, securityState);
- if (originState.originView)
- originState.originView.setSecurityState(securityState);
- }
- } else {
- // TODO(lgarron): Store a (deduplicated) list of different security details we have seen. https://crbug.com/503170
- var originState = {};
- originState.securityState = securityState;
-
- var securityDetails = request.securityDetails();
- if (securityDetails) {
- originState.securityDetails = securityDetails;
- }
-
- this._origins.set(origin, originState);
-
- this._sidebarTree.addOrigin(origin, securityState);
-
- // Don't construct the origin view yet (let it happen lazily).
- }
- },
-
- /**
- * @param {!WebInspector.Event} event
- */
- _onRequestFinished: function(event)
- {
- var request = /** @type {!WebInspector.NetworkRequest} */ (event.data);
- this._updateFilterRequestCounts(request);
- this._processRequest(request);
- },
-
- /**
- * @param {!WebInspector.NetworkRequest} request
- */
- _updateFilterRequestCounts: function(request)
- {
- if (request.mixedContentType === NetworkAgent.RequestMixedContentType.None)
- return;
-
- /** @type {!WebInspector.NetworkLogView.MixedContentFilterValues} */
- var filterKey = WebInspector.NetworkLogView.MixedContentFilterValues.All;
- if (request.wasBlocked())
- filterKey = WebInspector.NetworkLogView.MixedContentFilterValues.Blocked;
- else if (request.mixedContentType === NetworkAgent.RequestMixedContentType.Blockable)
- filterKey = WebInspector.NetworkLogView.MixedContentFilterValues.BlockOverridden;
- else if (request.mixedContentType === NetworkAgent.RequestMixedContentType.OptionallyBlockable)
- filterKey = WebInspector.NetworkLogView.MixedContentFilterValues.Displayed;
-
- if (!this._filterRequestCounts.has(filterKey))
- this._filterRequestCounts.set(filterKey, 1);
- else
- this._filterRequestCounts.set(filterKey, this._filterRequestCounts.get(filterKey) + 1);
-
- this._mainView.refreshExplanations();
- },
+ }
+ /**
+ * @return {!WebInspector.SecurityPanel}
+ */
+ static _instance() {
+ return /** @type {!WebInspector.SecurityPanel} */ (self.runtime.sharedInstance(WebInspector.SecurityPanel));
+ }
+
+ /**
+ * @param {string} text
+ * @param {!WebInspector.SecurityPanel} panel
+ * @return {!Element}
+ */
+ static createCertificateViewerButton(text, panel) {
/**
- * @param {!WebInspector.NetworkLogView.MixedContentFilterValues} filterKey
- * @return {number}
+ * @param {!Event} e
*/
- filterRequestCount: function(filterKey)
- {
- return this._filterRequestCounts.get(filterKey) || 0;
- },
+ function showCertificateViewer(e) {
+ e.consume();
+ panel.showCertificateViewer();
+ }
- showCertificateViewer: function()
- {
- var securityModel = WebInspector.SecurityModel.fromTarget(this._target);
- securityModel.showCertificateViewer();
- },
+ return createTextButton(text, showCertificateViewer, 'security-certificate-button');
+ }
+ /**
+ * @param {string} text
+ * @param {string} origin
+ * @return {!Element}
+ */
+ static createCertificateViewerButton2(text, origin) {
/**
- * @param {!SecurityAgent.SecurityState} stateA
- * @param {!SecurityAgent.SecurityState} stateB
- * @return {!SecurityAgent.SecurityState}
+ * @param {!Event} e
*/
- _securityStateMin: function(stateA, stateB)
- {
- return WebInspector.SecurityModel.SecurityStateComparator(stateA, stateB) < 0 ? stateA : stateB;
- },
+ function showCertificateViewer(e) {
+ function certificateCallback(names) {
+ InspectorFrontendHost.showCertificateViewer(names);
+ }
- /**
- * @override
- * @param {!WebInspector.Target} target
- */
- targetAdded: function(target)
- {
- if (this._target)
- return;
-
- var listeners = [];
- var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
- if (resourceTreeModel) {
- listeners = listeners.concat([
- resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events.MainFrameNavigated, this._onMainFrameNavigated, this),
- resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events.InterstitialShown, this._onInterstitialShown, this),
- resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events.InterstitialHidden, this._onInterstitialHidden, this),
- ]);
- }
+ e.consume();
+ WebInspector.multitargetNetworkManager.getCertificate(origin, certificateCallback);
+ }
- var networkManager = WebInspector.NetworkManager.fromTarget(target);
- if (networkManager) {
- listeners = listeners.concat([
- networkManager.addEventListener(WebInspector.NetworkManager.Events.ResponseReceived, this._onResponseReceived, this),
- networkManager.addEventListener(WebInspector.NetworkManager.Events.RequestFinished, this._onRequestFinished, this),
- ]);
- }
+ return createTextButton(text, showCertificateViewer, 'security-certificate-button');
+ }
+
+ /**
+ * @param {!SecurityAgent.SecurityState} securityState
+ */
+ setRanInsecureContentStyle(securityState) {
+ this._ranInsecureContentStyle = securityState;
+ }
+
+ /**
+ * @param {!SecurityAgent.SecurityState} securityState
+ */
+ setDisplayedInsecureContentStyle(securityState) {
+ this._displayedInsecureContentStyle = securityState;
+ }
+
+ /**
+ * @param {!SecurityAgent.SecurityState} newSecurityState
+ * @param {!Array<!SecurityAgent.SecurityStateExplanation>} explanations
+ * @param {?SecurityAgent.InsecureContentStatus} insecureContentStatus
+ * @param {boolean} schemeIsCryptographic
+ */
+ _updateSecurityState(newSecurityState, explanations, insecureContentStatus, schemeIsCryptographic) {
+ this._sidebarMainViewElement.setSecurityState(newSecurityState);
+ this._mainView.updateSecurityState(newSecurityState, explanations, insecureContentStatus, schemeIsCryptographic);
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _onSecurityStateChanged(event) {
+ var data = /** @type {!WebInspector.PageSecurityState} */ (event.data);
+ var securityState = /** @type {!SecurityAgent.SecurityState} */ (data.securityState);
+ var explanations = /** @type {!Array<!SecurityAgent.SecurityStateExplanation>} */ (data.explanations);
+ var insecureContentStatus = /** @type {?SecurityAgent.InsecureContentStatus} */ (data.insecureContentStatus);
+ var schemeIsCryptographic = /** @type {boolean} */ (data.schemeIsCryptographic);
+ this._updateSecurityState(securityState, explanations, insecureContentStatus, schemeIsCryptographic);
+ }
+
+ selectAndSwitchToMainView() {
+ // The sidebar element will trigger displaying the main view. Rather than making a redundant call to display the main view, we rely on this.
+ this._sidebarMainViewElement.select();
+ }
+ /**
+ * @param {!WebInspector.SecurityPanel.Origin} origin
+ */
+ showOrigin(origin) {
+ var originState = this._origins.get(origin);
+ if (!originState.originView)
+ originState.originView = new WebInspector.SecurityOriginView(this, origin, originState);
+
+ this._setVisibleView(originState.originView);
+ }
+
+ /**
+ * @override
+ */
+ wasShown() {
+ super.wasShown();
+ if (!this._visibleView)
+ this.selectAndSwitchToMainView();
+ }
+
+ /**
+ * @override
+ */
+ focus() {
+ this._sidebarTree.focus();
+ }
+
+ /**
+ * @param {!WebInspector.VBox} view
+ */
+ _setVisibleView(view) {
+ if (this._visibleView === view)
+ return;
+
+ if (this._visibleView)
+ this._visibleView.detach();
+
+ this._visibleView = view;
+
+ if (view)
+ this.splitWidget().setMainWidget(view);
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _onResponseReceived(event) {
+ var request = /** @type {!WebInspector.NetworkRequest} */ (event.data);
+ if (request.resourceType() === WebInspector.resourceTypes.Document)
+ this._lastResponseReceivedForLoaderId.set(request.loaderId, request);
+ }
+
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ */
+ _processRequest(request) {
+ var origin = WebInspector.ParsedURL.extractOrigin(request.url);
+
+ if (!origin) {
+ // We don't handle resources like data: URIs. Most of them don't affect the lock icon.
+ return;
+ }
- var securityModel = WebInspector.SecurityModel.fromTarget(target);
- if (securityModel) {
- listeners = listeners.concat([
- securityModel.addEventListener(WebInspector.SecurityModel.Events.SecurityStateChanged, this._onSecurityStateChanged, this)
- ]);
- }
+ var securityState = /** @type {!SecurityAgent.SecurityState} */ (request.securityState());
+
+ if (request.mixedContentType === NetworkAgent.RequestMixedContentType.Blockable && this._ranInsecureContentStyle)
+ securityState = this._ranInsecureContentStyle;
+ else if (
+ request.mixedContentType === NetworkAgent.RequestMixedContentType.OptionallyBlockable &&
+ this._displayedInsecureContentStyle)
+ securityState = this._displayedInsecureContentStyle;
+
+ if (this._origins.has(origin)) {
+ var originState = this._origins.get(origin);
+ var oldSecurityState = originState.securityState;
+ originState.securityState = this._securityStateMin(oldSecurityState, securityState);
+ if (oldSecurityState !== originState.securityState) {
+ this._sidebarTree.updateOrigin(origin, securityState);
+ if (originState.originView)
+ originState.originView.setSecurityState(securityState);
+ }
+ } else {
+ // TODO(lgarron): Store a (deduplicated) list of different security details we have seen. https://crbug.com/503170
+ var originState = {};
+ originState.securityState = securityState;
- this._target = target;
- this._eventListeners.set(target, listeners);
- },
+ var securityDetails = request.securityDetails();
+ if (securityDetails) {
+ originState.securityDetails = securityDetails;
+ }
- /**
- * @override
- * @param {!WebInspector.Target} target
- */
- targetRemoved: function(target)
- {
- if (this._target !== target)
- return;
-
- delete this._target;
+ this._origins.set(origin, originState);
- WebInspector.EventTarget.removeEventListeners(this._eventListeners.get(target));
- this._eventListeners.delete(target);
- },
+ this._sidebarTree.addOrigin(origin, securityState);
- /**
- * @param {!WebInspector.Event} event
- */
- _onMainFrameNavigated: function(event)
- {
- var frame = /** type {!PageAgent.Frame}*/ (event.data);
- var request = this._lastResponseReceivedForLoaderId.get(frame.loaderId);
-
- this.selectAndSwitchToMainView();
- this._sidebarTree.clearOrigins();
- this._origins.clear();
- this._lastResponseReceivedForLoaderId.clear();
- this._filterRequestCounts.clear();
- // After clearing the filtered request counts, refresh the
- // explanations to reflect the new counts.
- this._mainView.refreshExplanations();
-
- if (request) {
- var origin = WebInspector.ParsedURL.extractOrigin(request.url);
- this._sidebarTree.setMainOrigin(origin);
- this._processRequest(request);
- }
- },
-
- _onInterstitialShown: function()
- {
- // The panel might have been displaying the origin view on the
- // previously loaded page. When showing an interstitial, switch
- // back to the Overview view.
- this.selectAndSwitchToMainView();
- this._sidebarTree.toggleOriginsList(true /* hidden */);
- },
-
- _onInterstitialHidden: function()
- {
- this._sidebarTree.toggleOriginsList(false /* hidden */);
- },
-
- __proto__: WebInspector.PanelWithSidebar.prototype
-};
+ // Don't construct the origin view yet (let it happen lazily).
+ }
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _onRequestFinished(event) {
+ var request = /** @type {!WebInspector.NetworkRequest} */ (event.data);
+ this._updateFilterRequestCounts(request);
+ this._processRequest(request);
+ }
+
+ /**
+ * @param {!WebInspector.NetworkRequest} request
+ */
+ _updateFilterRequestCounts(request) {
+ if (request.mixedContentType === NetworkAgent.RequestMixedContentType.None)
+ return;
+
+ /** @type {!WebInspector.NetworkLogView.MixedContentFilterValues} */
+ var filterKey = WebInspector.NetworkLogView.MixedContentFilterValues.All;
+ if (request.wasBlocked())
+ filterKey = WebInspector.NetworkLogView.MixedContentFilterValues.Blocked;
+ else if (request.mixedContentType === NetworkAgent.RequestMixedContentType.Blockable)
+ filterKey = WebInspector.NetworkLogView.MixedContentFilterValues.BlockOverridden;
+ else if (request.mixedContentType === NetworkAgent.RequestMixedContentType.OptionallyBlockable)
+ filterKey = WebInspector.NetworkLogView.MixedContentFilterValues.Displayed;
+
+ if (!this._filterRequestCounts.has(filterKey))
+ this._filterRequestCounts.set(filterKey, 1);
+ else
+ this._filterRequestCounts.set(filterKey, this._filterRequestCounts.get(filterKey) + 1);
+
+ this._mainView.refreshExplanations();
+ }
+
+ /**
+ * @param {!WebInspector.NetworkLogView.MixedContentFilterValues} filterKey
+ * @return {number}
+ */
+ filterRequestCount(filterKey) {
+ return this._filterRequestCounts.get(filterKey) || 0;
+ }
+
+ showCertificateViewer() {
+ var securityModel = WebInspector.SecurityModel.fromTarget(this._target);
+ securityModel.showCertificateViewer();
+ }
+
+ /**
+ * @param {!SecurityAgent.SecurityState} stateA
+ * @param {!SecurityAgent.SecurityState} stateB
+ * @return {!SecurityAgent.SecurityState}
+ */
+ _securityStateMin(stateA, stateB) {
+ return WebInspector.SecurityModel.SecurityStateComparator(stateA, stateB) < 0 ? stateA : stateB;
+ }
+
+ /**
+ * @override
+ * @param {!WebInspector.Target} target
+ */
+ targetAdded(target) {
+ if (this._target)
+ return;
+
+ var listeners = [];
+ var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target);
+ if (resourceTreeModel) {
+ listeners = listeners.concat([
+ resourceTreeModel.addEventListener(
+ WebInspector.ResourceTreeModel.Events.MainFrameNavigated, this._onMainFrameNavigated, this),
+ resourceTreeModel.addEventListener(
+ WebInspector.ResourceTreeModel.Events.InterstitialShown, this._onInterstitialShown, this),
+ resourceTreeModel.addEventListener(
+ WebInspector.ResourceTreeModel.Events.InterstitialHidden, this._onInterstitialHidden, this),
+ ]);
+ }
-/**
- * @return {!WebInspector.SecurityPanel}
- */
-WebInspector.SecurityPanel._instance = function()
-{
- return /** @type {!WebInspector.SecurityPanel} */ (self.runtime.sharedInstance(WebInspector.SecurityPanel));
-};
+ var networkManager = WebInspector.NetworkManager.fromTarget(target);
+ if (networkManager) {
+ listeners = listeners.concat([
+ networkManager.addEventListener(
+ WebInspector.NetworkManager.Events.ResponseReceived, this._onResponseReceived, this),
+ networkManager.addEventListener(
+ WebInspector.NetworkManager.Events.RequestFinished, this._onRequestFinished, this),
+ ]);
+ }
-/**
- * @param {string} text
- * @param {!WebInspector.SecurityPanel} panel
- * @return {!Element}
- */
-WebInspector.SecurityPanel.createCertificateViewerButton = function(text, panel)
-{
- /**
- * @param {!Event} e
- */
- function showCertificateViewer(e)
- {
- e.consume();
- panel.showCertificateViewer();
+ var securityModel = WebInspector.SecurityModel.fromTarget(target);
+ if (securityModel) {
+ listeners = listeners.concat([securityModel.addEventListener(
+ WebInspector.SecurityModel.Events.SecurityStateChanged, this._onSecurityStateChanged, this)]);
}
- return createTextButton(text, showCertificateViewer, "security-certificate-button");
+ this._target = target;
+ this._eventListeners.set(target, listeners);
+ }
+
+ /**
+ * @override
+ * @param {!WebInspector.Target} target
+ */
+ targetRemoved(target) {
+ if (this._target !== target)
+ return;
+
+ delete this._target;
+
+ WebInspector.EventTarget.removeEventListeners(this._eventListeners.get(target));
+ this._eventListeners.delete(target);
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _onMainFrameNavigated(event) {
+ var frame = /** type {!PageAgent.Frame}*/ (event.data);
+ var request = this._lastResponseReceivedForLoaderId.get(frame.loaderId);
+
+ this.selectAndSwitchToMainView();
+ this._sidebarTree.clearOrigins();
+ this._origins.clear();
+ this._lastResponseReceivedForLoaderId.clear();
+ this._filterRequestCounts.clear();
+ // After clearing the filtered request counts, refresh the
+ // explanations to reflect the new counts.
+ this._mainView.refreshExplanations();
+
+ if (request) {
+ var origin = WebInspector.ParsedURL.extractOrigin(request.url);
+ this._sidebarTree.setMainOrigin(origin);
+ this._processRequest(request);
+ }
+ }
+
+ _onInterstitialShown() {
+ // The panel might have been displaying the origin view on the
+ // previously loaded page. When showing an interstitial, switch
+ // back to the Overview view.
+ this.selectAndSwitchToMainView();
+ this._sidebarTree.toggleOriginsList(true /* hidden */);
+ }
+
+ _onInterstitialHidden() {
+ this._sidebarTree.toggleOriginsList(false /* hidden */);
+ }
};
+/** @typedef {string} */
+WebInspector.SecurityPanel.Origin;
+
/**
- * @param {string} text
- * @param {string} origin
- * @return {!Element}
+ * @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<>} certificateDetailsPromise - Certificate details of the origin.
+ * @property {?WebInspector.SecurityOriginView} originView - Current SecurityOriginView corresponding to origin.
*/
-WebInspector.SecurityPanel.createCertificateViewerButton2 = function(text, origin)
-{
- /**
- * @param {!Event} e
- */
- function showCertificateViewer(e)
- {
- function certificateCallback(names)
- {
- InspectorFrontendHost.showCertificateViewer(names);
- }
+WebInspector.SecurityPanel.OriginState;
- e.consume();
- WebInspector.multitargetNetworkManager.getCertificate(origin, certificateCallback);
- }
-
- return createTextButton(text, showCertificateViewer, "security-certificate-button");
-};
/**
- * @constructor
- * @extends {TreeOutlineInShadow}
- * @param {!WebInspector.SecurityPanelSidebarTreeElement} mainViewElement
- * @param {function(!WebInspector.SecurityPanel.Origin)} showOriginInPanel
+ * @unrestricted
*/
-WebInspector.SecurityPanelSidebarTree = function(mainViewElement, showOriginInPanel)
-{
- TreeOutlineInShadow.call(this);
- this.registerRequiredCSS("security/sidebar.css");
- this.registerRequiredCSS("security/lockIcon.css");
+WebInspector.SecurityPanelSidebarTree = class extends TreeOutlineInShadow {
+ /**
+ * @param {!WebInspector.SecurityPanelSidebarTreeElement} mainViewElement
+ * @param {function(!WebInspector.SecurityPanel.Origin)} showOriginInPanel
+ */
+ constructor(mainViewElement, showOriginInPanel) {
+ super();
+ this.registerRequiredCSS('security/sidebar.css');
+ this.registerRequiredCSS('security/lockIcon.css');
this.appendChild(mainViewElement);
this._showOriginInPanel = showOriginInPanel;
@@ -415,668 +397,651 @@ WebInspector.SecurityPanelSidebarTree = function(mainViewElement, showOriginInPa
this._originGroups = new Map();
for (var key in WebInspector.SecurityPanelSidebarTree.OriginGroupName) {
- var originGroupName = WebInspector.SecurityPanelSidebarTree.OriginGroupName[key];
- var originGroup = new TreeElement(originGroupName, true);
- originGroup.selectable = false;
- originGroup.expand();
- originGroup.listItemElement.classList.add("security-sidebar-origins");
- this._originGroups.set(originGroupName, originGroup);
- this.appendChild(originGroup);
+ var originGroupName = WebInspector.SecurityPanelSidebarTree.OriginGroupName[key];
+ var originGroup = new TreeElement(originGroupName, true);
+ originGroup.selectable = false;
+ originGroup.expand();
+ originGroup.listItemElement.classList.add('security-sidebar-origins');
+ this._originGroups.set(originGroupName, originGroup);
+ this.appendChild(originGroup);
}
this._clearOriginGroups();
// This message will be removed by clearOrigins() during the first new page load after the panel was opened.
- var mainViewReloadMessage = new TreeElement(WebInspector.UIString("Reload to view details"));
+ var mainViewReloadMessage = new TreeElement(WebInspector.UIString('Reload to view details'));
mainViewReloadMessage.selectable = false;
- mainViewReloadMessage.listItemElement.classList.add("security-main-view-reload-message");
- this._originGroups.get(WebInspector.SecurityPanelSidebarTree.OriginGroupName.MainOrigin).appendChild(mainViewReloadMessage);
+ mainViewReloadMessage.listItemElement.classList.add('security-main-view-reload-message');
+ this._originGroups.get(WebInspector.SecurityPanelSidebarTree.OriginGroupName.MainOrigin)
+ .appendChild(mainViewReloadMessage);
/** @type {!Map<!WebInspector.SecurityPanel.Origin, !WebInspector.SecurityPanelSidebarTreeElement>} */
this._elementsByOrigin = new Map();
-};
-
-WebInspector.SecurityPanelSidebarTree.prototype = {
- /**
- * @param {boolean} hidden
- */
- toggleOriginsList: function(hidden)
- {
- for (var key in WebInspector.SecurityPanelSidebarTree.OriginGroupName) {
- var originGroupName = WebInspector.SecurityPanelSidebarTree.OriginGroupName[key];
- var group = this._originGroups.get(originGroupName);
- if (group)
- group.hidden = hidden;
- }
- },
+ }
- /**
- * @param {!WebInspector.SecurityPanel.Origin} origin
- * @param {!SecurityAgent.SecurityState} securityState
- */
- addOrigin: function(origin, securityState)
- {
- var originElement = new WebInspector.SecurityPanelSidebarTreeElement(origin, this._showOriginInPanel.bind(this, origin), "security-sidebar-tree-item", "security-property");
- originElement.listItemElement.title = origin;
- this._elementsByOrigin.set(origin, originElement);
- this.updateOrigin(origin, securityState);
- },
-
- /**
- * @param {!WebInspector.SecurityPanel.Origin} origin
- */
- setMainOrigin: function(origin)
- {
- this._mainOrigin = origin;
- },
-
- /**
- * @param {!WebInspector.SecurityPanel.Origin} origin
- * @param {!SecurityAgent.SecurityState} securityState
- */
- updateOrigin: function(origin, securityState)
- {
- var originElement = /** @type {!WebInspector.SecurityPanelSidebarTreeElement} */ (this._elementsByOrigin.get(origin));
- originElement.setSecurityState(securityState);
-
- var newParent;
- if (origin === this._mainOrigin) {
- newParent = this._originGroups.get(WebInspector.SecurityPanelSidebarTree.OriginGroupName.MainOrigin);
- } else {
- switch (securityState) {
- case SecurityAgent.SecurityState.Secure:
- newParent = this._originGroups.get(WebInspector.SecurityPanelSidebarTree.OriginGroupName.Secure);
- break;
- case SecurityAgent.SecurityState.Unknown:
- newParent = this._originGroups.get(WebInspector.SecurityPanelSidebarTree.OriginGroupName.Unknown);
- break;
- default:
- newParent = this._originGroups.get(WebInspector.SecurityPanelSidebarTree.OriginGroupName.NonSecure);
- break;
- }
- }
-
- var oldParent = originElement.parent;
- if (oldParent !== newParent) {
- if (oldParent) {
- oldParent.removeChild(originElement);
- if (oldParent.childCount() === 0)
- oldParent.hidden = true;
- }
- newParent.appendChild(originElement);
- newParent.hidden = false;
- }
-
- },
+ /**
+ * @param {boolean} hidden
+ */
+ toggleOriginsList(hidden) {
+ for (var key in WebInspector.SecurityPanelSidebarTree.OriginGroupName) {
+ var originGroupName = WebInspector.SecurityPanelSidebarTree.OriginGroupName[key];
+ var group = this._originGroups.get(originGroupName);
+ if (group)
+ group.hidden = hidden;
+ }
+ }
+
+ /**
+ * @param {!WebInspector.SecurityPanel.Origin} origin
+ * @param {!SecurityAgent.SecurityState} securityState
+ */
+ addOrigin(origin, securityState) {
+ var originElement = new WebInspector.SecurityPanelSidebarTreeElement(
+ origin, this._showOriginInPanel.bind(this, origin), 'security-sidebar-tree-item', 'security-property');
+ originElement.listItemElement.title = origin;
+ this._elementsByOrigin.set(origin, originElement);
+ this.updateOrigin(origin, securityState);
+ }
+
+ /**
+ * @param {!WebInspector.SecurityPanel.Origin} origin
+ */
+ setMainOrigin(origin) {
+ this._mainOrigin = origin;
+ }
+
+ /**
+ * @param {!WebInspector.SecurityPanel.Origin} origin
+ * @param {!SecurityAgent.SecurityState} securityState
+ */
+ updateOrigin(origin, securityState) {
+ var originElement =
+ /** @type {!WebInspector.SecurityPanelSidebarTreeElement} */ (this._elementsByOrigin.get(origin));
+ originElement.setSecurityState(securityState);
+
+ var newParent;
+ if (origin === this._mainOrigin) {
+ newParent = this._originGroups.get(WebInspector.SecurityPanelSidebarTree.OriginGroupName.MainOrigin);
+ } else {
+ switch (securityState) {
+ case SecurityAgent.SecurityState.Secure:
+ newParent = this._originGroups.get(WebInspector.SecurityPanelSidebarTree.OriginGroupName.Secure);
+ break;
+ case SecurityAgent.SecurityState.Unknown:
+ newParent = this._originGroups.get(WebInspector.SecurityPanelSidebarTree.OriginGroupName.Unknown);
+ break;
+ default:
+ newParent = this._originGroups.get(WebInspector.SecurityPanelSidebarTree.OriginGroupName.NonSecure);
+ break;
+ }
+ }
- _clearOriginGroups: function()
- {
- for (var originGroup of this._originGroups.values()) {
- originGroup.removeChildren();
- originGroup.hidden = true;
- }
- this._originGroups.get(WebInspector.SecurityPanelSidebarTree.OriginGroupName.MainOrigin).hidden = false;
- },
+ var oldParent = originElement.parent;
+ if (oldParent !== newParent) {
+ if (oldParent) {
+ oldParent.removeChild(originElement);
+ if (oldParent.childCount() === 0)
+ oldParent.hidden = true;
+ }
+ newParent.appendChild(originElement);
+ newParent.hidden = false;
+ }
+ }
- clearOrigins: function()
- {
- this._clearOriginGroups();
- this._elementsByOrigin.clear();
- },
+ _clearOriginGroups() {
+ for (var originGroup of this._originGroups.values()) {
+ originGroup.removeChildren();
+ originGroup.hidden = true;
+ }
+ this._originGroups.get(WebInspector.SecurityPanelSidebarTree.OriginGroupName.MainOrigin).hidden = false;
+ }
- __proto__: TreeOutlineInShadow.prototype
+ clearOrigins() {
+ this._clearOriginGroups();
+ this._elementsByOrigin.clear();
+ }
};
-
/**
* A mapping from Javascript key IDs to names (sidebar section titles).
* Note: The names are used as keys into a map, so they must be distinct from each other.
* @enum {string}
*/
WebInspector.SecurityPanelSidebarTree.OriginGroupName = {
- MainOrigin: WebInspector.UIString("Main Origin"),
- NonSecure: WebInspector.UIString("Non-Secure Origins"),
- Secure: WebInspector.UIString("Secure Origins"),
- Unknown: WebInspector.UIString("Unknown / Canceled")
+ MainOrigin: WebInspector.UIString('Main Origin'),
+ NonSecure: WebInspector.UIString('Non-Secure Origins'),
+ Secure: WebInspector.UIString('Secure Origins'),
+ Unknown: WebInspector.UIString('Unknown / Canceled')
};
-
/**
- * @constructor
- * @extends {TreeElement}
- * @param {string} text
- * @param {function()} selectCallback
- * @param {string} className
- * @param {string} cssPrefix
+ * @unrestricted
*/
-WebInspector.SecurityPanelSidebarTreeElement = function(text, selectCallback, className, cssPrefix)
-{
- TreeElement.call(this, "", false);
+WebInspector.SecurityPanelSidebarTreeElement = class extends TreeElement {
+ /**
+ * @param {string} text
+ * @param {function()} selectCallback
+ * @param {string} className
+ * @param {string} cssPrefix
+ */
+ constructor(text, selectCallback, className, cssPrefix) {
+ super('', false);
this._selectCallback = selectCallback;
this._cssPrefix = cssPrefix;
this.listItemElement.classList.add(className);
- this._iconElement = this.listItemElement.createChild("div", "icon");
+ this._iconElement = this.listItemElement.createChild('div', 'icon');
this._iconElement.classList.add(this._cssPrefix);
- this.listItemElement.createChild("span", "title").textContent = text;
+ this.listItemElement.createChild('span', 'title').textContent = text;
this.setSecurityState(SecurityAgent.SecurityState.Unknown);
-};
-
-WebInspector.SecurityPanelSidebarTreeElement.prototype = {
- /**
- * @param {!SecurityAgent.SecurityState} newSecurityState
- */
- setSecurityState: function(newSecurityState)
- {
- if (this._securityState)
- this._iconElement.classList.remove(this._cssPrefix + "-" + this._securityState);
-
- this._securityState = newSecurityState;
- this._iconElement.classList.add(this._cssPrefix + "-" + newSecurityState);
- },
-
- /**
- * @return {!SecurityAgent.SecurityState}
- */
- securityState: function()
- {
- return this._securityState;
- },
-
- /**
- * @override
- * @return {boolean}
- */
- onselect: function()
- {
- this._selectCallback();
- return true;
- },
-
- __proto__: TreeElement.prototype
-};
-
-/**
- * @param {!WebInspector.SecurityPanelSidebarTreeElement} a
- * @param {!WebInspector.SecurityPanelSidebarTreeElement} b
- * @return {number}
- */
-WebInspector.SecurityPanelSidebarTreeElement.SecurityStateComparator = function(a, b)
-{
+ }
+
+ /**
+ * @param {!WebInspector.SecurityPanelSidebarTreeElement} a
+ * @param {!WebInspector.SecurityPanelSidebarTreeElement} b
+ * @return {number}
+ */
+ static SecurityStateComparator(a, b) {
return WebInspector.SecurityModel.SecurityStateComparator(a.securityState(), b.securityState());
+ }
+
+ /**
+ * @param {!SecurityAgent.SecurityState} newSecurityState
+ */
+ setSecurityState(newSecurityState) {
+ if (this._securityState)
+ this._iconElement.classList.remove(this._cssPrefix + '-' + this._securityState);
+
+ this._securityState = newSecurityState;
+ this._iconElement.classList.add(this._cssPrefix + '-' + newSecurityState);
+ }
+
+ /**
+ * @return {!SecurityAgent.SecurityState}
+ */
+ securityState() {
+ return this._securityState;
+ }
+
+ /**
+ * @override
+ * @return {boolean}
+ */
+ onselect() {
+ this._selectCallback();
+ return true;
+ }
};
+
/**
- * @constructor
- * @extends {WebInspector.VBox}
- * @param {!WebInspector.SecurityPanel} panel
+ * @unrestricted
*/
-WebInspector.SecurityMainView = function(panel)
-{
- WebInspector.VBox.call(this, true);
- this.registerRequiredCSS("security/mainView.css");
- this.registerRequiredCSS("security/lockIcon.css");
+WebInspector.SecurityMainView = class extends WebInspector.VBox {
+ /**
+ * @param {!WebInspector.SecurityPanel} panel
+ */
+ constructor(panel) {
+ super(true);
+ this.registerRequiredCSS('security/mainView.css');
+ this.registerRequiredCSS('security/lockIcon.css');
this.setMinimumSize(200, 100);
- this.contentElement.classList.add("security-main-view");
+ this.contentElement.classList.add('security-main-view');
this._panel = panel;
- this._summarySection = this.contentElement.createChild("div", "security-summary");
+ this._summarySection = this.contentElement.createChild('div', 'security-summary');
// Info explanations should appear after all others.
- this._securityExplanationsMain = this.contentElement.createChild("div", "security-explanation-list");
- this._securityExplanationsExtra = this.contentElement.createChild("div", "security-explanation-list security-explanations-extra");
+ this._securityExplanationsMain = this.contentElement.createChild('div', 'security-explanation-list');
+ this._securityExplanationsExtra =
+ this.contentElement.createChild('div', 'security-explanation-list security-explanations-extra');
// Fill the security summary section.
- this._summarySection.createChild("div", "security-summary-section-title").textContent = WebInspector.UIString("Security Overview");
+ this._summarySection.createChild('div', 'security-summary-section-title').textContent =
+ WebInspector.UIString('Security Overview');
+
+ var lockSpectrum = this._summarySection.createChild('div', 'lock-spectrum');
+ lockSpectrum.createChild('div', 'lock-icon lock-icon-secure').title = WebInspector.UIString('Secure');
+ lockSpectrum.createChild('div', 'lock-icon lock-icon-neutral').title = WebInspector.UIString('Not Secure');
+ lockSpectrum.createChild('div', 'lock-icon lock-icon-insecure').title =
+ WebInspector.UIString('Not Secure (Broken)');
+
+ this._summarySection.createChild('div', 'triangle-pointer-container')
+ .createChild('div', 'triangle-pointer-wrapper')
+ .createChild('div', 'triangle-pointer');
+
+ this._summaryText = this._summarySection.createChild('div', 'security-summary-text');
+ }
+
+ /**
+ * @param {!Element} parent
+ * @param {!SecurityAgent.SecurityStateExplanation} explanation
+ * @return {!Element}
+ */
+ _addExplanation(parent, explanation) {
+ var explanationSection = parent.createChild('div', 'security-explanation');
+ explanationSection.classList.add('security-explanation-' + explanation.securityState);
+
+ explanationSection.createChild('div', 'security-property')
+ .classList.add('security-property-' + explanation.securityState);
+ var text = explanationSection.createChild('div', 'security-explanation-text');
+ text.createChild('div', 'security-explanation-title').textContent = explanation.summary;
+ text.createChild('div').textContent = explanation.description;
+
+ if (explanation.hasCertificate) {
+ text.appendChild(WebInspector.SecurityPanel.createCertificateViewerButton(
+ WebInspector.UIString('View certificate'), this._panel));
+ }
- var lockSpectrum = this._summarySection.createChild("div", "lock-spectrum");
- lockSpectrum.createChild("div", "lock-icon lock-icon-secure").title = WebInspector.UIString("Secure");
- lockSpectrum.createChild("div", "lock-icon lock-icon-neutral").title = WebInspector.UIString("Not Secure");
- lockSpectrum.createChild("div", "lock-icon lock-icon-insecure").title = WebInspector.UIString("Not Secure (Broken)");
+ return text;
+ }
+
+ /**
+ * @param {!SecurityAgent.SecurityState} newSecurityState
+ * @param {!Array<!SecurityAgent.SecurityStateExplanation>} explanations
+ * @param {?SecurityAgent.InsecureContentStatus} insecureContentStatus
+ * @param {boolean} schemeIsCryptographic
+ */
+ updateSecurityState(newSecurityState, explanations, insecureContentStatus, schemeIsCryptographic) {
+ // Remove old state.
+ // It's safe to call this even when this._securityState is undefined.
+ this._summarySection.classList.remove('security-summary-' + this._securityState);
+
+ // Add new state.
+ this._securityState = newSecurityState;
+ this._summarySection.classList.add('security-summary-' + this._securityState);
+ var summaryExplanationStrings = {
+ 'unknown': WebInspector.UIString('The security of this page is unknown.'),
+ 'insecure': WebInspector.UIString('This page is not secure (broken HTTPS).'),
+ 'neutral': WebInspector.UIString('This page is not secure.'),
+ 'secure': WebInspector.UIString('This page is secure (valid HTTPS).')
+ };
+ this._summaryText.textContent = summaryExplanationStrings[this._securityState];
+
+ this._explanations = explanations, this._insecureContentStatus = insecureContentStatus;
+ this._schemeIsCryptographic = schemeIsCryptographic;
+
+ this._panel.setRanInsecureContentStyle(insecureContentStatus.ranInsecureContentStyle);
+ this._panel.setDisplayedInsecureContentStyle(insecureContentStatus.displayedInsecureContentStyle);
+
+ this.refreshExplanations();
+ }
+
+ refreshExplanations() {
+ this._securityExplanationsMain.removeChildren();
+ this._securityExplanationsExtra.removeChildren();
+ for (var explanation of this._explanations) {
+ if (explanation.securityState === SecurityAgent.SecurityState.Info) {
+ this._addExplanation(this._securityExplanationsExtra, explanation);
+ } else {
+ this._addExplanation(this._securityExplanationsMain, explanation);
+ }
+ }
- this._summarySection.createChild("div", "triangle-pointer-container").createChild("div", "triangle-pointer-wrapper").createChild("div", "triangle-pointer");
+ this._addMixedContentExplanations();
+ this._addContentWithCertErrorsExplanations();
+
+ // If all resources were served securely, add a Secure explanation.
+ if (this._schemeIsCryptographic && this._insecureContentStatus &&
+ (!this._insecureContentStatus.displayedMixedContent && !this._insecureContentStatus.ranMixedContent &&
+ !this._insecureContentStatus.displayedContentWithCertErrors &&
+ !this._insecureContentStatus.ranContentWithCertErrors)) {
+ this._addExplanation(this._securityExplanationsMain, /** @type {!SecurityAgent.SecurityStateExplanation} */ ({
+ 'securityState': SecurityAgent.SecurityState.Secure,
+ 'summary': WebInspector.UIString('Secure Resources'),
+ 'description': WebInspector.UIString('All resources on this page are served securely.')
+ }));
+ }
+ }
+
+ _addMixedContentExplanations() {
+ if (!this._schemeIsCryptographic)
+ return;
+
+ if (this._insecureContentStatus &&
+ (this._insecureContentStatus.ranMixedContent || this._insecureContentStatus.displayedMixedContent)) {
+ if (this._insecureContentStatus.ranMixedContent)
+ this._addMixedContentExplanation(
+ this._securityExplanationsMain, this._insecureContentStatus.ranInsecureContentStyle,
+ WebInspector.UIString('Active Mixed Content'),
+ WebInspector.UIString(
+ 'You have recently allowed non-secure content (such as scripts or iframes) to run on this site.'),
+ WebInspector.NetworkLogView.MixedContentFilterValues.BlockOverridden,
+ showBlockOverriddenMixedContentInNetworkPanel);
+ if (this._insecureContentStatus.displayedMixedContent)
+ this._addMixedContentExplanation(
+ this._securityExplanationsMain, this._insecureContentStatus.displayedInsecureContentStyle,
+ WebInspector.UIString('Mixed Content'), WebInspector.UIString('The site includes HTTP resources.'),
+ WebInspector.NetworkLogView.MixedContentFilterValues.Displayed, showDisplayedMixedContentInNetworkPanel);
+ }
- this._summaryText = this._summarySection.createChild("div", "security-summary-text");
-};
+ if (this._panel.filterRequestCount(WebInspector.NetworkLogView.MixedContentFilterValues.Blocked) > 0)
+ this._addMixedContentExplanation(
+ this._securityExplanationsExtra, SecurityAgent.SecurityState.Info,
+ WebInspector.UIString('Blocked mixed content'),
+ WebInspector.UIString('Your page requested non-secure resources that were blocked.'),
+ WebInspector.NetworkLogView.MixedContentFilterValues.Blocked, showBlockedMixedContentInNetworkPanel);
-WebInspector.SecurityMainView.prototype = {
/**
- * @param {!Element} parent
- * @param {!SecurityAgent.SecurityStateExplanation} explanation
- * @return {!Element}
+ * @param {!Event} e
*/
- _addExplanation: function(parent, explanation)
- {
- var explanationSection = parent.createChild("div", "security-explanation");
- explanationSection.classList.add("security-explanation-" + explanation.securityState);
-
- explanationSection.createChild("div", "security-property").classList.add("security-property-" + explanation.securityState);
- var text = explanationSection.createChild("div", "security-explanation-text");
- text.createChild("div", "security-explanation-title").textContent = explanation.summary;
- text.createChild("div").textContent = explanation.description;
-
- if (explanation.hasCertificate) {
- text.appendChild(WebInspector.SecurityPanel.createCertificateViewerButton(WebInspector.UIString("View certificate"), this._panel));
- }
-
- return text;
- },
+ function showDisplayedMixedContentInNetworkPanel(e) {
+ e.consume();
+ WebInspector.NetworkPanel.revealAndFilter([{
+ filterType: WebInspector.NetworkLogView.FilterType.MixedContent,
+ filterValue: WebInspector.NetworkLogView.MixedContentFilterValues.Displayed
+ }]);
+ }
/**
- * @param {!SecurityAgent.SecurityState} newSecurityState
- * @param {!Array<!SecurityAgent.SecurityStateExplanation>} explanations
- * @param {?SecurityAgent.InsecureContentStatus} insecureContentStatus
- * @param {boolean} schemeIsCryptographic
+ * @param {!Event} e
*/
- updateSecurityState: function(newSecurityState, explanations, insecureContentStatus, schemeIsCryptographic)
- {
- // Remove old state.
- // It's safe to call this even when this._securityState is undefined.
- this._summarySection.classList.remove("security-summary-" + this._securityState);
-
- // Add new state.
- this._securityState = newSecurityState;
- this._summarySection.classList.add("security-summary-" + this._securityState);
- var summaryExplanationStrings = {
- "unknown": WebInspector.UIString("The security of this page is unknown."),
- "insecure": WebInspector.UIString("This page is not secure (broken HTTPS)."),
- "neutral": WebInspector.UIString("This page is not secure."),
- "secure": WebInspector.UIString("This page is secure (valid HTTPS).")
- };
- this._summaryText.textContent = summaryExplanationStrings[this._securityState];
-
- this._explanations = explanations,
- this._insecureContentStatus = insecureContentStatus;
- this._schemeIsCryptographic = schemeIsCryptographic;
-
- this._panel.setRanInsecureContentStyle(insecureContentStatus.ranInsecureContentStyle);
- this._panel.setDisplayedInsecureContentStyle(insecureContentStatus.displayedInsecureContentStyle);
-
- this.refreshExplanations();
- },
-
- refreshExplanations: function()
- {
- this._securityExplanationsMain.removeChildren();
- this._securityExplanationsExtra.removeChildren();
- for (var explanation of this._explanations) {
- if (explanation.securityState === SecurityAgent.SecurityState.Info) {
- this._addExplanation(this._securityExplanationsExtra, explanation);
- } else {
- this._addExplanation(this._securityExplanationsMain, explanation);
- }
- }
-
- this._addMixedContentExplanations();
- this._addContentWithCertErrorsExplanations();
-
- // If all resources were served securely, add a Secure explanation.
- if (this._schemeIsCryptographic && this._insecureContentStatus && (!this._insecureContentStatus.displayedMixedContent && !this._insecureContentStatus.ranMixedContent && !this._insecureContentStatus.displayedContentWithCertErrors && !this._insecureContentStatus.ranContentWithCertErrors)) {
- this._addExplanation(this._securityExplanationsMain, /** @type {!SecurityAgent.SecurityStateExplanation} */ ({
- "securityState": SecurityAgent.SecurityState.Secure,
- "summary": WebInspector.UIString("Secure Resources"),
- "description": WebInspector.UIString("All resources on this page are served securely.")
- }));
- }
- },
-
- _addMixedContentExplanations: function()
- {
- if (!this._schemeIsCryptographic)
- return;
-
- if (this._insecureContentStatus && (this._insecureContentStatus.ranMixedContent || this._insecureContentStatus.displayedMixedContent)) {
- if (this._insecureContentStatus.ranMixedContent)
- this._addMixedContentExplanation(this._securityExplanationsMain, this._insecureContentStatus.ranInsecureContentStyle, WebInspector.UIString("Active Mixed Content"), WebInspector.UIString("You have recently allowed non-secure content (such as scripts or iframes) to run on this site."), WebInspector.NetworkLogView.MixedContentFilterValues.BlockOverridden, showBlockOverriddenMixedContentInNetworkPanel);
- if (this._insecureContentStatus.displayedMixedContent)
- this._addMixedContentExplanation(this._securityExplanationsMain, this._insecureContentStatus.displayedInsecureContentStyle, WebInspector.UIString("Mixed Content"), WebInspector.UIString("The site includes HTTP resources."), WebInspector.NetworkLogView.MixedContentFilterValues.Displayed, showDisplayedMixedContentInNetworkPanel);
- }
-
- if (this._panel.filterRequestCount(WebInspector.NetworkLogView.MixedContentFilterValues.Blocked) > 0)
- this._addMixedContentExplanation(this._securityExplanationsExtra, SecurityAgent.SecurityState.Info, WebInspector.UIString("Blocked mixed content"), WebInspector.UIString("Your page requested non-secure resources that were blocked."), WebInspector.NetworkLogView.MixedContentFilterValues.Blocked, showBlockedMixedContentInNetworkPanel);
-
- /**
- * @param {!Event} e
- */
- function showDisplayedMixedContentInNetworkPanel(e)
- {
- e.consume();
- WebInspector.NetworkPanel.revealAndFilter([
- {
- filterType: WebInspector.NetworkLogView.FilterType.MixedContent,
- filterValue: WebInspector.NetworkLogView.MixedContentFilterValues.Displayed
- }
- ]);
- }
-
- /**
- * @param {!Event} e
- */
- function showBlockOverriddenMixedContentInNetworkPanel(e)
- {
- e.consume();
- WebInspector.NetworkPanel.revealAndFilter([
- {
- filterType: WebInspector.NetworkLogView.FilterType.MixedContent,
- filterValue: WebInspector.NetworkLogView.MixedContentFilterValues.BlockOverridden
- }
- ]);
- }
-
- /**
- * @param {!Event} e
- */
- function showBlockedMixedContentInNetworkPanel(e)
- {
- e.consume();
- WebInspector.NetworkPanel.revealAndFilter([
- {
- filterType: WebInspector.NetworkLogView.FilterType.MixedContent,
- filterValue: WebInspector.NetworkLogView.MixedContentFilterValues.Blocked
- }
- ]);
- }
- },
+ function showBlockOverriddenMixedContentInNetworkPanel(e) {
+ e.consume();
+ WebInspector.NetworkPanel.revealAndFilter([{
+ filterType: WebInspector.NetworkLogView.FilterType.MixedContent,
+ filterValue: WebInspector.NetworkLogView.MixedContentFilterValues.BlockOverridden
+ }]);
+ }
/**
- * @param {!Element} parent
- * @param {!SecurityAgent.SecurityState} securityState
- * @param {string} summary
- * @param {string} description
- * @param {!WebInspector.NetworkLogView.MixedContentFilterValues} filterKey
- * @param {!Function} networkFilterFn
+ * @param {!Event} e
*/
- _addMixedContentExplanation: function(parent, securityState, summary, description, filterKey, networkFilterFn)
- {
- var mixedContentExplanation = /** @type {!SecurityAgent.SecurityStateExplanation} */ ({
- "securityState": securityState,
- "summary": summary,
- "description": description
- });
-
- var explanation = this._addExplanation(parent, mixedContentExplanation);
-
- var filterRequestCount = this._panel.filterRequestCount(filterKey);
- if (!filterRequestCount) {
- // Network instrumentation might not have been enabled for the page
- // load, so the security panel does not necessarily know a count of
- // individual mixed requests at this point. Prompt them to refresh
- // instead of pointing them to the Network panel to get prompted
- // to refresh.
- var refreshPrompt = explanation.createChild("div", "security-mixed-content");
- refreshPrompt.textContent = WebInspector.UIString("Reload the page to record requests for HTTP resources.");
- return;
- }
-
- var requestsAnchor = explanation.createChild("div", "security-mixed-content link");
- if (filterRequestCount === 1) {
- requestsAnchor.textContent = WebInspector.UIString("View %d request in Network Panel", filterRequestCount);
- } else {
- requestsAnchor.textContent = WebInspector.UIString("View %d requests in Network Panel", filterRequestCount);
- }
- requestsAnchor.href = "";
- requestsAnchor.addEventListener("click", networkFilterFn);
- },
-
- _addContentWithCertErrorsExplanations: function()
- {
- if (!this._schemeIsCryptographic)
- return;
-
- if (!this._insecureContentStatus)
- return;
-
- if (this._insecureContentStatus.ranContentWithCertErrors) {
- this._addExplanation(this._securityExplanationsMain, /** @type {!SecurityAgent.SecurityStateExplanation} */ ({
- "securityState": this._insecureContentStatus.ranInsecureContentStyle,
- "summary": WebInspector.UIString("Active content with certificate errors"),
- "description": WebInspector.UIString("You have recently allowed content loaded with certificate errors (such as scripts or iframes) to run on this site.")
- }));
- }
-
- if (this._insecureContentStatus.displayedContentWithCertErrors) {
- this._addExplanation(this._securityExplanationsMain, /** @type {!SecurityAgent.SecurityStateExplanation} */ ({
- "securityState": this._insecureContentStatus.displayedInsecureContentStyle,
- "summary": WebInspector.UIString("Content with certificate errors"),
- "description": WebInspector.UIString("This site includes resources that were loaded with certificate errors.")
- }));
- }
- },
+ function showBlockedMixedContentInNetworkPanel(e) {
+ e.consume();
+ WebInspector.NetworkPanel.revealAndFilter([{
+ filterType: WebInspector.NetworkLogView.FilterType.MixedContent,
+ filterValue: WebInspector.NetworkLogView.MixedContentFilterValues.Blocked
+ }]);
+ }
+ }
+
+ /**
+ * @param {!Element} parent
+ * @param {!SecurityAgent.SecurityState} securityState
+ * @param {string} summary
+ * @param {string} description
+ * @param {!WebInspector.NetworkLogView.MixedContentFilterValues} filterKey
+ * @param {!Function} networkFilterFn
+ */
+ _addMixedContentExplanation(parent, securityState, summary, description, filterKey, networkFilterFn) {
+ var mixedContentExplanation = /** @type {!SecurityAgent.SecurityStateExplanation} */ (
+ {'securityState': securityState, 'summary': summary, 'description': description});
+
+ var explanation = this._addExplanation(parent, mixedContentExplanation);
+
+ var filterRequestCount = this._panel.filterRequestCount(filterKey);
+ if (!filterRequestCount) {
+ // Network instrumentation might not have been enabled for the page
+ // load, so the security panel does not necessarily know a count of
+ // individual mixed requests at this point. Prompt them to refresh
+ // instead of pointing them to the Network panel to get prompted
+ // to refresh.
+ var refreshPrompt = explanation.createChild('div', 'security-mixed-content');
+ refreshPrompt.textContent = WebInspector.UIString('Reload the page to record requests for HTTP resources.');
+ return;
+ }
+ var requestsAnchor = explanation.createChild('div', 'security-mixed-content link');
+ if (filterRequestCount === 1) {
+ requestsAnchor.textContent = WebInspector.UIString('View %d request in Network Panel', filterRequestCount);
+ } else {
+ requestsAnchor.textContent = WebInspector.UIString('View %d requests in Network Panel', filterRequestCount);
+ }
+ requestsAnchor.href = '';
+ requestsAnchor.addEventListener('click', networkFilterFn);
+ }
+
+ _addContentWithCertErrorsExplanations() {
+ if (!this._schemeIsCryptographic)
+ return;
+
+ if (!this._insecureContentStatus)
+ return;
+
+ if (this._insecureContentStatus.ranContentWithCertErrors) {
+ this._addExplanation(
+ this._securityExplanationsMain, /** @type {!SecurityAgent.SecurityStateExplanation} */ ({
+ 'securityState': this._insecureContentStatus.ranInsecureContentStyle,
+ 'summary': WebInspector.UIString('Active content with certificate errors'),
+ 'description': WebInspector.UIString(
+ 'You have recently allowed content loaded with certificate errors (such as scripts or iframes) to run on this site.')
+ }));
+ }
- __proto__: WebInspector.VBox.prototype
+ if (this._insecureContentStatus.displayedContentWithCertErrors) {
+ this._addExplanation(this._securityExplanationsMain, /** @type {!SecurityAgent.SecurityStateExplanation} */ ({
+ 'securityState': this._insecureContentStatus.displayedInsecureContentStyle,
+ 'summary': WebInspector.UIString('Content with certificate errors'),
+ 'description': WebInspector.UIString(
+ 'This site includes resources that were loaded with certificate errors.')
+ }));
+ }
+ }
};
/**
- * @constructor
- * @extends {WebInspector.VBox}
- * @param {!WebInspector.SecurityPanel} panel
- * @param {!WebInspector.SecurityPanel.Origin} origin
- * @param {!WebInspector.SecurityPanel.OriginState} originState
+ * @unrestricted
*/
-WebInspector.SecurityOriginView = function(panel, origin, originState)
-{
- WebInspector.VBox.call(this);
+WebInspector.SecurityOriginView = class extends WebInspector.VBox {
+ /**
+ * @param {!WebInspector.SecurityPanel} panel
+ * @param {!WebInspector.SecurityPanel.Origin} origin
+ * @param {!WebInspector.SecurityPanel.OriginState} originState
+ */
+ constructor(panel, origin, originState) {
+ super();
this._panel = panel;
this.setMinimumSize(200, 100);
- this.element.classList.add("security-origin-view");
- this.registerRequiredCSS("security/originView.css");
- this.registerRequiredCSS("security/lockIcon.css");
+ this.element.classList.add('security-origin-view');
+ this.registerRequiredCSS('security/originView.css');
+ this.registerRequiredCSS('security/lockIcon.css');
- var titleSection = this.element.createChild("div", "title-section");
- var originDisplay = titleSection.createChild("div", "origin-display");
- this._originLockIcon = originDisplay.createChild("span", "security-property");
- this._originLockIcon.classList.add("security-property-" + originState.securityState);
+ var titleSection = this.element.createChild('div', 'title-section');
+ var originDisplay = titleSection.createChild('div', 'origin-display');
+ this._originLockIcon = originDisplay.createChild('span', 'security-property');
+ this._originLockIcon.classList.add('security-property-' + originState.securityState);
// TODO(lgarron): Highlight the origin scheme. https://crbug.com/523589
- originDisplay.createChild("span", "origin").textContent = origin;
- var originNetworkLink = titleSection.createChild("div", "link");
- originNetworkLink.textContent = WebInspector.UIString("View requests in Network Panel");
- function showOriginRequestsInNetworkPanel()
- {
- var parsedURL = new WebInspector.ParsedURL(origin);
- WebInspector.NetworkPanel.revealAndFilter([
- {
- filterType: WebInspector.NetworkLogView.FilterType.Domain,
- filterValue: parsedURL.host
- },
- {
- filterType: WebInspector.NetworkLogView.FilterType.Scheme,
- filterValue: parsedURL.scheme
- }
- ]);
+ originDisplay.createChild('span', 'origin').textContent = origin;
+ var originNetworkLink = titleSection.createChild('div', 'link');
+ originNetworkLink.textContent = WebInspector.UIString('View requests in Network Panel');
+ function showOriginRequestsInNetworkPanel() {
+ var parsedURL = new WebInspector.ParsedURL(origin);
+ WebInspector.NetworkPanel.revealAndFilter([
+ {filterType: WebInspector.NetworkLogView.FilterType.Domain, filterValue: parsedURL.host},
+ {filterType: WebInspector.NetworkLogView.FilterType.Scheme, filterValue: parsedURL.scheme}
+ ]);
}
- originNetworkLink.addEventListener("click", showOriginRequestsInNetworkPanel, false);
-
+ originNetworkLink.addEventListener('click', showOriginRequestsInNetworkPanel, false);
if (originState.securityDetails) {
- var connectionSection = this.element.createChild("div", "origin-view-section");
- connectionSection.createChild("div", "origin-view-section-title").textContent = WebInspector.UIString("Connection");
-
- var table = new WebInspector.SecurityDetailsTable();
- connectionSection.appendChild(table.element());
- table.addRow("Protocol", originState.securityDetails.protocol);
- if (originState.securityDetails.keyExchange)
- table.addRow("Key Exchange", originState.securityDetails.keyExchange);
- if (originState.securityDetails.keyExchangeGroup)
- table.addRow("Key Exchange Group", originState.securityDetails.keyExchangeGroup);
- table.addRow("Cipher", originState.securityDetails.cipher + (originState.securityDetails.mac ? " with " + originState.securityDetails.mac : ""));
-
- // Create the certificate section outside the callback, so that it appears in the right place.
- 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) {
- // 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");
- }
-
- var sanDiv = this._createSanDiv(originState.securityDetails.sanList);
- var validFromString = new Date(1000 * originState.securityDetails.validFrom).toUTCString();
- var validUntilString = new Date(1000 * originState.securityDetails.validTo).toUTCString();
-
- 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"), origin));
-
- 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 + ")");
- }
-
- // 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 "));
- }
-
- // 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().
- noteSection.createChild("div").textContent = WebInspector.UIString("The security details above are from the first inspected response.");
+ var connectionSection = this.element.createChild('div', 'origin-view-section');
+ connectionSection.createChild('div', 'origin-view-section-title').textContent =
+ WebInspector.UIString('Connection');
+
+ var table = new WebInspector.SecurityDetailsTable();
+ connectionSection.appendChild(table.element());
+ table.addRow('Protocol', originState.securityDetails.protocol);
+ if (originState.securityDetails.keyExchange)
+ table.addRow('Key Exchange', originState.securityDetails.keyExchange);
+ if (originState.securityDetails.keyExchangeGroup)
+ table.addRow('Key Exchange Group', originState.securityDetails.keyExchangeGroup);
+ table.addRow(
+ 'Cipher', originState.securityDetails.cipher +
+ (originState.securityDetails.mac ? ' with ' + originState.securityDetails.mac : ''));
+
+ // Create the certificate section outside the callback, so that it appears in the right place.
+ 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) {
+ // 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');
+ }
+
+ var sanDiv = this._createSanDiv(originState.securityDetails.sanList);
+ var validFromString = new Date(1000 * originState.securityDetails.validFrom).toUTCString();
+ var validUntilString = new Date(1000 * originState.securityDetails.validTo).toUTCString();
+
+ 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'), origin));
+
+ 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 + ')');
+ }
+
+ // 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 '));
+ }
+
+ // 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().
+ noteSection.createChild('div').textContent =
+ WebInspector.UIString('The security details above are from the first inspected response.');
} else if (originState.securityState !== SecurityAgent.SecurityState.Unknown) {
- var notSecureSection = this.element.createChild("div", "origin-view-section");
- notSecureSection.createChild("div", "origin-view-section-title").textContent = WebInspector.UIString("Not Secure");
- notSecureSection.createChild("div").textContent = WebInspector.UIString("Your connection to this origin is not secure.");
+ var notSecureSection = this.element.createChild('div', 'origin-view-section');
+ notSecureSection.createChild('div', 'origin-view-section-title').textContent =
+ WebInspector.UIString('Not Secure');
+ notSecureSection.createChild('div').textContent =
+ WebInspector.UIString('Your connection to this origin is not secure.');
} else {
- var noInfoSection = this.element.createChild("div", "origin-view-section");
- noInfoSection.createChild("div", "origin-view-section-title").textContent = WebInspector.UIString("No Security Information");
- noInfoSection.createChild("div").textContent = WebInspector.UIString("No security details are available for this origin.");
+ var noInfoSection = this.element.createChild('div', 'origin-view-section');
+ noInfoSection.createChild('div', 'origin-view-section-title').textContent =
+ WebInspector.UIString('No Security Information');
+ noInfoSection.createChild('div').textContent =
+ WebInspector.UIString('No security details are available for this origin.');
}
-};
-
-WebInspector.SecurityOriginView.prototype = {
-
- /**
- * @param {!Array<string>} sanList
- * *return {!Element}
- */
- _createSanDiv: function(sanList)
- {
- var sanDiv = createElement("div");
- if (sanList.length === 0) {
- sanDiv.textContent = WebInspector.UIString("(N/A)");
- sanDiv.classList.add("empty-san");
- } else {
- var truncatedNumToShow = 2;
- var listIsTruncated = sanList.length > truncatedNumToShow + 1;
- for (var i = 0; i < sanList.length; i++) {
- var span = sanDiv.createChild("span", "san-entry");
- span.textContent = sanList[i];
- if (listIsTruncated && i >= truncatedNumToShow)
- span.classList.add("truncated-entry");
- }
- if (listIsTruncated) {
- var truncatedSANToggle = sanDiv.createChild("div", "link");
- truncatedSANToggle.href = "";
-
- function toggleSANTruncation()
- {
- if (sanDiv.classList.contains("truncated-san")) {
- sanDiv.classList.remove("truncated-san");
- truncatedSANToggle.textContent = WebInspector.UIString("Show less");
- } else {
- sanDiv.classList.add("truncated-san");
- truncatedSANToggle.textContent = WebInspector.UIString("Show more (%d total)", sanList.length);
- }
- }
- truncatedSANToggle.addEventListener("click", toggleSANTruncation, false);
- toggleSANTruncation();
- }
- }
- return sanDiv;
- },
-
- /**
- * @param {!SecurityAgent.SecurityState} newSecurityState
- */
- setSecurityState: function(newSecurityState)
- {
- for (var className of Array.prototype.slice.call(this._originLockIcon.classList)) {
- if (className.startsWith("security-property-"))
- this._originLockIcon.classList.remove(className);
+ }
+
+ /**
+ * @param {!Array<string>} sanList
+ * *return {!Element}
+ */
+ _createSanDiv(sanList) {
+ var sanDiv = createElement('div');
+ if (sanList.length === 0) {
+ sanDiv.textContent = WebInspector.UIString('(N/A)');
+ sanDiv.classList.add('empty-san');
+ } else {
+ var truncatedNumToShow = 2;
+ var listIsTruncated = sanList.length > truncatedNumToShow + 1;
+ for (var i = 0; i < sanList.length; i++) {
+ var span = sanDiv.createChild('span', 'san-entry');
+ span.textContent = sanList[i];
+ if (listIsTruncated && i >= truncatedNumToShow)
+ span.classList.add('truncated-entry');
+ }
+ if (listIsTruncated) {
+ var truncatedSANToggle = sanDiv.createChild('div', 'link');
+ truncatedSANToggle.href = '';
+
+ function toggleSANTruncation() {
+ if (sanDiv.classList.contains('truncated-san')) {
+ sanDiv.classList.remove('truncated-san');
+ truncatedSANToggle.textContent = WebInspector.UIString('Show less');
+ } else {
+ sanDiv.classList.add('truncated-san');
+ truncatedSANToggle.textContent = WebInspector.UIString('Show more (%d total)', sanList.length);
+ }
}
+ truncatedSANToggle.addEventListener('click', toggleSANTruncation, false);
+ toggleSANTruncation();
+ }
+ }
+ return sanDiv;
+ }
+
+ /**
+ * @param {!SecurityAgent.SecurityState} newSecurityState
+ */
+ setSecurityState(newSecurityState) {
+ for (var className of Array.prototype.slice.call(this._originLockIcon.classList)) {
+ if (className.startsWith('security-property-'))
+ this._originLockIcon.classList.remove(className);
+ }
- this._originLockIcon.classList.add("security-property-" + newSecurityState);
- },
-
- __proto__: WebInspector.VBox.prototype
+ this._originLockIcon.classList.add('security-property-' + newSecurityState);
+ }
};
/**
- * @constructor
+ * @unrestricted
*/
-WebInspector.SecurityDetailsTable = function()
-{
- this._element = createElement("table");
- this._element.classList.add("details-table");
-};
-
-WebInspector.SecurityDetailsTable.prototype = {
-
- /**
- * @return: {!Element}
- */
- element: function()
- {
- return this._element;
- },
-
- /**
- * @param {string} key
- * @param {string|!Node} value
- */
- addRow: function(key, value)
- {
- var row = this._element.createChild("div", "details-table-row");
- row.createChild("div").textContent = key;
-
- var valueDiv = row.createChild("div");
- if (typeof value === "string") {
- valueDiv.textContent = value;
- } else {
- valueDiv.appendChild(value);
- }
+WebInspector.SecurityDetailsTable = class {
+ constructor() {
+ this._element = createElement('table');
+ this._element.classList.add('details-table');
+ }
+
+ /**
+ * @return: {!Element}
+ */
+ element() {
+ return this._element;
+ }
+
+ /**
+ * @param {string} key
+ * @param {string|!Node} value
+ */
+ addRow(key, value) {
+ var row = this._element.createChild('div', 'details-table-row');
+ row.createChild('div').textContent = key;
+
+ var valueDiv = row.createChild('div');
+ if (typeof value === 'string') {
+ valueDiv.textContent = value;
+ } else {
+ valueDiv.appendChild(value);
}
+ }
};

Powered by Google App Engine
This is Rietveld 408576698