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

Unified Diff: content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc

Issue 1349813002: Enable pinch-zoom telemetry on Mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@telemetry
Patch Set: feedback Created 5 years, 3 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 | « no previous file | content/browser/renderer_host/input/synthetic_gesture_target_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
diff --git a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
index 5d84b4b48fcc63caeeaea3c883af0452f9dbfdad..b639d32f39ed4c5d995cb5f59fda138520bc2235 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
+++ b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
@@ -13,6 +13,8 @@
#include "content/browser/renderer_host/input/synthetic_smooth_move_gesture.h"
#include "content/browser/renderer_host/input/synthetic_smooth_scroll_gesture.h"
#include "content/browser/renderer_host/input/synthetic_tap_gesture.h"
+#include "content/browser/renderer_host/input/synthetic_touchpad_pinch_gesture.h"
+#include "content/browser/renderer_host/input/synthetic_touchscreen_pinch_gesture.h"
#include "content/browser/renderer_host/render_widget_host_delegate.h"
#include "content/common/input/synthetic_pinch_gesture_params.h"
#include "content/common/input/synthetic_smooth_drag_gesture_params.h"
@@ -218,7 +220,8 @@ class MockDragMouseTarget : public MockMoveGestureTarget {
gfx::PointF start_, last_mouse_point_;
};
-class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget {
+class MockSyntheticTouchscreenPinchTouchTarget
+ : public MockSyntheticGestureTarget {
public:
enum ZoomDirection {
ZOOM_DIRECTION_UNKNOWN,
@@ -226,12 +229,12 @@ class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget {
ZOOM_OUT
};
- MockSyntheticPinchTouchTarget()
+ MockSyntheticTouchscreenPinchTouchTarget()
: initial_pointer_distance_(0),
last_pointer_distance_(0),
zoom_direction_(ZOOM_DIRECTION_UNKNOWN),
started_(false) {}
- ~MockSyntheticPinchTouchTarget() override {}
+ ~MockSyntheticTouchscreenPinchTouchTarget() override {}
void DispatchInputEventToPlatform(const WebInputEvent& event) override {
ASSERT_TRUE(WebInputEvent::isTouchEventType(event.type));
@@ -271,6 +274,11 @@ class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget {
}
}
+ SyntheticGestureParams::GestureSourceType
+ GetDefaultSyntheticGestureSourceType() const override {
+ return SyntheticGestureParams::TOUCH_INPUT;
+ }
+
ZoomDirection zoom_direction() const { return zoom_direction_; }
float ComputeScaleFactor() const {
@@ -305,6 +313,67 @@ class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget {
bool started_;
};
+class MockSyntheticTouchpadPinchTouchTarget
+ : public MockSyntheticGestureTarget {
+ public:
+ enum ZoomDirection { ZOOM_DIRECTION_UNKNOWN, ZOOM_IN, ZOOM_OUT };
+
+ MockSyntheticTouchpadPinchTouchTarget()
+ : zoom_direction_(ZOOM_DIRECTION_UNKNOWN),
+ started_(false),
+ ended_(false),
+ scale_factor_(1.0f) {}
+ ~MockSyntheticTouchpadPinchTouchTarget() override {}
+
+ void DispatchInputEventToPlatform(const WebInputEvent& event) override {
+ EXPECT_TRUE(WebInputEvent::isGestureEventType(event.type));
+ const blink::WebGestureEvent& gesture_event =
+ static_cast<const blink::WebGestureEvent&>(event);
+
+ if (gesture_event.type == WebInputEvent::GesturePinchBegin) {
+ EXPECT_FALSE(started_);
+ EXPECT_FALSE(ended_);
+ started_ = true;
+ } else if (gesture_event.type == WebInputEvent::GesturePinchEnd) {
+ EXPECT_TRUE(started_);
+ EXPECT_FALSE(ended_);
+ ended_ = true;
+ } else {
+ EXPECT_EQ(WebInputEvent::GesturePinchUpdate, gesture_event.type);
+ EXPECT_TRUE(started_);
+ EXPECT_FALSE(ended_);
+ const float scale = gesture_event.data.pinchUpdate.scale;
+ if (scale != 1.0f) {
+ if (zoom_direction_ == ZOOM_DIRECTION_UNKNOWN) {
+ zoom_direction_ = scale > 1.0f ? ZOOM_IN : ZOOM_OUT;
+ } else if (zoom_direction_ == ZOOM_IN) {
+ EXPECT_GT(scale, 1.0f);
+ } else {
+ EXPECT_EQ(ZOOM_OUT, zoom_direction_);
+ EXPECT_LT(scale, 1.0f);
+ }
+
+ scale_factor_ *= scale;
+ }
+ }
+ }
+
+ SyntheticGestureParams::GestureSourceType
+ GetDefaultSyntheticGestureSourceType() const override {
+ return SyntheticGestureParams::MOUSE_INPUT;
+ }
+
+ ZoomDirection zoom_direction() const { return zoom_direction_; }
+
+ float scale_factor() const { return scale_factor_; }
+
+ private:
+ ZoomDirection zoom_direction_;
+ bool started_;
+ bool ended_;
+ float scale_factor_;
+};
+
class MockSyntheticTapGestureTarget : public MockSyntheticGestureTarget {
public:
MockSyntheticTapGestureTarget() : state_(NOT_STARTED) {}
@@ -1100,68 +1169,211 @@ TEST_F(SyntheticGestureControllerTest,
gesture->ForwardInputEvents(timestamp, target_);
}
-TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZoomIn) {
- CreateControllerAndTarget<MockSyntheticPinchTouchTarget>();
+TEST_F(SyntheticGestureControllerTest,
+ TouchscreenTouchpadPinchGestureTouchZoomIn) {
+ CreateControllerAndTarget<MockSyntheticTouchscreenPinchTouchTarget>();
SyntheticPinchGestureParams params;
params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
params.scale_factor = 2.3f;
params.anchor.SetPoint(54, 89);
- scoped_ptr<SyntheticPinchGesture> gesture(new SyntheticPinchGesture(params));
+ scoped_ptr<SyntheticTouchscreenPinchGesture> gesture(
+ new SyntheticTouchscreenPinchGesture(params));
QueueSyntheticGesture(gesture.Pass());
FlushInputUntilComplete();
- MockSyntheticPinchTouchTarget* pinch_target =
- static_cast<MockSyntheticPinchTouchTarget*>(target_);
+ MockSyntheticTouchscreenPinchTouchTarget* pinch_target =
+ static_cast<MockSyntheticTouchscreenPinchTouchTarget*>(target_);
EXPECT_EQ(1, num_success_);
EXPECT_EQ(0, num_failure_);
EXPECT_EQ(pinch_target->zoom_direction(),
- MockSyntheticPinchTouchTarget::ZOOM_IN);
+ MockSyntheticTouchscreenPinchTouchTarget::ZOOM_IN);
EXPECT_FLOAT_EQ(params.scale_factor, pinch_target->ComputeScaleFactor());
}
-TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZoomOut) {
- CreateControllerAndTarget<MockSyntheticPinchTouchTarget>();
+TEST_F(SyntheticGestureControllerTest,
+ TouchscreenTouchpadPinchGestureTouchZoomOut) {
+ CreateControllerAndTarget<MockSyntheticTouchscreenPinchTouchTarget>();
SyntheticPinchGestureParams params;
params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
params.scale_factor = 0.4f;
params.anchor.SetPoint(-12, 93);
- scoped_ptr<SyntheticPinchGesture> gesture(new SyntheticPinchGesture(params));
+ scoped_ptr<SyntheticTouchscreenPinchGesture> gesture(
+ new SyntheticTouchscreenPinchGesture(params));
QueueSyntheticGesture(gesture.Pass());
FlushInputUntilComplete();
- MockSyntheticPinchTouchTarget* pinch_target =
- static_cast<MockSyntheticPinchTouchTarget*>(target_);
+ MockSyntheticTouchscreenPinchTouchTarget* pinch_target =
+ static_cast<MockSyntheticTouchscreenPinchTouchTarget*>(target_);
EXPECT_EQ(1, num_success_);
EXPECT_EQ(0, num_failure_);
EXPECT_EQ(pinch_target->zoom_direction(),
- MockSyntheticPinchTouchTarget::ZOOM_OUT);
+ MockSyntheticTouchscreenPinchTouchTarget::ZOOM_OUT);
EXPECT_FLOAT_EQ(params.scale_factor, pinch_target->ComputeScaleFactor());
}
-TEST_F(SyntheticGestureControllerTest, PinchGestureTouchNoScaling) {
- CreateControllerAndTarget<MockSyntheticPinchTouchTarget>();
+TEST_F(SyntheticGestureControllerTest,
+ TouchscreenTouchpadPinchGestureTouchNoScaling) {
+ CreateControllerAndTarget<MockSyntheticTouchscreenPinchTouchTarget>();
SyntheticPinchGestureParams params;
params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
params.scale_factor = 1.0f;
- scoped_ptr<SyntheticPinchGesture> gesture(new SyntheticPinchGesture(params));
+ scoped_ptr<SyntheticTouchscreenPinchGesture> gesture(
+ new SyntheticTouchscreenPinchGesture(params));
QueueSyntheticGesture(gesture.Pass());
FlushInputUntilComplete();
- MockSyntheticPinchTouchTarget* pinch_target =
- static_cast<MockSyntheticPinchTouchTarget*>(target_);
+ MockSyntheticTouchscreenPinchTouchTarget* pinch_target =
+ static_cast<MockSyntheticTouchscreenPinchTouchTarget*>(target_);
EXPECT_EQ(1, num_success_);
EXPECT_EQ(0, num_failure_);
EXPECT_EQ(pinch_target->zoom_direction(),
- MockSyntheticPinchTouchTarget::ZOOM_DIRECTION_UNKNOWN);
+ MockSyntheticTouchscreenPinchTouchTarget::ZOOM_DIRECTION_UNKNOWN);
EXPECT_EQ(params.scale_factor, pinch_target->ComputeScaleFactor());
}
+TEST_F(SyntheticGestureControllerTest, TouchpadPinchGestureTouchZoomIn) {
+ CreateControllerAndTarget<MockSyntheticTouchpadPinchTouchTarget>();
+
+ SyntheticPinchGestureParams params;
+ params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
+ params.scale_factor = 2.3f;
+ params.anchor.SetPoint(54, 89);
+
+ scoped_ptr<SyntheticTouchpadPinchGesture> gesture(
+ new SyntheticTouchpadPinchGesture(params));
+ QueueSyntheticGesture(gesture.Pass());
+ FlushInputUntilComplete();
+
+ MockSyntheticTouchpadPinchTouchTarget* pinch_target =
+ static_cast<MockSyntheticTouchpadPinchTouchTarget*>(target_);
+ EXPECT_EQ(1, num_success_);
+ EXPECT_EQ(0, num_failure_);
+ EXPECT_EQ(pinch_target->zoom_direction(),
+ MockSyntheticTouchpadPinchTouchTarget::ZOOM_IN);
+ EXPECT_FLOAT_EQ(params.scale_factor, pinch_target->scale_factor());
+}
+
+TEST_F(SyntheticGestureControllerTest, TouchpadPinchGestureTouchZoomOut) {
+ CreateControllerAndTarget<MockSyntheticTouchpadPinchTouchTarget>();
+
+ SyntheticPinchGestureParams params;
+ params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
+ params.scale_factor = 0.4f;
+ params.anchor.SetPoint(-12, 93);
+
+ scoped_ptr<SyntheticTouchpadPinchGesture> gesture(
+ new SyntheticTouchpadPinchGesture(params));
+ QueueSyntheticGesture(gesture.Pass());
+ FlushInputUntilComplete();
+
+ MockSyntheticTouchpadPinchTouchTarget* pinch_target =
+ static_cast<MockSyntheticTouchpadPinchTouchTarget*>(target_);
+ EXPECT_EQ(1, num_success_);
+ EXPECT_EQ(0, num_failure_);
+ EXPECT_EQ(pinch_target->zoom_direction(),
+ MockSyntheticTouchpadPinchTouchTarget::ZOOM_OUT);
+ EXPECT_FLOAT_EQ(params.scale_factor, pinch_target->scale_factor());
+}
+
+TEST_F(SyntheticGestureControllerTest, TouchpadPinchGestureTouchNoScaling) {
+ CreateControllerAndTarget<MockSyntheticTouchpadPinchTouchTarget>();
+
+ SyntheticPinchGestureParams params;
+ params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
+ params.scale_factor = 1.0f;
+
+ scoped_ptr<SyntheticTouchpadPinchGesture> gesture(
+ new SyntheticTouchpadPinchGesture(params));
+ QueueSyntheticGesture(gesture.Pass());
+ FlushInputUntilComplete();
+
+ MockSyntheticTouchpadPinchTouchTarget* pinch_target =
+ static_cast<MockSyntheticTouchpadPinchTouchTarget*>(target_);
+ EXPECT_EQ(1, num_success_);
+ EXPECT_EQ(0, num_failure_);
+ EXPECT_EQ(pinch_target->zoom_direction(),
+ MockSyntheticTouchpadPinchTouchTarget::ZOOM_DIRECTION_UNKNOWN);
+ EXPECT_EQ(params.scale_factor, pinch_target->scale_factor());
+}
+
+// Ensure that if SyntheticPinchGesture is instantiated with TOUCH_INPUT it
+// correctly creates a touchscreen gesture.
+TEST_F(SyntheticGestureControllerTest, PinchGestureExplicitTouch) {
+ CreateControllerAndTarget<MockSyntheticTouchscreenPinchTouchTarget>();
+
+ SyntheticPinchGestureParams params;
+ params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
+ params.scale_factor = 2.3f;
+ params.anchor.SetPoint(54, 89);
+
+ scoped_ptr<SyntheticPinchGesture> gesture(new SyntheticPinchGesture(params));
+ QueueSyntheticGesture(gesture.Pass());
+ FlushInputUntilComplete();
+
+ // Gesture target will fail expectations if the wrong underlying
+ // SyntheticPinch*Gesture was instantiated.
+}
+
+// Ensure that if SyntheticPinchGesture is instantiated with MOUSE_INPUT it
+// correctly creates a touchpad gesture.
+TEST_F(SyntheticGestureControllerTest, PinchGestureExplicitMouse) {
+ CreateControllerAndTarget<MockSyntheticTouchpadPinchTouchTarget>();
+
+ SyntheticPinchGestureParams params;
+ params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
+ params.scale_factor = 2.3f;
+ params.anchor.SetPoint(54, 89);
+
+ scoped_ptr<SyntheticPinchGesture> gesture(new SyntheticPinchGesture(params));
+ QueueSyntheticGesture(gesture.Pass());
+ FlushInputUntilComplete();
+
+ // Gesture target will fail expectations if the wrong underlying
+ // SyntheticPinch*Gesture was instantiated.
+}
+
+// Ensure that if SyntheticPinchGesture is instantiated with DEFAULT_INPUT it
+// correctly creates a touchscreen gesture for a touchscreen controller.
+TEST_F(SyntheticGestureControllerTest, PinchGestureDefaultTouch) {
+ CreateControllerAndTarget<MockSyntheticTouchscreenPinchTouchTarget>();
+
+ SyntheticPinchGestureParams params;
+ params.gesture_source_type = SyntheticGestureParams::DEFAULT_INPUT;
+ params.scale_factor = 2.3f;
+ params.anchor.SetPoint(54, 89);
+
+ scoped_ptr<SyntheticPinchGesture> gesture(new SyntheticPinchGesture(params));
+ QueueSyntheticGesture(gesture.Pass());
+ FlushInputUntilComplete();
+
+ // Gesture target will fail expectations if the wrong underlying
+ // SyntheticPinch*Gesture was instantiated.
+}
+
+// Ensure that if SyntheticPinchGesture is instantiated with DEFAULT_INPUT it
+// correctly creates a touchpad gesture for a touchpad controller.
+TEST_F(SyntheticGestureControllerTest, PinchGestureDefaultMouse) {
+ CreateControllerAndTarget<MockSyntheticTouchpadPinchTouchTarget>();
+
+ SyntheticPinchGestureParams params;
+ params.gesture_source_type = SyntheticGestureParams::DEFAULT_INPUT;
+ params.scale_factor = 2.3f;
+ params.anchor.SetPoint(54, 89);
+
+ scoped_ptr<SyntheticPinchGesture> gesture(new SyntheticPinchGesture(params));
+ QueueSyntheticGesture(gesture.Pass());
+ FlushInputUntilComplete();
+
+ // Gesture target will fail expectations if the wrong underlying
+ // SyntheticPinch*Gesture was instantiated.
+}
+
TEST_F(SyntheticGestureControllerTest, TapGestureTouch) {
CreateControllerAndTarget<MockSyntheticTapTouchTarget>();
« no previous file with comments | « no previous file | content/browser/renderer_host/input/synthetic_gesture_target_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698