Title: [119465] trunk
Revision
119465
Author
[email protected]
Date
2012-06-05 00:38:56 -0700 (Tue, 05 Jun 2012)

Log Message

EventHandler shouldn't dispatch fake mousemove events when scrolling on devices that don't have a mouse
https://bugs.webkit.org/show_bug.cgi?id=88270

Reviewed by James Robinson.

Source/WebCore:

This patch adds a setting analogous to deviceSupportsTouch to determine
whether the device supports mouse. We then don't dispatch fake mouse
events on devices that don't have a mouse in the first place.

Test: fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html

* page/EventHandler.cpp:
(WebCore::EventHandler::fakeMouseMoveEventTimerFired):
* page/Settings.cpp:
(WebCore::Settings::Settings):
* page/Settings.h:
(WebCore::Settings::setDeviceSupportsMouse):
(WebCore::Settings::deviceSupportsMouse):
(Settings):
* testing/InternalSettings.cpp:
(WebCore::InternalSettings::InternalSettings):
(WebCore::InternalSettings::restoreTo):
(WebCore::InternalSettings::setDeviceSupportsMouse):
(WebCore):
* testing/InternalSettings.h:
(InternalSettings):
* testing/InternalSettings.idl:

Source/WebKit/chromium:

* public/WebSettings.h:
* src/WebSettingsImpl.cpp:
(WebKit::WebSettingsImpl::setDeviceSupportsMouse):
(WebKit):
* src/WebSettingsImpl.h:
(WebSettingsImpl):

LayoutTests:

* fast/events/touch/scroll-without-mouse-lacks-mousemove-events-expected.txt: Added.
* fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (119464 => 119465)


--- trunk/LayoutTests/ChangeLog	2012-06-05 06:40:48 UTC (rev 119464)
+++ trunk/LayoutTests/ChangeLog	2012-06-05 07:38:56 UTC (rev 119465)
@@ -1,3 +1,13 @@
+2012-06-05  Adam Barth  <[email protected]>
+
+        EventHandler shouldn't dispatch fake mousemove events when scrolling on devices that don't have a mouse
+        https://bugs.webkit.org/show_bug.cgi?id=88270
+
+        Reviewed by James Robinson.
+
+        * fast/events/touch/scroll-without-mouse-lacks-mousemove-events-expected.txt: Added.
+        * fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html: Added.
+
 2012-06-04  Filip Pizlo  <[email protected]>
 
         DFG CFG simplification should correct the variables at the head of the predecessor block

Added: trunk/LayoutTests/fast/events/touch/scroll-without-mouse-lacks-mousemove-events-expected.txt (0 => 119465)


--- trunk/LayoutTests/fast/events/touch/scroll-without-mouse-lacks-mousemove-events-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/scroll-without-mouse-lacks-mousemove-events-expected.txt	2012-06-05 07:38:56 UTC (rev 119465)
@@ -0,0 +1,2 @@
+This test passes if it doesn't alert a message containing the word "fail".
+

Added: trunk/LayoutTests/fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html (0 => 119465)


--- trunk/LayoutTests/fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html	2012-06-05 07:38:56 UTC (rev 119465)
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+if (window.internals)
+    window.internals.settings.setDeviceSupportsMouse(false);
+else
+    alert("This test requires window.internals");
+
+if (window.layoutTestController) {
+    layoutTestController.dumpAsText();
+    layoutTestController.waitUntilDone();
+}
+
+function listener() {
+    alert("FAIL: Received mousemove event.");
+    window.removeEventListener("mousemove", listener, false);
+}
+
+window.addEventListener("mousemove", listener, false);
+
+window.addEventListener("scroll", function() {
+    window.setTimeout(function() {
+        layoutTestController.notifyDone();
+    }, 200);
+}, false);
+
+</script>
+</head>
+<body>
+This test passes if it doesn't alert a message containing the word "fail".
+<div style="background-color: blue; height: 1000px"></div>
+<script>
+window.scrollTo(0, 500);
+</script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (119464 => 119465)


--- trunk/Source/WebCore/ChangeLog	2012-06-05 06:40:48 UTC (rev 119464)
+++ trunk/Source/WebCore/ChangeLog	2012-06-05 07:38:56 UTC (rev 119465)
@@ -1,3 +1,33 @@
+2012-06-05  Adam Barth  <[email protected]>
+
+        EventHandler shouldn't dispatch fake mousemove events when scrolling on devices that don't have a mouse
+        https://bugs.webkit.org/show_bug.cgi?id=88270
+
+        Reviewed by James Robinson.
+
+        This patch adds a setting analogous to deviceSupportsTouch to determine
+        whether the device supports mouse. We then don't dispatch fake mouse
+        events on devices that don't have a mouse in the first place.
+
+        Test: fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
+        * page/Settings.cpp:
+        (WebCore::Settings::Settings):
+        * page/Settings.h:
+        (WebCore::Settings::setDeviceSupportsMouse):
+        (WebCore::Settings::deviceSupportsMouse):
+        (Settings):
+        * testing/InternalSettings.cpp:
+        (WebCore::InternalSettings::InternalSettings):
+        (WebCore::InternalSettings::restoreTo):
+        (WebCore::InternalSettings::setDeviceSupportsMouse):
+        (WebCore):
+        * testing/InternalSettings.h:
+        (InternalSettings):
+        * testing/InternalSettings.idl:
+
 2012-06-04  Simon Fraser  <[email protected]>
 
         Leaking ClipRects

Modified: trunk/Source/WebCore/page/EventHandler.cpp (119464 => 119465)


--- trunk/Source/WebCore/page/EventHandler.cpp	2012-06-05 06:40:48 UTC (rev 119464)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2012-06-05 07:38:56 UTC (rev 119465)
@@ -2664,6 +2664,10 @@
     ASSERT_UNUSED(timer, timer == &m_fakeMouseMoveEventTimer);
     ASSERT(!m_mousePressed);
 
+    Settings* settings = m_frame->settings();
+    if (settings && !settings->deviceSupportsMouse())
+        return;
+
     FrameView* view = m_frame->view();
     if (!view)
         return;

Modified: trunk/Source/WebCore/page/Settings.cpp (119464 => 119465)


--- trunk/Source/WebCore/page/Settings.cpp	2012-06-05 06:40:48 UTC (rev 119464)
+++ trunk/Source/WebCore/page/Settings.cpp	2012-06-05 07:38:56 UTC (rev 119465)
@@ -271,6 +271,7 @@
     , m_wantsBalancedSetDefersLoadingBehavior(false)
     , m_requestAnimationFrameEnabled(true)
     , m_deviceSupportsTouch(false)
+    , m_deviceSupportsMouse(true)
     , m_needsDidFinishLoadOrderQuirk(false)
     , m_fixedPositionCreatesStackingContext(false)
     , m_syncXHRInDocumentsEnabled(true)

Modified: trunk/Source/WebCore/page/Settings.h (119464 => 119465)


--- trunk/Source/WebCore/page/Settings.h	2012-06-05 06:40:48 UTC (rev 119464)
+++ trunk/Source/WebCore/page/Settings.h	2012-06-05 07:38:56 UTC (rev 119465)
@@ -578,6 +578,9 @@
         void setDeviceSupportsTouch(bool enabled) { m_deviceSupportsTouch = enabled; }
         bool deviceSupportsTouch() const { return m_deviceSupportsTouch; }
 
+        void setDeviceSupportsMouse(bool enabled) { m_deviceSupportsMouse = enabled; }
+        bool deviceSupportsMouse() const { return m_deviceSupportsMouse; }
+
         void setNeedsDidFinishLoadOrderQuirk(bool needsQuirk) { m_needsDidFinishLoadOrderQuirk = needsQuirk; }
         bool needsDidFinishLoadOrderQuirk() const { return m_needsDidFinishLoadOrderQuirk; }
 
@@ -763,6 +766,7 @@
         bool m_wantsBalancedSetDefersLoadingBehavior : 1;
         bool m_requestAnimationFrameEnabled : 1;
         bool m_deviceSupportsTouch : 1;
+        bool m_deviceSupportsMouse : 1;
         bool m_needsDidFinishLoadOrderQuirk : 1;
 
         bool m_fixedPositionCreatesStackingContext : 1;

Modified: trunk/Source/WebCore/testing/InternalSettings.cpp (119464 => 119465)


--- trunk/Source/WebCore/testing/InternalSettings.cpp	2012-06-05 06:40:48 UTC (rev 119464)
+++ trunk/Source/WebCore/testing/InternalSettings.cpp	2012-06-05 07:38:56 UTC (rev 119465)
@@ -106,6 +106,7 @@
 #endif
     , m_originalWindowFocusRestricted(settings()->windowFocusRestricted())
     , m_originalDeviceSupportsTouch(settings()->deviceSupportsTouch())
+    , m_originalDeviceSupportsMouse(settings()->deviceSupportsMouse())
 {
 }
 
@@ -126,6 +127,7 @@
 #endif
     settings->setWindowFocusRestricted(m_originalWindowFocusRestricted);
     settings->setDeviceSupportsTouch(m_originalDeviceSupportsTouch);
+    settings->setDeviceSupportsMouse(m_originalDeviceSupportsMouse);
 }
 
 Settings* InternalSettings::settings() const
@@ -268,6 +270,12 @@
     settings()->setDeviceSupportsTouch(enabled);
 }
 
+void InternalSettings::setDeviceSupportsMouse(bool enabled, ExceptionCode& ec)
+{
+    InternalSettingsGuardForSettings();
+    settings()->setDeviceSupportsMouse(enabled);
+}
+
 void InternalSettings::setDeviceScaleFactor(float scaleFactor, ExceptionCode& ec)
 {
     InternalSettingsGuardForSettings();

Modified: trunk/Source/WebCore/testing/InternalSettings.h (119464 => 119465)


--- trunk/Source/WebCore/testing/InternalSettings.h	2012-06-05 06:40:48 UTC (rev 119464)
+++ trunk/Source/WebCore/testing/InternalSettings.h	2012-06-05 07:38:56 UTC (rev 119465)
@@ -64,6 +64,7 @@
     void setPerTileDrawingEnabled(bool enabled, ExceptionCode&);
     void setTouchEventEmulationEnabled(bool enabled, ExceptionCode&);
     void setDeviceSupportsTouch(bool enabled, ExceptionCode&);
+    void setDeviceSupportsMouse(bool enabled, ExceptionCode&);
     void setDeviceScaleFactor(float scaleFactor, ExceptionCode&);
     void setShadowDOMEnabled(bool enabled, ExceptionCode&);
     void setStandardFontFamily(const String& family, const String& script, ExceptionCode&);
@@ -107,6 +108,7 @@
 #endif
     bool m_originalWindowFocusRestricted;
     bool m_originalDeviceSupportsTouch;
+    bool m_originalDeviceSupportsMouse;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/testing/InternalSettings.idl (119464 => 119465)


--- trunk/Source/WebCore/testing/InternalSettings.idl	2012-06-05 06:40:48 UTC (rev 119464)
+++ trunk/Source/WebCore/testing/InternalSettings.idl	2012-06-05 07:38:56 UTC (rev 119465)
@@ -42,6 +42,7 @@
         void setPageScaleFactor(in float scaleFactor, in long x, in long y) raises(DOMException);
         void setTouchEventEmulationEnabled(in boolean enabled) raises(DOMException);
         void setDeviceSupportsTouch(in boolean enabled) raises(DOMException);
+        void setDeviceSupportsMouse(in boolean enabled) raises(DOMException);
         void setDeviceScaleFactor(in float scaleFactor) raises(DOMException);
         void setShadowDOMEnabled(in boolean enabled) raises(DOMException);
         void setStandardFontFamily(in DOMString family, in DOMString script) raises(DOMException);

Modified: trunk/Source/WebKit/chromium/ChangeLog (119464 => 119465)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-06-05 06:40:48 UTC (rev 119464)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-06-05 07:38:56 UTC (rev 119465)
@@ -1,3 +1,17 @@
+2012-06-05  Adam Barth  <[email protected]>
+
+        EventHandler shouldn't dispatch fake mousemove events when scrolling on devices that don't have a mouse
+        https://bugs.webkit.org/show_bug.cgi?id=88270
+
+        Reviewed by James Robinson.
+
+        * public/WebSettings.h:
+        * src/WebSettingsImpl.cpp:
+        (WebKit::WebSettingsImpl::setDeviceSupportsMouse):
+        (WebKit):
+        * src/WebSettingsImpl.h:
+        (WebSettingsImpl):
+
 2012-06-04  Dana Jansens  <[email protected]>
 
         [chromium] Remove redundant setNeedsCommit when prepareToDraw fails

Modified: trunk/Source/WebKit/chromium/public/WebSettings.h (119464 => 119465)


--- trunk/Source/WebKit/chromium/public/WebSettings.h	2012-06-05 06:40:48 UTC (rev 119464)
+++ trunk/Source/WebKit/chromium/public/WebSettings.h	2012-06-05 07:38:56 UTC (rev 119465)
@@ -68,6 +68,7 @@
     virtual void setFontBoostingEnabled(bool) = 0;
     virtual void setDefaultTextEncodingName(const WebString&) = 0;
     virtual void setDeviceSupportsTouch(bool) = 0;
+    virtual void setDeviceSupportsMouse(bool) = 0;
     virtual void setJavaScriptEnabled(bool) = 0;
     virtual void setWebSecurityEnabled(bool) = 0;
     virtual void setJavaScriptCanOpenWindowsAutomatically(bool) = 0;

Modified: trunk/Source/WebKit/chromium/src/WebSettingsImpl.cpp (119464 => 119465)


--- trunk/Source/WebKit/chromium/src/WebSettingsImpl.cpp	2012-06-05 06:40:48 UTC (rev 119464)
+++ trunk/Source/WebKit/chromium/src/WebSettingsImpl.cpp	2012-06-05 07:38:56 UTC (rev 119465)
@@ -129,6 +129,11 @@
     m_settings->setDeviceSupportsTouch(deviceSupportsTouch);
 }
 
+void WebSettingsImpl::setDeviceSupportsMouse(bool deviceSupportsMouse)
+{
+    m_settings->setDeviceSupportsMouse(deviceSupportsMouse);
+}
+
 bool WebSettingsImpl::deviceSupportsTouch()
 {
     return m_settings->deviceSupportsTouch();

Modified: trunk/Source/WebKit/chromium/src/WebSettingsImpl.h (119464 => 119465)


--- trunk/Source/WebKit/chromium/src/WebSettingsImpl.h	2012-06-05 06:40:48 UTC (rev 119464)
+++ trunk/Source/WebKit/chromium/src/WebSettingsImpl.h	2012-06-05 07:38:56 UTC (rev 119465)
@@ -60,6 +60,7 @@
     virtual void setFontBoostingEnabled(bool);
     virtual void setDefaultTextEncodingName(const WebString&);
     virtual void setDeviceSupportsTouch(bool);
+    virtual void setDeviceSupportsMouse(bool);
     virtual bool deviceSupportsTouch();
     virtual void setJavaScriptEnabled(bool);
     virtual void setWebSecurityEnabled(bool);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to