| <!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> |