dont autofill non-empty fields on page load

This commit is contained in:
Kyle Spearrin 2019-09-25 09:54:01 -04:00
parent db55601fcd
commit 93e5eeda6b
2 changed files with 9 additions and 6 deletions

2
jslib

@ -1 +1 @@
Subproject commit 6b82cd0380d33c83e8b242713eb173d94e16e9f4 Subproject commit 971e19335f66ac64845b65a7bcf688811f60eaff

View File

@ -119,7 +119,7 @@ export default class AutofillService implements AutofillServiceInterface {
getFormsWithPasswordFields(pageDetails: AutofillPageDetails): any[] { getFormsWithPasswordFields(pageDetails: AutofillPageDetails): any[] {
const formData: any[] = []; const formData: any[] = [];
const passwordFields = this.loadPasswordFields(pageDetails, true, true); const passwordFields = this.loadPasswordFields(pageDetails, true, true, false);
if (passwordFields.length === 0) { if (passwordFields.length === 0) {
return formData; return formData;
} }
@ -165,6 +165,7 @@ export default class AutofillService implements AutofillServiceInterface {
const fillScript = this.generateFillScript(pd.details, { const fillScript = this.generateFillScript(pd.details, {
skipUsernameOnlyFill: options.skipUsernameOnlyFill || false, skipUsernameOnlyFill: options.skipUsernameOnlyFill || false,
onlyEmptyFields: options.onlyEmptyFields || false,
onlyVisibleFields: options.onlyVisibleFields || false, onlyVisibleFields: options.onlyVisibleFields || false,
cipher: options.cipher, cipher: options.cipher,
}); });
@ -227,6 +228,7 @@ export default class AutofillService implements AutofillServiceInterface {
skipTotp: !fromCommand, skipTotp: !fromCommand,
skipLastUsed: true, skipLastUsed: true,
skipUsernameOnlyFill: !fromCommand, skipUsernameOnlyFill: !fromCommand,
onlyEmptyFields: !fromCommand,
onlyVisibleFields: !fromCommand, onlyVisibleFields: !fromCommand,
}); });
} }
@ -313,10 +315,10 @@ export default class AutofillService implements AutofillServiceInterface {
return fillScript; return fillScript;
} }
let passwordFields = this.loadPasswordFields(pageDetails, false, false); let passwordFields = this.loadPasswordFields(pageDetails, false, false, options.onlyEmptyFields);
if (!passwordFields.length && !options.onlyVisibleFields) { if (!passwordFields.length && !options.onlyVisibleFields) {
// not able to find any viewable password fields. maybe there are some "hidden" ones? // not able to find any viewable password fields. maybe there are some "hidden" ones?
passwordFields = this.loadPasswordFields(pageDetails, true, true); passwordFields = this.loadPasswordFields(pageDetails, true, true, options.onlyEmptyFields);
} }
for (const formKey in pageDetails.forms) { for (const formKey in pageDetails.forms) {
@ -871,7 +873,8 @@ export default class AutofillService implements AutofillServiceInterface {
} }
} }
private loadPasswordFields(pageDetails: AutofillPageDetails, canBeHidden: boolean, canBeReadOnly: boolean) { private loadPasswordFields(pageDetails: AutofillPageDetails, canBeHidden: boolean, canBeReadOnly: boolean,
mustBeEmpty: boolean) {
const arr: AutofillField[] = []; const arr: AutofillField[] = [];
pageDetails.fields.forEach((f) => { pageDetails.fields.forEach((f) => {
const isPassword = f.type === 'password'; const isPassword = f.type === 'password';
@ -904,7 +907,7 @@ export default class AutofillService implements AutofillServiceInterface {
return false; return false;
}; };
if (!f.disabled && (canBeReadOnly || !f.readonly) && (isPassword || isLikePassword()) if (!f.disabled && (canBeReadOnly || !f.readonly) && (isPassword || isLikePassword())
&& (canBeHidden || f.viewable)) { && (canBeHidden || f.viewable) && (!mustBeEmpty || f.value == null || f.value.trim() === '')) {
arr.push(f); arr.push(f);
} }
}); });