Index: Source/devtools/front_end/security/SecurityPanel.js |
diff --git a/Source/devtools/front_end/security/SecurityPanel.js b/Source/devtools/front_end/security/SecurityPanel.js |
index 721e9dcda969a1e6450e11ee929d42328151be5a..85747c5796db01db75b537b39b79a85ac47ce17f 100644 |
--- a/Source/devtools/front_end/security/SecurityPanel.js |
+++ b/Source/devtools/front_end/security/SecurityPanel.js |
@@ -24,6 +24,12 @@ WebInspector.SecurityPanel = function() { |
this._mainView = new WebInspector.SecurityMainView(); |
this.showMainView(); |
+ /** @type {!Map<string, !Object>} */ |
dgozman
2015/08/19 22:51:49
You can even create typedef for this object to che
lgarron
2015/08/19 22:56:26
Is there a way to do this in one definition, or do
|
+ this._origins = new Map(); |
+ WebInspector.targetManager.addEventListener(WebInspector.ResourceTreeModel.EventTypes.InspectedURLChanged, this._clear, this); |
+ WebInspector.targetManager.addEventListener(WebInspector.ResourceTreeModel.EventTypes.WillReloadPage, this._clear, this); |
+ WebInspector.targetManager.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._clear, this); |
+ |
WebInspector.targetManager.observeTargets(this); |
} |
@@ -72,6 +78,40 @@ WebInspector.SecurityPanel.prototype = { |
}, |
/** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _onResponseReceivedSecurityDetails: function(event) |
+ { |
+ var data = event.data; |
+ var origin = /** @type {string} */ (data.origin); |
+ var securityState = /** @type {!SecurityAgent.SecurityState} */ (data.securityState); |
+ |
+ if (this._origins.has(origin)) { |
+ var originData = this._origins.get(origin); |
+ originData.securityState = this._securityStateMin(originData.securityState, securityState); |
+ } else { |
+ // TODO(lgarron): Store a (deduplicated) list of different security details we have seen. |
+ var originData = {}; |
+ this._origins.set(origin, originData); |
+ |
+ originData.securityState = securityState; |
+ if (data.securityDetails) |
+ originData.securityDetails = data.securityDetails; |
+ } |
+ }, |
+ |
+ /** |
+ * @param {!SecurityAgent.SecurityState} stateA |
+ * @param {!SecurityAgent.SecurityState} stateB |
+ * @return {!SecurityAgent.SecurityState} |
+ */ |
+ _securityStateMin: function(stateA, stateB) |
+ { |
+ var ordering = ["unknown", "insecure", "neutral", "warning", "secure"]; |
+ return (ordering.indexOf(stateA) < ordering.indexOf(stateB)) ? stateA : stateB; |
+ }, |
+ |
+ /** |
* @override |
* @param {!WebInspector.Target} target |
*/ |
@@ -82,6 +122,10 @@ WebInspector.SecurityPanel.prototype = { |
this._securityModel = WebInspector.SecurityModel.fromTarget(target); |
this._securityModel.addEventListener(WebInspector.SecurityModel.EventTypes.SecurityStateChanged, this._onSecurityStateChanged, this); |
this._updateSecurityState(this._securityModel.securityState(), []); |
+ |
+ this._origins.clear(); |
+ this._networkManager = target.networkManager; |
+ this._networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResponseReceivedSecurityDetails, this._onResponseReceivedSecurityDetails, this); |
} |
}, |
@@ -94,11 +138,19 @@ WebInspector.SecurityPanel.prototype = { |
if (target === this._target) { |
this._securityModel.removeEventListener(WebInspector.SecurityModel.EventTypes.SecurityStateChanged, this._onSecurityStateChanged, this); |
delete this._securityModel; |
+ this._networkManager.removeEventListener(WebInspector.NetworkManager.EventTypes.ResponseReceivedSecurityDetails, this._onResponseReceivedSecurityDetails, this); |
+ delete this._networkManager; |
delete this._target; |
- this._updateSecurityState(SecurityAgent.SecurityState.Unknown, []); |
+ this._clear(); |
} |
}, |
+ _clear: function() |
+ { |
+ this._updateSecurityState(SecurityAgent.SecurityState.Unknown, []); |
+ this._origins.clear(); |
+ }, |
+ |
__proto__: WebInspector.PanelWithSidebar.prototype |
} |