Dispatch input event for Range element keyboard event

For any value update, dispatch both input and change event.

Also removes extra dispatch change event, as event are dispatch from TextFieldInputType:setValue.

R=tkent, keishi1
BUG=345611
TEST=On keyboard event, both oninput and onchange event are triggered

Review URL: https://codereview.chromium.org/178593003

git-svn-id: svn://svn.chromium.org/blink/trunk@168558 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 1ba8b4eb
Test that for each keyboard event both input and change event are dispatched
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
Move left
PASS inputEventCounter is >= lastInputEventCounter + 1
PASS changeEventCounter is >= lastChangeEventCounter + 1
Move right
PASS inputEventCounter is >= lastInputEventCounter + 1
PASS changeEventCounter is >= lastChangeEventCounter + 1
PASS successfullyParsed is true
TEST COMPLETE
<html>
<head>
<script src="../../../resources/js-test.js"></script>
</head>
<body>
<input type="range" id="slider" oninput="log(event)" onchange="log(event)" min=0 max=100 value=50>
<script>
description('Test that for each keyboard event both input and change event are dispatched');
var changeEventCounter = 0;
var lastChangeEventCounter = changeEventCounter;
var inputEventCounter = 0;
var lastInputEventCounter = inputEventCounter;
function log(event) {
if (event.type == 'input')
inputEventCounter++;
if (event.type == 'change')
changeEventCounter++;
}
function testInput() {
var slider = document.getElementById('slider');
if (window.testRunner) {
// slider drag
slider.focus();
debug('Move left');
eventSender.keyDown('leftArrow');
shouldBeGreaterThanOrEqual('inputEventCounter' , 'lastInputEventCounter + 1');
shouldBeGreaterThanOrEqual('changeEventCounter', 'lastChangeEventCounter + 1');
debug('Move right');
lastInputEventCounter = inputEventCounter;
lastChangeEventCounter = changeEventCounter;
eventSender.keyDown('rightArrow');
shouldBeGreaterThanOrEqual('inputEventCounter' , 'lastInputEventCounter + 1');
shouldBeGreaterThanOrEqual('changeEventCounter', 'lastChangeEventCounter + 1');
}
}
testInput();
</script>
</body>
</html>
......@@ -230,12 +230,11 @@ void RangeInputType::handleKeydownEvent(KeyboardEvent* event)
if (newValue != current) {
EventQueueScope scope;
TextFieldEventBehavior eventBehavior = DispatchChangeEvent;
TextFieldEventBehavior eventBehavior = DispatchInputAndChangeEvent;
setValueAsDecimal(newValue, eventBehavior, IGNORE_EXCEPTION);
if (AXObjectCache* cache = element().document().existingAXObjectCache())
cache->postNotification(&element(), AXObjectCache::AXValueChanged, true);
element().dispatchFormControlChangeEvent();
}
event->setDefaultHandled();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment