summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Catanzaro <mcatanzaro@gnome.org>2020-12-08 15:51:04 -0600
committerMichael Catanzaro <mcatanzaro@gnome.org>2020-12-08 21:53:47 +0000
commitf6adf9ce56912aabe61c2a518fcac996361b961d (patch)
tree7d9f54fc7685e8ccf259f8cb4bce2800c65de3fa
parentd86d2aa8051eaa61c36dd4ccd9c08ef9715ad46e (diff)
downloadepiphany-mcatanzaro/js-safety.tar.gz
Avoid weak equality operators in JS codemcatanzaro/js-safety
We don't want type coercions anywhere in our comparisons.
-rw-r--r--embed/web-process-extension/resources/js/ephy.js68
-rw-r--r--embed/web-process-extension/resources/js/overview.js16
2 files changed, 42 insertions, 42 deletions
diff --git a/embed/web-process-extension/resources/js/ephy.js b/embed/web-process-extension/resources/js/ephy.js
index 028919717..a65005901 100644
--- a/embed/web-process-extension/resources/js/ephy.js
+++ b/embed/web-process-extension/resources/js/ephy.js
@@ -9,7 +9,7 @@ Ephy.getAppleMobileWebAppCapable = function()
for (let i = 0; i < metas.length; i++) {
let meta = metas[i];
- if (meta.name == 'apple-mobile-web-app-capable' && meta.getAttribute('content') == 'yes')
+ if (meta.name === 'apple-mobile-web-app-capable' && meta.getAttribute('content') === 'yes')
return true;
}
@@ -22,7 +22,7 @@ Ephy.getWebAppTitle = function()
for (let i = 0; i < metas.length; i++) {
const meta = metas[i];
- if (meta.name == 'application-name')
+ if (meta.name === 'application-name')
return meta.content;
if (meta.name === 'apple-mobile-web-app-title')
@@ -30,7 +30,7 @@ Ephy.getWebAppTitle = function()
// og:site_name is read from the property attribute (standard), but is
// commonly seen on the web in the name attribute. Both are supported.
- if (meta.getAttribute('property') == 'og:site_name' || meta.name == 'og:site_name')
+ if (meta.getAttribute('property') === 'og:site_name' || meta.name === 'og:site_name')
return meta.content;
}
@@ -62,16 +62,16 @@ Ephy.getWebAppIcon = function(baseURL)
for (let i = 0; i < links.length; i++) {
const link = links[i];
- if (link.rel == 'icon' || link.rel == 'shortcut icon' || link.rel == 'icon shortcut' || link.rel == 'shortcut-icon' || link.rel == 'apple-touch-icon' || link.rel == 'apple-touch-icon-precomposed') {
+ if (link.rel === 'icon' || link.rel === 'shortcut icon' || link.rel === 'icon shortcut' || link.rel === 'shortcut-icon' || link.rel === 'apple-touch-icon' || link.rel === 'apple-touch-icon-precomposed') {
const sizes = link.getAttribute('sizes');
if (!sizes) {
- if (largestIconSize == 0 && (!htmlIconURL || link.rel == 'apple-touch-icon' || link.rel == 'apple-touch-icon-precomposed'))
+ if (largestIconSize === 0 && (!htmlIconURL || link.rel === 'apple-touch-icon' || link.rel === 'apple-touch-icon-precomposed'))
htmlIconURL = link.href;
continue;
}
- if (sizes == 'any') {
+ if (sizes === 'any') {
// "any" means a vector, and thus it will always be the largest icon.
htmlIconURL = link.href;
break;
@@ -82,7 +82,7 @@ Ephy.getWebAppIcon = function(baseURL)
const size = sizesList[j].toLowerCase().split('x');
// Only accept square icons.
- if (size.length != 2 || size[0] != size[1])
+ if (size.length !== 2 || size[0] !== size[1])
continue;
// Only accept icons of 96 px (smallest GNOME HIG app icon) or larger.
@@ -96,17 +96,17 @@ Ephy.getWebAppIcon = function(baseURL)
}
}
- if (largestIconSize != 0 && htmlIconURL)
+ if (largestIconSize !== 0 && htmlIconURL)
return { 'url' : new URL(htmlIconURL, baseURL).href, 'color' : null };
for (let i = 0; i < metas.length; i++) {
const meta = metas[i];
- if (meta.name == 'msapplication-TileImage')
+ if (meta.name === 'msapplication-TileImage')
msIconURL = meta.content;
- else if (meta.name == 'msapplication-TileColor')
+ else if (meta.name === 'msapplication-TileColor')
iconColor = meta.content;
- else if (meta.getAttribute('property') == 'og:image' || meta.getAttribute('itemprop') == 'image')
+ else if (meta.getAttribute('property') === 'og:image' || meta.getAttribute('itemprop') === 'image')
ogpIcon = meta.content;
}
@@ -167,12 +167,12 @@ Ephy.PreFillUserMenu = class PreFillUserMenu
_onKeyDown(event)
{
- if (event.key == 'Escape') {
+ if (event.key === 'Escape') {
this._removeMenu();
return;
}
- if (event.key != 'ArrowDown' && event.key != 'ArrowUp')
+ if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp')
return;
let container = document.getElementById('ephy-user-choices-container');
@@ -183,10 +183,10 @@ Ephy.PreFillUserMenu = class PreFillUserMenu
let newSelect = null;
if (this._selected)
- newSelect = event.key != 'ArrowUp' ? this._selected.previousSibling : this._selected.nextSibling;
+ newSelect = event.key !== 'ArrowUp' ? this._selected.previousSibling : this._selected.nextSibling;
if (!newSelect)
- newSelect = event.key != 'ArrowUp' ? container.firstElementChild.lastElementChild : container.firstElementChild.firstElementChild;
+ newSelect = event.key !== 'ArrowUp' ? container.firstElementChild.lastElementChild : container.firstElementChild.firstElementChild;
if (newSelect) {
this._selected = newSelect;
@@ -242,7 +242,7 @@ Ephy.PreFillUserMenu = class PreFillUserMenu
li.tabindex = -1;
ul.appendChild(li);
- if (user == this._userElement.value)
+ if (user === this._userElement.value)
this._selected = li;
let anchor = document.createElement('a');
@@ -304,7 +304,7 @@ Ephy.handleFormSubmission = function(pageID, frameID, form)
let formManager = null;
for (let i = 0; i < Ephy.formManagers.length; i++) {
let manager = Ephy.formManagers[i];
- if (manager.frameID() == frameID && manager.form() == form) {
+ if (manager.frameID() === frameID && manager.form() === form) {
formManager = manager;
break;
}
@@ -538,12 +538,12 @@ Ephy.FormManager = class FormManager
return;
let permission = Ephy.permissionsManager.permission(Ephy.PermissionType.SAVE_PASSWORD, formAuth.origin);
- if (permission == Ephy.Permission.DENY) {
+ if (permission === Ephy.Permission.DENY) {
Ephy.log('User/password storage permission previously denied. Not asking about storing.');
return;
}
- if (permission == Ephy.Permission.UNDECIDED && Ephy.isWebApplication())
+ if (permission === Ephy.Permission.UNDECIDED && Ephy.isWebApplication())
permission = Ephy.Permission.PERMIT;
Ephy.passwordManager.query(
@@ -553,12 +553,12 @@ Ephy.FormManager = class FormManager
formAuth.usernameField,
formAuth.passwordField).then(authInfo => {
if (authInfo) {
- if (authInfo.username == formAuth.username && authInfo.password == formAuth.password) {
+ if (authInfo.username === formAuth.username && authInfo.password === formAuth.password) {
Ephy.log('User/password already stored. Not asking about storing.');
return;
}
- if (permission == Ephy.Permission.PERMIT) {
+ if (permission === Ephy.Permission.PERMIT) {
Ephy.log('User/password not yet stored. Storing.');
Ephy.passwordManager.save(formAuth.origin,
formAuth.targetOrigin,
@@ -581,7 +581,7 @@ Ephy.FormManager = class FormManager
formAuth.password,
formAuth.usernameField,
formAuth.passwordField,
- authInfo == null,
+ authInfo === null,
this._pageID);
}
);
@@ -606,12 +606,12 @@ Ephy.FormManager = class FormManager
let isFormActionInsecure = false;
if (this._form.action) {
let url = new URL(this._form.action);
- if (url.protocol == 'http:') {
+ if (url.protocol === 'http:') {
// We trust localhost to be local since glib!616.
let parts = url.hostname.split('.');
if (parts.length > 0) {
let tld = parts[parts.length - 1];
- isFormActionInsecure = tld != "127.0.0.1" && tld != "::1" && tld != "localhost";
+ isFormActionInsecure = tld !== "127.0.0.1" && tld !== "::1" && tld !== "localhost";
}
}
}
@@ -629,7 +629,7 @@ Ephy.FormManager = class FormManager
// Old password, New password, Confirm new password.
// Forms with more than 3 password fields are unlikely,
// and we don't know how to process them, so reject them
- if (passwordFields.length == 3)
+ if (passwordFields.length === 3)
return null;
passwordFields.push({ 'element' : element, 'index' : i });
}
@@ -664,41 +664,41 @@ Ephy.FormManager = class FormManager
// submits login data, because otherwise all the fields are empty. In that
// case just pick the first field.
let passwordNodeIndex = 0;
- if (!forAutofill && passwordNodes.length != 1) {
+ if (!forAutofill && passwordNodes.length !== 1) {
// Get values of all password fields.
let passwords = [];
for (let i = passwordNodes.length - 1; i >= 0; i--)
passwords[i] = passwordNodes[i].element.value;
- if (passwordNodes.length == 2) {
+ if (passwordNodes.length === 2) {
// If there are two password fields, assume that the form has either
// Password and Confirm password fields, or Old password and New password.
// That can be guessed by comparing values in the fields. If they are
// different, we assume that the second password is "new" and use it.
// If they match, then just take the first field.
- if (passwords[0] == passwords[1]) {
+ if (passwords[0] === passwords[1]) {
// Password / Confirm password.
passwordNodeIndex = 0;
} else {
// Old password / New password.
passwordNodeIndex = 1;
}
- } else if (passwordNodes.length == 3) {
+ } else if (passwordNodes.length === 3) {
// This is probably a complete Old password, New password, Confirm
// new password case. Here we assume that if two fields have the same
// value, then it's the new password and we should take it. A special
// case is when all 3 passwords are different. We don't know what to
// do in this case, so just reject the form.
- if (passwords[0] == passwords[1] && passwords[1] == passwords[2]) {
+ if (passwords[0] === passwords[1] && passwords[1] === passwords[2]) {
// All values are same.
passwordNodeIndex = 0;
- } else if (passwords[0] == passwords[1]) {
+ } else if (passwords[0] === passwords[1]) {
// New password / Confirm new password / Old password.
passwordNodeIndex = 0;
- } else if (passwords[0] == passwords[2]) {
+ } else if (passwords[0] === passwords[2]) {
// New password / Old password / Confirm new password.
passwordNodeIndex = 0;
- } else if (passwords[1] == passwords[2]) {
+ } else if (passwords[1] === passwords[2]) {
// Old password / New password / Confirm new password.
passwordNodeIndex = 1;
} else {
@@ -720,7 +720,7 @@ Ephy.FormManager = class FormManager
_generateFormAuth(forAutofill) {
let formAuth = this._findFormAuthElements(forAutofill);
- if (formAuth == null)
+ if (formAuth === null)
return null;
formAuth.origin = new URL(String(window.location)).origin;
diff --git a/embed/web-process-extension/resources/js/overview.js b/embed/web-process-extension/resources/js/overview.js
index 40413663b..43d612346 100644
--- a/embed/web-process-extension/resources/js/overview.js
+++ b/embed/web-process-extension/resources/js/overview.js
@@ -29,7 +29,7 @@ Ephy.Overview = class Overview
let anchors = document.getElementsByTagName('a');
for (let i = 0; i < anchors.length; i++) {
let anchor = anchors[i];
- if (anchor.className != 'overview-item')
+ if (anchor.className !== 'overview-item')
continue;
let item = new Ephy.Overview.Item(anchor);
@@ -67,7 +67,7 @@ Ephy.Overview = class Overview
_onKeyPress(event)
{
- if (event.which != 127)
+ if (event.which !== 127)
return;
let item = document.activeElement;
@@ -99,7 +99,7 @@ Ephy.Overview = class Overview
let anchors = document.getElementsByTagName('a');
for (let anchor of anchors) {
- if (anchor.href == '')
+ if (anchor.href === '')
document.removeChild(anchor);
}
}
@@ -111,7 +111,7 @@ Ephy.Overview = class Overview
setTimeout(() => {
item.parentNode.removeChild(item);
for (let i = 0; i < this._items.length; i++) {
- if (this._items[i].url() == item.href) {
+ if (this._items[i].url() === item.href) {
this._items.splice(i, 1);
break;
}
@@ -175,14 +175,14 @@ Ephy.Overview = class Overview
_onThumbnailChanged(url, path)
{
- if (this._items.length == 0) {
+ if (this._items.length === 0) {
this._pendingThumbnailChanges.push({ url: url, path: path });
return;
}
for (let i = 0; i < this._items.length; i++) {
let item = this._items[i];
- if (item.url() == url) {
+ if (item.url() === url) {
item.setThumbnailPath(path);
return;
}
@@ -191,14 +191,14 @@ Ephy.Overview = class Overview
_onTitleChanged(url, title)
{
- if (this._items.length == 0) {
+ if (this._items.length === 0) {
this._pendingTitleChanges.push({ url: url, title: title });
return;
}
for (let i = 0; i < this._items.length; i++) {
let item = this._items[i];
- if (item.url() == url) {
+ if (item.url() === url) {
item.setTitle(title);
return;
}