<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[170808] trunk</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/170808">170808</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2014-07-04 12:12:25 -0700 (Fri, 04 Jul 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>input type=range element should only fire change events after committing a value
https://bugs.webkit.org/show_bug.cgi?id=134545
Patch by Julien Quint <pom@graougraou.com> on 2014-07-04
Reviewed by Dean Jackson.
Source/WebCore:
A "change" event was fired every time the slider thumb element was dragged
by the user. The "change" event is now fired only after the thumb
element has stopped moving; previously, both "input" and "change" events
where dispatched while changes were being made. This new behavior is
consistent with the specification (cf.
http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#event-input-change),
as well as other implementations such as Firefox and Chrome.
* Modules/mediacontrols/mediaControlsApple.js:
(Controller.prototype.createControls): Listen to the "input" event
rather than the "change" event for the timeline control in order to
keep track of value changes when the user is dragging the thumb.
* accessibility/AccessibilitySlider.cpp:
(WebCore::AccessibilitySlider::setValue): Dispatch "change" event while
setting the new value rather than dispatching later, since setting the
value now clears the change flag.
* html/RangeInputType.cpp:
(WebCore::RangeInputType::setValue): Update the text value of the
control in the case when no event is to be dispatched, so that this
value can be checked the next time a "change" event dispatch is
requested.
* html/shadow/SliderThumbElement.cpp:
(WebCore::SliderThumbElement::setPositionFromPoint): Removed the
dispatch of the "change" event, and no longer track the text value of
the element as a result of dispatching a "change" event.
(WebCore::SliderThumbElement::stopDragging): Dispatch the "change" event
on completing the drag.
LayoutTests:
Two existing tests are updated to count "input" events as well as
"change" events. The tests now verify that "change" is only fired once
after every slider drag completes, whereas "input" may be fired more
than once.
* fast/forms/range/range-drag-expected.txt:
* fast/forms/range/range-drag-when-toggled-disabled-expected.txt:
* fast/forms/range/range-drag-when-toggled-disabled.html:
* fast/forms/range/range-drag.html:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastformsrangerangedragexpectedtxt">trunk/LayoutTests/fast/forms/range/range-drag-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastformsrangerangedragwhentoggleddisabledexpectedtxt">trunk/LayoutTests/fast/forms/range/range-drag-when-toggled-disabled-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastformsrangerangedragwhentoggleddisabledhtml">trunk/LayoutTests/fast/forms/range/range-drag-when-toggled-disabled.html</a></li>
<li><a href="#trunkLayoutTestsfastformsrangerangedraghtml">trunk/LayoutTests/fast/forms/range/range-drag.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmediacontrolsmediaControlsApplejs">trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.js</a></li>
<li><a href="#trunkSourceWebCoreaccessibilityAccessibilitySlidercpp">trunk/Source/WebCore/accessibility/AccessibilitySlider.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlRangeInputTypecpp">trunk/Source/WebCore/html/RangeInputType.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlshadowSliderThumbElementcpp">trunk/Source/WebCore/html/shadow/SliderThumbElement.cpp</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (170807 => 170808)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-07-04 18:07:26 UTC (rev 170807)
+++ trunk/LayoutTests/ChangeLog        2014-07-04 19:12:25 UTC (rev 170808)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2014-07-04 Julien Quint <pom@graougraou.com>
+
+ input type=range element should only fire change events after committing a value
+ https://bugs.webkit.org/show_bug.cgi?id=134545
+
+ Reviewed by Dean Jackson.
+
+ Two existing tests are updated to count "input" events as well as
+ "change" events. The tests now verify that "change" is only fired once
+ after every slider drag completes, whereas "input" may be fired more
+ than once.
+
+ * fast/forms/range/range-drag-expected.txt:
+ * fast/forms/range/range-drag-when-toggled-disabled-expected.txt:
+ * fast/forms/range/range-drag-when-toggled-disabled.html:
+ * fast/forms/range/range-drag.html:
+
</ins><span class="cx"> 2014-07-04 Mario Sanchez Prada <mario.prada@samsung.com>
</span><span class="cx">
</span><span class="cx"> buildAccessibilityTree() needs to be removed from individual layout tests
</span></span></pre></div>
<a id="trunkLayoutTestsfastformsrangerangedragexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/forms/range/range-drag-expected.txt (170807 => 170808)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/forms/range/range-drag-expected.txt        2014-07-04 18:07:26 UTC (rev 170807)
+++ trunk/LayoutTests/fast/forms/range/range-drag-expected.txt        2014-07-04 19:12:25 UTC (rev 170808)
</span><span class="lines">@@ -3,23 +3,29 @@
</span><span class="cx"> Tests for range dragging from center.
</span><span class="cx"> readOnly=false, disabled=false
</span><span class="cx"> PASS input.value is "100"
</span><del>-PASS changeEventCounter is >= lastChangeEventCounter + 1
</del><ins>+PASS inputEventCounter is >= lastInputEventCounter + 1
+PASS changeEventCounter is lastChangeEventCounter + 1
</ins><span class="cx"> readOnly=true
</span><span class="cx"> PASS input.value is "50"
</span><ins>+PASS lastInputEventCounter is inputEventCounter
</ins><span class="cx"> PASS lastChangeEventCounter is changeEventCounter
</span><span class="cx"> disabled=true
</span><span class="cx"> PASS input.value is "50"
</span><ins>+PASS lastInputEventCounter is inputEventCounter
</ins><span class="cx"> PASS lastChangeEventCounter is changeEventCounter
</span><span class="cx">
</span><span class="cx"> Tests for range dragging from edge
</span><span class="cx"> readOnly=false, disabled=false
</span><span class="cx"> PASS input.value is "100"
</span><del>-PASS changeEventCounter is >= lastChangeEventCounter + 1
</del><ins>+PASS inputEventCounter is >= lastInputEventCounter + 1
+PASS changeEventCounter is lastChangeEventCounter + 1
</ins><span class="cx"> readOnly=true
</span><span class="cx"> PASS input.value is "50"
</span><ins>+PASS lastInputEventCounter is inputEventCounter
</ins><span class="cx"> PASS lastChangeEventCounter is changeEventCounter
</span><span class="cx"> disabled=true
</span><span class="cx"> PASS input.value is "50"
</span><ins>+PASS lastInputEventCounter is inputEventCounter
</ins><span class="cx"> PASS lastChangeEventCounter is changeEventCounter
</span><span class="cx">
</span><span class="cx"> PASS successfullyParsed is true
</span></span></pre></div>
<a id="trunkLayoutTestsfastformsrangerangedragwhentoggleddisabledexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/forms/range/range-drag-when-toggled-disabled-expected.txt (170807 => 170808)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/forms/range/range-drag-when-toggled-disabled-expected.txt        2014-07-04 18:07:26 UTC (rev 170807)
+++ trunk/LayoutTests/fast/forms/range/range-drag-when-toggled-disabled-expected.txt        2014-07-04 19:12:25 UTC (rev 170808)
</span><span class="lines">@@ -3,23 +3,25 @@
</span><span class="cx"> Tests for range dragging while it toggles to be readonly.
</span><span class="cx"> readOnly=false, disabled=false
</span><span class="cx"> PASS input.value is "100"
</span><del>-PASS changeEventCounter is >= lastChangeEventCounter + 1
</del><ins>+PASS inputEventCounter is >= lastInputEventCounter + 1
</ins><span class="cx"> PASS input.value is "0"
</span><del>-PASS changeEventCounter is >= lastChangeEventCounter + 1
</del><ins>+PASS inputEventCounter is >= lastInputEventCounter + 1
</ins><span class="cx"> readOnly=true
</span><span class="cx"> PASS input.value is "0"
</span><del>-PASS lastChangeEventCounter is changeEventCounter
</del><ins>+PASS lastInputEventCounter is inputEventCounter
</ins><span class="cx">
</span><span class="cx"> Tests for range dragging while it toggles to be disabled.
</span><span class="cx"> readOnly=false, disabled=false
</span><span class="cx"> PASS input.value is "100"
</span><del>-PASS changeEventCounter is >= lastChangeEventCounter + 1
</del><ins>+PASS inputEventCounter is >= lastInputEventCounter + 1
</ins><span class="cx"> PASS input.value is "0"
</span><del>-PASS changeEventCounter is >= lastChangeEventCounter + 1
</del><ins>+PASS inputEventCounter is >= lastInputEventCounter + 1
</ins><span class="cx"> disabled=true
</span><span class="cx"> PASS input.value is "0"
</span><del>-PASS lastChangeEventCounter is changeEventCounter
</del><ins>+PASS lastInputEventCounter is inputEventCounter
</ins><span class="cx">
</span><ins>+PASS changeEventCounter is 1
+
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsfastformsrangerangedragwhentoggleddisabledhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/forms/range/range-drag-when-toggled-disabled.html (170807 => 170808)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/forms/range/range-drag-when-toggled-disabled.html        2014-07-04 18:07:26 UTC (rev 170807)
+++ trunk/LayoutTests/fast/forms/range/range-drag-when-toggled-disabled.html        2014-07-04 19:12:25 UTC (rev 170808)
</span><span class="lines">@@ -11,11 +11,16 @@
</span><span class="cx"> <script>
</span><span class="cx">
</span><span class="cx"> var changeEventCounter = 0;
</span><del>-var lastChangeEventCounter = changeEventCounter;
</del><span class="cx"> function handleChange() {
</span><span class="cx"> changeEventCounter++;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+var inputEventCounter = 0;
+var lastInputEventCounter = inputEventCounter;
+function handleInput() {
+ inputEventCounter++;
+}
+
</ins><span class="cx"> var input = null;
</span><span class="cx">
</span><span class="cx"> function testInput(id, field) {
</span><span class="lines">@@ -24,6 +29,7 @@
</span><span class="cx">
</span><span class="cx"> input = document.getElementById(id);
</span><span class="cx"> input.onchange = handleChange;
</span><ins>+ input.oninput = handleInput;
</ins><span class="cx"> input.focus();
</span><span class="cx">
</span><span class="cx"> var centerY = input.offsetTop + input.offsetHeight / 2;
</span><span class="lines">@@ -49,24 +55,24 @@
</span><span class="cx"> // Drag from center, to right edge, to left edge.
</span><span class="cx"> debug('readOnly=false, disabled=false');
</span><span class="cx"> input.valueAsNumber = 50;
</span><del>- lastChangeEventCounter = changeEventCounter;
</del><ins>+ lastInputEventCounter = inputEventCounter;
</ins><span class="cx"> dragToRightEdge();
</span><span class="cx"> shouldBe('input.value', '"100"');
</span><del>- shouldBeGreaterThanOrEqual('changeEventCounter', 'lastChangeEventCounter + 1');
- lastChangeEventCounter = changeEventCounter;
</del><ins>+ shouldBeGreaterThanOrEqual('inputEventCounter', 'lastInputEventCounter + 1');
+ lastInputEventCounter = inputEventCounter;
</ins><span class="cx"> dragToLeftEdge();
</span><span class="cx"> shouldBe('input.value', '"0"');
</span><del>- shouldBeGreaterThanOrEqual('changeEventCounter', 'lastChangeEventCounter + 1');
</del><ins>+ shouldBeGreaterThanOrEqual('inputEventCounter', 'lastInputEventCounter + 1');
</ins><span class="cx">
</span><span class="cx"> // Toggle (readonly | disabled).
</span><span class="cx"> debug(field + '=true');
</span><span class="cx"> input[field] = true;
</span><span class="cx">
</span><span class="cx"> // Attempt to drag to right edge. Should not change.
</span><del>- lastChangeEventCounter = changeEventCounter;
</del><ins>+ lastInputEventCounter = inputEventCounter;
</ins><span class="cx"> dragToRightEdge();
</span><span class="cx"> shouldBe('input.value', '"0"');
</span><del>- shouldBe('lastChangeEventCounter', 'changeEventCounter');
</del><ins>+ shouldBe('lastInputEventCounter', 'inputEventCounter');
</ins><span class="cx">
</span><span class="cx"> stopDrag();
</span><span class="cx"> }
</span><span class="lines">@@ -83,6 +89,9 @@
</span><span class="cx"> testInput('range2', 'disabled');
</span><span class="cx"> debug('');
</span><span class="cx">
</span><ins>+shouldBe('changeEventCounter', '1');
+debug('');
+
</ins><span class="cx"> </script>
</span><span class="cx"> <script src="../../../resources/js-test-post.js"></script>
</span><span class="cx"> </body>
</span></span></pre></div>
<a id="trunkLayoutTestsfastformsrangerangedraghtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/forms/range/range-drag.html (170807 => 170808)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/forms/range/range-drag.html        2014-07-04 18:07:26 UTC (rev 170807)
+++ trunk/LayoutTests/fast/forms/range/range-drag.html        2014-07-04 19:12:25 UTC (rev 170808)
</span><span class="lines">@@ -8,6 +8,12 @@
</span><span class="cx"> <div id="console"></div>
</span><span class="cx"> <script>
</span><span class="cx">
</span><ins>+var inputEventCounter = 0;
+function handleInput() {
+ inputEventCounter++;
+}
+var lastInputEventCounter = inputEventCounter;
+
</ins><span class="cx"> var changeEventCounter = 0;
</span><span class="cx"> function handleChange() {
</span><span class="cx"> changeEventCounter++;
</span><span class="lines">@@ -40,27 +46,33 @@
</span><span class="cx">
</span><span class="cx"> debug('readOnly=false, disabled=false');
</span><span class="cx"> input.valueAsNumber = 50;
</span><ins>+ lastInputEventCounter = inputEventCounter;
</ins><span class="cx"> lastChangeEventCounter = changeEventCounter;
</span><span class="cx"> dragMouse();
</span><span class="cx"> shouldBe('input.value', '"100"');
</span><del>- shouldBeGreaterThanOrEqual('changeEventCounter', 'lastChangeEventCounter + 1');
</del><ins>+ shouldBeGreaterThanOrEqual('inputEventCounter', 'lastInputEventCounter + 1');
+ shouldBe('changeEventCounter', 'lastChangeEventCounter + 1');
</ins><span class="cx">
</span><span class="cx"> debug('readOnly=true');
</span><span class="cx"> input.disabled = false;
</span><span class="cx"> input.readOnly = true;
</span><span class="cx"> input.valueAsNumber = 50;
</span><ins>+ lastInputEventCounter = inputEventCounter;
</ins><span class="cx"> lastChangeEventCounter = changeEventCounter;
</span><span class="cx"> dragMouse();
</span><span class="cx"> shouldBe('input.value', '"50"');
</span><ins>+ shouldBe('lastInputEventCounter', 'inputEventCounter');
</ins><span class="cx"> shouldBe('lastChangeEventCounter', 'changeEventCounter');
</span><span class="cx">
</span><span class="cx"> debug('disabled=true');
</span><span class="cx"> input.readOnly = false;
</span><span class="cx"> input.disabled = true;
</span><span class="cx"> input.valueAsNumber = 50;
</span><ins>+ lastInputEventCounter = inputEventCounter;
</ins><span class="cx"> lastChangeEventCounter = changeEventCounter;
</span><span class="cx"> dragMouse();
</span><span class="cx"> shouldBe('input.value', '"50"');
</span><ins>+ shouldBe('lastInputEventCounter', 'inputEventCounter');
</ins><span class="cx"> shouldBe('lastChangeEventCounter', 'changeEventCounter');
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -71,6 +83,7 @@
</span><span class="cx">
</span><span class="cx"> debug('Tests for range dragging from center.');
</span><span class="cx"> var input = document.getElementById('range1');
</span><ins>+input.oninput = handleInput;
</ins><span class="cx"> input.onchange = handleChange;
</span><span class="cx"> input.focus();
</span><span class="cx"> testInput(false);
</span><span class="lines">@@ -78,6 +91,7 @@
</span><span class="cx">
</span><span class="cx"> debug('Tests for range dragging from edge');
</span><span class="cx"> var input = document.getElementById('range2');
</span><ins>+input.oninput = handleInput;
</ins><span class="cx"> input.onchange = handleChange;
</span><span class="cx"> input.focus();
</span><span class="cx"> testInput(true);
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (170807 => 170808)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-07-04 18:07:26 UTC (rev 170807)
+++ trunk/Source/WebCore/ChangeLog        2014-07-04 19:12:25 UTC (rev 170808)
</span><span class="lines">@@ -1,3 +1,38 @@
</span><ins>+2014-07-04 Julien Quint <pom@graougraou.com>
+
+ input type=range element should only fire change events after committing a value
+ https://bugs.webkit.org/show_bug.cgi?id=134545
+
+ Reviewed by Dean Jackson.
+
+ A "change" event was fired every time the slider thumb element was dragged
+ by the user. The "change" event is now fired only after the thumb
+ element has stopped moving; previously, both "input" and "change" events
+ where dispatched while changes were being made. This new behavior is
+ consistent with the specification (cf.
+ http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#event-input-change),
+ as well as other implementations such as Firefox and Chrome.
+
+ * Modules/mediacontrols/mediaControlsApple.js:
+ (Controller.prototype.createControls): Listen to the "input" event
+ rather than the "change" event for the timeline control in order to
+ keep track of value changes when the user is dragging the thumb.
+ * accessibility/AccessibilitySlider.cpp:
+ (WebCore::AccessibilitySlider::setValue): Dispatch "change" event while
+ setting the new value rather than dispatching later, since setting the
+ value now clears the change flag.
+ * html/RangeInputType.cpp:
+ (WebCore::RangeInputType::setValue): Update the text value of the
+ control in the case when no event is to be dispatched, so that this
+ value can be checked the next time a "change" event dispatch is
+ requested.
+ * html/shadow/SliderThumbElement.cpp:
+ (WebCore::SliderThumbElement::setPositionFromPoint): Removed the
+ dispatch of the "change" event, and no longer track the text value of
+ the element as a result of dispatching a "change" event.
+ (WebCore::SliderThumbElement::stopDragging): Dispatch the "change" event
+ on completing the drag.
+
</ins><span class="cx"> 2014-07-04 Andreas Kling <akling@apple.com>
</span><span class="cx">
</span><span class="cx"> CTTE: ApplicationCacheHost always has a DocumentLoader.
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediacontrolsmediaControlsApplejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.js (170807 => 170808)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.js        2014-07-04 18:07:26 UTC (rev 170807)
+++ trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.js        2014-07-04 19:12:25 UTC (rev 170808)
</span><span class="lines">@@ -330,7 +330,7 @@
</span><span class="cx"> timeline.setAttribute('aria-label', this.UIString('Duration'));
</span><span class="cx"> timeline.style.backgroundImage = '-webkit-canvas(timeline-' + this.timelineID + ')';
</span><span class="cx"> timeline.type = 'range';
</span><del>- this.listenFor(timeline, 'change', this.handleTimelineChange);
</del><ins>+ this.listenFor(timeline, 'input', this.handleTimelineChange);
</ins><span class="cx"> this.listenFor(timeline, 'mouseover', this.handleTimelineMouseOver);
</span><span class="cx"> this.listenFor(timeline, 'mouseout', this.handleTimelineMouseOut);
</span><span class="cx"> this.listenFor(timeline, 'mousemove', this.handleTimelineMouseMove);
</span></span></pre></div>
<a id="trunkSourceWebCoreaccessibilityAccessibilitySlidercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/accessibility/AccessibilitySlider.cpp (170807 => 170808)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/accessibility/AccessibilitySlider.cpp        2014-07-04 18:07:26 UTC (rev 170807)
+++ trunk/Source/WebCore/accessibility/AccessibilitySlider.cpp        2014-07-04 19:12:25 UTC (rev 170808)
</span><span class="lines">@@ -133,10 +133,7 @@
</span><span class="cx"> if (input->value() == value)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- input->setValue(value);
-
- // Fire change event manually, as RenderSlider::setValueForPosition does.
- input->dispatchFormControlChangeEvent();
</del><ins>+ input->setValue(value, DispatchChangeEvent);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> HTMLInputElement* AccessibilitySlider::inputElement() const
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlRangeInputTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/RangeInputType.cpp (170807 => 170808)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/RangeInputType.cpp        2014-07-04 18:07:26 UTC (rev 170807)
+++ trunk/Source/WebCore/html/RangeInputType.cpp        2014-07-04 19:12:25 UTC (rev 170808)
</span><span class="lines">@@ -327,6 +327,9 @@
</span><span class="cx"> if (!valueChanged)
</span><span class="cx"> return;
</span><span class="cx">
</span><ins>+ if (eventBehavior == DispatchNoEvent)
+ element().setTextAsOfLastFormControlChangeEvent(value);
+
</ins><span class="cx"> typedSliderThumbElement().setPositionFromValue();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlshadowSliderThumbElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/shadow/SliderThumbElement.cpp (170807 => 170808)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/shadow/SliderThumbElement.cpp        2014-07-04 18:07:26 UTC (rev 170807)
+++ trunk/Source/WebCore/html/shadow/SliderThumbElement.cpp        2014-07-04 19:12:25 UTC (rev 170808)
</span><span class="lines">@@ -261,8 +261,6 @@
</span><span class="cx"> if (!trackElement->renderBox())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- input->setTextAsOfLastFormControlChangeEvent(input->value());
-
</del><span class="cx"> // Do all the tracking math relative to the input's renderer's box.
</span><span class="cx"> RenderBox& inputRenderer = *toRenderBox(input->renderer());
</span><span class="cx"> RenderBox& trackRenderer = *trackElement->renderBox();
</span><span class="lines">@@ -312,7 +310,6 @@
</span><span class="cx"> input->setValueFromRenderer(valueString);
</span><span class="cx"> if (renderer())
</span><span class="cx"> renderer()->setNeedsLayout();
</span><del>- input->dispatchFormControlChangeEvent();
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void SliderThumbElement::startDragging()
</span><span class="lines">@@ -333,6 +330,10 @@
</span><span class="cx"> m_inDragMode = false;
</span><span class="cx"> if (renderer())
</span><span class="cx"> renderer()->setNeedsLayout();
</span><ins>+
+ RefPtr<HTMLInputElement> input = hostInput();
+ if (input)
+ input->dispatchFormControlChangeEvent();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #if !PLATFORM(IOS)
</span></span></pre>
</div>
</div>
</body>
</html>