diff --git a/lib/checks/forms/autocomplete-valid-evaluate.js b/lib/checks/forms/autocomplete-valid-evaluate.js
index 8139dc64dd..8e80aa06fb 100644
--- a/lib/checks/forms/autocomplete-valid-evaluate.js
+++ b/lib/checks/forms/autocomplete-valid-evaluate.js
@@ -1,6 +1,6 @@
import { isValidAutocomplete } from '../../commons/text';
-function autocompleteValidEvaluate(node, options, virtualNode) {
+function autocompleteValidEvaluate(_node, options, virtualNode) {
const autocomplete = virtualNode.attr('autocomplete') || '';
return isValidAutocomplete(autocomplete, options);
}
diff --git a/lib/checks/forms/autocomplete-valid.json b/lib/checks/forms/autocomplete-valid.json
index 0906e4b89a..43cc04358c 100644
--- a/lib/checks/forms/autocomplete-valid.json
+++ b/lib/checks/forms/autocomplete-valid.json
@@ -5,7 +5,8 @@
"impact": "serious",
"messages": {
"pass": "the autocomplete attribute is correctly formatted",
- "fail": "the autocomplete attribute is incorrectly formatted"
+ "fail": "the autocomplete attribute is incorrectly formatted",
+ "incomplete": "the autocomplete attribute is incorrect but safe to use"
}
},
"options": {
diff --git a/lib/commons/text/is-valid-autocomplete.js b/lib/commons/text/is-valid-autocomplete.js
index 8ca49035a2..2ad0b4f6d6 100644
--- a/lib/commons/text/is-valid-autocomplete.js
+++ b/lib/commons/text/is-valid-autocomplete.js
@@ -59,7 +59,8 @@ export const autocomplete = {
'email',
'impp'
],
- locations: ['billing', 'shipping']
+ locations: ['billing', 'shipping'],
+ invalidButSafe: ['text']
};
function isValidAutocomplete(
@@ -117,6 +118,11 @@ function isValidAutocomplete(
}
const purposeTerm = autocompleteTerms[autocompleteTerms.length - 1];
+
+ if (autocomplete.invalidButSafe.includes(purposeTerm)) {
+ return undefined;
+ }
+
return (
standaloneTerms.includes(purposeTerm) ||
qualifiedTerms.includes(purposeTerm)
diff --git a/locales/_template.json b/locales/_template.json
index 9aa84b106a..b9ab7bbdef 100644
--- a/locales/_template.json
+++ b/locales/_template.json
@@ -683,7 +683,8 @@
},
"autocomplete-valid": {
"pass": "the autocomplete attribute is correctly formatted",
- "fail": "the autocomplete attribute is incorrectly formatted"
+ "fail": "the autocomplete attribute is incorrectly formatted",
+ "incomplete": "the autocomplete attribute is incorrect but safe to use"
},
"accesskeys": {
"pass": "Accesskey attribute value is unique",
diff --git a/test/checks/forms/autocomplete-valid.js b/test/checks/forms/autocomplete-valid.js
index d44b0dd73c..f6ce08dcc3 100644
--- a/test/checks/forms/autocomplete-valid.js
+++ b/test/checks/forms/autocomplete-valid.js
@@ -21,6 +21,11 @@ describe('autocomplete-valid', function () {
assert.isFalse(evaluate.apply(checkContext, params));
});
+ it('returns undefined (incomplete) if autocomplete is not valid but safe', function () {
+ var params = checkSetup('');
+ assert.isUndefined(evaluate.apply(checkContext, params));
+ });
+
it('uses options to change what is valid autocomplete', function () {
var options = { stateTerms: ['foo'] };
var params = checkSetup(
diff --git a/test/integration/rules/autocomplete-valid/autocomplete-valid.html b/test/integration/rules/autocomplete-valid/autocomplete-valid.html
index d68033d65f..b73d75ef2c 100644
--- a/test/integration/rules/autocomplete-valid/autocomplete-valid.html
+++ b/test/integration/rules/autocomplete-valid/autocomplete-valid.html
@@ -170,3 +170,6 @@
+
+
+
diff --git a/test/integration/rules/autocomplete-valid/autocomplete-valid.json b/test/integration/rules/autocomplete-valid/autocomplete-valid.json
index f1f6f4d974..885682b0b3 100644
--- a/test/integration/rules/autocomplete-valid/autocomplete-valid.json
+++ b/test/integration/rules/autocomplete-valid/autocomplete-valid.json
@@ -2,6 +2,7 @@
"description": "autocomplete-valid tests",
"rule": "autocomplete-valid",
"violations": [["#fail1"], ["#fail2"], ["#fail3"], ["#fail4"], ["#fail5"]],
+ "incomplete": [["#incomplete1"]],
"passes": [
["#pass1"],
["#pass2"],