mac: route mouse up and down event to views that overlay content area

A view that overlays a content area (hosted in a view::WebView) cannot
receive mouse up and down events because all events go to WebView's
NSView. This NSView is above the NSWindow' contentView that hosts the
toolkit-views tree.

To fix the issue, this CL redirects such events to the content NSView
which hosts the root toolkit-views tree by overriding hitTest: in
BridgedContentView.

Implementation wise, this CL adds mojo method GetHitTestResult() that
replaces the old GetIsDraggableBackgroundAt(). The method returns
whether the point is within the draggable area, a regular view, or a
NativeViewHost that hosts a subview of the contentView.

Note that mouse move will still be sent to all NSViews, including the
content NSView and all subviews. When RenderWidgetHostViewCocoa receives
mouse moves events, it uses hitTest: to check if the event should be
sent to blink and decide if mouse enter and exit events should be
synthesized. This is the existing behavior.

Bug: 417607649
Change-Id: I10728baecda999bfd451bc8fb98fbcd1c94a75fd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6574464
Commit-Queue: Keren Zhu <kerenzhu@chromium.org>
Reviewed-by: Joe Mason <joenotcharles@google.com>
Reviewed-by: Avi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1466557}
6 files changed
tree: 3e38686f9dbbd9cc15efe2199c41cd75ef92cbb1
  1. .github/
  2. android_webview/
  3. apps/
  4. ash/
  5. base/
  6. build/
  7. build_overrides/
  8. buildtools/
  9. cc/
  10. chrome/
  11. chromecast/
  12. chromeos/
  13. codelabs/
  14. components/
  15. content/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia_web/
  22. gin/
  23. google_apis/
  24. gpu/
  25. headless/
  26. infra/
  27. ios/
  28. ipc/
  29. media/
  30. mojo/
  31. native_client_sdk/
  32. net/
  33. pdf/
  34. ppapi/
  35. printing/
  36. remoting/
  37. rlz/
  38. sandbox/
  39. services/
  40. skia/
  41. sql/
  42. storage/
  43. styleguide/
  44. testing/
  45. third_party/
  46. tools/
  47. ui/
  48. url/
  49. webkit/
  50. .clang-format
  51. .clang-tidy
  52. .clangd
  53. .git-blame-ignore-revs
  54. .gitallowed
  55. .gitattributes
  56. .gitignore
  57. .gitmodules
  58. .gn
  59. .mailmap
  60. .rustfmt.toml
  61. .vpython3
  62. .yapfignore
  63. ATL_OWNERS
  64. AUTHORS
  65. BUILD.gn
  66. CODE_OF_CONDUCT.md
  67. codereview.settings
  68. CPPLINT.cfg
  69. CRYPTO_OWNERS
  70. DEPS
  71. DIR_METADATA
  72. LICENSE
  73. LICENSE.chromium_os
  74. OWNERS
  75. PRESUBMIT.py
  76. PRESUBMIT_test.py
  77. PRESUBMIT_test_mocks.py
  78. README.md
  79. SECURITY_OWNERS
  80. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure.

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.