Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2422)

Unified Diff: chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_unit_test.mm

Issue 821173003: Fix Magic Mouse history swiping bug. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_unit_test.mm
diff --git a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_unit_test.mm b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_unit_test.mm
index dcd37e628b5d7a48bae705081bb1678bb65015f0..e37d7c0628ba1631cb79e4e72cd2bfb6b1793ab9 100644
--- a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_unit_test.mm
+++ b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_unit_test.mm
@@ -90,6 +90,7 @@ class MacHistorySwiperTest : public CocoaTest {
CocoaTest::TearDown();
}
+ // These methods send all 3 types of events: gesture, scroll, and touch.
void startGestureInMiddle();
void moveGestureInMiddle();
void moveGestureAtPoint(NSPoint point);
@@ -97,6 +98,10 @@ class MacHistorySwiperTest : public CocoaTest {
void endGestureAtPoint(NSPoint point);
void rendererACKForBeganEvent();
+ // These methods send a single type of event.
+ void sendBeginGestureEventInMiddle();
+ void sendEndGestureEventAtPoint(NSPoint point);
+
HistorySwiper* historySwiper_;
NSView* view_;
int begin_count_;
@@ -189,6 +194,8 @@ void MacHistorySwiperTest::endGestureAtPoint(NSPoint point) {
NSEvent* scrollEvent = scrollWheelEventWithPhase(NSEventPhaseEnded);
[historySwiper_ handleEvent:scrollEvent];
+
+ sendEndGestureEventAtPoint(point);
}
void MacHistorySwiperTest::rendererACKForBeganEvent() {
@@ -197,6 +204,16 @@ void MacHistorySwiperTest::rendererACKForBeganEvent() {
[historySwiper_ rendererHandledWheelEvent:event consumed:NO];
}
+void MacHistorySwiperTest::sendBeginGestureEventInMiddle() {
+ NSEvent* event = mockEventWithPoint(makePoint(0.5, 0.5), NSEventTypeGesture);
+ [historySwiper_ beginGestureWithEvent:event];
+}
+
+void MacHistorySwiperTest::sendEndGestureEventAtPoint(NSPoint point) {
+ NSEvent* event = mockEventWithPoint(point, NSEventTypeGesture);
+ [historySwiper_ endGestureWithEvent:event];
+}
+
// Test that a simple left-swipe causes navigation.
TEST_F(MacHistorySwiperTest, SwipeLeft) {
// These tests require 10.7+ APIs.
@@ -472,3 +489,59 @@ TEST_F(MacHistorySwiperTest, SubstantialVerticalThenHorizontal) {
EXPECT_FALSE(navigated_right_);
EXPECT_FALSE(navigated_left_);
}
+
+// Magic Mouse gestures don't send -touches*WithEvent: callbacks. The history
+// swiper should still handle this gracefully. It should not turn vertical
+// motion into history swipes.
+TEST_F(MacHistorySwiperTest, MagicMouseStateResetsCorrectly) {
+ // These tests require 10.7+ APIs.
Lei Zhang 2015/01/15 20:18:10 Don't the official bots use the 10.6 SDK or someth
erikchen 2015/01/15 20:44:44 The binary is built with the 10.6 SDK, but this is
+ if (![NSEvent
+ respondsToSelector:@selector(isSwipeTrackingFromScrollEventsEnabled)])
+ return;
+
+ // Magic mouse events don't generate '-touches*WithEvent:' callbacks.
+ // Send the following events:
+ // - beginGesture
+ // - scrollWheel: (phase=Began)
+ // - scrollWheel: (phase=Changed), significant horizontal motion.
+ // - scrollWheel: (phase=Ended)
+ // - endGesture
+ sendBeginGestureEventInMiddle();
+ [historySwiper_ handleEvent:scrollWheelEventWithPhase(NSEventPhaseBegan)];
+
+ // Callback from Blink to set the relevant state for history swiping.
+ rendererACKForBeganEvent();
+
+ NSEvent* scrollEvent = scrollWheelEventWithPhase(NSEventPhaseChanged,
+ NSEventPhaseNone, 200.0, 0);
+ [historySwiper_ handleEvent:scrollEvent];
+ [historySwiper_ handleEvent:scrollWheelEventWithPhase(NSEventPhaseEnded)];
+ sendEndGestureEventAtPoint(makePoint(0.7, 0.5));
+
+ // Expect this sequence of events to trigger a magic mouse history swipe.
+ EXPECT_TRUE(magic_mouse_history_swipe_);
+
+ // Reset state.
+ magic_mouse_history_swipe_ = false;
+
+ // Send the following events:
+ // - beginGesture
+ // - scrollWheel: (phase=Began)
+ // - scrollWheel: (phase=Changed), significant vertical motion.
+ // - scrollWheel: (phase=Ended)
+ // - endGesture
+ sendBeginGestureEventInMiddle();
+ [historySwiper_ handleEvent:scrollWheelEventWithPhase(NSEventPhaseBegan)];
+
+ // Callback from Blink to set the relevant state for history swiping.
+ rendererACKForBeganEvent();
+
+ scrollEvent =
+ scrollWheelEventWithPhase(NSEventPhaseChanged, NSEventPhaseNone, 0, 20);
+ [historySwiper_ handleEvent:scrollEvent];
+ [historySwiper_ handleEvent:scrollWheelEventWithPhase(NSEventPhaseEnded)];
+ sendEndGestureEventAtPoint(makePoint(0.5, 0.7));
+
+ // Vertical motion should never trigger a history swipe!
+ EXPECT_FALSE(magic_mouse_history_swipe_);
+}
« no previous file with comments | « chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698