From 2011da09b129626b86c8f5f3720825f5d41665f9 Mon Sep 17 00:00:00 2001 From: Jinsuk Kim Date: Wed, 26 Jul 2017 04:37:55 +0000 Subject: [PATCH] Consume mouse button events on toolbar A regression was letting mouse button click events on toolbar to be passed down to content layer, and causing the content hidden behind the toolbar react to the events as well, while they should have triggered corresponding action on the toolbar only. This CL stop the leak. BUG=740855 NOTRY=true NOPRESUBMIT=true TBR=jinsukkim@chromium.org (cherry picked from commit ddd3b95b86917f5c0e61563689762219bad18d87) Change-Id: I3e0e3ede01ba73d589b3d3e3fa3a55b2577c0957 Reviewed-on: https://chromium-review.googlesource.com/582053 Reviewed-by: Yusuf Ozuysal Commit-Queue: Jinsuk Kim Cr-Original-Commit-Position: refs/heads/master@{#489123} Reviewed-on: https://chromium-review.googlesource.com/585509 Reviewed-by: Jinsuk Kim Cr-Commit-Position: refs/branch-heads/3163@{#52} Cr-Branched-From: ff259bab28b35d242e10186cd63af7ed404fae0d-refs/heads/master@{#488528} --- .../chrome/browser/toolbar/ToolbarLayout.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarLayout.java index 9fb0ac938b0d0..408c57fa2a5bc 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarLayout.java @@ -15,6 +15,8 @@ import android.graphics.drawable.Drawable; import android.os.SystemClock; import android.util.AttributeSet; +import android.view.InputDevice; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; @@ -534,6 +536,21 @@ protected void updateTabCountVisuals(int numberOfTabs) { } */ protected void onDefaultSearchEngineChanged() { } + @Override + public boolean onGenericMotionEvent(MotionEvent event) { + // Consumes mouse button events on toolbar so they don't get leaked to content layer. + // See https://crbug.com/740855. + if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0 + && event.getToolType(0) == MotionEvent.TOOL_TYPE_MOUSE) { + int action = event.getActionMasked(); + if (action == MotionEvent.ACTION_BUTTON_PRESS + || action == MotionEvent.ACTION_BUTTON_RELEASE) { + return true; + } + } + return super.onGenericMotionEvent(event); + } + @Override public void getLocationBarContentRect(Rect outRect) { View container = getLocationBar().getContainerView();