| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <script type="text/javascript"> |
| description('Tests that the speech button ignores programmatic click events.'); |
| |
| function sendClick(useEventSender) { |
| var input = document.getElementById('speechInput'); |
| var clientX = input.offsetWidth - 4; |
| var clientY = input.offsetHeight / 2; |
| var pageX = input.offsetLeft + clientX; |
| var pageY = input.offsetTop + clientY; |
| if (useEventSender) { |
| eventSender.mouseMoveTo(pageX, pageY); |
| eventSender.mouseDown(); |
| eventSender.mouseUp(); |
| } else { |
| var event = document.createEvent("MouseEvents"); |
| event.initMouseEvent('click', true, true, window, 1, pageX, pageY, clientX, clientY, |
| false, false, false, false, 0, document); |
| input.dispatchEvent(event); |
| } |
| } |
| |
| function setupDispatchEventTest() { |
| document.getElementById('speechInput').onwebkitspeechchange = function() { |
| testFailed('speech button accepted a programmatic click and fired onChange event.'); |
| finishJSTest(); |
| }; |
| setTimeout(function() { |
| testPassed('speech button ignored the programmatic click event.'); |
| finishJSTest(); |
| }, 1000); |
| sendClick(false); |
| } |
| |
| // In this test, we first send a click via the eventSender interface which is available only |
| // within our test environment. This mimics a real user input event and hence the speech button |
| // should treat it normally. We'll be receiving the mock recognition result and verify that. |
| // Next we send a generated click event via the dispatchEvent interface which is available |
| // for any web page to use. The speech button should identify that this is not a real user |
| // input event and not process it. |
| function run() { |
| if (window.testRunner && window.eventSender) { |
| // Running in DRT, test the eventSender case. |
| testRunner.addMockSpeechInputResult('Pictures of the moon', 1.0, ''); |
| document.getElementById('speechInput').onwebkitspeechchange = function() { |
| shouldBeEqualToString('document.getElementById("speechInput").value', 'Pictures of the moon'); |
| |
| // The speech button is still in the processing state and does not accept clicks. So ask for |
| // a callback once it has processed pending events before sending a programmatic click. |
| setTimeout(setupDispatchEventTest, 0); |
| }; |
| sendClick(true); |
| } else { |
| setupDispatchEventTest(); |
| } |
| } |
| |
| window.onload = run; |
| window.jsTestIsAsync = true; |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| <input id='speechInput' x-webkit-speech> |
| </body> |
| </html> |