Bug 1567826 - Don't mark any secureContext pages as insecure. r=nhnt11,keeler,Ehsan
Differential Revision: https://phabricator.services.mozilla.com/D39012
This commit is contained in:
@@ -35,6 +35,13 @@ var gIdentityHandler = {
|
||||
*/
|
||||
_isSecureInternalUI: false,
|
||||
|
||||
/**
|
||||
* Whether the content window is considered a "secure context". This
|
||||
* includes "potentially trustworthy" origins such as file:// URLs or localhost.
|
||||
* https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy
|
||||
*/
|
||||
_isSecureContext: false,
|
||||
|
||||
/**
|
||||
* nsITransportSecurityInfo metadata provided by gBrowser.securityUI the last
|
||||
* time the identity UI was updated, or null if the connection is not secure.
|
||||
@@ -52,11 +59,23 @@ var gIdentityHandler = {
|
||||
*/
|
||||
_secureInternalUIWhitelist: /^(?:accounts|addons|cache|config|crashes|downloads|license|logins|preferences|protections|rights|sessionrestore|support|welcomeback)(?:[?#]|$)/i,
|
||||
|
||||
get _isBroken() {
|
||||
/**
|
||||
* Whether the established HTTPS connection is considered "broken".
|
||||
* This could have several reasons, such as mixed content or weak
|
||||
* cryptography. If this is true, _isSecureConnection is false.
|
||||
*/
|
||||
get _isBrokenConnection() {
|
||||
return this._state & Ci.nsIWebProgressListener.STATE_IS_BROKEN;
|
||||
},
|
||||
|
||||
get _isSecure() {
|
||||
/**
|
||||
* Whether the connection to the current site was done via secure
|
||||
* transport. Note that this attribute is not true in all cases that
|
||||
* the site was accessed via HTTPS, i.e. _isSecureConnection will
|
||||
* be false when _isBrokenConnection is true, even though the page
|
||||
* was loaded over HTTPS.
|
||||
*/
|
||||
get _isSecureConnection() {
|
||||
// If a <browser> is included within a chrome document, then this._state
|
||||
// will refer to the security state for the <browser> and not the top level
|
||||
// document. In this case, don't upgrade the security state in the UI
|
||||
@@ -469,6 +488,7 @@ var gIdentityHandler = {
|
||||
// the documentation of the individual properties for details.
|
||||
this.setURI(uri);
|
||||
this._secInfo = gBrowser.securityUI.secInfo;
|
||||
this._isSecureContext = gBrowser.securityUI.isSecureContext;
|
||||
|
||||
// Then, update the user interface with the available data.
|
||||
this.refreshIdentityBlock();
|
||||
@@ -613,7 +633,7 @@ var gIdentityHandler = {
|
||||
if (this._uriHasHost && this._isEV) {
|
||||
return "verifiedIdentity";
|
||||
}
|
||||
if (this._uriHasHost && this._isSecure) {
|
||||
if (this._uriHasHost && this._isSecureConnection) {
|
||||
return "verifiedDomain";
|
||||
}
|
||||
return "unknownIdentity";
|
||||
@@ -647,10 +667,12 @@ var gIdentityHandler = {
|
||||
let icon_labels_dir = "ltr";
|
||||
|
||||
if (this._isSecureInternalUI) {
|
||||
// This is a secure internal Firefox page.
|
||||
this._identityBox.className = "chromeUI";
|
||||
let brandBundle = document.getElementById("bundle_brand");
|
||||
icon_label = brandBundle.getString("brandShorterName");
|
||||
} else if (this._uriHasHost && this._isEV) {
|
||||
// This is a secure connection with EV.
|
||||
this._identityBox.className = "verifiedIdentity";
|
||||
if (this._isMixedActiveContentBlocked) {
|
||||
this._identityBox.classList.add("mixedActiveBlocked");
|
||||
@@ -681,13 +703,15 @@ var gIdentityHandler = {
|
||||
: "ltr";
|
||||
}
|
||||
} else if (this._pageExtensionPolicy) {
|
||||
// This is a WebExtension page.
|
||||
this._identityBox.className = "extensionPage";
|
||||
let extensionName = this._pageExtensionPolicy.name;
|
||||
icon_label = gNavigatorBundle.getFormattedString(
|
||||
"identity.extension.label",
|
||||
[extensionName]
|
||||
);
|
||||
} else if (this._uriHasHost && this._isSecure) {
|
||||
} else if (this._uriHasHost && this._isSecureConnection) {
|
||||
// This is a secure connection.
|
||||
this._identityBox.className = "verifiedDomain";
|
||||
if (this._isMixedActiveContentBlocked) {
|
||||
this._identityBox.classList.add("mixedActiveBlocked");
|
||||
@@ -699,46 +723,45 @@ var gIdentityHandler = {
|
||||
[this.getIdentityData().caOrg]
|
||||
);
|
||||
}
|
||||
} else if (!this._uriHasHost) {
|
||||
} else if (this._isBrokenConnection) {
|
||||
// This is a secure connection, but something is wrong.
|
||||
this._identityBox.className = "unknownIdentity";
|
||||
|
||||
if (this._isMixedActiveContentLoaded) {
|
||||
this._identityBox.classList.add("mixedActiveContent");
|
||||
} else if (this._isMixedActiveContentBlocked) {
|
||||
this._identityBox.classList.add(
|
||||
"mixedDisplayContentLoadedActiveBlocked"
|
||||
);
|
||||
} else if (this._isMixedPassiveContentLoaded) {
|
||||
this._identityBox.classList.add("mixedDisplayContent");
|
||||
} else {
|
||||
this._identityBox.classList.add("weakCipher");
|
||||
}
|
||||
} else if (
|
||||
gBrowser.selectedBrowser.documentURI &&
|
||||
(gBrowser.selectedBrowser.documentURI.scheme == "about" ||
|
||||
gBrowser.selectedBrowser.documentURI.scheme == "chrome")
|
||||
this._isSecureContext ||
|
||||
(gBrowser.selectedBrowser.documentURI &&
|
||||
(gBrowser.selectedBrowser.documentURI.scheme == "about" ||
|
||||
gBrowser.selectedBrowser.documentURI.scheme == "chrome"))
|
||||
) {
|
||||
// For net errors we should not show notSecure as it's likely confusing
|
||||
// This is a local resource (and shouldn't be marked insecure).
|
||||
this._identityBox.className = "unknownIdentity";
|
||||
} else {
|
||||
if (this._isBroken) {
|
||||
this._identityBox.className = "unknownIdentity";
|
||||
// This is an insecure connection.
|
||||
let warnOnInsecure =
|
||||
this._insecureConnectionIconEnabled ||
|
||||
(this._insecureConnectionIconPBModeEnabled &&
|
||||
PrivateBrowsingUtils.isWindowPrivate(window));
|
||||
let className = warnOnInsecure ? "notSecure" : "unknownIdentity";
|
||||
this._identityBox.className = className;
|
||||
|
||||
if (this._isMixedActiveContentLoaded) {
|
||||
this._identityBox.classList.add("mixedActiveContent");
|
||||
} else if (this._isMixedActiveContentBlocked) {
|
||||
this._identityBox.classList.add(
|
||||
"mixedDisplayContentLoadedActiveBlocked"
|
||||
);
|
||||
} else if (this._isMixedPassiveContentLoaded) {
|
||||
this._identityBox.classList.add("mixedDisplayContent");
|
||||
} else {
|
||||
this._identityBox.classList.add("weakCipher");
|
||||
}
|
||||
} else {
|
||||
let warnOnInsecure =
|
||||
this._insecureConnectionIconEnabled ||
|
||||
(this._insecureConnectionIconPBModeEnabled &&
|
||||
PrivateBrowsingUtils.isWindowPrivate(window));
|
||||
let className = warnOnInsecure ? "notSecure" : "unknownIdentity";
|
||||
this._identityBox.className = className;
|
||||
|
||||
let warnTextOnInsecure =
|
||||
this._insecureConnectionTextEnabled ||
|
||||
(this._insecureConnectionTextPBModeEnabled &&
|
||||
PrivateBrowsingUtils.isWindowPrivate(window));
|
||||
if (warnTextOnInsecure) {
|
||||
icon_label = gNavigatorBundle.getString("identity.notSecure.label");
|
||||
this._identityBox.classList.add("notSecureText");
|
||||
}
|
||||
let warnTextOnInsecure =
|
||||
this._insecureConnectionTextEnabled ||
|
||||
(this._insecureConnectionTextPBModeEnabled &&
|
||||
PrivateBrowsingUtils.isWindowPrivate(window));
|
||||
if (warnTextOnInsecure) {
|
||||
icon_label = gNavigatorBundle.getString("identity.notSecure.label");
|
||||
this._identityBox.classList.add("notSecureText");
|
||||
}
|
||||
if (this._hasInsecureLoginForms) {
|
||||
// Insecure login forms can only be present on "unknown identity"
|
||||
@@ -883,7 +906,7 @@ var gIdentityHandler = {
|
||||
connection = "secure-ev";
|
||||
} else if (this._isCertUserOverridden) {
|
||||
connection = "secure-cert-user-overridden";
|
||||
} else if (this._isSecure) {
|
||||
} else if (this._isSecureConnection) {
|
||||
connection = "secure";
|
||||
customRoot = this._hasCustomRoot();
|
||||
}
|
||||
@@ -911,7 +934,7 @@ var gIdentityHandler = {
|
||||
// cipher.
|
||||
let ciphers = "";
|
||||
if (
|
||||
this._isBroken &&
|
||||
this._isBrokenConnection &&
|
||||
!this._isMixedActiveContentLoaded &&
|
||||
!this._isMixedPassiveContentLoaded
|
||||
) {
|
||||
@@ -935,7 +958,7 @@ var gIdentityHandler = {
|
||||
updateAttribute(element, "loginforms", loginforms);
|
||||
updateAttribute(element, "ciphers", ciphers);
|
||||
updateAttribute(element, "mixedcontent", mixedcontent);
|
||||
updateAttribute(element, "isbroken", this._isBroken);
|
||||
updateAttribute(element, "isbroken", this._isBrokenConnection);
|
||||
updateAttribute(element, "customroot", customRoot);
|
||||
}
|
||||
|
||||
@@ -946,7 +969,7 @@ var gIdentityHandler = {
|
||||
let owner = "";
|
||||
|
||||
// Fill in the CA name if we have a valid TLS certificate.
|
||||
if (this._isSecure || this._isCertUserOverridden) {
|
||||
if (this._isSecureConnection || this._isCertUserOverridden) {
|
||||
verifier = this._identityIconLabels.tooltipText;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user