blob: b2d38f3de74cc7220f7cce2ea312db9d88f7cd64 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script>
jsTestIsAsync = true;
var numErrors = 0;
var numErrorsExpected = 0;
function runTests()
{
if (typeof HTMLFormElement.prototype.requestAutocomplete != 'function') {
testFailed('no requestAutocomplete function');
finishJSTest();
return;
}
checkDynamicAttributes();
checkParsedAttributes();
checkNonUserGesture();
}
function checkForEnumerableProperties(form)
{
var enumerated = false;
for (var field in form) {
if (/onautocomplete/.test(field))
testFailed('enumerable form attribute found on HTMLFormElement: ' + field);
enumerated = true;
}
if (enumerated)
testPassed('no enumerable properties on HTMLFormElement');
else
testFailed('failed to enumerate HTMLFormElement properties');
}
function checkParsedAttributes()
{
numErrorsExpected += 1;
var form = document.forms[0];
checkForEnumerableProperties(form);
// Currently Chrome just immediately dispatches an error.
form.onautocompleteerror = errorWithReason('disabled');
form.requestAutocomplete();
}
function checkDynamicAttributes()
{
numErrorsExpected += 1;
var form = document.createElement('form');
checkForEnumerableProperties(form);
form.autocomplete = 'off';
form.onautocompleteerror = errorWithReason('disabled');
form.requestAutocomplete();
}
function checkNonUserGesture()
{
numErrorsExpected += 1;
var form = document.createElement('form');
checkForEnumerableProperties(form);
form.onautocompleteerror = errorWithReason('disabled');
setTimeout(function()
{
form.requestAutocomplete();
}, 0);
}
function errorWithReason(reason)
{
return function(event) {
if (event instanceof AutocompleteErrorEvent)
testPassed('event is an AutocompleteErrorEvent');
else
testFailed('expected an AutocompleteErrorEvent');
if (event.reason == reason)
testPassed('got expected reason: ' + reason);
else
testFailed('wrong reason, expected: ' + reason + ', got: ' + event.reason);
onError();
};
}
function onError()
{
numErrors += 1;
if (numErrors > numErrorsExpected)
testFailed('too many error events');
else if (numErrors == numErrorsExpected) {
testPassed('got expected number of error events (' + numErrorsExpected + ')');
finishJSTest();
}
}
window.addEventListener('load', runTests, true);
</script>
</head>
<body>
<p> <a href="http://bugs.webkit.org/show_bug.cgi?id=100557">HTMLFormElement#requestAutocomplete and associated events</a> </p>
<p> For this test to pass, you should see all PASSED below. </p>
<form autocomplete="off" onautocompleteerror="onError();"></form>
<p id="console"></p>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>