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);