| Index: ash/common/shelf/shelf_window_watcher_unittest.cc
|
| diff --git a/ash/common/shelf/shelf_window_watcher_unittest.cc b/ash/common/shelf/shelf_window_watcher_unittest.cc
|
| deleted file mode 100644
|
| index f88eaa168a5fed0256597fe9ee114b0a4d7382f6..0000000000000000000000000000000000000000
|
| --- a/ash/common/shelf/shelf_window_watcher_unittest.cc
|
| +++ /dev/null
|
| @@ -1,395 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "ash/common/shelf/shelf_window_watcher.h"
|
| -
|
| -#include "ash/common/session/session_state_delegate.h"
|
| -#include "ash/common/shelf/shelf_item_types.h"
|
| -#include "ash/common/shelf/shelf_model.h"
|
| -#include "ash/common/wm/window_resizer.h"
|
| -#include "ash/common/wm/window_state.h"
|
| -#include "ash/common/wm_shell.h"
|
| -#include "ash/common/wm_window.h"
|
| -#include "ash/public/cpp/shell_window_ids.h"
|
| -#include "ash/public/cpp/window_properties.h"
|
| -#include "ash/root_window_controller.h"
|
| -#include "ash/test/ash_test_base.h"
|
| -#include "ui/base/hit_test.h"
|
| -#include "ui/views/widget/widget.h"
|
| -
|
| -namespace ash {
|
| -
|
| -class ShelfWindowWatcherTest : public test::AshTestBase {
|
| - public:
|
| - ShelfWindowWatcherTest() : model_(nullptr) {}
|
| - ~ShelfWindowWatcherTest() override {}
|
| -
|
| - void SetUp() override {
|
| - test::AshTestBase::SetUp();
|
| - model_ = WmShell::Get()->shelf_model();
|
| - }
|
| -
|
| - void TearDown() override {
|
| - model_ = nullptr;
|
| - test::AshTestBase::TearDown();
|
| - }
|
| -
|
| - static ShelfID CreateShelfItem(WmWindow* window) {
|
| - ShelfID id = WmShell::Get()->shelf_model()->next_id();
|
| - window->aura_window()->SetProperty(kShelfItemTypeKey,
|
| - static_cast<int32_t>(TYPE_DIALOG));
|
| - return id;
|
| - }
|
| -
|
| - protected:
|
| - ShelfModel* model_;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(ShelfWindowWatcherTest);
|
| -};
|
| -
|
| -// Ensure shelf items are added and removed as windows are opened and closed.
|
| -TEST_F(ShelfWindowWatcherTest, OpenAndClose) {
|
| - // ShelfModel only has an APP_LIST item.
|
| - EXPECT_EQ(1, model_->item_count());
|
| -
|
| - // Adding windows with valid ShelfItemType properties adds shelf items.
|
| - std::unique_ptr<views::Widget> widget1 =
|
| - CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect());
|
| - CreateShelfItem(WmWindow::Get(widget1->GetNativeWindow()));
|
| - EXPECT_EQ(2, model_->item_count());
|
| - std::unique_ptr<views::Widget> widget2 =
|
| - CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect());
|
| - CreateShelfItem(WmWindow::Get(widget2->GetNativeWindow()));
|
| - EXPECT_EQ(3, model_->item_count());
|
| -
|
| - // Each ShelfItem is removed when the associated window is destroyed.
|
| - widget1.reset();
|
| - EXPECT_EQ(2, model_->item_count());
|
| - widget2.reset();
|
| - EXPECT_EQ(1, model_->item_count());
|
| -}
|
| -
|
| -TEST_F(ShelfWindowWatcherTest, CreateAndRemoveShelfItemProperties) {
|
| - // TODO: investigate failure in mash. http://crbug.com/695562.
|
| - if (WmShell::Get()->IsRunningInMash())
|
| - return;
|
| -
|
| - // ShelfModel only has an APP_LIST item.
|
| - EXPECT_EQ(1, model_->item_count());
|
| -
|
| - // Creating windows without a valid ShelfItemType does not add items.
|
| - std::unique_ptr<views::Widget> widget1 =
|
| - CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect());
|
| - WmWindow* window1 = WmWindow::Get(widget1->GetNativeWindow());
|
| - std::unique_ptr<views::Widget> widget2 =
|
| - CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect());
|
| - WmWindow* window2 = WmWindow::Get(widget2->GetNativeWindow());
|
| - EXPECT_EQ(1, model_->item_count());
|
| -
|
| - // Create a ShelfItem for the first window.
|
| - ShelfID id_w1 = CreateShelfItem(window1);
|
| - EXPECT_EQ(2, model_->item_count());
|
| -
|
| - int index_w1 = model_->ItemIndexByID(id_w1);
|
| - EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w1].status);
|
| -
|
| - // Create a ShelfItem for the second window.
|
| - ShelfID id_w2 = CreateShelfItem(window2);
|
| - EXPECT_EQ(3, model_->item_count());
|
| -
|
| - int index_w2 = model_->ItemIndexByID(id_w2);
|
| - EXPECT_EQ(STATUS_ACTIVE, model_->items()[index_w2].status);
|
| -
|
| - // ShelfItem is removed when the item type window property is cleared.
|
| - window1->aura_window()->SetProperty(kShelfItemTypeKey,
|
| - static_cast<int32_t>(TYPE_UNDEFINED));
|
| - EXPECT_EQ(2, model_->item_count());
|
| - window2->aura_window()->SetProperty(kShelfItemTypeKey,
|
| - static_cast<int32_t>(TYPE_UNDEFINED));
|
| - EXPECT_EQ(1, model_->item_count());
|
| - // Clearing twice doesn't do anything.
|
| - window2->aura_window()->SetProperty(kShelfItemTypeKey,
|
| - static_cast<int32_t>(TYPE_UNDEFINED));
|
| - EXPECT_EQ(1, model_->item_count());
|
| -}
|
| -
|
| -TEST_F(ShelfWindowWatcherTest, ActivateWindow) {
|
| - // TODO: investigate failure in mash. http://crbug.com/695562.
|
| - if (WmShell::Get()->IsRunningInMash())
|
| - return;
|
| -
|
| - // ShelfModel only have APP_LIST item.
|
| - EXPECT_EQ(1, model_->item_count());
|
| - std::unique_ptr<views::Widget> widget1 =
|
| - CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect());
|
| - WmWindow* window1 = WmWindow::Get(widget1->GetNativeWindow());
|
| - std::unique_ptr<views::Widget> widget2 =
|
| - CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect());
|
| - WmWindow* window2 = WmWindow::Get(widget2->GetNativeWindow());
|
| -
|
| - // Create a ShelfItem for the first window.
|
| - ShelfID id_w1 = CreateShelfItem(window1);
|
| - EXPECT_EQ(2, model_->item_count());
|
| - int index_w1 = model_->ItemIndexByID(id_w1);
|
| - EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w1].status);
|
| -
|
| - // Create a ShelfItem for the second window.
|
| - ShelfID id_w2 = CreateShelfItem(window2);
|
| - EXPECT_EQ(3, model_->item_count());
|
| - int index_w2 = model_->ItemIndexByID(id_w2);
|
| - EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w1].status);
|
| - EXPECT_EQ(STATUS_ACTIVE, model_->items()[index_w2].status);
|
| -
|
| - // The ShelfItem for the first window is active when the window is activated.
|
| - widget1->Activate();
|
| - EXPECT_EQ(STATUS_ACTIVE, model_->items()[index_w1].status);
|
| - EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w2].status);
|
| -
|
| - // The ShelfItem for the second window is active when the window is activated.
|
| - widget2->Activate();
|
| - EXPECT_EQ(STATUS_RUNNING, model_->items()[index_w1].status);
|
| - EXPECT_EQ(STATUS_ACTIVE, model_->items()[index_w2].status);
|
| -}
|
| -
|
| -TEST_F(ShelfWindowWatcherTest, UpdateWindowProperty) {
|
| - // TODO: investigate failure in mash. http://crbug.com/695562.
|
| - if (WmShell::Get()->IsRunningInMash())
|
| - return;
|
| -
|
| - // ShelfModel only has an APP_LIST item.
|
| - EXPECT_EQ(1, model_->item_count());
|
| -
|
| - std::unique_ptr<views::Widget> widget =
|
| - CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect());
|
| - WmWindow* window = WmWindow::Get(widget->GetNativeWindow());
|
| -
|
| - // Create a ShelfItem for |window|.
|
| - ShelfID id = CreateShelfItem(window);
|
| - EXPECT_EQ(2, model_->item_count());
|
| -
|
| - int index = model_->ItemIndexByID(id);
|
| - EXPECT_EQ(STATUS_ACTIVE, model_->items()[index].status);
|
| -
|
| - // Update the ShelfItemType for |window|.
|
| - window->aura_window()->SetProperty(kShelfItemTypeKey,
|
| - static_cast<int32_t>(TYPE_APP));
|
| - // No new item is created after updating a launcher item.
|
| - EXPECT_EQ(2, model_->item_count());
|
| - // index and id are not changed after updating a launcher item.
|
| - EXPECT_EQ(index, model_->ItemIndexByID(id));
|
| - EXPECT_EQ(id, model_->items()[index].id);
|
| -}
|
| -
|
| -TEST_F(ShelfWindowWatcherTest, MaximizeAndRestoreWindow) {
|
| - // TODO: investigate failure in mash. http://crbug.com/695562.
|
| - if (WmShell::Get()->IsRunningInMash())
|
| - return;
|
| -
|
| - // ShelfModel only has an APP_LIST item.
|
| - EXPECT_EQ(1, model_->item_count());
|
| -
|
| - std::unique_ptr<views::Widget> widget =
|
| - CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect());
|
| - WmWindow* window = WmWindow::Get(widget->GetNativeWindow());
|
| - wm::WindowState* window_state = window->GetWindowState();
|
| -
|
| - // Create a ShelfItem for |window|.
|
| - ShelfID id = CreateShelfItem(window);
|
| - EXPECT_EQ(2, model_->item_count());
|
| -
|
| - int index = model_->ItemIndexByID(id);
|
| - EXPECT_EQ(STATUS_ACTIVE, model_->items()[index].status);
|
| -
|
| - // Maximize window |window|.
|
| - EXPECT_FALSE(window_state->IsMaximized());
|
| - window_state->Maximize();
|
| - EXPECT_TRUE(window_state->IsMaximized());
|
| - // No new item is created after maximizing a window |window|.
|
| - EXPECT_EQ(2, model_->item_count());
|
| - // index and id are not changed after maximizing a window |window|.
|
| - EXPECT_EQ(index, model_->ItemIndexByID(id));
|
| - EXPECT_EQ(id, model_->items()[index].id);
|
| -
|
| - // Restore window |window|.
|
| - window_state->Restore();
|
| - EXPECT_FALSE(window_state->IsMaximized());
|
| - // No new item is created after restoring a window |window|.
|
| - EXPECT_EQ(2, model_->item_count());
|
| - // Index and id are not changed after maximizing a window |window|.
|
| - EXPECT_EQ(index, model_->ItemIndexByID(id));
|
| - EXPECT_EQ(id, model_->items()[index].id);
|
| -}
|
| -
|
| -// Check that an item is maintained when its associated Window is docked.
|
| -TEST_F(ShelfWindowWatcherTest, DockWindow) {
|
| - // TODO: investigate failure in mash. http://crbug.com/695562.
|
| - if (WmShell::Get()->IsRunningInMash())
|
| - return;
|
| -
|
| - // ShelfModel only has an APP_LIST item.
|
| - EXPECT_EQ(1, model_->item_count());
|
| -
|
| - std::unique_ptr<views::Widget> widget =
|
| - CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect());
|
| - WmWindow* window = WmWindow::Get(widget->GetNativeWindow());
|
| -
|
| - // Create a ShelfItem for |window|.
|
| - ShelfID id = CreateShelfItem(window);
|
| - EXPECT_EQ(2, model_->item_count());
|
| -
|
| - int index = model_->ItemIndexByID(id);
|
| - EXPECT_EQ(STATUS_ACTIVE, model_->items()[index].status);
|
| -
|
| - WmWindow* root_window = window->GetRootWindow();
|
| - WmWindow* default_container =
|
| - root_window->GetChildByShellWindowId(kShellWindowId_DefaultContainer);
|
| - EXPECT_EQ(default_container, window->GetParent());
|
| -
|
| - WmWindow* docked_container =
|
| - root_window->GetChildByShellWindowId(kShellWindowId_DockedContainer);
|
| -
|
| - // Check |window|'s item is not removed when it is re-parented to the dock.
|
| - docked_container->AddChild(window);
|
| - EXPECT_EQ(docked_container, window->GetParent());
|
| - EXPECT_EQ(2, model_->item_count());
|
| -
|
| - // The shelf item is removed when the window is closed, even if it is in the
|
| - // docked container at the time.
|
| - widget.reset();
|
| - EXPECT_EQ(1, model_->item_count());
|
| -}
|
| -
|
| -// Check |window|'s item is not changed during the dragging.
|
| -// TODO(simonhong): Add a test for removing a Window during the dragging.
|
| -TEST_F(ShelfWindowWatcherTest, DragWindow) {
|
| - // TODO: investigate failure in mash. http://crbug.com/695562.
|
| - if (WmShell::Get()->IsRunningInMash())
|
| - return;
|
| -
|
| - // ShelfModel only has an APP_LIST item.
|
| - EXPECT_EQ(1, model_->item_count());
|
| -
|
| - std::unique_ptr<views::Widget> widget =
|
| - CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect());
|
| - WmWindow* window = WmWindow::Get(widget->GetNativeWindow());
|
| -
|
| - // Create a ShelfItem for |window|.
|
| - ShelfID id = CreateShelfItem(window);
|
| - EXPECT_EQ(2, model_->item_count());
|
| -
|
| - int index = model_->ItemIndexByID(id);
|
| - EXPECT_EQ(STATUS_ACTIVE, model_->items()[index].status);
|
| -
|
| - // Simulate dragging of |window| and check its item is not changed.
|
| - std::unique_ptr<WindowResizer> resizer(CreateWindowResizer(
|
| - window, gfx::Point(), HTCAPTION, aura::client::WINDOW_MOVE_SOURCE_MOUSE));
|
| - ASSERT_TRUE(resizer.get());
|
| - resizer->Drag(gfx::Point(50, 50), 0);
|
| - resizer->CompleteDrag();
|
| -
|
| - // Index and id are not changed after dragging a |window|.
|
| - EXPECT_EQ(index, model_->ItemIndexByID(id));
|
| - EXPECT_EQ(id, model_->items()[index].id);
|
| -}
|
| -
|
| -// Ensure shelf items are added and removed as panels are opened and closed.
|
| -TEST_F(ShelfWindowWatcherTest, PanelWindow) {
|
| - // TODO: investigate failure in mash. http://crbug.com/695562.
|
| - if (WmShell::Get()->IsRunningInMash())
|
| - return;
|
| -
|
| - // ShelfModel only has an APP_LIST item.
|
| - EXPECT_EQ(1, model_->item_count());
|
| -
|
| - // Adding windows with valid ShelfItemType properties adds shelf items.
|
| - std::unique_ptr<views::Widget> widget1 =
|
| - CreateTestWidget(nullptr, kShellWindowId_PanelContainer, gfx::Rect());
|
| - WmWindow* window1 = WmWindow::Get(widget1->GetNativeWindow());
|
| - window1->aura_window()->SetProperty(kShelfItemTypeKey,
|
| - static_cast<int32_t>(TYPE_APP_PANEL));
|
| - EXPECT_EQ(2, model_->item_count());
|
| - std::unique_ptr<views::Widget> widget2 =
|
| - CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect());
|
| - WmWindow* window2 = WmWindow::Get(widget2->GetNativeWindow());
|
| - window2->aura_window()->SetProperty(kShelfItemTypeKey,
|
| - static_cast<int32_t>(TYPE_APP_PANEL));
|
| - EXPECT_EQ(3, model_->item_count());
|
| -
|
| - // Create a panel-type widget to mimic Chrome's app panel windows.
|
| - views::Widget panel_widget;
|
| - views::Widget::InitParams panel_params(views::Widget::InitParams::TYPE_PANEL);
|
| - panel_params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
|
| - WmShell::Get()
|
| - ->GetPrimaryRootWindow()
|
| - ->GetRootWindowController()
|
| - ->ConfigureWidgetInitParamsForContainer(
|
| - &panel_widget, kShellWindowId_PanelContainer, &panel_params);
|
| - panel_widget.Init(panel_params);
|
| - panel_widget.Show();
|
| - WmWindow* panel_window = WmWindow::Get(panel_widget.GetNativeWindow());
|
| - panel_window->aura_window()->SetProperty(
|
| - kShelfItemTypeKey, static_cast<int32_t>(TYPE_APP_PANEL));
|
| - EXPECT_EQ(4, model_->item_count());
|
| -
|
| - // Each ShelfItem is removed when the associated window is destroyed.
|
| - panel_widget.CloseNow();
|
| - EXPECT_EQ(3, model_->item_count());
|
| - widget2.reset();
|
| - EXPECT_EQ(2, model_->item_count());
|
| - widget1.reset();
|
| - EXPECT_EQ(1, model_->item_count());
|
| -}
|
| -
|
| -TEST_F(ShelfWindowWatcherTest, DontCreateShelfEntriesForChildWindows) {
|
| - const int initial_item_count = model_->item_count();
|
| -
|
| - WmWindow* window = WmShell::Get()->NewWindow(ui::wm::WINDOW_TYPE_NORMAL,
|
| - ui::LAYER_NOT_DRAWN);
|
| - window->aura_window()->SetProperty(kShelfItemTypeKey,
|
| - static_cast<int32_t>(TYPE_APP));
|
| - WmShell::Get()
|
| - ->GetPrimaryRootWindow()
|
| - ->GetChildByShellWindowId(kShellWindowId_DefaultContainer)
|
| - ->AddChild(window);
|
| - window->Show();
|
| - EXPECT_EQ(initial_item_count + 1, model_->item_count());
|
| -
|
| - WmWindow* child_window = WmShell::Get()->NewWindow(ui::wm::WINDOW_TYPE_NORMAL,
|
| - ui::LAYER_NOT_DRAWN);
|
| - child_window->aura_window()->SetProperty(kShelfItemTypeKey,
|
| - static_cast<int32_t>(TYPE_APP));
|
| - window->AddChild(child_window);
|
| - child_window->Show();
|
| - // |child_window| should not result in adding a new entry.
|
| - EXPECT_EQ(initial_item_count + 1, model_->item_count());
|
| -
|
| - child_window->Destroy();
|
| - window->Destroy();
|
| - EXPECT_EQ(initial_item_count, model_->item_count());
|
| -}
|
| -
|
| -// Ensures ShelfWindowWatcher supports windows opened prior to session start.
|
| -using ShelfWindowWatcherSessionStartTest = test::NoSessionAshTestBase;
|
| -TEST_F(ShelfWindowWatcherSessionStartTest, PreExistingWindow) {
|
| - ShelfModel* model = WmShell::Get()->shelf_model();
|
| - ASSERT_FALSE(
|
| - WmShell::Get()->GetSessionStateDelegate()->IsActiveUserSessionStarted());
|
| -
|
| - // ShelfModel only has an APP_LIST item.
|
| - EXPECT_EQ(1, model->item_count());
|
| -
|
| - // Construct a window that should get a shelf item once the session starts.
|
| - std::unique_ptr<views::Widget> widget =
|
| - CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect());
|
| - WmWindow* window = WmWindow::Get(widget->GetNativeWindow());
|
| - ShelfWindowWatcherTest::CreateShelfItem(window);
|
| - EXPECT_EQ(1, model->item_count());
|
| -
|
| - // Start the test user session; ShelfWindowWatcher will find the open window.
|
| - SetSessionStarted(true);
|
| - EXPECT_EQ(2, model->item_count());
|
| -}
|
| -
|
| -} // namespace ash
|
|
|