diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-11-08 12:34:02 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-11-08 11:36:33 +0000 |
commit | d702e4b6a64574e97fc7df8fe3238cde70242080 (patch) | |
tree | 3297e13ad4560b4c4a0d23dcd32724ff6ac2e3fe /chromium/ui | |
parent | e6430e577f105ad8813c92e75c54660c4985026e (diff) | |
download | qtwebengine-chromium-d702e4b6a64574e97fc7df8fe3238cde70242080.tar.gz |
BASELINE: Update Chromium to 61.0.3163.140
Change-Id: I646c933139007f1fdc42e7a4073652f8e6e55b5a
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/ui')
13 files changed, 211 insertions, 22 deletions
diff --git a/chromium/ui/events/ozone/evdev/event_device_test_util.cc b/chromium/ui/events/ozone/evdev/event_device_test_util.cc index 5f032d9d38a..c84115eb8a4 100644 --- a/chromium/ui/events/ozone/evdev/event_device_test_util.cc +++ b/chromium/ui/events/ozone/evdev/event_device_test_util.cc @@ -230,6 +230,45 @@ const DeviceCapabilities kLinkTouchscreen = { arraysize(kLinkTouchscreenAbsAxes), }; +// Fake Atmel touchscreen based on real device from Chromebook Pixel, +// with the addition of ABS_MT_TOOL_TYPE capability. +const DeviceAbsoluteAxis kLinkWithToolTypeTouchscreenAbsAxes[] = { + {ABS_X, {0, 0, 2559, 0, 0, 20}}, + {ABS_Y, {0, 0, 1699, 0, 0, 20}}, + {ABS_PRESSURE, {0, 0, 255, 0, 0, 0}}, + {ABS_MT_SLOT, {0, 0, 15, 0, 0, 0}}, + {ABS_MT_TOUCH_MAJOR, {0, 0, 938, 0, 0, 0}}, + {ABS_MT_ORIENTATION, {0, -3, 4, 0, 0, 0}}, + {ABS_MT_POSITION_X, {0, 0, 2559, 0, 0, 20}}, + {ABS_MT_POSITION_Y, {0, 0, 1699, 0, 0, 20}}, + {ABS_MT_TOOL_TYPE, {0, 0, 0, 0, 0, 0}}, + {ABS_MT_TRACKING_ID, {0, 0, 65535, 0, 0, 0}}, + {ABS_MT_PRESSURE, {0, 0, 255, 0, 0, 0}}, +}; +const DeviceCapabilities kLinkWithToolTypeTouchscreen = { + /* path */ + "/sys/devices/pci0000:00/0000:00:02.0/i2c-2/2-004a/" + "input/input7/event7", + /* name */ "Atmel maXTouch Touchscreen", + /* phys */ "i2c-2-004a/input0", + /* uniq */ "", + /* bustype */ "0018", + /* vendor */ "0000", + /* product */ "0000", + /* version */ "0000", + /* prop */ "0", + /* ev */ "b", + /* key */ "400 0 0 0 0 0", + /* rel */ "0", + /* abs */ "673800001000003", + /* msc */ "0", + /* sw */ "0", + /* led */ "0", + /* ff */ "0", + kLinkWithToolTypeTouchscreenAbsAxes, + arraysize(kLinkWithToolTypeTouchscreenAbsAxes), +}; + // Captured from Chromebook Pixel. const DeviceAbsoluteAxis kLinkTouchpadAbsAxes[] = { {ABS_X, {0, 0, 2040, 0, 0, 20}}, diff --git a/chromium/ui/events/ozone/evdev/event_device_test_util.h b/chromium/ui/events/ozone/evdev/event_device_test_util.h index 145ca4b9568..bd77560ccce 100644 --- a/chromium/ui/events/ozone/evdev/event_device_test_util.h +++ b/chromium/ui/events/ozone/evdev/event_device_test_util.h @@ -64,6 +64,7 @@ extern const DeviceCapabilities kHJCGamepad; extern const DeviceCapabilities kiBuffaloGamepad; extern const DeviceCapabilities kLinkKeyboard; extern const DeviceCapabilities kLinkTouchscreen; +extern const DeviceCapabilities kLinkWithToolTypeTouchscreen; extern const DeviceCapabilities kLinkTouchpad; extern const DeviceCapabilities kHpUsbKeyboard; extern const DeviceCapabilities kHpUsbKeyboard_Extra; diff --git a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc index ca5a9a05654..7cdda3a0827 100644 --- a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc +++ b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc @@ -196,7 +196,10 @@ void TouchEventConverterEvdev::Initialize(const EventDeviceInfo& info) { info.GetAbsMtSlotValueWithDefault(ABS_MT_TOUCH_MINOR, i, 0) / 2.0f; events_[i].pressure = ScalePressure( info.GetAbsMtSlotValueWithDefault(ABS_MT_PRESSURE, i, 0)); - events_[i].cancelled = major_max_ > 0 && touch_major == major_max_; + int tool_type = info.GetAbsMtSlotValueWithDefault(ABS_MT_TOOL_TYPE, i, + MT_TOOL_FINGER); + events_[i].cancelled = (tool_type == MT_TOOL_PALM) || + (major_max_ > 0 && touch_major == major_max_); if (events_[i].cancelled) cancelled_state = true; } @@ -391,8 +394,9 @@ void TouchEventConverterEvdev::ProcessAbs(const input_event& input) { // neither minor nor orientation, so this is all we can do. events_[current_slot_].radius_x = input.value / 2.0f; - // The MT protocol cannot communicate cancelled touches, so some kernel - // drivers will identify palms by setting touch major to max. + // The MT protocol communicates that there is palm on the surface + // by either sending ABS_MT_TOOL_TYPE/MT_TOOL_PALM, or by setting + // touch major to max. if (major_max_ > 0 && input.value == major_max_) events_[current_slot_].cancelled = true; break; @@ -405,6 +409,10 @@ void TouchEventConverterEvdev::ProcessAbs(const input_event& input) { case ABS_MT_POSITION_Y: events_[current_slot_].y = input.value; break; + case ABS_MT_TOOL_TYPE: + if (input.value == MT_TOOL_PALM) + events_[current_slot_].cancelled = true; + break; case ABS_MT_TRACKING_ID: UpdateTrackingId(current_slot_, input.value); break; diff --git a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h index 3ad2a364902..c3ef9d2e485 100644 --- a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h +++ b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h @@ -11,6 +11,13 @@ #include <bitset> #include <memory> +#include <linux/input.h> +// See if we compile against new enough headers and add missing definition +// if the headers are too old. +#ifndef MT_TOOL_PALM +#define MT_TOOL_PALM 2 +#endif + #include "base/compiler_specific.h" #include "base/files/file_path.h" #include "base/macros.h" diff --git a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc index e52c540d06e..7b4e229e785 100644 --- a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc +++ b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc @@ -679,6 +679,128 @@ TEST_F(TouchEventConverterEvdevTest, ShouldRemoveContactsWhenDisabled) { EXPECT_EQ(2u, size()); } +TEST_F(TouchEventConverterEvdevTest, PalmShouldCancelTouch) { + ui::MockTouchEventConverterEvdev* dev = device(); + + EventDeviceInfo devinfo; + EXPECT_TRUE(CapabilitiesToDeviceInfo(kLinkWithToolTypeTouchscreen, &devinfo)); + + timeval time; + time = {1429651083, 686882}; + int major_max = devinfo.GetAbsMaximum(ABS_MT_TOUCH_MAJOR); + struct input_event mock_kernel_queue_max_major[] = { + {time, EV_ABS, ABS_MT_SLOT, 0}, + {time, EV_ABS, ABS_MT_TRACKING_ID, 0}, + {time, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_FINGER}, + {time, EV_ABS, ABS_MT_POSITION_X, 1003}, + {time, EV_ABS, ABS_MT_POSITION_Y, 749}, + {time, EV_ABS, ABS_MT_PRESSURE, 50}, + {time, EV_ABS, ABS_MT_TOUCH_MAJOR, 116}, + {time, EV_ABS, ABS_MT_SLOT, 1}, + {time, EV_ABS, ABS_MT_TRACKING_ID, 1}, + {time, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_FINGER}, + {time, EV_ABS, ABS_MT_POSITION_X, 1103}, + {time, EV_ABS, ABS_MT_POSITION_Y, 649}, + {time, EV_ABS, ABS_MT_PRESSURE, 50}, + {time, EV_ABS, ABS_MT_TOUCH_MAJOR, 116}, + {time, EV_KEY, BTN_TOUCH, 1}, + {time, EV_ABS, ABS_X, 1003}, + {time, EV_ABS, ABS_Y, 749}, + {time, EV_ABS, ABS_PRESSURE, 50}, + {time, EV_SYN, SYN_REPORT, 0}, + {time, EV_ABS, ABS_MT_SLOT, 0}, + {time, EV_ABS, ABS_MT_TOUCH_MAJOR, major_max}, + {time, EV_SYN, SYN_REPORT, 0}, + {time, EV_ABS, ABS_MT_TRACKING_ID, -1}, + {time, EV_ABS, ABS_MT_SLOT, 1}, + {time, EV_ABS, ABS_MT_TRACKING_ID, -1}, + {time, EV_SYN, SYN_REPORT, 0}, + }; + struct input_event mock_kernel_queue_tool_palm[] = { + {time, EV_ABS, ABS_MT_SLOT, 0}, + {time, EV_ABS, ABS_MT_TRACKING_ID, 2}, + {time, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_FINGER}, + {time, EV_ABS, ABS_MT_POSITION_X, 1003}, + {time, EV_ABS, ABS_MT_POSITION_Y, 749}, + {time, EV_ABS, ABS_MT_PRESSURE, 50}, + {time, EV_ABS, ABS_MT_TOUCH_MAJOR, 116}, + {time, EV_ABS, ABS_MT_SLOT, 1}, + {time, EV_ABS, ABS_MT_TRACKING_ID, 3}, + {time, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_FINGER}, + {time, EV_ABS, ABS_MT_POSITION_X, 1103}, + {time, EV_ABS, ABS_MT_POSITION_Y, 649}, + {time, EV_ABS, ABS_MT_PRESSURE, 50}, + {time, EV_ABS, ABS_MT_TOUCH_MAJOR, 116}, + {time, EV_KEY, BTN_TOUCH, 1}, + {time, EV_ABS, ABS_X, 1003}, + {time, EV_ABS, ABS_Y, 749}, + {time, EV_ABS, ABS_PRESSURE, 50}, + {time, EV_SYN, SYN_REPORT, 0}, + {time, EV_ABS, ABS_MT_SLOT, 0}, + {time, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_PALM}, + {time, EV_SYN, SYN_REPORT, 0}, + {time, EV_ABS, ABS_MT_TRACKING_ID, -1}, + {time, EV_SYN, SYN_REPORT, 0}, + }; + + // Initialize the device. + dev->Initialize(devinfo); + + dev->ConfigureReadMock(mock_kernel_queue_max_major, + arraysize(mock_kernel_queue_max_major), 0); + dev->ReadNow(); + EXPECT_EQ(4u, size()); + + ui::TouchEventParams ev1_1 = dispatched_touch_event(0); + EXPECT_EQ(ET_TOUCH_PRESSED, ev1_1.type); + EXPECT_EQ(0, ev1_1.slot); + EXPECT_EQ(1003, ev1_1.location.x()); + EXPECT_EQ(749, ev1_1.location.y()); + + ui::TouchEventParams ev1_2 = dispatched_touch_event(1); + EXPECT_EQ(ET_TOUCH_PRESSED, ev1_2.type); + EXPECT_EQ(1, ev1_2.slot); + EXPECT_EQ(1103, ev1_2.location.x()); + EXPECT_EQ(649, ev1_2.location.y()); + + ui::TouchEventParams ev1_3 = dispatched_touch_event(2); + EXPECT_EQ(ET_TOUCH_CANCELLED, ev1_3.type); + EXPECT_EQ(0, ev1_3.slot); + + // We expect both touches to be cancelled even though + // just one reported major at max value. + ui::TouchEventParams ev1_4 = dispatched_touch_event(3); + EXPECT_EQ(ET_TOUCH_CANCELLED, ev1_4.type); + EXPECT_EQ(1, ev1_4.slot); + + dev->ConfigureReadMock(mock_kernel_queue_tool_palm, + arraysize(mock_kernel_queue_tool_palm), 0); + dev->ReadNow(); + EXPECT_EQ(8u, size()); + + ui::TouchEventParams ev2_1 = dispatched_touch_event(4); + EXPECT_EQ(ET_TOUCH_PRESSED, ev2_1.type); + EXPECT_EQ(0, ev2_1.slot); + EXPECT_EQ(1003, ev2_1.location.x()); + EXPECT_EQ(749, ev2_1.location.y()); + + ui::TouchEventParams ev2_2 = dispatched_touch_event(5); + EXPECT_EQ(ET_TOUCH_PRESSED, ev2_2.type); + EXPECT_EQ(1, ev2_2.slot); + EXPECT_EQ(1103, ev2_2.location.x()); + EXPECT_EQ(649, ev2_2.location.y()); + + ui::TouchEventParams ev2_3 = dispatched_touch_event(6); + EXPECT_EQ(ET_TOUCH_CANCELLED, ev2_3.type); + EXPECT_EQ(0, ev2_3.slot); + + // We expect both touches to be cancelled even though + // just one reported MT_TOOL_PALM. + ui::TouchEventParams ev2_4 = dispatched_touch_event(7); + EXPECT_EQ(ET_TOUCH_CANCELLED, ev2_4.type); + EXPECT_EQ(1, ev2_4.slot); +} + // crbug.com/477695 TEST_F(TouchEventConverterEvdevTest, ShouldUseLeftButtonIfNoTouchButton) { ui::MockTouchEventConverterEvdev* dev = device(); diff --git a/chromium/ui/message_center/fake_message_center_tray_delegate.cc b/chromium/ui/message_center/fake_message_center_tray_delegate.cc index ae4903484bb..ebeb752c015 100644 --- a/chromium/ui/message_center/fake_message_center_tray_delegate.cc +++ b/chromium/ui/message_center/fake_message_center_tray_delegate.cc @@ -26,7 +26,7 @@ bool FakeMessageCenterTrayDelegate::ShowPopups() { void FakeMessageCenterTrayDelegate::HidePopups() { } -bool FakeMessageCenterTrayDelegate::ShowMessageCenter() { +bool FakeMessageCenterTrayDelegate::ShowMessageCenter(bool show_by_click) { return false; } diff --git a/chromium/ui/message_center/fake_message_center_tray_delegate.h b/chromium/ui/message_center/fake_message_center_tray_delegate.h index 2e52daa8898..fd0e7daab1b 100644 --- a/chromium/ui/message_center/fake_message_center_tray_delegate.h +++ b/chromium/ui/message_center/fake_message_center_tray_delegate.h @@ -26,7 +26,7 @@ class FakeMessageCenterTrayDelegate : public MessageCenterTrayDelegate { void OnMessageCenterTrayChanged() override; bool ShowPopups() override; void HidePopups() override; - bool ShowMessageCenter() override; + bool ShowMessageCenter(bool show_by_click) override; void HideMessageCenter() override; bool ShowNotifierSettings() override; bool IsContextMenuEnabled() const override; diff --git a/chromium/ui/message_center/message_center_tray.cc b/chromium/ui/message_center/message_center_tray.cc index 9d368b0d430..302c24306a9 100644 --- a/chromium/ui/message_center/message_center_tray.cc +++ b/chromium/ui/message_center/message_center_tray.cc @@ -110,13 +110,13 @@ MessageCenterTray::~MessageCenterTray() { message_center_->RemoveObserver(this); } -bool MessageCenterTray::ShowMessageCenterBubble() { +bool MessageCenterTray::ShowMessageCenterBubble(bool show_by_click) { if (message_center_visible_) return true; HidePopupBubbleInternal(); - message_center_visible_ = delegate_->ShowMessageCenter(); + message_center_visible_ = delegate_->ShowMessageCenter(show_by_click); if (message_center_visible_) { message_center_->SetVisibility(message_center::VISIBILITY_MESSAGE_CENTER); NotifyMessageCenterTrayChanged(); diff --git a/chromium/ui/message_center/message_center_tray.h b/chromium/ui/message_center/message_center_tray.h index 86d35f745be..339654d5d90 100644 --- a/chromium/ui/message_center/message_center_tray.h +++ b/chromium/ui/message_center/message_center_tray.h @@ -34,10 +34,11 @@ class MESSAGE_CENTER_EXPORT MessageCenterTray : public MessageCenterObserver { message_center::MessageCenter* message_center); ~MessageCenterTray() override; - // Shows or updates the message center bubble and hides the popup bubble. + // Shows or updates the message center bubble and hides the popup bubble. Set + // |show_by_click| to true if bubble is shown by mouse or gesture click. // Returns whether the message center is visible after the call, whether or // not it was visible before. - bool ShowMessageCenterBubble(); + bool ShowMessageCenterBubble(bool show_by_click); // Hides the message center if visible and returns whether the message center // was visible before. diff --git a/chromium/ui/message_center/message_center_tray_delegate.h b/chromium/ui/message_center/message_center_tray_delegate.h index d1d31ac23f0..7084b46820c 100644 --- a/chromium/ui/message_center/message_center_tray_delegate.h +++ b/chromium/ui/message_center/message_center_tray_delegate.h @@ -28,8 +28,10 @@ class MESSAGE_CENTER_EXPORT MessageCenterTrayDelegate { virtual void HidePopups() = 0; // Display the message center containing all undismissed notifications to the - // user. Returns true if the center was actually displayed to the user. - virtual bool ShowMessageCenter() = 0; + // user. Set |show_by_click| to true if message center is shown by mouse or + // gesture click. Returns true if the center was actually displayed to the + // user. + virtual bool ShowMessageCenter(bool show_by_click) = 0; // Remove the message center from the UI. virtual void HideMessageCenter() = 0; diff --git a/chromium/ui/message_center/message_center_tray_unittest.cc b/chromium/ui/message_center/message_center_tray_unittest.cc index 6c4212d81cc..0af1d19e541 100644 --- a/chromium/ui/message_center/message_center_tray_unittest.cc +++ b/chromium/ui/message_center/message_center_tray_unittest.cc @@ -29,7 +29,9 @@ class MockDelegate : public MessageCenterTrayDelegate { void OnMessageCenterTrayChanged() override {} bool ShowPopups() override { return show_message_center_success_; } void HidePopups() override {} - bool ShowMessageCenter() override { return show_popups_success_; } + bool ShowMessageCenter(bool show_by_click) override { + return show_popups_success_; + } void HideMessageCenter() override {} bool ShowNotifierSettings() override { return true; } bool IsContextMenuEnabled() const override { return enable_context_menu_; } @@ -100,7 +102,8 @@ TEST_F(MessageCenterTrayTest, BasicMessageCenter) { ASSERT_FALSE(message_center_tray_->popups_visible()); ASSERT_FALSE(message_center_tray_->message_center_visible()); - bool shown = message_center_tray_->ShowMessageCenterBubble(); + bool shown = + message_center_tray_->ShowMessageCenterBubble(false /* show_by_click */); EXPECT_TRUE(shown); ASSERT_FALSE(message_center_tray_->popups_visible()); @@ -111,7 +114,7 @@ TEST_F(MessageCenterTrayTest, BasicMessageCenter) { ASSERT_FALSE(message_center_tray_->popups_visible()); ASSERT_FALSE(message_center_tray_->message_center_visible()); - message_center_tray_->ShowMessageCenterBubble(); + message_center_tray_->ShowMessageCenterBubble(false /* show_by_click */); ASSERT_FALSE(message_center_tray_->popups_visible()); ASSERT_TRUE(message_center_tray_->message_center_visible()); @@ -153,7 +156,8 @@ TEST_F(MessageCenterTrayTest, MessageCenterClosesPopups) { ASSERT_TRUE(message_center_tray_->popups_visible()); ASSERT_FALSE(message_center_tray_->message_center_visible()); - bool shown = message_center_tray_->ShowMessageCenterBubble(); + bool shown = + message_center_tray_->ShowMessageCenterBubble(false /* show_by_click */); EXPECT_TRUE(shown); ASSERT_FALSE(message_center_tray_->popups_visible()); @@ -173,7 +177,7 @@ TEST_F(MessageCenterTrayTest, MessageCenterClosesPopups) { ASSERT_FALSE(message_center_tray_->popups_visible()); ASSERT_FALSE(message_center_tray_->message_center_visible()); - message_center_tray_->ShowMessageCenterBubble(); + message_center_tray_->ShowMessageCenterBubble(false /* show_by_click */); message_center_tray_->HideMessageCenterBubble(); ASSERT_FALSE(message_center_tray_->popups_visible()); ASSERT_FALSE(message_center_tray_->message_center_visible()); @@ -234,7 +238,8 @@ TEST_F(MessageCenterTrayTest, MessageCenterReopenPopupsForSystemPriority) { ASSERT_TRUE(message_center_tray_->popups_visible()); ASSERT_FALSE(message_center_tray_->message_center_visible()); - bool shown = message_center_tray_->ShowMessageCenterBubble(); + bool shown = + message_center_tray_->ShowMessageCenterBubble(false /* show_by_click */); EXPECT_TRUE(shown); ASSERT_FALSE(message_center_tray_->popups_visible()); @@ -261,7 +266,8 @@ TEST_F(MessageCenterTrayTest, ShowBubbleFails) { ASSERT_FALSE(message_center_tray_->popups_visible()); ASSERT_FALSE(message_center_tray_->message_center_visible()); - bool shown = message_center_tray_->ShowMessageCenterBubble(); + bool shown = + message_center_tray_->ShowMessageCenterBubble(false /* show_by_click */); EXPECT_FALSE(shown); ASSERT_FALSE(message_center_tray_->popups_visible()); @@ -272,7 +278,7 @@ TEST_F(MessageCenterTrayTest, ShowBubbleFails) { ASSERT_FALSE(message_center_tray_->popups_visible()); ASSERT_FALSE(message_center_tray_->message_center_visible()); - message_center_tray_->ShowMessageCenterBubble(); + message_center_tray_->ShowMessageCenterBubble(false /* show_by_click */); ASSERT_FALSE(message_center_tray_->popups_visible()); ASSERT_FALSE(message_center_tray_->message_center_visible()); diff --git a/chromium/ui/views/bubble/tray_bubble_view.cc b/chromium/ui/views/bubble/tray_bubble_view.cc index 7b4c4f3872b..165a07eb45d 100644 --- a/chromium/ui/views/bubble/tray_bubble_view.cc +++ b/chromium/ui/views/bubble/tray_bubble_view.cc @@ -297,9 +297,10 @@ void TrayBubbleView::InitializeAndShowBubble() { ++g_current_tray_bubble_showing_count_; - // If TrayBubbleView cannot be activated, register pre target event handler to - // reroute key events to the widget for activating the view or closing it. - if (!CanActivate()) { + // If TrayBubbleView cannot be activated and is shown by clicking on the + // corresponding tray view, register pre target event handler to reroute key + // events to the widget for activating the view or closing it. + if (!CanActivate() && params_.show_by_click) { reroute_event_handler_ = base::MakeUnique<RerouteEventHandler>(this); } } diff --git a/chromium/ui/views/bubble/tray_bubble_view.h b/chromium/ui/views/bubble/tray_bubble_view.h index c308f57a9c6..51928ad75ce 100644 --- a/chromium/ui/views/bubble/tray_bubble_view.h +++ b/chromium/ui/views/bubble/tray_bubble_view.h @@ -91,6 +91,8 @@ class VIEWS_EXPORT TrayBubbleView : public BubbleDialogDelegateView, int max_width = 0; int max_height = 0; bool close_on_deactivate = true; + // Indicates whether tray bubble view is shown by click on the tray view. + bool show_by_click = false; // If not provided, the bg color will be derived from the NativeTheme. base::Optional<SkColor> bg_color; }; |