Construct and check for mojo::Event's LocationData as needed.
The location struct replaced |x| and |y| basic types by: https://codereview.chromium.org/1313353010 I audited pointer_data, wheel_data, and brush_data use too. BUG=534982 TEST=No crashes running view_manager_unittests locally. R=rjkroege@chromium.org TBR=sky@chromium.org Review URL: https://codereview.chromium.org/1362793002 Cr-Commit-Position: refs/heads/master@{#350265}
This commit is contained in:
components
html_viewer
mus
pdf_viewer
mojo/converters/input_events
@ -72,7 +72,8 @@ void SetWebMouseEventLocation(const mojo::LocationData& location_data,
|
||||
scoped_ptr<blink::WebInputEvent> BuildWebMouseEventFrom(const EventPtr& event) {
|
||||
scoped_ptr<blink::WebMouseEvent> web_event(new blink::WebMouseEvent);
|
||||
|
||||
SetWebMouseEventLocation(*(event->pointer_data->location), web_event.get());
|
||||
if (event->pointer_data && event->pointer_data->location)
|
||||
SetWebMouseEventLocation(*(event->pointer_data->location), web_event.get());
|
||||
|
||||
web_event->modifiers = EventFlagsToWebEventModifiers(event->flags);
|
||||
web_event->timeStampSeconds = EventTimeToWebEventTime(event);
|
||||
@ -145,41 +146,44 @@ scoped_ptr<blink::WebInputEvent> BuildWebMouseWheelEventFrom(
|
||||
web_event->modifiers = EventFlagsToWebEventModifiers(event->flags);
|
||||
web_event->timeStampSeconds = EventTimeToWebEventTime(event);
|
||||
|
||||
SetWebMouseEventLocation(*(event->wheel_data->location), web_event.get());
|
||||
if (event->wheel_data) {
|
||||
if (event->wheel_data->location)
|
||||
SetWebMouseEventLocation(*(event->wheel_data->location), web_event.get());
|
||||
|
||||
// TODO(rjkroege): Update the following code once Blink supports
|
||||
// DOM Level 3 wheel events
|
||||
// (http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents)
|
||||
web_event->deltaX = event->wheel_data->delta_x;
|
||||
web_event->deltaY = event->wheel_data->delta_y;
|
||||
// TODO(rjkroege): Update the following code once Blink supports
|
||||
// DOM Level 3 wheel events
|
||||
// (http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents)
|
||||
web_event->deltaX = event->wheel_data->delta_x;
|
||||
web_event->deltaY = event->wheel_data->delta_y;
|
||||
|
||||
web_event->wheelTicksX = web_event->deltaX / kPixelsPerTick;
|
||||
web_event->wheelTicksY = web_event->deltaY / kPixelsPerTick;
|
||||
web_event->wheelTicksX = web_event->deltaX / kPixelsPerTick;
|
||||
web_event->wheelTicksY = web_event->deltaY / kPixelsPerTick;
|
||||
|
||||
// TODO(rjkroege): Mandoline currently only generates WHEEL_MODE_LINE
|
||||
// wheel events so the other modes are not yet tested. Verify that
|
||||
// the implementation is correct.
|
||||
switch (event->wheel_data->mode) {
|
||||
case mojo::WHEEL_MODE_PIXEL:
|
||||
web_event->hasPreciseScrollingDeltas = true;
|
||||
web_event->scrollByPage = false;
|
||||
web_event->canScroll = true;
|
||||
break;
|
||||
case mojo::WHEEL_MODE_LINE:
|
||||
web_event->hasPreciseScrollingDeltas = false;
|
||||
web_event->scrollByPage = false;
|
||||
web_event->canScroll = true;
|
||||
break;
|
||||
case mojo::WHEEL_MODE_PAGE:
|
||||
web_event->hasPreciseScrollingDeltas = false;
|
||||
web_event->scrollByPage = true;
|
||||
web_event->canScroll = true;
|
||||
break;
|
||||
case mojo::WHEEL_MODE_SCALING:
|
||||
web_event->hasPreciseScrollingDeltas = false;
|
||||
web_event->scrollByPage = false;
|
||||
web_event->canScroll = false;
|
||||
break;
|
||||
// TODO(rjkroege): Mandoline currently only generates WHEEL_MODE_LINE
|
||||
// wheel events so the other modes are not yet tested. Verify that
|
||||
// the implementation is correct.
|
||||
switch (event->wheel_data->mode) {
|
||||
case mojo::WHEEL_MODE_PIXEL:
|
||||
web_event->hasPreciseScrollingDeltas = true;
|
||||
web_event->scrollByPage = false;
|
||||
web_event->canScroll = true;
|
||||
break;
|
||||
case mojo::WHEEL_MODE_LINE:
|
||||
web_event->hasPreciseScrollingDeltas = false;
|
||||
web_event->scrollByPage = false;
|
||||
web_event->canScroll = true;
|
||||
break;
|
||||
case mojo::WHEEL_MODE_PAGE:
|
||||
web_event->hasPreciseScrollingDeltas = false;
|
||||
web_event->scrollByPage = true;
|
||||
web_event->canScroll = true;
|
||||
break;
|
||||
case mojo::WHEEL_MODE_SCALING:
|
||||
web_event->hasPreciseScrollingDeltas = false;
|
||||
web_event->scrollByPage = false;
|
||||
web_event->canScroll = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return web_event.Pass();
|
||||
@ -196,8 +200,10 @@ TypeConverter<scoped_ptr<blink::WebInputEvent>, EventPtr>::Convert(
|
||||
case mojo::EVENT_TYPE_POINTER_UP:
|
||||
case mojo::EVENT_TYPE_POINTER_CANCEL:
|
||||
case mojo::EVENT_TYPE_POINTER_MOVE:
|
||||
if (event->pointer_data->kind == mojo::POINTER_KIND_MOUSE)
|
||||
if (event->pointer_data &&
|
||||
event->pointer_data->kind == mojo::POINTER_KIND_MOUSE) {
|
||||
return BuildWebMouseEventFrom(event);
|
||||
}
|
||||
case mojo::EVENT_TYPE_WHEEL:
|
||||
return BuildWebMouseWheelEventFrom(event);
|
||||
case mojo::EVENT_TYPE_KEY_PRESSED:
|
||||
|
@ -350,8 +350,7 @@ blink::WebNavigationPolicy HTMLFrame::decidePolicyForNavigation(
|
||||
return blink::WebNavigationPolicyCurrentTab;
|
||||
}
|
||||
|
||||
// about:blank is treated as the same origin and is always allowed for
|
||||
// frames.
|
||||
// about:blank is treated as the same origin and is always allowed for frames.
|
||||
if (parent_ && info.urlRequest.url() == GURL(url::kAboutBlankURL) &&
|
||||
info.defaultPolicy == blink::WebNavigationPolicyCurrentTab) {
|
||||
return blink::WebNavigationPolicyCurrentTab;
|
||||
@ -650,7 +649,7 @@ void HTMLFrame::OnViewDestroyed(View* view) {
|
||||
}
|
||||
|
||||
void HTMLFrame::OnViewInputEvent(View* view, const mojo::EventPtr& event) {
|
||||
if (event->pointer_data) {
|
||||
if (event->pointer_data && event->pointer_data->location) {
|
||||
// Blink expects coordintes to be in DIPs.
|
||||
event->pointer_data->location->x /= global_state()->device_pixel_ratio();
|
||||
event->pointer_data->location->y /= global_state()->device_pixel_ratio();
|
||||
@ -669,6 +668,7 @@ void HTMLFrame::OnViewInputEvent(View* view, const mojo::EventPtr& event) {
|
||||
event->action == mojo::EVENT_TYPE_POINTER_UP ||
|
||||
event->action == mojo::EVENT_TYPE_POINTER_CANCEL ||
|
||||
event->action == mojo::EVENT_TYPE_POINTER_MOVE) &&
|
||||
event->pointer_data &&
|
||||
event->pointer_data->kind == mojo::POINTER_KIND_TOUCH) {
|
||||
touch_handler_->OnTouchEvent(*event);
|
||||
return;
|
||||
|
@ -19,14 +19,19 @@ namespace {
|
||||
// In phase2, it will be relocated to MUS. Update this code at that time.
|
||||
void SetPropertiesFromEvent(const mojo::Event& event,
|
||||
ui::PointerProperties* properties) {
|
||||
properties->id = event.pointer_data->pointer_id;
|
||||
properties->x = event.pointer_data->location->x;
|
||||
properties->y = event.pointer_data->location->y;
|
||||
properties->raw_x = event.pointer_data->location->screen_x;
|
||||
properties->raw_y = event.pointer_data->location->screen_y;
|
||||
if (event.pointer_data) {
|
||||
properties->id = event.pointer_data->pointer_id;
|
||||
if (event.pointer_data->location) {
|
||||
properties->x = event.pointer_data->location->x;
|
||||
properties->y = event.pointer_data->location->y;
|
||||
properties->raw_x = event.pointer_data->location->screen_x;
|
||||
properties->raw_y = event.pointer_data->location->screen_y;
|
||||
}
|
||||
}
|
||||
|
||||
if (event.pointer_data->kind == mojo::POINTER_KIND_TOUCH ||
|
||||
event.pointer_data->kind == mojo::POINTER_KIND_PEN) {
|
||||
if (event.pointer_data && event.pointer_data->brush_data &&
|
||||
(event.pointer_data->kind == mojo::POINTER_KIND_TOUCH ||
|
||||
event.pointer_data->kind == mojo::POINTER_KIND_PEN)) {
|
||||
properties->pressure = event.pointer_data->brush_data->pressure;
|
||||
|
||||
// TODO(rjkroege): vary orientation for width, height.
|
||||
@ -185,9 +190,11 @@ void TouchHandler::SendMotionEventToGestureProvider() {
|
||||
void TouchHandler::PostProcessMotionEvent(const mojo::Event& event) {
|
||||
switch (event.action) {
|
||||
case mojo::EVENT_TYPE_POINTER_UP: {
|
||||
const int index = current_motion_event_->FindPointerIndexOfId(
|
||||
event.pointer_data->pointer_id);
|
||||
current_motion_event_->RemovePointerAt(index);
|
||||
if (event.pointer_data) {
|
||||
const int index = current_motion_event_->FindPointerIndexOfId(
|
||||
event.pointer_data->pointer_id);
|
||||
current_motion_event_->RemovePointerAt(index);
|
||||
}
|
||||
if (current_motion_event_->GetPointerCount() == 0)
|
||||
current_motion_event_.reset();
|
||||
break;
|
||||
|
@ -71,7 +71,7 @@ bool EventDispatcher::FindAccelerator(const mojo::Event& event,
|
||||
|
||||
ServerView* EventDispatcher::FindEventTarget(mojo::Event* event) {
|
||||
ServerView* focused_view = view_tree_host_->GetFocusedView();
|
||||
if (event->pointer_data) {
|
||||
if (event->pointer_data && event->pointer_data->location) {
|
||||
ServerView* root = view_tree_host_->root_view();
|
||||
const gfx::Point root_point(
|
||||
static_cast<int>(event->pointer_data->location->x),
|
||||
|
@ -55,12 +55,14 @@ Views GetTouchTargets(const ServerView* deepest) {
|
||||
mojo::EventPtr CloneEventForView(const mojo::Event& event,
|
||||
const ServerView* view) {
|
||||
mojo::EventPtr result(event.Clone());
|
||||
const gfx::PointF location(event.pointer_data->location->x,
|
||||
event.pointer_data->location->y);
|
||||
const gfx::PointF target_location(
|
||||
ConvertPointFBetweenViews(view->GetRoot(), view, location));
|
||||
result->pointer_data->location->x = target_location.x();
|
||||
result->pointer_data->location->y = target_location.y();
|
||||
if (event.pointer_data && event.pointer_data->location) {
|
||||
const gfx::PointF location(event.pointer_data->location->x,
|
||||
event.pointer_data->location->y);
|
||||
const gfx::PointF target_location(
|
||||
ConvertPointFBetweenViews(view->GetRoot(), view, location));
|
||||
result->pointer_data->location->x = target_location.x();
|
||||
result->pointer_data->location->y = target_location.y();
|
||||
}
|
||||
return result.Pass();
|
||||
}
|
||||
|
||||
@ -535,7 +537,7 @@ GestureManager::~GestureManager() {
|
||||
}
|
||||
|
||||
bool GestureManager::ProcessEvent(const mojo::Event& event) {
|
||||
if (!event.pointer_data)
|
||||
if (!event.pointer_data || !event.pointer_data->location)
|
||||
return false;
|
||||
|
||||
ScheduledDeleteProcessor delete_processor(this);
|
||||
|
@ -68,6 +68,7 @@ mojo::EventPtr CreateEvent(mojo::EventType type,
|
||||
event->action = type;
|
||||
event->pointer_data = mojo::PointerData::New();
|
||||
event->pointer_data->pointer_id = pointer_id;
|
||||
event->pointer_data->location = mojo::LocationData::New();
|
||||
event->pointer_data->location->x = x;
|
||||
event->pointer_data->location->y = y;
|
||||
return event.Pass();
|
||||
|
@ -251,6 +251,7 @@ mojo::EventPtr CreatePointerDownEvent(int x, int y) {
|
||||
event->action = mojo::EVENT_TYPE_POINTER_DOWN;
|
||||
event->pointer_data = mojo::PointerData::New();
|
||||
event->pointer_data->pointer_id = 1u;
|
||||
event->pointer_data->location = mojo::LocationData::New();
|
||||
event->pointer_data->location->x = x;
|
||||
event->pointer_data->location->y = y;
|
||||
return event.Pass();
|
||||
@ -261,6 +262,7 @@ mojo::EventPtr CreatePointerUpEvent(int x, int y) {
|
||||
event->action = mojo::EVENT_TYPE_POINTER_UP;
|
||||
event->pointer_data = mojo::PointerData::New();
|
||||
event->pointer_data->pointer_id = 1u;
|
||||
event->pointer_data->location = mojo::LocationData::New();
|
||||
event->pointer_data->location->x = x;
|
||||
event->pointer_data->location->y = y;
|
||||
return event.Pass();
|
||||
|
@ -385,16 +385,14 @@ class PDFView : public mojo::ApplicationDelegate,
|
||||
// responsive to gesture events.
|
||||
if ((event->key_data &&
|
||||
event->key_data->windows_key_code == mojo::KEYBOARD_CODE_DOWN) ||
|
||||
(event->wheel_data && event->wheel_data &&
|
||||
event->wheel_data->delta_y < 0)) {
|
||||
(event->wheel_data && event->wheel_data->delta_y < 0)) {
|
||||
if (current_page_ < (page_count_ - 1)) {
|
||||
current_page_++;
|
||||
DrawBitmap(embedder_for_roots_[view]);
|
||||
}
|
||||
} else if ((event->key_data &&
|
||||
event->key_data->windows_key_code == mojo::KEYBOARD_CODE_UP) ||
|
||||
(event->pointer_data && event->wheel_data &&
|
||||
event->wheel_data->delta_y > 0)) {
|
||||
(event->wheel_data && event->wheel_data->delta_y > 0)) {
|
||||
if (current_page_ > 0) {
|
||||
current_page_--;
|
||||
DrawBitmap(embedder_for_roots_[view]);
|
||||
|
@ -20,7 +20,7 @@ namespace mojo {
|
||||
namespace {
|
||||
|
||||
ui::EventType MojoMouseEventTypeToUIEvent(const EventPtr& event) {
|
||||
DCHECK(!event->pointer_data.is_null());
|
||||
DCHECK(event->pointer_data);
|
||||
DCHECK_EQ(POINTER_KIND_MOUSE, event->pointer_data->kind);
|
||||
switch (event->action) {
|
||||
case EVENT_TYPE_POINTER_DOWN:
|
||||
@ -46,7 +46,7 @@ ui::EventType MojoMouseEventTypeToUIEvent(const EventPtr& event) {
|
||||
}
|
||||
|
||||
ui::EventType MojoTouchEventTypeToUIEvent(const EventPtr& event) {
|
||||
DCHECK(!event->pointer_data.is_null());
|
||||
DCHECK(event->pointer_data);
|
||||
DCHECK_EQ(POINTER_KIND_TOUCH, event->pointer_data->kind);
|
||||
switch (event->action) {
|
||||
case EVENT_TYPE_POINTER_DOWN:
|
||||
@ -69,7 +69,7 @@ ui::EventType MojoTouchEventTypeToUIEvent(const EventPtr& event) {
|
||||
}
|
||||
|
||||
ui::EventType MojoWheelEventTypeToUIEvent(const EventPtr& event) {
|
||||
DCHECK(!event->wheel_data.is_null());
|
||||
DCHECK(event->wheel_data);
|
||||
return ui::ET_MOUSEWHEEL;
|
||||
}
|
||||
|
||||
@ -275,7 +275,7 @@ scoped_ptr<ui::Event> TypeConverter<scoped_ptr<ui::Event>, EventPtr>::Convert(
|
||||
const EventPtr& input) {
|
||||
gfx::PointF location;
|
||||
gfx::PointF screen_location;
|
||||
if (!input->pointer_data.is_null()) {
|
||||
if (input->pointer_data && input->pointer_data->location) {
|
||||
location.SetPoint(input->pointer_data->location->x,
|
||||
input->pointer_data->location->y);
|
||||
screen_location.SetPoint(input->pointer_data->location->screen_x,
|
||||
@ -321,6 +321,7 @@ scoped_ptr<ui::Event> TypeConverter<scoped_ptr<ui::Event>, EventPtr>::Convert(
|
||||
return event.Pass();
|
||||
} break;
|
||||
case POINTER_KIND_TOUCH: {
|
||||
DCHECK(input->pointer_data->brush_data);
|
||||
scoped_ptr<ui::TouchEvent> touch_event(new ui::TouchEvent(
|
||||
MojoTouchEventTypeToUIEvent(input), location,
|
||||
ui::EventFlags(input->flags), input->pointer_data->pointer_id,
|
||||
@ -337,6 +338,7 @@ scoped_ptr<ui::Event> TypeConverter<scoped_ptr<ui::Event>, EventPtr>::Convert(
|
||||
}
|
||||
} break;
|
||||
case EVENT_TYPE_WHEEL: {
|
||||
DCHECK(input->wheel_data);
|
||||
scoped_ptr<ui::MouseEvent> pre_wheel_event(new ui::MouseEvent(
|
||||
MojoWheelEventTypeToUIEvent(input), location, screen_location,
|
||||
ui::EventTimeForNow(), ui::EventFlags(input->flags),
|
||||
|
Reference in New Issue
Block a user