Commit 65c2b51b authored by Fabrice de Gans-Riberi's avatar Fabrice de Gans-Riberi Committed by Commit Bot

Revert "Make pen inputs behave like touch inputs on MacOS"

This reverts commit de31a634.

Reason for revert: This has made the Mac10.12 Tests content_unittests fail on the following tests:
WebInputEventBuilderMacTest.TouchEventsWithPointerTypePenRotationLess180
WebInputEventBuilderMacTest.TouchEventsWithPointerTypePenRotationGreater360
WebInputEventBuilderMacTest.TouchEventsWithPointerTypePenRotationLess90
WebInputEventBuilderMacTest.TouchEventsWithPointerTypePenRotationLess360
WebInputEventBuilderMacTest.BuildWebTouchEvents

See https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Mac10.12%20Tests/14711

Original change's description:
> Make pen inputs behave like touch inputs on MacOS
> 
> Currently on MacOS the pen behaves like a mouse input, because we
> generate mouse events for the pen input. We agreed that the pen input
> should behave like a touch input, so we now send touch events instead.
> 
> Bug: 854354
> Change-Id: Iac7910e250020a8125a57fb6055fb282db3faf0e
> Reviewed-on: https://chromium-review.googlesource.com/1136721
> Commit-Queue: Lan Wei <lanwei@chromium.org>
> Reviewed-by: Timothy Dresser <tdresser@chromium.org>
> Reviewed-by: Mustafa Emre Acer <meacer@chromium.org>
> Reviewed-by: Navid Zolghadr <nzolghadr@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#579482}

TBR=meacer@chromium.org,tdresser@chromium.org,lanwei@chromium.org,nzolghadr@chromium.org

Change-Id: I51b85daec63d39ef9aebb9dd727def7dfd7ca432
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 854354
Reviewed-on: https://chromium-review.googlesource.com/1157304Reviewed-by: default avatarFabrice de Gans-Riberi <fdegans@chromium.org>
Commit-Queue: Fabrice de Gans-Riberi <fdegans@chromium.org>
Cr-Commit-Position: refs/heads/master@{#579584}
parent 6c701b0d
......@@ -10,7 +10,6 @@
#include "third_party/blink/public/platform/web_input_event.h"
#include "third_party/blink/public/platform/web_keyboard_event.h"
#include "third_party/blink/public/platform/web_mouse_wheel_event.h"
#include "third_party/blink/public/platform/web_touch_event.h"
@class NSEvent;
@class NSView;
......@@ -42,11 +41,6 @@ class CONTENT_EXPORT WebGestureEventBuilder {
static blink::WebGestureEvent Build(NSEvent*, NSView*);
};
class CONTENT_EXPORT WebTouchEventBuilder {
public:
static blink::WebTouchEvent Build(NSEvent* event, NSView* view);
};
} // namespace content
#endif // CONTENT_BROWSER_RENDERER_HOST_INPUT_WEB_INPUT_EVENT_BUILDERS_MAC_H_
......@@ -571,72 +571,4 @@ blink::WebGestureEvent WebGestureEventBuilder::Build(NSEvent* event,
return result;
}
// WebTouchEvent --------------------------------------------------------------
blink::WebTouchEvent WebTouchEventBuilder::Build(NSEvent* event, NSView* view) {
blink::WebInputEvent::Type event_type =
blink::WebInputEvent::Type::kUndefined;
NSEventType type = [event type];
blink::WebTouchPoint::State state = blink::WebTouchPoint::kStateUndefined;
switch (type) {
case NSLeftMouseDown:
event_type = blink::WebInputEvent::kTouchStart;
state = blink::WebTouchPoint::kStatePressed;
break;
case NSLeftMouseUp:
event_type = blink::WebInputEvent::kTouchEnd;
state = blink::WebTouchPoint::kStateReleased;
break;
case NSLeftMouseDragged:
case NSRightMouseDragged:
case NSOtherMouseDragged:
case NSMouseMoved:
case NSRightMouseDown:
case NSOtherMouseDown:
case NSRightMouseUp:
case NSOtherMouseUp:
event_type = blink::WebInputEvent::kTouchMove;
state = blink::WebTouchPoint::kStateMoved;
break;
default:
NOTREACHED() << "Invalid types for touch events." << type;
}
blink::WebTouchEvent result(event_type, ModifiersFromEvent(event),
ui::EventTimeStampFromSeconds([event timestamp]));
result.hovering = event_type == blink::WebInputEvent::kTouchEnd;
result.unique_touch_event_id = ui::GetNextTouchEventId();
result.touches_length = 1;
// Use a temporary WebMouseEvent to get the location.
blink::WebMouseEvent temp;
SetWebEventLocationFromEventInView(&temp, event, view);
result.touches[0].SetPositionInWidget(temp.PositionInWidget());
result.touches[0].SetPositionInScreen(temp.PositionInScreen());
result.touches[0].movement_x = temp.movement_x;
result.touches[0].movement_y = temp.movement_y;
result.touches[0].state = state;
result.touches[0].pointer_type =
blink::WebPointerProperties::PointerType::kPen;
result.touches[0].id = [event pointingDeviceID];
result.touches[0].force = [event pressure];
NSPoint tilt = [event tilt];
result.touches[0].tilt_x = lround(tilt.x * 90);
result.touches[0].tilt_y = lround(tilt.y * 90);
result.touches[0].tangential_pressure = [event tangentialPressure];
// NSEvent spec doesn't specify the range of rotation, we make sure that
// this value is in the range of [0,359].
int twist = (int)[event rotation];
twist = twist % 360;
if (twist < 0)
twist += 360;
result.touches[0].twist = twist;
float rotation_angle = twist % 180;
if (rotation_angle > 90)
rotation_angle = 180.f - rotation_angle;
result.touches[0].rotation_angle = rotation_angle;
return result;
}
} // namespace content
......@@ -66,29 +66,6 @@ NSEvent* BuildFakeKeyEvent(NSUInteger key_code,
keyCode:key_code];
}
NSEvent* BuildFakeMouseEvent(CGEventType mouse_type,
CGPoint location,
CGMouseButton button,
CGEventMouseSubtype subtype,
float rotation = 0.0,
float pressure = 0.0,
float tilt_x = 0.0,
float tilt_y = 0.0,
float tangential_pressure = 0.0) {
CGEventRef cg_event =
CGEventCreateMouseEvent(NULL, mouse_type, location, button);
CGEventSetIntegerValueField(cg_event, kCGMouseEventSubtype, subtype);
CGEventSetDoubleValueField(cg_event, kCGTabletEventRotation, rotation);
CGEventSetDoubleValueField(cg_event, kCGMouseEventPressure, pressure);
CGEventSetDoubleValueField(cg_event, kCGTabletEventTiltX, tilt_x);
CGEventSetDoubleValueField(cg_event, kCGTabletEventTiltY, tilt_y);
CGEventSetDoubleValueField(cg_event, kCGTabletEventTangentialPressure,
tangential_pressure);
NSEvent* event = [NSEvent eventWithCGEvent:cg_event];
CFRelease(cg_event);
return event;
}
} // namespace
// Test that arrow keys don't have numpad modifier set.
......@@ -670,111 +647,3 @@ TEST(WebInputEventBuilderMacTest, ScrollWheelMatchesUIEvent) {
EXPECT_EQ(web_event.PositionInWidget().y, ui_event.y());
[window close];
}
// Test if the value of twist and rotation_angle are set correctly when the
// NSEvent's rotation is less than 90.
TEST(WebInputEventBuilderMacTest, TouchEventsWithPointerTypePenRotationLess90) {
NSEvent* mac_event =
BuildFakeMouseEvent(kCGEventLeftMouseDown, {6, 9}, kCGMouseButtonLeft,
kCGEventMouseSubtypeTabletPoint, 60);
// Create a dummy window, but don't show it. It will be released when closed.
NSWindow* window =
[[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
blink::WebTouchEvent touch_event =
content::WebTouchEventBuilder::Build(mac_event, [window contentView]);
EXPECT_EQ(60, touch_event.touches[0].twist);
EXPECT_EQ(60, touch_event.touches[0].rotation_angle);
}
// Test if the value of twist and rotation_angle are set correctly when the
// NSEvent's rotation is between 90 and 180.
TEST(WebInputEventBuilderMacTest,
TouchEventsWithPointerTypePenRotationLess180) {
NSEvent* mac_event =
BuildFakeMouseEvent(kCGEventLeftMouseDown, {6, 9}, kCGMouseButtonLeft,
kCGEventMouseSubtypeTabletPoint, 160);
// Create a dummy window, but don't show it. It will be released when closed.
NSWindow* window =
[[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
blink::WebTouchEvent touch_event =
content::WebTouchEventBuilder::Build(mac_event, [window contentView]);
EXPECT_EQ(160, touch_event.touches[0].twist);
EXPECT_EQ(20, touch_event.touches[0].rotation_angle);
}
// Test if the value of twist and rotation_angle are set correctly when the
// NSEvent's rotation is between 180 and 360.
TEST(WebInputEventBuilderMacTest,
TouchEventsWithPointerTypePenRotationLess360) {
NSEvent* mac_event =
BuildFakeMouseEvent(kCGEventLeftMouseDown, {6, 9}, kCGMouseButtonLeft,
kCGEventMouseSubtypeTabletPoint, 260);
// Create a dummy window, but don't show it. It will be released when closed.
NSWindow* window =
[[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
blink::WebTouchEvent touch_event =
content::WebTouchEventBuilder::Build(mac_event, [window contentView]);
EXPECT_EQ(260, touch_event.touches[0].twist);
EXPECT_EQ(80, touch_event.touches[0].rotation_angle);
}
// Test if the value of twist and rotation_angle are set correctly when the
// NSEvent's rotation is greater than 360.
TEST(WebInputEventBuilderMacTest,
TouchEventsWithPointerTypePenRotationGreater360) {
NSEvent* mac_event =
BuildFakeMouseEvent(kCGEventLeftMouseDown, {6, 9}, kCGMouseButtonLeft,
kCGEventMouseSubtypeTabletPoint, 390);
// Create a dummy window, but don't show it. It will be released when closed.
NSWindow* window =
[[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
blink::WebTouchEvent touch_event =
content::WebTouchEventBuilder::Build(mac_event, [window contentView]);
EXPECT_EQ(30, touch_event.touches[0].twist);
EXPECT_EQ(30, touch_event.touches[0].rotation_angle);
}
// Test if all the values of a WebTouchEvent are set correctly.
TEST(WebInputEventBuilderMacTest, BuildWebTouchEvents) {
NSEvent* mac_event = BuildFakeMouseEvent(
kCGEventLeftMouseDown, {6, 9}, kCGMouseButtonLeft,
kCGEventMouseSubtypeTabletPoint, /* rotation */ 60,
/* pressure */ 0.3, /* tilt_x */ 0.5, /* tilt_y */ 0.6,
/* tangential_pressure */ 0.7);
// Create a dummy window, but don't show it. It will be released when closed.
NSWindow* window =
[[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
blink::WebTouchEvent touch_event =
content::WebTouchEventBuilder::Build(mac_event, [window contentView]);
EXPECT_EQ(blink::WebInputEvent::kTouchStart, touch_event.GetType());
EXPECT_FALSE(touch_event.hovering);
EXPECT_EQ(1U, touch_event.touches_length);
EXPECT_EQ(blink::WebFloatPoint(6, 9),
touch_event.touches[0].PositionInScreen());
EXPECT_EQ(blink::WebTouchPoint::kStatePressed, touch_event.touches[0].state);
EXPECT_EQ(blink::WebPointerProperties::PointerType::kPen,
touch_event.touches[0].pointer_type);
EXPECT_EQ(0, touch_event.touches[0].id);
EXPECT_FLOAT_EQ(0.3, std::round(touch_event.touches[0].force * 10) / 10);
EXPECT_EQ(0.5 * 90, touch_event.touches[0].tilt_x);
EXPECT_EQ(0.6 * 90, touch_event.touches[0].tilt_y);
EXPECT_FLOAT_EQ(
0.7, std::round(touch_event.touches[0].tangential_pressure * 10) / 10);
EXPECT_EQ(60, touch_event.touches[0].twist);
EXPECT_EQ(60, touch_event.touches[0].rotation_angle);
}
\ No newline at end of file
......@@ -53,8 +53,6 @@ class RenderWidgetHostNSViewLocalClient {
// Forward events to the renderer or the input router, as appropriate.
virtual void RouteOrProcessMouseEvent(
const blink::WebMouseEvent& web_event) = 0;
virtual void RouteOrProcessTouchEvent(
const blink::WebTouchEvent& web_event) = 0;
virtual void RouteOrProcessWheelEvent(
const blink::WebMouseWheelEvent& web_event) = 0;
......
......@@ -189,12 +189,6 @@ struct DidOverscrollParams;
// The filter used to guide touch events towards a horizontal or vertical
// orientation.
content::MouseWheelRailsFilterMac mouseWheelFilter_;
// Whether the direct manipulation feature is enabled.
bool direct_manipulation_enabled_;
// Whether the pen's tip is in contact with the stylus digital tablet.
bool has_pen_contact_;
}
@property(nonatomic, assign) NSRange markedRange;
......
......@@ -24,7 +24,6 @@
#import "ui/base/clipboard/clipboard_util_mac.h"
#import "ui/base/cocoa/appkit_utils.h"
#include "ui/base/cocoa/cocoa_base_utils.h"
#include "ui/base/ui_base_features.h"
#include "ui/display/screen.h"
#include "ui/events/event_utils.h"
#include "ui/events/keycodes/dom/dom_code.h"
......@@ -42,12 +41,10 @@ using content::RenderWidgetHostViewMacEditCommandHelper;
using content::WebGestureEventBuilder;
using content::WebMouseEventBuilder;
using content::WebMouseWheelEventBuilder;
using content::WebTouchEventBuilder;
using blink::WebInputEvent;
using blink::WebMouseEvent;
using blink::WebMouseWheelEvent;
using blink::WebGestureEvent;
using blink::WebTouchEvent;
namespace {
......@@ -90,10 +87,6 @@ class ForwardingLocalClient : public RenderWidgetHostNSViewLocalClient {
const blink::WebMouseEvent& web_event) override {
client_->RouteOrProcessMouseEvent(TranslateEvent(web_event));
}
void RouteOrProcessTouchEvent(
const blink::WebTouchEvent& web_event) override {
client_->RouteOrProcessTouchEvent(TranslateEvent(web_event));
}
void RouteOrProcessWheelEvent(
const blink::WebMouseWheelEvent& web_event) override {
client_->RouteOrProcessWheelEvent(TranslateEvent(web_event));
......@@ -230,9 +223,6 @@ void ExtractUnderlines(NSAttributedString* string,
isStylusEnteringProximity_ = false;
keyboardLockActive_ = false;
textInputType_ = ui::TEXT_INPUT_TYPE_NONE;
direct_manipulation_enabled_ =
base::FeatureList::IsEnabled(features::kDirectManipulationStylus);
has_pen_contact_ = false;
}
return self;
}
......@@ -552,37 +542,9 @@ void ExtractUnderlines(NSAttributedString* string,
if (type == NSMouseMoved)
cursorHidden_ = NO;
bool send_touch =
direct_manipulation_enabled_ &&
pointerType_ == blink::WebPointerProperties::PointerType::kPen;
// Send touch events when the pen is in contact with the tablet.
if (send_touch) {
// Because the NSLeftMouseUp event's buttonMask is not
// NSEventButtonMaskPenTip, we read |has_pen_contact_| to ensure a
// TouchRelease is sent appropriately at the end when the stylus is
// no longer in contact with the digitizer.
send_touch = has_pen_contact_;
if (type == NSLeftMouseDown || type == NSLeftMouseUp ||
type == NSLeftMouseDragged) {
NSEventButtonMask buttonMask = [theEvent buttonMask];
if (buttonMask == NSEventButtonMaskPenTip) {
DCHECK(type != NSLeftMouseUp);
send_touch = has_pen_contact_ = true;
} else {
has_pen_contact_ = false;
}
}
}
if (!send_touch) {
WebMouseEvent event =
WebMouseEventBuilder::Build(theEvent, self, pointerType_);
localClient_->RouteOrProcessMouseEvent(event);
} else {
WebTouchEvent event = WebTouchEventBuilder::Build(theEvent, self);
localClient_->RouteOrProcessTouchEvent(event);
}
WebMouseEvent event =
WebMouseEventBuilder::Build(theEvent, self, pointerType_);
localClient_->RouteOrProcessMouseEvent(event);
}
- (void)tabletEvent:(NSEvent*)theEvent {
......
......@@ -308,7 +308,6 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
const ui::LatencyInfo& latency_info,
const std::vector<EditCommand>& commands) override;
void RouteOrProcessMouseEvent(const blink::WebMouseEvent& web_event) override;
void RouteOrProcessTouchEvent(const blink::WebTouchEvent& web_event) override;
void RouteOrProcessWheelEvent(
const blink::WebMouseWheelEvent& web_event) override;
void ForwardMouseEvent(const blink::WebMouseEvent& web_event) override;
......@@ -340,7 +339,6 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
bool skip_in_browser,
const std::vector<EditCommand>& commands) override;
void RouteOrProcessMouseEvent(std::unique_ptr<InputEvent> event) override;
void RouteOrProcessTouchEvent(std::unique_ptr<InputEvent> event) override;
void RouteOrProcessWheelEvent(std::unique_ptr<InputEvent> event) override;
void ForwardMouseEvent(std::unique_ptr<InputEvent> event) override;
void ForwardWheelEvent(std::unique_ptr<InputEvent> event) override;
......
......@@ -1488,24 +1488,6 @@ void RenderWidgetHostViewMac::RouteOrProcessMouseEvent(
}
}
void RenderWidgetHostViewMac::RouteOrProcessTouchEvent(
const blink::WebTouchEvent& const_web_event) {
blink::WebTouchEvent web_event = const_web_event;
ui::FilteredGestureProvider::TouchHandlingResult result =
gesture_provider_.OnTouchEvent(MotionEventWeb(web_event));
if (!result.succeeded)
return;
ui::LatencyInfo latency_info(ui::SourceEventType::OTHER);
latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT);
if (ShouldRouteEvent(web_event)) {
host()->delegate()->GetInputEventRouter()->RouteTouchEvent(this, &web_event,
latency_info);
} else {
ProcessTouchEvent(web_event, latency_info);
}
}
void RenderWidgetHostViewMac::RouteOrProcessWheelEvent(
const blink::WebMouseWheelEvent& const_web_event) {
blink::WebMouseWheelEvent web_event = const_web_event;
......@@ -1868,7 +1850,6 @@ void RenderWidgetHostViewMac::ForwardKeyboardEventWithCommands(
ForwardKeyboardEventWithCommands(native_event, input_event->latency_info,
commands);
}
void RenderWidgetHostViewMac::RouteOrProcessMouseEvent(
std::unique_ptr<InputEvent> input_event) {
if (!input_event || !input_event->web_event ||
......@@ -1882,19 +1863,6 @@ void RenderWidgetHostViewMac::RouteOrProcessMouseEvent(
RouteOrProcessMouseEvent(mouse_event);
}
void RenderWidgetHostViewMac::RouteOrProcessTouchEvent(
std::unique_ptr<InputEvent> input_event) {
if (!input_event || !input_event->web_event ||
!blink::WebInputEvent::IsTouchEventType(
input_event->web_event->GetType())) {
DLOG(ERROR) << "Absent or non-TouchEventType event.";
return;
}
const blink::WebTouchEvent& touch_event =
static_cast<const blink::WebTouchEvent&>(*input_event->web_event);
RouteOrProcessTouchEvent(touch_event);
}
void RenderWidgetHostViewMac::RouteOrProcessWheelEvent(
std::unique_ptr<InputEvent> input_event) {
if (!input_event || !input_event->web_event ||
......
......@@ -52,7 +52,6 @@
#include "ui/base/cocoa/secure_password_input.h"
#import "ui/base/test/cocoa_helper.h"
#import "ui/base/test/scoped_fake_nswindow_focus.h"
#include "ui/base/ui_base_features.h"
#include "ui/compositor/recyclable_compositor_mac.h"
#include "ui/events/base_event_utils.h"
#include "ui/events/blink/blink_features.h"
......@@ -135,30 +134,20 @@ std::string GetMessageNames(
for (auto& event : events)
result.push_back(event->name());
return base::JoinString(result, " ");
}
blink::WebPointerProperties::PointerType GetPointerType(
const MockWidgetInputHandler::MessageVector& events) {
EXPECT_EQ(events.size(), 1U);
MockWidgetInputHandler::DispatchedEventMessage* event = events[0]->ToEvent();
if (!event)
return blink::WebPointerProperties::PointerType::kUnknown;
if (blink::WebInputEvent::IsMouseEventType(
event->Event()->web_event->GetType())) {
return static_cast<const blink::WebMouseEvent*>(
event->Event()->web_event.get())
->pointer_type;
}
}
if (blink::WebInputEvent::IsTouchEventType(
event->Event()->web_event->GetType())) {
return static_cast<const blink::WebTouchEvent*>(
event->Event()->web_event.get())
->touches[0]
.pointer_type;
}
return blink::WebPointerProperties::PointerType::kUnknown;
blink::WebPointerProperties::PointerType GetPointerType(
const MockWidgetInputHandler::MessageVector& events) {
EXPECT_EQ(events.size(), 1U);
MockWidgetInputHandler::DispatchedEventMessage* event =
events[0]->ToEvent();
if (event && blink::WebInputEvent::IsMouseEventType(
event->Event()->web_event->GetType())) {
return static_cast<const blink::WebMouseEvent*>(
event->Event()->web_event.get())
->pointer_type;
}
return blink::WebPointerProperties::PointerType::kUnknown;
}
NSEvent* MockTabletEventWithParams(CGEventType type,
......@@ -179,20 +168,12 @@ NSEvent* MockMouseEventWithParams(CGEventType mouse_type,
CGPoint location,
CGMouseButton button,
CGEventMouseSubtype subtype,
bool is_entering_proximity = false,
bool is_pen_tip = false) {
bool is_entering_proximity = false) {
CGEventRef cg_event =
CGEventCreateMouseEvent(NULL, mouse_type, location, button);
CGEventSetIntegerValueField(cg_event, kCGMouseEventSubtype, subtype);
CGEventSetIntegerValueField(cg_event, kCGTabletProximityEventEnterProximity,
is_entering_proximity);
CGEventSetIntegerValueField(cg_event, kCGTabletEventRotation, 300);
if (is_pen_tip)
CGEventSetIntegerValueField(cg_event, kCGTabletEventPointButtons, 1);
CGEventTimestamp timestamp =
(ui::EventTimeForNow() - base::TimeTicks()).InMicroseconds() *
base::Time::kNanosecondsPerMicrosecond;
CGEventSetTimestamp(cg_event, timestamp);
NSEvent* event = [NSEvent eventWithCGEvent:cg_event];
CFRelease(cg_event);
return event;
......@@ -379,9 +360,6 @@ class RenderWidgetHostViewMacTest : public RenderViewHostImplTestHarness {
void SetUp() override {
RenderViewHostImplTestHarness::SetUp();
base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeature(features::kDirectManipulationStylus);
gpu::ImageTransportSurface::SetAllowOSMesaForTesting(true);
browser_context_ = std::make_unique<TestBrowserContext>();
......@@ -968,77 +946,6 @@ TEST_F(RenderWidgetHostViewMacTest, PointerEventWithMouseType) {
GetPointerType(events));
}
TEST_F(RenderWidgetHostViewMacTest, PointerEventWithPenTypeSendAsTouch) {
// Send a NSEvent of NSTabletProximity type which has a device type of pen.
NSEvent* event = MockTabletEventWithParams(kCGEventTabletProximity, true,
NSPenPointingDevice);
[rwhv_mac_->cocoa_view() tabletEvent:event];
// Flush and clear other messages (e.g. begin frames) the RWHVMac also sends.
base::RunLoop().RunUntilIdle();
static_cast<RenderWidgetHostImpl*>(rwhv_mac_->GetRenderWidgetHost())
->input_router()
->ForceSetTouchActionAuto();
event = MockMouseEventWithParams(
kCGEventLeftMouseDown, {6, 9}, kCGMouseButtonLeft,
kCGEventMouseSubtypeTabletPoint, false, true);
[rwhv_mac_->cocoa_view() mouseEvent:event];
base::RunLoop().RunUntilIdle();
MockWidgetInputHandler::MessageVector events =
host_->GetAndResetDispatchedMessages();
ASSERT_EQ("TouchStart", GetMessageNames(events));
EXPECT_EQ(blink::WebPointerProperties::PointerType::kPen,
GetPointerType(events));
events.clear();
base::RunLoop().RunUntilIdle();
events = host_->GetAndResetDispatchedMessages();
event = MockMouseEventWithParams(
kCGEventLeftMouseDragged, {16, 29}, kCGMouseButtonLeft,
kCGEventMouseSubtypeTabletPoint, false, true);
[rwhv_mac_->cocoa_view() mouseEvent:event];
base::RunLoop().RunUntilIdle();
events = host_->GetAndResetDispatchedMessages();
ASSERT_EQ("TouchMove", GetMessageNames(events));
EXPECT_EQ(blink::WebPointerProperties::PointerType::kPen,
GetPointerType(events));
events.clear();
base::RunLoop().RunUntilIdle();
events = host_->GetAndResetDispatchedMessages();
event = MockMouseEventWithParams(kCGEventLeftMouseUp, {16, 29},
kCGMouseButtonLeft,
kCGEventMouseSubtypeTabletPoint, false);
[rwhv_mac_->cocoa_view() mouseEvent:event];
base::RunLoop().RunUntilIdle();
events = host_->GetAndResetDispatchedMessages();
ASSERT_EQ("TouchEnd GestureScrollEnd", GetMessageNames(events));
EXPECT_EQ(blink::WebPointerProperties::PointerType::kPen,
static_cast<const blink::WebTouchEvent*>(
events[0]->ToEvent()->Event()->web_event.get())
->touches[0]
.pointer_type);
events.clear();
base::RunLoop().RunUntilIdle();
events = host_->GetAndResetDispatchedMessages();
event =
MockMouseEventWithParams(kCGEventLeftMouseDown, {6, 9},
kCGMouseButtonLeft, kCGEventMouseSubtypeDefault);
[rwhv_mac_->cocoa_view() mouseEvent:event];
base::RunLoop().RunUntilIdle();
events = host_->GetAndResetDispatchedMessages();
ASSERT_EQ("MouseDown", GetMessageNames(events));
EXPECT_EQ(blink::WebPointerProperties::PointerType::kMouse,
GetPointerType(events));
events.clear();
base::RunLoop().RunUntilIdle();
events = host_->GetAndResetDispatchedMessages();
}
TEST_F(RenderWidgetHostViewMacTest, SendMouseMoveOnShowingContextMenu) {
rwhv_mac_->SetShowingContextMenu(true);
base::RunLoop().RunUntilIdle();
......
......@@ -143,7 +143,6 @@ interface RenderWidgetHostNSViewClient {
// Forward events to the renderer or the input router, as appropriate.
RouteOrProcessMouseEvent(Event event);
RouteOrProcessTouchEvent(Event event);
RouteOrProcessWheelEvent(Event event);
// Special case forwarding of synthetic events to the renderer.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment