0

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:
msw
2015-09-22 16:45:15 -07:00
committed by Commit bot
parent 46ce5e6bc6
commit b143a367f6
9 changed files with 81 additions and 63 deletions

@ -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),