| Index: ash/shelf/shelf_view_unittest.cc
|
| diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc
|
| index 71e5e7f98e62f8e574d086d0b47b352cc6e48d2d..68ebf31bedb4c307383c8fc8627418727b0deb83 100644
|
| --- a/ash/shelf/shelf_view_unittest.cc
|
| +++ b/ash/shelf/shelf_view_unittest.cc
|
| @@ -106,9 +106,7 @@ class ShelfViewIconObserverTest : public AshTestBase {
|
|
|
| TestShelfIconObserver* observer() { return observer_.get(); }
|
|
|
| - ShelfViewTestAPI* shelf_view_test() {
|
| - return shelf_view_test_.get();
|
| - }
|
| + ShelfViewTestAPI* shelf_view_test() { return shelf_view_test_.get(); }
|
|
|
| Shelf* ShelfForSecondaryDisplay() {
|
| return Shelf::ForWindow(Shell::GetAllRootWindows()[1]);
|
| @@ -432,52 +430,46 @@ class ShelfViewTest : public AshTestBase {
|
| }
|
| }
|
|
|
| - ShelfButton* SimulateButtonPressed(ShelfButtonHost::Pointer pointer,
|
| + ShelfButton* SimulateButtonPressed(ShelfView::Pointer pointer,
|
| int button_index) {
|
| - ShelfButtonHost* button_host = shelf_view_;
|
| ShelfButton* button = test_api_->GetButton(button_index);
|
| ui::MouseEvent click_event(ui::ET_MOUSE_PRESSED, gfx::Point(),
|
| button->GetBoundsInScreen().origin(),
|
| ui::EventTimeForNow(), 0, 0);
|
| - button_host->PointerPressedOnButton(button, pointer, click_event);
|
| + shelf_view_->PointerPressedOnButton(button, pointer, click_event);
|
| return button;
|
| }
|
|
|
| // Simulates a single mouse click.
|
| void SimulateClick(int button_index) {
|
| - ShelfButtonHost* button_host = shelf_view_;
|
| - ShelfButton* button =
|
| - SimulateButtonPressed(ShelfButtonHost::MOUSE, button_index);
|
| + ShelfButton* button = SimulateButtonPressed(ShelfView::MOUSE, button_index);
|
| ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, gfx::Point(),
|
| button->GetBoundsInScreen().origin(),
|
| ui::EventTimeForNow(), 0, 0);
|
| test_api_->ButtonPressed(button, release_event);
|
| - button_host->PointerReleasedOnButton(button, ShelfButtonHost::MOUSE, false);
|
| + shelf_view_->PointerReleasedOnButton(button, ShelfView::MOUSE, false);
|
| }
|
|
|
| // Simulates the second click of a double click.
|
| void SimulateDoubleClick(int button_index) {
|
| - ShelfButtonHost* button_host = shelf_view_;
|
| - ShelfButton* button =
|
| - SimulateButtonPressed(ShelfButtonHost::MOUSE, button_index);
|
| + ShelfButton* button = SimulateButtonPressed(ShelfView::MOUSE, button_index);
|
| ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, gfx::Point(),
|
| button->GetBoundsInScreen().origin(),
|
| ui::EventTimeForNow(), ui::EF_IS_DOUBLE_CLICK,
|
| 0);
|
| test_api_->ButtonPressed(button, release_event);
|
| - button_host->PointerReleasedOnButton(button, ShelfButtonHost::MOUSE, false);
|
| + shelf_view_->PointerReleasedOnButton(button, ShelfView::MOUSE, false);
|
| }
|
|
|
| void DoDrag(int dist_x,
|
| int dist_y,
|
| views::View* button,
|
| - ShelfButtonHost::Pointer pointer,
|
| + ShelfView::Pointer pointer,
|
| views::View* to) {
|
| ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, gfx::Point(dist_x, dist_y),
|
| to->GetBoundsInScreen().origin(),
|
| ui::EventTimeForNow(), 0, 0);
|
| - static_cast<ShelfButtonHost*>(shelf_view_)
|
| - ->PointerDraggedOnButton(button, pointer, drag_event);
|
| + shelf_view_->PointerDraggedOnButton(button, pointer, drag_event);
|
| }
|
|
|
| /*
|
| @@ -487,7 +479,7 @@ class ShelfViewTest : public AshTestBase {
|
| * drag behavior.
|
| */
|
| void ContinueDrag(views::View* button,
|
| - ShelfButtonHost::Pointer pointer,
|
| + ShelfView::Pointer pointer,
|
| int from_index,
|
| int to_index,
|
| bool progressively) {
|
| @@ -511,7 +503,7 @@ class ShelfViewTest : public AshTestBase {
|
| * series of changes of the posistion of dragged item) like the behavior of
|
| * user drags.
|
| */
|
| - views::View* SimulateDrag(ShelfButtonHost::Pointer pointer,
|
| + views::View* SimulateDrag(ShelfView::Pointer pointer,
|
| int button_index,
|
| int destination_index,
|
| bool progressively) {
|
| @@ -534,12 +526,12 @@ class ShelfViewTest : public AshTestBase {
|
| void DragAndVerify(
|
| int from,
|
| int to,
|
| - ShelfButtonHost* button_host,
|
| + ShelfView* shelf_view,
|
| const std::vector<std::pair<int, views::View*>>& expected_id_map) {
|
| views::View* dragged_button =
|
| - SimulateDrag(ShelfButtonHost::MOUSE, from, to, true);
|
| - button_host->PointerReleasedOnButton(dragged_button, ShelfButtonHost::MOUSE,
|
| - false);
|
| + SimulateDrag(ShelfView::MOUSE, from, to, true);
|
| + shelf_view->PointerReleasedOnButton(dragged_button, ShelfView::MOUSE,
|
| + false);
|
| test_api_->RunMessageLoopUntilAnimationsDone();
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(expected_id_map));
|
| }
|
| @@ -564,10 +556,6 @@ class ShelfViewTest : public AshTestBase {
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map));
|
| }
|
|
|
| - views::View* GetTooltipAnchorView() {
|
| - return shelf_view_->tooltip_manager()->anchor_;
|
| - }
|
| -
|
| void AddButtonsUntilOverflow() {
|
| int items_added = 0;
|
| while (!test_api_->IsOverflowButtonVisible()) {
|
| @@ -577,10 +565,6 @@ class ShelfViewTest : public AshTestBase {
|
| }
|
| }
|
|
|
| - void ShowTooltip() {
|
| - shelf_view_->tooltip_manager()->ShowInternal();
|
| - }
|
| -
|
| void TestDraggingAnItemFromOverflowToShelf(bool cancel) {
|
| test_api_->ShowOverflowBubble();
|
| ASSERT_TRUE(test_api_->overflow_bubble() &&
|
| @@ -1106,107 +1090,97 @@ TEST_F(ShelfViewTest, AddButtonQuickly) {
|
| // Check that model changes are handled correctly while a shelf icon is being
|
| // dragged.
|
| TEST_F(ShelfViewTest, ModelChangesWhileDragging) {
|
| - ShelfButtonHost* button_host = shelf_view_;
|
| -
|
| std::vector<std::pair<ShelfID, views::View*> > id_map;
|
| SetupForDragTest(&id_map);
|
|
|
| // Dragging browser shortcut at index 1.
|
| EXPECT_TRUE(model_->items()[1].type == TYPE_BROWSER_SHORTCUT);
|
| - views::View* dragged_button =
|
| - SimulateDrag(ShelfButtonHost::MOUSE, 1, 3, false);
|
| + views::View* dragged_button = SimulateDrag(ShelfView::MOUSE, 1, 3, false);
|
| std::rotate(id_map.begin() + 1,
|
| id_map.begin() + 2,
|
| id_map.begin() + 4);
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
| - button_host->PointerReleasedOnButton(
|
| - dragged_button, ShelfButtonHost::MOUSE, false);
|
| + shelf_view_->PointerReleasedOnButton(dragged_button, ShelfView::MOUSE, false);
|
| EXPECT_TRUE(model_->items()[3].type == TYPE_BROWSER_SHORTCUT);
|
|
|
| // Dragging changes model order.
|
| - dragged_button = SimulateDrag(ShelfButtonHost::MOUSE, 1, 3, false);
|
| + dragged_button = SimulateDrag(ShelfView::MOUSE, 1, 3, false);
|
| std::rotate(id_map.begin() + 1,
|
| id_map.begin() + 2,
|
| id_map.begin() + 4);
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
|
|
| // Cancelling the drag operation restores previous order.
|
| - button_host->PointerReleasedOnButton(
|
| - dragged_button, ShelfButtonHost::MOUSE, true);
|
| + shelf_view_->PointerReleasedOnButton(dragged_button, ShelfView::MOUSE, true);
|
| std::rotate(id_map.begin() + 1,
|
| id_map.begin() + 3,
|
| id_map.begin() + 4);
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
|
|
| // Deleting an item keeps the remaining intact.
|
| - dragged_button = SimulateDrag(ShelfButtonHost::MOUSE, 1, 3, false);
|
| + dragged_button = SimulateDrag(ShelfView::MOUSE, 1, 3, false);
|
| model_->RemoveItemAt(1);
|
| id_map.erase(id_map.begin() + 1);
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
| - button_host->PointerReleasedOnButton(
|
| - dragged_button, ShelfButtonHost::MOUSE, false);
|
| + shelf_view_->PointerReleasedOnButton(dragged_button, ShelfView::MOUSE, false);
|
|
|
| // Adding a shelf item cancels the drag and respects the order.
|
| - dragged_button = SimulateDrag(ShelfButtonHost::MOUSE, 1, 3, false);
|
| + dragged_button = SimulateDrag(ShelfView::MOUSE, 1, 3, false);
|
| ShelfID new_id = AddAppShortcut();
|
| id_map.insert(id_map.begin() + 6,
|
| std::make_pair(new_id, GetButtonByID(new_id)));
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
| - button_host->PointerReleasedOnButton(
|
| - dragged_button, ShelfButtonHost::MOUSE, false);
|
| + shelf_view_->PointerReleasedOnButton(dragged_button, ShelfView::MOUSE, false);
|
|
|
| // Adding a shelf item at the end (i.e. a panel) canels drag and respects
|
| // the order.
|
| - dragged_button = SimulateDrag(ShelfButtonHost::MOUSE, 1, 3, false);
|
| + dragged_button = SimulateDrag(ShelfView::MOUSE, 1, 3, false);
|
| new_id = AddPanel();
|
| id_map.insert(id_map.begin() + 7,
|
| std::make_pair(new_id, GetButtonByID(new_id)));
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
| - button_host->PointerReleasedOnButton(
|
| - dragged_button, ShelfButtonHost::MOUSE, false);
|
| + shelf_view_->PointerReleasedOnButton(dragged_button, ShelfView::MOUSE, false);
|
| }
|
|
|
| // Check that 2nd drag from the other pointer would be ignored.
|
| TEST_F(ShelfViewTest, SimultaneousDrag) {
|
| - ShelfButtonHost* button_host = shelf_view_;
|
| -
|
| std::vector<std::pair<ShelfID, views::View*> > id_map;
|
| SetupForDragTest(&id_map);
|
|
|
| // Start a mouse drag.
|
| views::View* dragged_button_mouse =
|
| - SimulateDrag(ShelfButtonHost::MOUSE, 1, 3, false);
|
| + SimulateDrag(ShelfView::MOUSE, 1, 3, false);
|
| std::rotate(id_map.begin() + 1,
|
| id_map.begin() + 2,
|
| id_map.begin() + 4);
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
| // Attempt a touch drag before the mouse drag finishes.
|
| views::View* dragged_button_touch =
|
| - SimulateDrag(ShelfButtonHost::TOUCH, 4, 2, false);
|
| + SimulateDrag(ShelfView::TOUCH, 4, 2, false);
|
|
|
| // Nothing changes since 2nd drag is ignored.
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
|
|
| // Finish the mouse drag.
|
| - button_host->PointerReleasedOnButton(
|
| - dragged_button_mouse, ShelfButtonHost::MOUSE, false);
|
| + shelf_view_->PointerReleasedOnButton(dragged_button_mouse, ShelfView::MOUSE,
|
| + false);
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
|
|
| // Now start a touch drag.
|
| - dragged_button_touch = SimulateDrag(ShelfButtonHost::TOUCH, 4, 2, false);
|
| + dragged_button_touch = SimulateDrag(ShelfView::TOUCH, 4, 2, false);
|
| std::rotate(id_map.begin() + 3,
|
| id_map.begin() + 4,
|
| id_map.begin() + 5);
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
|
|
| // And attempt a mouse drag before the touch drag finishes.
|
| - dragged_button_mouse = SimulateDrag(ShelfButtonHost::MOUSE, 1, 2, false);
|
| + dragged_button_mouse = SimulateDrag(ShelfView::MOUSE, 1, 2, false);
|
|
|
| // Nothing changes since 2nd drag is ignored.
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
|
|
| - button_host->PointerReleasedOnButton(
|
| - dragged_button_touch, ShelfButtonHost::TOUCH, false);
|
| + shelf_view_->PointerReleasedOnButton(dragged_button_touch, ShelfView::TOUCH,
|
| + false);
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
| }
|
|
|
| @@ -1235,8 +1209,6 @@ TEST_F(ShelfViewTest, DragWithNotDraggableItemInFront) {
|
| // Check that clicking first on one item and then dragging another works as
|
| // expected.
|
| TEST_F(ShelfViewTest, ClickOneDragAnother) {
|
| - ShelfButtonHost* button_host = shelf_view_;
|
| -
|
| std::vector<std::pair<ShelfID, views::View*> > id_map;
|
| SetupForDragTest(&id_map);
|
|
|
| @@ -1245,14 +1217,10 @@ TEST_F(ShelfViewTest, ClickOneDragAnother) {
|
|
|
| // Dragging browser index at 0 should change the model order correctly.
|
| EXPECT_TRUE(model_->items()[1].type == TYPE_BROWSER_SHORTCUT);
|
| - views::View* dragged_button =
|
| - SimulateDrag(ShelfButtonHost::MOUSE, 1, 3, false);
|
| - std::rotate(id_map.begin() + 1,
|
| - id_map.begin() + 2,
|
| - id_map.begin() + 4);
|
| + views::View* dragged_button = SimulateDrag(ShelfView::MOUSE, 1, 3, false);
|
| + std::rotate(id_map.begin() + 1, id_map.begin() + 2, id_map.begin() + 4);
|
| ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
|
| - button_host->PointerReleasedOnButton(
|
| - dragged_button, ShelfButtonHost::MOUSE, false);
|
| + shelf_view_->PointerReleasedOnButton(dragged_button, ShelfView::MOUSE, false);
|
| EXPECT_TRUE(model_->items()[3].type == TYPE_BROWSER_SHORTCUT);
|
| }
|
|
|
| @@ -1375,8 +1343,7 @@ TEST_F(ShelfViewTest, ShelfItemBoundsCheck) {
|
| }
|
|
|
| TEST_F(ShelfViewTest, ShelfTooltipTest) {
|
| - ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1,
|
| - test_api_->GetButtonCount());
|
| + ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, test_api_->GetButtonCount());
|
|
|
| // Prepare some items to the shelf.
|
| ShelfID app_button_id = AddAppShortcut();
|
| @@ -1385,53 +1352,53 @@ TEST_F(ShelfViewTest, ShelfTooltipTest) {
|
| ShelfButton* app_button = GetButtonByID(app_button_id);
|
| ShelfButton* platform_button = GetButtonByID(platform_button_id);
|
|
|
| - ShelfButtonHost* button_host = shelf_view_;
|
| - ShelfTooltipManager* tooltip_manager = shelf_view_->tooltip_manager();
|
| + ShelfTooltipManager* tooltip_manager = test_api_->tooltip_manager();
|
| + EXPECT_TRUE(test_api_->shelf_view()->GetWidget()->GetNativeWindow());
|
| + ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
|
|
|
| - button_host->MouseEnteredButton(app_button);
|
| + generator.MoveMouseTo(app_button->GetBoundsInScreen().CenterPoint());
|
| // There's a delay to show the tooltip, so it's not visible yet.
|
| EXPECT_FALSE(tooltip_manager->IsVisible());
|
| - EXPECT_EQ(app_button, GetTooltipAnchorView());
|
| + EXPECT_EQ(nullptr, tooltip_manager->GetCurrentAnchorView());
|
|
|
| - ShowTooltip();
|
| + tooltip_manager->ShowTooltip(app_button);
|
| EXPECT_TRUE(tooltip_manager->IsVisible());
|
| -
|
| - // Once it's visible, it keeps visibility and is pointing to the same
|
| - // item.
|
| - button_host->MouseExitedButton(app_button);
|
| + EXPECT_EQ(app_button, tooltip_manager->GetCurrentAnchorView());
|
| +
|
| + // The tooltip will continue showing while the cursor moves between buttons.
|
| + const gfx::Point midpoint =
|
| + gfx::UnionRects(app_button->GetBoundsInScreen(),
|
| + platform_button->GetBoundsInScreen())
|
| + .CenterPoint();
|
| + generator.MoveMouseTo(midpoint);
|
| EXPECT_TRUE(tooltip_manager->IsVisible());
|
| - EXPECT_EQ(app_button, GetTooltipAnchorView());
|
| + EXPECT_EQ(app_button, tooltip_manager->GetCurrentAnchorView());
|
|
|
| - // When entered to another item, it switches to the new item. There is no
|
| - // delay for the visibility.
|
| - button_host->MouseEnteredButton(platform_button);
|
| + // When the cursor moves over another item, its tooltip shows immediately.
|
| + generator.MoveMouseTo(platform_button->GetBoundsInScreen().CenterPoint());
|
| EXPECT_TRUE(tooltip_manager->IsVisible());
|
| - EXPECT_EQ(platform_button, GetTooltipAnchorView());
|
| -
|
| - button_host->MouseExitedButton(platform_button);
|
| + EXPECT_EQ(platform_button, tooltip_manager->GetCurrentAnchorView());
|
| tooltip_manager->Close();
|
|
|
| - // Next time: enter app_button -> move immediately to tab_button.
|
| - button_host->MouseEnteredButton(app_button);
|
| - button_host->MouseExitedButton(app_button);
|
| - button_host->MouseEnteredButton(platform_button);
|
| + // Now cursor over the app_button and move immediately to the platform_button.
|
| + generator.MoveMouseTo(app_button->GetBoundsInScreen().CenterPoint());
|
| + generator.MoveMouseTo(midpoint);
|
| + generator.MoveMouseTo(platform_button->GetBoundsInScreen().CenterPoint());
|
| EXPECT_FALSE(tooltip_manager->IsVisible());
|
| - EXPECT_EQ(platform_button, GetTooltipAnchorView());
|
| + EXPECT_EQ(nullptr, tooltip_manager->GetCurrentAnchorView());
|
| }
|
|
|
| // Verify a fix for crash caused by a tooltip update for a deleted shelf
|
| // button, see crbug.com/288838.
|
| TEST_F(ShelfViewTest, RemovingItemClosesTooltip) {
|
| - ShelfButtonHost* button_host = shelf_view_;
|
| - ShelfTooltipManager* tooltip_manager = shelf_view_->tooltip_manager();
|
| + ShelfTooltipManager* tooltip_manager = test_api_->tooltip_manager();
|
|
|
| // Add an item to the shelf.
|
| ShelfID app_button_id = AddAppShortcut();
|
| ShelfButton* app_button = GetButtonByID(app_button_id);
|
|
|
| // Spawn a tooltip on that item.
|
| - button_host->MouseEnteredButton(app_button);
|
| - ShowTooltip();
|
| + tooltip_manager->ShowTooltip(app_button);
|
| EXPECT_TRUE(tooltip_manager->IsVisible());
|
|
|
| // Remove the app shortcut while the tooltip is open. The tooltip should be
|
| @@ -1446,16 +1413,14 @@ TEST_F(ShelfViewTest, RemovingItemClosesTooltip) {
|
|
|
| // Changing the shelf alignment closes any open tooltip.
|
| TEST_F(ShelfViewTest, ShelfAlignmentClosesTooltip) {
|
| - ShelfButtonHost* button_host = shelf_view_;
|
| - ShelfTooltipManager* tooltip_manager = shelf_view_->tooltip_manager();
|
| + ShelfTooltipManager* tooltip_manager = test_api_->tooltip_manager();
|
|
|
| // Add an item to the shelf.
|
| ShelfID app_button_id = AddAppShortcut();
|
| ShelfButton* app_button = GetButtonByID(app_button_id);
|
|
|
| // Spawn a tooltip on the item.
|
| - button_host->MouseEnteredButton(app_button);
|
| - ShowTooltip();
|
| + tooltip_manager->ShowTooltip(app_button);
|
| EXPECT_TRUE(tooltip_manager->IsVisible());
|
|
|
| // Changing shelf alignment hides the tooltip.
|
| @@ -1539,8 +1504,8 @@ TEST_F(ShelfViewTest, ShouldHideTooltipWithAppListWindowTest) {
|
| // Test that by moving the mouse cursor off the button onto the bubble it closes
|
| // the bubble.
|
| TEST_F(ShelfViewTest, ShouldHideTooltipWhenHoveringOnTooltip) {
|
| - ShelfTooltipManager* tooltip_manager = shelf_view_->tooltip_manager();
|
| - tooltip_manager->CreateZeroDelayTimerForTest();
|
| + ShelfTooltipManager* tooltip_manager = test_api_->tooltip_manager();
|
| + tooltip_manager->set_timer_delay_for_test(0);
|
| ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
|
|
|
| // Move the mouse off any item and check that no tooltip is shown.
|
|
|