DevTools: refactor overlay input handling

Routes each message type into its own method.

Change-Id: I8dacbc37d614794f6757d6b9c669fa751de5ab4d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1525263
Reviewed-by: Alexei Filippov <alph@chromium.org>
Reviewed-by: Andrey Lushnikov <lushnikov@chromium.org>
Commit-Queue: Pavel Feldman <pfeldman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#641086}
diff --git a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc
index e472b20..58b36aa 100644
--- a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc
@@ -137,6 +137,10 @@
   return false;
 }
 
+bool InspectTool::ForwardEventsToOverlay() {
+  return true;
+}
+
 void InspectTool::Trace(blink::Visitor* visitor) {
   visitor->Trace(overlay_);
 }
@@ -626,85 +630,25 @@
     WebGestureEvent transformed_event = TransformWebGestureEvent(
         frame_impl_->GetFrameView(),
         static_cast<const WebGestureEvent&>(input_event));
-    if (inspect_tool_->HandleGestureTapEvent(transformed_event)) {
-      ScheduleUpdate();
-      return WebInputEventResult::kHandledSuppressed;
-    }
-    return OverlayMainFrame()->GetEventHandler().HandleGestureEvent(
-        transformed_event);
+    return HandleGestureTapEvent(transformed_event);
   }
 
   if (WebInputEvent::IsMouseEventType(input_event.GetType())) {
-    WebMouseEvent mouse_event =
+    WebMouseEvent transformed_event =
         TransformWebMouseEvent(frame_impl_->GetFrameView(),
                                static_cast<const WebMouseEvent&>(input_event));
-
-    bool handled = false;
-    if (mouse_event.GetType() == WebInputEvent::kMouseMove) {
-      handled = inspect_tool_->HandleMouseMove(mouse_event);
-    } else if (mouse_event.GetType() == WebInputEvent::kMouseDown) {
-      handled =
-          inspect_tool_->HandleMouseDown(mouse_event, &swallow_next_mouse_up_);
-    } else if (mouse_event.GetType() == WebInputEvent::kMouseUp) {
-      handled = inspect_tool_->HandleMouseUp(mouse_event);
-    }
-
-    if (handled) {
-      ScheduleUpdate();
-      return WebInputEventResult::kHandledSuppressed;
-    }
-
-    if (mouse_event.GetType() == WebInputEvent::kMouseMove) {
-      return OverlayMainFrame()->GetEventHandler().HandleMouseMoveEvent(
-          mouse_event,
-          TransformWebMouseEventVector(frame_impl_->GetFrameView(),
-                                       std::vector<const WebInputEvent*>()),
-          TransformWebMouseEventVector(frame_impl_->GetFrameView(),
-                                       std::vector<const WebInputEvent*>()));
-    }
-    if (mouse_event.GetType() == WebInputEvent::kMouseDown) {
-      return OverlayMainFrame()->GetEventHandler().HandleMousePressEvent(
-          mouse_event);
-    }
-    if (mouse_event.GetType() == WebInputEvent::kMouseUp) {
-      return OverlayMainFrame()->GetEventHandler().HandleMouseReleaseEvent(
-          mouse_event);
-    }
+    return HandleMouseEvent(transformed_event);
   }
 
   if (WebInputEvent::IsPointerEventType(input_event.GetType())) {
     WebPointerEvent transformed_event = TransformWebPointerEvent(
         frame_impl_->GetFrameView(),
         static_cast<const WebPointerEvent&>(input_event));
-    bool handled = inspect_tool_->HandlePointerEvent(transformed_event);
-    if (handled) {
-      ScheduleUpdate();
-      return WebInputEventResult::kHandledSuppressed;
-    }
-    return OverlayMainFrame()->GetEventHandler().HandlePointerEvent(
-        transformed_event, Vector<WebPointerEvent>(),
-        Vector<WebPointerEvent>());
+    return HandlePointerEvent(transformed_event);
   }
 
   if (WebInputEvent::IsKeyboardEventType(input_event.GetType())) {
-    bool handled = inspect_tool_->HandleKeyboardEvent(
-        static_cast<const WebKeyboardEvent&>(input_event),
-        &swallow_next_escape_up_);
-    if (handled) {
-      ScheduleUpdate();
-      return WebInputEventResult::kHandledSuppressed;
-    }
-
-    // Exit tool upon unhandled Esc.
-    if (input_event.GetType() == WebInputEvent::kRawKeyDown) {
-      auto keyboard_event = static_cast<const WebKeyboardEvent&>(input_event);
-      if (keyboard_event.windows_key_code == VKEY_ESCAPE) {
-        GetFrontend()->inspectModeCanceled();
-        swallow_next_escape_up_ = true;
-        return WebInputEventResult::kHandledSuppressed;
-      }
-    }
-    return OverlayMainFrame()->GetEventHandler().KeyEvent(
+    return HandleKeyboardEvent(
         static_cast<const WebKeyboardEvent&>(input_event));
   }
 
@@ -712,13 +656,107 @@
     WebMouseWheelEvent transformed_event = TransformWebMouseWheelEvent(
         frame_impl_->GetFrameView(),
         static_cast<const WebMouseWheelEvent&>(input_event));
-    return OverlayMainFrame()->GetEventHandler().HandleWheelEvent(
-        transformed_event);
+    return HandleMouseWheelEvent(transformed_event);
   }
 
   return WebInputEventResult::kNotHandled;
 }
 
+WebInputEventResult InspectorOverlayAgent::HandleGestureTapEvent(
+    const WebGestureEvent& gesture_event) {
+  if (inspect_tool_->HandleGestureTapEvent(gesture_event)) {
+    ScheduleUpdate();
+    return WebInputEventResult::kHandledSuppressed;
+  }
+  if (!inspect_tool_->ForwardEventsToOverlay())
+    return WebInputEventResult::kNotHandled;
+
+  return OverlayMainFrame()->GetEventHandler().HandleGestureEvent(
+      gesture_event);
+}
+
+WebInputEventResult InspectorOverlayAgent::HandleMouseEvent(
+    const WebMouseEvent& mouse_event) {
+  bool handled = false;
+  if (mouse_event.GetType() == WebInputEvent::kMouseMove) {
+    handled = inspect_tool_->HandleMouseMove(mouse_event);
+  } else if (mouse_event.GetType() == WebInputEvent::kMouseDown) {
+    handled =
+        inspect_tool_->HandleMouseDown(mouse_event, &swallow_next_mouse_up_);
+  } else if (mouse_event.GetType() == WebInputEvent::kMouseUp) {
+    handled = inspect_tool_->HandleMouseUp(mouse_event);
+  }
+
+  if (handled) {
+    ScheduleUpdate();
+    return WebInputEventResult::kHandledSuppressed;
+  }
+
+  if (!inspect_tool_->ForwardEventsToOverlay())
+    return WebInputEventResult::kNotHandled;
+
+  if (mouse_event.GetType() == WebInputEvent::kMouseMove) {
+    return OverlayMainFrame()->GetEventHandler().HandleMouseMoveEvent(
+        mouse_event,
+        TransformWebMouseEventVector(frame_impl_->GetFrameView(),
+                                     std::vector<const WebInputEvent*>()),
+        TransformWebMouseEventVector(frame_impl_->GetFrameView(),
+                                     std::vector<const WebInputEvent*>()));
+  }
+  if (mouse_event.GetType() == WebInputEvent::kMouseDown) {
+    return OverlayMainFrame()->GetEventHandler().HandleMousePressEvent(
+        mouse_event);
+  }
+  if (mouse_event.GetType() == WebInputEvent::kMouseUp) {
+    return OverlayMainFrame()->GetEventHandler().HandleMouseReleaseEvent(
+        mouse_event);
+  }
+  return WebInputEventResult::kNotHandled;
+}
+
+WebInputEventResult InspectorOverlayAgent::HandlePointerEvent(
+    const WebPointerEvent& pointer_event) {
+  bool handled = inspect_tool_->HandlePointerEvent(pointer_event);
+  if (handled) {
+    ScheduleUpdate();
+    return WebInputEventResult::kHandledSuppressed;
+  }
+
+  if (!inspect_tool_->ForwardEventsToOverlay())
+    return WebInputEventResult::kNotHandled;
+
+  return OverlayMainFrame()->GetEventHandler().HandlePointerEvent(
+      pointer_event, Vector<WebPointerEvent>(), Vector<WebPointerEvent>());
+}
+
+WebInputEventResult InspectorOverlayAgent::HandleKeyboardEvent(
+    const WebKeyboardEvent& keyboard_event) {
+  bool handled = inspect_tool_->HandleKeyboardEvent(keyboard_event,
+                                                    &swallow_next_escape_up_);
+  if (handled) {
+    ScheduleUpdate();
+    return WebInputEventResult::kHandledSuppressed;
+  }
+
+  // Exit tool upon unhandled Esc.
+  if (keyboard_event.GetType() == WebInputEvent::kRawKeyDown) {
+    if (keyboard_event.windows_key_code == VKEY_ESCAPE) {
+      GetFrontend()->inspectModeCanceled();
+      swallow_next_escape_up_ = true;
+      return WebInputEventResult::kHandledSuppressed;
+    }
+  }
+  if (!inspect_tool_->ForwardEventsToOverlay())
+    return WebInputEventResult::kNotHandled;
+
+  return OverlayMainFrame()->GetEventHandler().KeyEvent(keyboard_event);
+}
+
+WebInputEventResult InspectorOverlayAgent::HandleMouseWheelEvent(
+    const WebMouseWheelEvent& wheel_event) {
+  return OverlayMainFrame()->GetEventHandler().HandleWheelEvent(wheel_event);
+}
+
 void InspectorOverlayAgent::InnerHideHighlight() {
   highlight_node_.Clear();
   event_target_node_.Clear();
diff --git a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h
index bd6c0ca..1e3013e 100644
--- a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h
+++ b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h
@@ -65,6 +65,7 @@
 class WebGestureEvent;
 class WebKeyboardEvent;
 class WebMouseEvent;
+class WebMouseWheelEvent;
 class WebLocalFrameImpl;
 class WebPointerEvent;
 
@@ -84,6 +85,7 @@
   virtual bool HandlePointerEvent(const WebPointerEvent&);
   virtual bool HandleKeyboardEvent(const WebKeyboardEvent&,
                                    bool* swallow_next_escape_up);
+  virtual bool ForwardEventsToOverlay();
   virtual void Draw(float scale) {}
   virtual void Trace(blink::Visitor* visitor);
   virtual void Dispose() {}
@@ -214,6 +216,14 @@
       protocol::Maybe<protocol::Overlay::HighlightConfig>
           highlight_inspector_object,
       std::unique_ptr<InspectorHighlightConfig>*);
+  WebInputEventResult HandleGestureTapEvent(
+      const WebGestureEvent& gesture_event);
+  WebInputEventResult HandleMouseEvent(const WebMouseEvent& mouse_event);
+  WebInputEventResult HandlePointerEvent(const WebPointerEvent& pointer_event);
+  WebInputEventResult HandleKeyboardEvent(
+      const WebKeyboardEvent& keyboard_event);
+  WebInputEventResult HandleMouseWheelEvent(
+      const WebMouseWheelEvent& wheel_event);
 
   Member<WebLocalFrameImpl> frame_impl_;
   Member<InspectedFrames> inspected_frames_;