Index: ui/views/widget/native_widget_mac_unittest.mm |
diff --git a/ui/views/widget/native_widget_mac_unittest.mm b/ui/views/widget/native_widget_mac_unittest.mm |
index c8124a9dec482194166e6a57ab2f116dadb543f5..0386462ee32cee9fe7034eb86a90f15c7055bf13 100644 |
--- a/ui/views/widget/native_widget_mac_unittest.mm |
+++ b/ui/views/widget/native_widget_mac_unittest.mm |
@@ -260,6 +260,27 @@ class SimpleBubbleView : public BubbleDialogDelegateView { |
DISALLOW_COPY_AND_ASSIGN(SimpleBubbleView); |
}; |
+class CustomTooltipView : public View { |
+ public: |
+ CustomTooltipView(const base::string16& tooltip, views::View* tooltip_handler) |
tapted
2016/07/15 06:23:44
nit: remove `views::`
kirr
2016/07/15 07:36:09
Done.
|
+ : tooltip_(tooltip), tooltip_handler_(tooltip_handler) {} |
+ |
+ // Overridden from View: |
tapted
2016/07/15 06:23:44
nit: just,
// View:
kirr
2016/07/15 07:36:08
Done.
|
+ bool GetTooltipText(const gfx::Point& p, |
+ base::string16* tooltip) const override { |
+ *tooltip = tooltip_; |
+ return true; |
+ } |
+ |
+ View* GetTooltipHandlerForPoint(const gfx::Point& point) override { |
+ return tooltip_handler_ ? tooltip_handler_ : this; |
+ } |
+ |
+ private: |
+ base::string16 tooltip_; |
+ View* tooltip_handler_; // weak |
tapted
2016/07/15 06:23:44
nit: // Weak.
kirr
2016/07/15 07:36:09
Done.
|
+}; |
tapted
2016/07/15 06:23:44
nit: DISALLOW_COPY_AND_ASSIGN(CustomTooltipView);
kirr
2016/07/15 07:36:09
Done.
|
+ |
// Test visibility states triggered externally. |
TEST_F(NativeWidgetMacTest, HideAndShowExternally) { |
Widget* widget = CreateTopLevelPlatformWidget(); |
@@ -809,6 +830,43 @@ TEST_F(NativeWidgetMacTest, Tooltips) { |
widget->CloseNow(); |
} |
+// Tests case when mouse events handles in one widget, |
tapted
2016/07/15 06:23:44
nit: handles->are handled, widget->Widget
(also t
kirr
2016/07/15 07:36:08
Done.
|
+// but tooltip belongs to another. |
+// It happens in menu widgets, when submenu is shown above parent |
tapted
2016/07/15 06:23:44
nit: It happens in menus when a submenu is shown a
kirr
2016/07/15 07:36:09
Done.
|
+// and parent get MouseExit event. |
+TEST_F(NativeWidgetMacTest, TwoWidgetTooltips) { |
+ // Init two widgets, one above another. |
+ Widget* widget_below = CreateTopLevelPlatformWidget(); |
+ widget_below->SetBounds(gfx::Rect(50, 50, 200, 200)); |
+ |
+ Widget* widget_above = |
+ CreateChildPlatformWidget(widget_below->GetNativeView()); |
+ widget_above->SetBounds(gfx::Rect(100, 0, 100, 200)); |
+ |
+ const base::string16 tooltip_above = base::ASCIIToUTF16("Front"); |
+ CustomTooltipView* view_above = new CustomTooltipView(tooltip_above, nullptr); |
+ view_above->SetBoundsRect(widget_above->GetContentsView()->bounds()); |
+ widget_above->GetContentsView()->AddChildView(view_above); |
+ |
+ CustomTooltipView* view_below = |
+ new CustomTooltipView(base::ASCIIToUTF16("Back"), view_above); |
+ view_below->SetBoundsRect(widget_below->GetContentsView()->bounds()); |
+ widget_below->GetContentsView()->AddChildView(view_below); |
+ |
+ widget_below->Show(); |
+ widget_above->Show(); |
+ |
+ // Move mouse above second widget and check that it returns tooltip |
+ // for second. Despite that event was handled in the first one. |
+ ui::test::EventGenerator event_generator(GetContext(), |
+ widget_below->GetNativeWindow()); |
+ event_generator.MoveMouseTo(gfx::Point(120, 60)); |
+ EXPECT_EQ(tooltip_above, TooltipTextForWidget(widget_below)); |
+ |
+ widget_above->CloseNow(); |
+ widget_below->CloseNow(); |
+} |
+ |
namespace { |
// Delegate to make Widgets of a provided ui::ModalType. |