Title: [141826] trunk
Revision
141826
Author
[email protected]
Date
2013-02-04 15:55:06 -0800 (Mon, 04 Feb 2013)

Log Message

Implement WheelEvent::deltaMode
https://bugs.webkit.org/show_bug.cgi?id=108455

Reviewed by Adam Barth.

Source/WebCore:

Per the spec, WheelEvent::deltaMode should return
DOM_DELTA_PIXEL or DOM_DELTA_LINE or DOM_DELTA_PAGE.

Spec: http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#constructor-wheelevent

Test: fast/event/wheel-event-constructor.html

* dom/WheelEvent.cpp:
(WebCore::WheelEventInit::WheelEventInit):
(WebCore::WheelEvent::WheelEvent):
(WebCore::WheelEvent::initWheelEvent):
(WebCore::deltaMode):
* dom/WheelEvent.h:
(WheelEventInit):
(WebCore::WheelEvent::create):
(WebCore::WheelEvent::deltaMode):
(WheelEvent):
* dom/WheelEvent.idl:
* page/EventHandler.cpp:
(WebCore::wheelGranularityToScrollGranularity):

Source/WebKit/chromium:

* src/WebInputEventConversion.cpp:
(WebKit::WebMouseWheelEventBuilder::WebMouseWheelEventBuilder):

LayoutTests:

Per the spec, WheelEvent::deltaMode should return
DOM_DELTA_PIXEL or DOM_DELTA_LINE or DOM_DELTA_PAGE.

Spec: http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#constructor-wheelevent

* fast/events/constructors/wheel-event-constructor-expected.txt:
* fast/events/constructors/wheel-event-constructor.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (141825 => 141826)


--- trunk/LayoutTests/ChangeLog	2013-02-04 23:54:12 UTC (rev 141825)
+++ trunk/LayoutTests/ChangeLog	2013-02-04 23:55:06 UTC (rev 141826)
@@ -1,3 +1,19 @@
+2013-01-31  Kentaro Hara  <[email protected]>
+
+        Implement WheelEvent::deltaMode
+        https://bugs.webkit.org/show_bug.cgi?id=108455
+
+        Reviewed by Adam Barth.
+
+        Per the spec, WheelEvent::deltaMode should return
+        DOM_DELTA_PIXEL or DOM_DELTA_LINE or DOM_DELTA_PAGE.
+
+        Spec: http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
+        https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#constructor-wheelevent
+
+        * fast/events/constructors/wheel-event-constructor-expected.txt:
+        * fast/events/constructors/wheel-event-constructor.html:
+
 2013-02-04  Dima Gorbik  <[email protected]>
 
         WebVTT <i>, <b> and <u> elements should have default styles

Modified: trunk/LayoutTests/fast/events/constructors/wheel-event-constructor-expected.txt (141825 => 141826)


--- trunk/LayoutTests/fast/events/constructors/wheel-event-constructor-expected.txt	2013-02-04 23:54:12 UTC (rev 141825)
+++ trunk/LayoutTests/fast/events/constructors/wheel-event-constructor-expected.txt	2013-02-04 23:55:06 UTC (rev 141826)
@@ -174,6 +174,31 @@
 PASS new WheelEvent('eventType', { wheelDeltaY: {} }).wheelDeltaY is 0
 PASS new WheelEvent('eventType', { wheelDeltaY: {moemoe: 12345} }).wheelDeltaY is 0
 PASS new WheelEvent('eventType', { wheelDeltaY: {valueOf: function () { return 12345; }} }).wheelDeltaY is 12345
+PASS new WheelEvent('eventType', { deltaMode: 0 }).deltaMode is 0
+PASS new WheelEvent('eventType', { deltaMode: 1 }).deltaMode is 1
+PASS new WheelEvent('eventType', { deltaMode: 4294967294 }).deltaMode is 4294967294
+PASS new WheelEvent('eventType', { deltaMode: 4294967295 }).deltaMode is 4294967295
+PASS new WheelEvent('eventType', { deltaMode: WheelEvent.DOM_DELTA_PIXEL }).deltaMode is WheelEvent.DOM_DELTA_PIXEL
+PASS new WheelEvent('eventType', { deltaMode: WheelEvent.DOM_DELTA_LINE }).deltaMode is WheelEvent.DOM_DELTA_LINE
+PASS new WheelEvent('eventType', { deltaMode: WheelEvent.DOM_DELTA_PAGE }).deltaMode is WheelEvent.DOM_DELTA_PAGE
+PASS new WheelEvent('eventType', { deltaMode: 9007199254740991 }).deltaMode is 4294967295
+PASS new WheelEvent('eventType', { deltaMode: 18446744073709551615 }).deltaMode is 0
+PASS new WheelEvent('eventType', { deltaMode: 12345678901234567890 }).deltaMode is 3944679424
+PASS new WheelEvent('eventType', { deltaMode: -1 }).deltaMode is 4294967295
+PASS new WheelEvent('eventType', { deltaMode: 123.45 }).deltaMode is 123
+PASS new WheelEvent('eventType', { deltaMode: NaN }).deltaMode is 0
+PASS new WheelEvent('eventType', { deltaMode: undefined }).deltaMode is 0
+PASS new WheelEvent('eventType', { deltaMode: null }).deltaMode is 0
+PASS new WheelEvent('eventType', { deltaMode: '' }).deltaMode is 0
+PASS new WheelEvent('eventType', { deltaMode: '12345' }).deltaMode is 12345
+PASS new WheelEvent('eventType', { deltaMode: '12345a' }).deltaMode is 0
+PASS new WheelEvent('eventType', { deltaMode: 'abc' }).deltaMode is 0
+PASS new WheelEvent('eventType', { deltaMode: [] }).deltaMode is 0
+PASS new WheelEvent('eventType', { deltaMode: [12345] }).deltaMode is 12345
+PASS new WheelEvent('eventType', { deltaMode: [12345, 67890] }).deltaMode is 0
+PASS new WheelEvent('eventType', { deltaMode: {} }).deltaMode is 0
+PASS new WheelEvent('eventType', { deltaMode: {moemoe: 12345} }).deltaMode is 0
+PASS new WheelEvent('eventType', { deltaMode: {valueOf: function () { return 12345; }} }).deltaMode is 12345
 PASS new WheelEvent('eventType', { ctrlKey: false }).ctrlKey is false
 PASS new WheelEvent('eventType', { ctrlKey: true }).ctrlKey is true
 PASS new WheelEvent('eventType', { altKey: false }).altKey is false
@@ -220,22 +245,23 @@
 PASS new WheelEvent('eventType', { relatedTarget: {valueOf: function () { return testDiv; } } }).relatedTarget == testDiv is false
 PASS new WheelEvent('eventType', { get relatedTarget() { return 123; } }).relatedTarget is null
 PASS new WheelEvent('eventType', { get relatedTarget() { throw 'WheelEvent Error'; } }) threw exception WheelEvent Error.
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).bubbles is true
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).cancelable is true
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).view is window
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).detail is 111
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).screenX is 222
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).screenY is 333
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).clientX is 444
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).clientY is 555
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).ctrlKey is true
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).shiftKey is true
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).altKey is true
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).metaKey is true
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).button is 666
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).relatedTarget is testDiv
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).wheelDeltaX is 777
-PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).wheelDeltaY is 888
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).bubbles is true
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).cancelable is true
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).view is window
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).detail is 111
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).screenX is 222
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).screenY is 333
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).clientX is 444
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).clientY is 555
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).ctrlKey is true
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).shiftKey is true
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).altKey is true
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).metaKey is true
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).button is 666
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).relatedTarget is testDiv
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).wheelDeltaX is 777
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).wheelDeltaY is 888
+PASS new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).deltaMode is WheelEvent.DOM_DELTA_PAGE
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/fast/events/constructors/wheel-event-constructor.html (141825 => 141826)


--- trunk/LayoutTests/fast/events/constructors/wheel-event-constructor.html	2013-02-04 23:54:12 UTC (rev 141825)
+++ trunk/LayoutTests/fast/events/constructors/wheel-event-constructor.html	2013-02-04 23:55:06 UTC (rev 141826)
@@ -80,6 +80,40 @@
     shouldBe("new WheelEvent('eventType', { " + attr + ": {valueOf: function () { return 12345; }} })." + attr, "12345");
 });
 
+// deltaMode is passed.
+// numbers within the unsigned long range.
+shouldBe("new WheelEvent('eventType', { deltaMode: 0 }).deltaMode", "0");
+shouldBe("new WheelEvent('eventType', { deltaMode: 1 }).deltaMode", "1");
+shouldBe("new WheelEvent('eventType', { deltaMode: 4294967294 }).deltaMode", "4294967294");
+shouldBe("new WheelEvent('eventType', { deltaMode: 4294967295 }).deltaMode", "4294967295");
+shouldBe("new WheelEvent('eventType', { deltaMode: WheelEvent.DOM_DELTA_PIXEL }).deltaMode", "WheelEvent.DOM_DELTA_PIXEL");
+shouldBe("new WheelEvent('eventType', { deltaMode: WheelEvent.DOM_DELTA_LINE }).deltaMode", "WheelEvent.DOM_DELTA_LINE");
+shouldBe("new WheelEvent('eventType', { deltaMode: WheelEvent.DOM_DELTA_PAGE }).deltaMode", "WheelEvent.DOM_DELTA_PAGE");
+
+// numbers out of the unsigned long range.
+// 2^{53}-1, the largest number that can be exactly represented by double.
+shouldBe("new WheelEvent('eventType', { deltaMode: 9007199254740991 }).deltaMode", "4294967295");
+// 2^{64}-1
+shouldBe("new WheelEvent('eventType', { deltaMode: 18446744073709551615 }).deltaMode", "0");
+shouldBe("new WheelEvent('eventType', { deltaMode: 12345678901234567890 }).deltaMode", "3944679424");
+shouldBe("new WheelEvent('eventType', { deltaMode: -1 }).deltaMode", "4294967295");
+shouldBe("new WheelEvent('eventType', { deltaMode: 123.45 }).deltaMode", "123");
+shouldBe("new WheelEvent('eventType', { deltaMode: NaN }).deltaMode", "0");
+
+// Non-numeric values.
+shouldBe("new WheelEvent('eventType', { deltaMode: undefined }).deltaMode", "0");
+shouldBe("new WheelEvent('eventType', { deltaMode: null }).deltaMode", "0");
+shouldBe("new WheelEvent('eventType', { deltaMode: '' }).deltaMode", "0");
+shouldBe("new WheelEvent('eventType', { deltaMode: '12345' }).deltaMode", "12345");
+shouldBe("new WheelEvent('eventType', { deltaMode: '12345a' }).deltaMode", "0");
+shouldBe("new WheelEvent('eventType', { deltaMode: 'abc' }).deltaMode", "0");
+shouldBe("new WheelEvent('eventType', { deltaMode: [] }).deltaMode", "0");
+shouldBe("new WheelEvent('eventType', { deltaMode: [12345] }).deltaMode", "12345");
+shouldBe("new WheelEvent('eventType', { deltaMode: [12345, 67890] }).deltaMode", "0");
+shouldBe("new WheelEvent('eventType', { deltaMode: {} }).deltaMode", "0");
+shouldBe("new WheelEvent('eventType', { deltaMode: {moemoe: 12345} }).deltaMode", "0");
+shouldBe("new WheelEvent('eventType', { deltaMode: {valueOf: function () { return 12345; }} }).deltaMode", "12345");
+
 // ctrlKey, altKey, shiftKey and metaKey are passed.
 ["ctrlKey", "altKey", "shiftKey", "metaKey"].forEach(function (attr) {
     shouldBe("new WheelEvent('eventType', { " + attr + ": false })." + attr, "false");
@@ -141,22 +175,23 @@
 shouldThrow("new WheelEvent('eventType', { get relatedTarget() { throw 'WheelEvent Error'; } })");
 
 // All initializers are passed.
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).bubbles", "true");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).cancelable", "true");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).view", "window");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).detail", "111");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).screenX", "222");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).screenY", "333");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).clientX", "444");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).clientY", "555");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).ctrlKey", "true");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).shiftKey", "true");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).altKey", "true");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).metaKey", "true");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).button", "666");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).relatedTarget", "testDiv");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).wheelDeltaX", "777");
-shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888 }).wheelDeltaY", "888");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).bubbles", "true");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).cancelable", "true");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).view", "window");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).detail", "111");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).screenX", "222");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).screenY", "333");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).clientX", "444");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).clientY", "555");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).ctrlKey", "true");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).shiftKey", "true");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).altKey", "true");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).metaKey", "true");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).button", "666");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).relatedTarget", "testDiv");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).wheelDeltaX", "777");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).wheelDeltaY", "888");
+shouldBe("new WheelEvent('eventType', { bubbles: true, cancelable: true, view: window, detail: 111, screenX: 222, screenY: 333, clientX: 444, clientY: 555, ctrlKey: true, shiftKey: true, altKey: true, metaKey: true, button: 666, relatedTarget: testDiv, wheelDeltaX: 777, wheelDeltaY: 888, deltaMode: WheelEvent.DOM_DELTA_PAGE }).deltaMode", "WheelEvent.DOM_DELTA_PAGE");
 </script>
 <script src=""
 </body>

Modified: trunk/Source/WebCore/ChangeLog (141825 => 141826)


--- trunk/Source/WebCore/ChangeLog	2013-02-04 23:54:12 UTC (rev 141825)
+++ trunk/Source/WebCore/ChangeLog	2013-02-04 23:55:06 UTC (rev 141826)
@@ -1,3 +1,32 @@
+2013-01-31  Kentaro Hara  <[email protected]>
+
+        Implement WheelEvent::deltaMode
+        https://bugs.webkit.org/show_bug.cgi?id=108455
+
+        Reviewed by Adam Barth.
+
+        Per the spec, WheelEvent::deltaMode should return
+        DOM_DELTA_PIXEL or DOM_DELTA_LINE or DOM_DELTA_PAGE.
+
+        Spec: http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
+        https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#constructor-wheelevent
+
+        Test: fast/event/wheel-event-constructor.html
+
+        * dom/WheelEvent.cpp:
+        (WebCore::WheelEventInit::WheelEventInit):
+        (WebCore::WheelEvent::WheelEvent):
+        (WebCore::WheelEvent::initWheelEvent):
+        (WebCore::deltaMode):
+        * dom/WheelEvent.h:
+        (WheelEventInit):
+        (WebCore::WheelEvent::create):
+        (WebCore::WheelEvent::deltaMode):
+        (WheelEvent):
+        * dom/WheelEvent.idl:
+        * page/EventHandler.cpp:
+        (WebCore::wheelGranularityToScrollGranularity):
+
 2013-02-04  Gustavo Noronha Silva  <[email protected]>
 
         [Soup] Remove duplicate setting of first party for cookies

Modified: trunk/Source/WebCore/dom/WheelEvent.cpp (141825 => 141826)


--- trunk/Source/WebCore/dom/WheelEvent.cpp	2013-02-04 23:54:12 UTC (rev 141825)
+++ trunk/Source/WebCore/dom/WheelEvent.cpp	2013-02-04 23:55:06 UTC (rev 141826)
@@ -34,11 +34,12 @@
 WheelEventInit::WheelEventInit()
     : wheelDeltaX(0)
     , wheelDeltaY(0)
+    , deltaMode(WheelEvent::DOM_DELTA_PIXEL)
 {
 }
 
 WheelEvent::WheelEvent()
-    : m_deltaMode(DOMDeltaPixel)
+    : m_deltaMode(DOM_DELTA_PIXEL)
     , m_directionInvertedFromDevice(false)
 {
 }
@@ -46,10 +47,11 @@
 WheelEvent::WheelEvent(const AtomicString& type, const WheelEventInit& initializer)
     : MouseEvent(type, initializer)
     , m_wheelDelta(IntPoint(initializer.wheelDeltaX, initializer.wheelDeltaY))
+    , m_deltaMode(initializer.deltaMode)
 {
 }
 
-WheelEvent::WheelEvent(const FloatPoint& wheelTicks, const FloatPoint& rawDelta, DeltaMode deltaMode,
+WheelEvent::WheelEvent(const FloatPoint& wheelTicks, const FloatPoint& rawDelta, unsigned deltaMode,
     PassRefPtr<AbstractView> view, const IntPoint& screenLocation, const IntPoint& pageLocation,
     bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool directionInvertedFromDevice)
     : MouseEvent(eventNames().mousewheelEvent,
@@ -85,7 +87,7 @@
     m_wheelDelta = IntPoint(rawDeltaX * TickMultiplier, rawDeltaY * TickMultiplier);
     
     m_rawDelta = IntPoint(rawDeltaX, rawDeltaY);
-    m_deltaMode = DOMDeltaPixel;
+    m_deltaMode = DOM_DELTA_PIXEL;
     m_directionInvertedFromDevice = false;
 
     initCoordinates(IntPoint(pageX, pageY));
@@ -109,9 +111,9 @@
     return false;
 }
 
-inline static WheelEvent::DeltaMode deltaMode(const PlatformWheelEvent& event)
+inline static unsigned deltaMode(const PlatformWheelEvent& event)
 {
-    return event.granularity() == ScrollByPageWheelEvent ? WheelEvent::DOMDeltaPage : WheelEvent::DOMDeltaPixel;
+    return event.granularity() == ScrollByPageWheelEvent ? WheelEvent::DOM_DELTA_PAGE : WheelEvent::DOM_DELTA_PIXEL;
 }
 
 PassRefPtr<WheelEventDispatchMediator> WheelEventDispatchMediator::create(const PlatformWheelEvent& event, PassRefPtr<AbstractView> view)

Modified: trunk/Source/WebCore/dom/WheelEvent.h (141825 => 141826)


--- trunk/Source/WebCore/dom/WheelEvent.h	2013-02-04 23:54:12 UTC (rev 141825)
+++ trunk/Source/WebCore/dom/WheelEvent.h	2013-02-04 23:55:06 UTC (rev 141826)
@@ -35,13 +35,18 @@
 
     int wheelDeltaX;
     int wheelDeltaY;
+    unsigned deltaMode;
 };
 
 class WheelEvent : public MouseEvent {
 public:
     enum { TickMultiplier = 120 };
 
-    enum DeltaMode { DOMDeltaPixel, DOMDeltaLine, DOMDeltaPage };
+    enum DeltaMode {
+        DOM_DELTA_PIXEL = 0,
+        DOM_DELTA_LINE,
+        DOM_DELTA_PAGE
+    };
 
     static PassRefPtr<WheelEvent> create()
     {
@@ -54,7 +59,7 @@
     }
 
     static PassRefPtr<WheelEvent> create(const FloatPoint& wheelTicks,
-        const FloatPoint& rawDelta, DeltaMode deltaMode, PassRefPtr<AbstractView> view,
+        const FloatPoint& rawDelta, unsigned deltaMode, PassRefPtr<AbstractView> view,
         const IntPoint& screenLocation, const IntPoint& pageLocation,
         bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool directionInvertedFromDevice)
     {
@@ -75,7 +80,7 @@
     int wheelDeltaY() const { return m_wheelDelta.y(); }
     int rawDeltaX() const { return m_rawDelta.x(); }
     int rawDeltaY() const { return m_rawDelta.y(); }
-    DeltaMode deltaMode() const { return m_deltaMode; }
+    unsigned deltaMode() const { return m_deltaMode; }
 
     bool webkitDirectionInvertedFromDevice() const { return m_directionInvertedFromDevice; }
     // Needed for Objective-C legacy support
@@ -88,13 +93,12 @@
     WheelEvent();
     WheelEvent(const AtomicString&, const WheelEventInit&);
     WheelEvent(const FloatPoint& wheelTicks, const FloatPoint& rawDelta,
-        DeltaMode, PassRefPtr<AbstractView>,
-        const IntPoint& screenLocation, const IntPoint& pageLocation,
+        unsigned, PassRefPtr<AbstractView>, const IntPoint& screenLocation, const IntPoint& pageLocation,
         bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool directionInvertedFromDevice);
 
     IntPoint m_wheelDelta;
     IntPoint m_rawDelta;
-    DeltaMode m_deltaMode;
+    unsigned m_deltaMode;
     bool m_directionInvertedFromDevice;
 };
 

Modified: trunk/Source/WebCore/dom/WheelEvent.idl (141825 => 141826)


--- trunk/Source/WebCore/dom/WheelEvent.idl	2013-02-04 23:54:12 UTC (rev 141825)
+++ trunk/Source/WebCore/dom/WheelEvent.idl	2013-02-04 23:55:06 UTC (rev 141826)
@@ -22,8 +22,13 @@
     ConstructorConditional=DOM4_EVENTS_CONSTRUCTOR,
     ConstructorTemplate=Event
 ] interface WheelEvent : MouseEvent {
+    const unsigned long              DOM_DELTA_PIXEL = 0x00;
+    const unsigned long              DOM_DELTA_LINE  = 0x01;
+    const unsigned long              DOM_DELTA_PAGE  = 0x02;
+
     [InitializedByEventConstructor] readonly attribute long wheelDeltaX;
     [InitializedByEventConstructor] readonly attribute long wheelDeltaY;
+    [InitializedByEventConstructor] readonly attribute unsigned long deltaMode;
 
     readonly attribute long wheelDelta;
 

Modified: trunk/Source/WebCore/page/EventHandler.cpp (141825 => 141826)


--- trunk/Source/WebCore/page/EventHandler.cpp	2013-02-04 23:54:12 UTC (rev 141825)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2013-02-04 23:55:06 UTC (rev 141826)
@@ -251,17 +251,18 @@
 };
 #endif
 
-static inline ScrollGranularity wheelGranularityToScrollGranularity(WheelEvent::DeltaMode deltaMode)
+static inline ScrollGranularity wheelGranularityToScrollGranularity(unsigned deltaMode)
 {
     switch (deltaMode) {
-    case WheelEvent::DOMDeltaPage:
+    case WheelEvent::DOM_DELTA_PAGE:
         return ScrollByPage;
-    case WheelEvent::DOMDeltaLine:
+    case WheelEvent::DOM_DELTA_LINE:
         return ScrollByLine;
-    case WheelEvent::DOMDeltaPixel:
+    case WheelEvent::DOM_DELTA_PIXEL:
         return ScrollByPixel;
+    default:
+        return ScrollByPixel;
     }
-    return ScrollByPixel;
 }
 
 static inline bool scrollNode(float delta, ScrollGranularity granularity, ScrollDirection positiveDirection, ScrollDirection negativeDirection, Node* node, Node** stopNode)

Modified: trunk/Source/WebKit/chromium/ChangeLog (141825 => 141826)


--- trunk/Source/WebKit/chromium/ChangeLog	2013-02-04 23:54:12 UTC (rev 141825)
+++ trunk/Source/WebKit/chromium/ChangeLog	2013-02-04 23:55:06 UTC (rev 141826)
@@ -1,3 +1,13 @@
+2013-01-31  Kentaro Hara  <[email protected]>
+
+        Implement WheelEvent::deltaMode
+        https://bugs.webkit.org/show_bug.cgi?id=108455
+
+        Reviewed by Adam Barth.
+
+        * src/WebInputEventConversion.cpp:
+        (WebKit::WebMouseWheelEventBuilder::WebMouseWheelEventBuilder):
+
 2013-02-04  Mark Pilgrim  <[email protected]>
 
         [Chromium] Move WorkerContextProxy to WebCore

Modified: trunk/Source/WebKit/chromium/src/WebInputEventConversion.cpp (141825 => 141826)


--- trunk/Source/WebKit/chromium/src/WebInputEventConversion.cpp	2013-02-04 23:54:12 UTC (rev 141825)
+++ trunk/Source/WebKit/chromium/src/WebInputEventConversion.cpp	2013-02-04 23:55:06 UTC (rev 141826)
@@ -517,7 +517,7 @@
     // The 120 is from WheelEvent::initWheelEvent().
     wheelTicksX = static_cast<float>(event.wheelDeltaX()) / 120;
     wheelTicksY = static_cast<float>(event.wheelDeltaY()) / 120;
-    scrollByPage = event.deltaMode() == WheelEvent::DOMDeltaPage;
+    scrollByPage = event.deltaMode() == WheelEvent::DOM_DELTA_PAGE;
 }
 
 WebKeyboardEventBuilder::WebKeyboardEventBuilder(const KeyboardEvent& event)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to