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 ad82aa90effff7aeba2908ea27b7d0dffe22d650..7600bb5493338d60f2f320f9793b7a3d4de72c59 100644 |
--- a/Source/devtools/front_end/security/SecurityPanel.js |
+++ b/Source/devtools/front_end/security/SecurityPanel.js |
@@ -57,11 +57,13 @@ WebInspector.SecurityPanel.prototype = { |
/** |
* @param {!SecurityAgent.SecurityState} newSecurityState |
* @param {!Array<!SecurityAgent.SecurityStateExplanation>} explanations |
+ * @param {?SecurityAgent.MixedContentStatus} mixedContentStatus |
+ * @param {boolean} schemeIsCryptographic |
*/ |
- _updateSecurityState: function(newSecurityState, explanations) |
+ _updateSecurityState: function(newSecurityState, explanations, mixedContentStatus, schemeIsCryptographic) |
{ |
this._sidebarMainViewElement.setSecurityState(newSecurityState); |
- this._mainView.updateSecurityState(newSecurityState, explanations); |
+ this._mainView.updateSecurityState(newSecurityState, explanations, mixedContentStatus, schemeIsCryptographic); |
}, |
/** |
@@ -69,9 +71,12 @@ WebInspector.SecurityPanel.prototype = { |
*/ |
_onSecurityStateChanged: function(event) |
{ |
- var securityState = /** @type {!SecurityAgent.SecurityState} */ (event.data.securityState); |
- var explanations = /** @type {!Array<!SecurityAgent.SecurityStateExplanation>} */ (event.data.explanations); |
- this._updateSecurityState(securityState, explanations); |
+ var data = /** @type {!WebInspector.PageSecurityState} */ (event.data); |
+ var securityState = /** @type {!SecurityAgent.SecurityState} */ (data.securityState); |
+ var explanations = /** @type {!Array<!SecurityAgent.SecurityStateExplanation>} */ (data.explanations); |
+ var mixedContentStatus = /** @type {?SecurityAgent.MixedContentStatus} */ (data.mixedContentStatus); |
+ var schemeIsCryptographic = /** @type {boolean} */ (data.schemeIsCryptographic); |
+ this._updateSecurityState(securityState, explanations, mixedContentStatus, schemeIsCryptographic); |
}, |
showMainView: function() |
@@ -180,7 +185,7 @@ WebInspector.SecurityPanel.prototype = { |
_clear: function() |
{ |
- this._updateSecurityState(SecurityAgent.SecurityState.Unknown, []); |
+ this._updateSecurityState(SecurityAgent.SecurityState.Unknown, [], null, false); |
this._sidebarMainViewElement.select(); |
this._sidebarOriginSection.removeChildren(); |
this._origins.clear(); |
@@ -332,6 +337,7 @@ WebInspector.SecurityMainView = function() |
WebInspector.SecurityMainView.prototype = { |
/** |
* @param {!SecurityAgent.SecurityStateExplanation} explanation |
+ * @return {!Element} |
*/ |
_addExplanation: function(explanation) |
{ |
@@ -348,6 +354,9 @@ WebInspector.SecurityMainView.prototype = { |
certificateAnchor.href = ""; |
certificateAnchor.addEventListener("click", showCertificateViewer, false); |
} |
+ |
+ return text; |
+ |
/** |
* @param {!Event} e |
*/ |
@@ -361,8 +370,10 @@ WebInspector.SecurityMainView.prototype = { |
/** |
* @param {!SecurityAgent.SecurityState} newSecurityState |
* @param {!Array<!SecurityAgent.SecurityStateExplanation>} explanations |
+ * @param {?SecurityAgent.MixedContentStatus} mixedContentStatus |
+ * @param {boolean} schemeIsCryptographic |
*/ |
- updateSecurityState: function(newSecurityState, explanations) |
+ updateSecurityState: function(newSecurityState, explanations, mixedContentStatus, schemeIsCryptographic) |
{ |
// Remove old state. |
// It's safe to call this even when this._securityState is undefined. |
@@ -384,6 +395,47 @@ WebInspector.SecurityMainView.prototype = { |
this._securityExplanations.removeChildren(); |
for (var explanation of explanations) |
this._addExplanation(explanation); |
+ |
+ if (schemeIsCryptographic && mixedContentStatus && (mixedContentStatus.ranInsecureContent || mixedContentStatus.displayedInsecureContent)) { |
+ /** @type {!SecurityAgent.SecurityStateExplanation} */ |
+ var mixedContentExplanation; |
+ if (mixedContentStatus.ranInsecureContent) { |
+ mixedContentExplanation = /** @type {!SecurityAgent.SecurityStateExplanation} */ ({ |
+ "securityState": mixedContentStatus.ranInsecureContentStyle, |
+ "summary": WebInspector.UIString("Active Mixed Content"), |
+ "description": WebInspector.UIString("You have recently allowed insecure content (such as scripts or iframes) to run on this site.") |
+ }); |
+ } else if (mixedContentStatus.displayedInsecureContent) { |
+ mixedContentExplanation = /** @type {!SecurityAgent.SecurityStateExplanation} */ ({ |
+ "securityState": mixedContentStatus.displayedInsecureContentStyle, |
+ "summary": WebInspector.UIString("Mixed Content"), |
+ "description": WebInspector.UIString("The site includes HTTP resources.") |
+ }); |
+ } |
+ |
+ var requestsAnchor = this._addExplanation(mixedContentExplanation).createChild("div", "security-mixed-content link"); |
+ requestsAnchor.textContent = WebInspector.UIString("View requests in Network Panel"); |
+ requestsAnchor.href = ""; |
+ requestsAnchor.addEventListener("click", mixedContentStatus.ranInsecureContent ? showBlockOverriddenMixedContentInNetworkPanel : showDisplayedMixedContentInNetworkPanel, false); |
+ } |
+ |
+ /** |
+ * @param {!Event} e |
+ */ |
+ function showDisplayedMixedContentInNetworkPanel(e) |
+ { |
+ e.consume(); |
+ WebInspector.NetworkPanel.revealAndFilter(WebInspector.NetworkLogView.FilterType.MixedContent, "displayed"); |
+ } |
+ |
+ /** |
+ * @param {!Event} e |
+ */ |
+ function showBlockOverriddenMixedContentInNetworkPanel(e) |
+ { |
+ e.consume(); |
+ WebInspector.NetworkPanel.revealAndFilter(WebInspector.NetworkLogView.FilterType.MixedContent, "block-overridden"); |
+ } |
}, |
__proto__: WebInspector.VBox.prototype |