1
0
mirror of https://github.com/bitwarden/browser.git synced 2024-09-18 02:41:15 +02:00

improvements to add site notification detection

This commit is contained in:
Kyle Spearrin 2017-08-12 13:09:57 -04:00
parent 690d94d142
commit e151209261

View File

@ -3,22 +3,8 @@
formData = [], formData = [],
barType = null; barType = null;
if (window.location.hostname.indexOf('bitwarden.com') === -1) { setTimeout(collect, 1000);
chrome.storage.local.get('neverDomains', function (obj) { window.addEventListener('popstate', collect);
var domains = obj.neverDomains;
if (domains && domains.hasOwnProperty(window.location.hostname)) {
return;
}
chrome.storage.local.get('disableAddLoginNotification', function (obj) {
if (!obj || !obj.disableAddLoginNotification) {
chrome.runtime.sendMessage({
command: 'bgCollectPageDetails'
});
}
});
});
}
chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) { chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
if (msg.command === 'openNotificationBar') { if (msg.command === 'openNotificationBar') {
@ -39,6 +25,25 @@
} }
}); });
function collect() {
if (window.location.hostname.indexOf('bitwarden.com') === -1) {
chrome.storage.local.get('neverDomains', function (obj) {
var domains = obj.neverDomains;
if (domains && domains.hasOwnProperty(window.location.hostname)) {
return;
}
chrome.storage.local.get('disableAddLoginNotification', function (obj) {
if (!obj || !obj.disableAddLoginNotification) {
chrome.runtime.sendMessage({
command: 'bgCollectPageDetails'
});
}
});
});
}
}
function watchForms(forms) { function watchForms(forms) {
if (!forms || !forms.length) { if (!forms || !forms.length) {
return; return;
@ -57,7 +62,7 @@
form = document.getElementsByTagName('form')[index]; form = document.getElementsByTagName('form')[index];
} }
if (form) { if (form && form.dataset.bitwardenWatching !== '1') {
var formDataObj = { var formDataObj = {
data: forms[i], data: forms[i],
formEl: form, formEl: form,
@ -66,11 +71,22 @@
}; };
locateFields(formDataObj); locateFields(formDataObj);
formData.push(formDataObj); formData.push(formDataObj);
form.addEventListener('submit', formSubmitted, false); listen(form);
form.dataset.bitwardenWatching = '1';
} }
} }
} }
function listen(form) {
form.removeEventListener('submit', formSubmitted, false);
form.addEventListener('submit', formSubmitted, false);
var submitButton = form.querySelector('input[type="submit"], button[type="submit"]');
if (submitButton) {
submitButton.removeEventListener('click', formSubmitted, false);
submitButton.addEventListener('click', formSubmitted, false);
}
}
function locateFields(formDataObj) { function locateFields(formDataObj) {
var passwordId = formDataObj.data.password ? formDataObj.data.password.htmlID : null, var passwordId = formDataObj.data.password ? formDataObj.data.password.htmlID : null,
usernameId = formDataObj.data.username ? formDataObj.data.username.htmlID : null, usernameId = formDataObj.data.username ? formDataObj.data.username.htmlID : null,
@ -112,8 +128,20 @@
} }
function formSubmitted(e) { function formSubmitted(e) {
var form = null;
if (e.type === 'click') {
form = e.target.closest('form');
}
else {
form = e.target;
}
if (!form || form.dataset.bitwardenProcessed === '1') {
return;
}
for (var i = 0; i < formData.length; i++) { for (var i = 0; i < formData.length; i++) {
if (formData[i].formEl === e.target) { if (formData[i].formEl === form) {
if (!formData[i].usernameEl || !formData[i].passwordEl) { if (!formData[i].usernameEl || !formData[i].passwordEl) {
break; break;
} }
@ -125,6 +153,11 @@
}; };
if (login.username && login.username !== '' && login.password && login.password !== '') { if (login.username && login.username !== '' && login.password && login.password !== '') {
form.dataset.bitwardenProcessed = '1';
setTimeout(function () {
form.dataset.bitwardenProcessed = '0';
}, 500);
chrome.runtime.sendMessage({ chrome.runtime.sendMessage({
command: 'bgAddLogin', command: 'bgAddLogin',
login: login login: login