Commit 39236bf4 authored by Mustaq Ahmed's avatar Mustaq Ahmed Committed by Chromium LUCI CQ

Add checks for null values from PointerEventFactory::Create().

Bug: 1164347
Change-Id: I3c04a4ba3a8beee7cabf1f7823e249e66738d75a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2644706Reviewed-by: default avatarDave Tapuska <dtapuska@chromium.org>
Commit-Queue: Mustaq Ahmed <mustaq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#846404}
parent a70a5303
...@@ -226,6 +226,7 @@ void PointerEventManager::SendMouseAndPointerBoundaryEvents( ...@@ -226,6 +226,7 @@ void PointerEventManager::SendMouseAndPointerBoundaryEvents(
PointerEvent* dummy_pointer_event = pointer_event_factory_.Create( PointerEvent* dummy_pointer_event = pointer_event_factory_.Create(
web_pointer_event, Vector<WebPointerEvent>(), Vector<WebPointerEvent>(), web_pointer_event, Vector<WebPointerEvent>(), Vector<WebPointerEvent>(),
frame_->GetDocument()->domWindow()); frame_->GetDocument()->domWindow());
DCHECK(dummy_pointer_event);
// TODO(crbug/545647): This state should reset with pointercancel too. // TODO(crbug/545647): This state should reset with pointercancel too.
// This function also gets called for compat mouse events of touch at this // This function also gets called for compat mouse events of touch at this
...@@ -564,10 +565,6 @@ WebInputEventResult PointerEventManager::HandlePointerEvent( ...@@ -564,10 +565,6 @@ WebInputEventResult PointerEventManager::HandlePointerEvent(
target = ComputePointerEventTarget(event).target_element; target = ComputePointerEventTarget(event).target_element;
} }
PointerEvent* pointer_event =
pointer_event_factory_.Create(event, coalesced_events, predicted_events,
frame_->GetDocument()->domWindow());
// Sometimes the Browser process tags events with kRelativeMotionEvent. // Sometimes the Browser process tags events with kRelativeMotionEvent.
// For e.g. during pointer lock, it recenters cursor by warping so that // For e.g. during pointer lock, it recenters cursor by warping so that
// cursor does not hit the screen boundary. // cursor does not hit the screen boundary.
...@@ -578,7 +575,13 @@ WebInputEventResult PointerEventManager::HandlePointerEvent( ...@@ -578,7 +575,13 @@ WebInputEventResult PointerEventManager::HandlePointerEvent(
if (event.GetModifiers() & WebInputEvent::Modifiers::kRelativeMotionEvent) if (event.GetModifiers() & WebInputEvent::Modifiers::kRelativeMotionEvent)
return WebInputEventResult::kHandledSuppressed; return WebInputEventResult::kHandledSuppressed;
PointerEvent* pointer_event =
pointer_event_factory_.Create(event, coalesced_events, predicted_events,
frame_->GetDocument()->domWindow());
if (pointer_event) {
// TODO(crbug.com/1141595): We should handle this case further upstream.
DispatchPointerEvent(target, pointer_event); DispatchPointerEvent(target, pointer_event);
}
return WebInputEventResult::kHandledSystem; return WebInputEventResult::kHandledSystem;
} }
...@@ -611,11 +614,14 @@ WebInputEventResult PointerEventManager::HandlePointerEvent( ...@@ -611,11 +614,14 @@ WebInputEventResult PointerEventManager::HandlePointerEvent(
pointer_event_target.target_element pointer_event_target.target_element
? pointer_event_target.target_element->GetDocument().domWindow() ? pointer_event_target.target_element->GetDocument().domWindow()
: nullptr); : nullptr);
if (core_pointer_event) {
// TODO(crbug.com/1141595): We should handle this case further upstream.
SendTouchPointerEvent( SendTouchPointerEvent(
pointer_event_target.target_element, pointer_event_target.target_element,
pointer_event_factory_.CreatePointerCancelEvent( pointer_event_factory_.CreatePointerCancelEvent(
core_pointer_event->pointerId(), event.TimeStamp()), core_pointer_event->pointerId(), event.TimeStamp()),
event.hovering); event.hovering);
}
WebPointerEvent pointer_cancel_event; WebPointerEvent pointer_cancel_event;
pointer_cancel_event.pointer_type = event.pointer_type; pointer_cancel_event.pointer_type = event.pointer_type;
...@@ -681,6 +687,7 @@ WebInputEventResult PointerEventManager::CreateAndDispatchPointerEvent( ...@@ -681,6 +687,7 @@ WebInputEventResult PointerEventManager::CreateAndDispatchPointerEvent(
PointerEvent* pointer_event = pointer_event_factory_.Create( PointerEvent* pointer_event = pointer_event_factory_.Create(
web_pointer_event, pointer_coalesced_events, pointer_predicted_events, web_pointer_event, pointer_coalesced_events, pointer_predicted_events,
target->GetDocument().domWindow()); target->GetDocument().domWindow());
DCHECK(pointer_event);
ProcessCaptureAndPositionOfPointerEvent(pointer_event, target, ProcessCaptureAndPositionOfPointerEvent(pointer_event, target,
canvas_region_id, &mouse_event); canvas_region_id, &mouse_event);
...@@ -749,16 +756,17 @@ WebInputEventResult PointerEventManager::SendMousePointerEvent( ...@@ -749,16 +756,17 @@ WebInputEventResult PointerEventManager::SendMousePointerEvent(
pointer_event_factory_.GetPointerEventId(mouse_event), mouse_event, pointer_event_factory_.GetPointerEventId(mouse_event), mouse_event,
event_type); event_type);
PointerEvent* pointer_event = pointer_event_factory_.Create(
web_pointer_event, pointer_coalesced_events, pointer_predicted_events,
frame_->GetDocument()->domWindow());
bool fake_event = (web_pointer_event.GetModifiers() & bool fake_event = (web_pointer_event.GetModifiers() &
WebInputEvent::Modifiers::kRelativeMotionEvent); WebInputEvent::Modifiers::kRelativeMotionEvent);
// Fake events should only be move events. // Fake events should only be move events.
DCHECK(!fake_event || event_type == WebInputEvent::Type::kPointerMove); DCHECK(!fake_event || event_type == WebInputEvent::Type::kPointerMove);
PointerEvent* pointer_event = pointer_event_factory_.Create(
web_pointer_event, pointer_coalesced_events, pointer_predicted_events,
frame_->GetDocument()->domWindow());
DCHECK(pointer_event);
// This is for when the mouse is released outside of the page. // This is for when the mouse is released outside of the page.
if (!fake_event && event_type == WebInputEvent::Type::kPointerMove && if (!fake_event && event_type == WebInputEvent::Type::kPointerMove &&
!pointer_event->buttons()) { !pointer_event->buttons()) {
......
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