Index: ash/shelf/shelf_window_watcher_unittest.cc |
diff --git a/ash/shelf/shelf_window_watcher_unittest.cc b/ash/shelf/shelf_window_watcher_unittest.cc |
index 85de3e436c0eee3266c2a19cce2dabf775bda51b..a1f17e64e15df399cc61d7d0e672d9fcd428a999 100644 |
--- a/ash/shelf/shelf_window_watcher_unittest.cc |
+++ b/ash/shelf/shelf_window_watcher_unittest.cc |
@@ -89,7 +89,7 @@ TEST_F(ShelfWindowWatcherTest, OpenAndClose) { |
EXPECT_EQ(1, model_->item_count()); |
} |
-// Ensure shelf items are added and removed for unknown windows in mash. |
+// Ensure shelf items are added and removed for some unknown windows in mash. |
TEST_F(ShelfWindowWatcherTest, OpenAndCloseMash) { |
if (Shell::GetAshConfig() != Config::MASH) |
return; |
@@ -111,6 +111,24 @@ TEST_F(ShelfWindowWatcherTest, OpenAndCloseMash) { |
widget2.reset(); |
EXPECT_EQ(1, model_->item_count()); |
+ // Windows with type WINDOW_TYPE_NORMAL get shelf items, others do not. |
+ aura::client::WindowType no_item_types[] = { |
+ aura::client::WINDOW_TYPE_UNKNOWN, aura::client::WINDOW_TYPE_NORMAL, |
+ aura::client::WINDOW_TYPE_POPUP, aura::client::WINDOW_TYPE_CONTROL, |
+ aura::client::WINDOW_TYPE_PANEL, aura::client::WINDOW_TYPE_MENU, |
+ aura::client::WINDOW_TYPE_TOOLTIP}; |
+ for (aura::client::WindowType type : no_item_types) { |
+ std::unique_ptr<aura::Window> window = |
+ base::MakeUnique<aura::Window>(nullptr, type); |
+ window->Init(ui::LAYER_NOT_DRAWN); |
+ Shell::GetPrimaryRootWindow() |
+ ->GetChildById(kShellWindowId_DefaultContainer) |
+ ->AddChild(window.get()); |
+ window->Show(); |
+ EXPECT_EQ(type == aura::client::WINDOW_TYPE_NORMAL ? 2 : 1, |
James Cook
2017/06/08 17:14:00
nit: Take WINDOW_TYPE_NORMAL out of the array abov
|
+ model_->item_count()); |
+ } |
+ |
// Windows with WindowState::ignored_by_shelf set do not get shelf items. |
widget1 = |
CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect()); |
@@ -200,10 +218,6 @@ TEST_F(ShelfWindowWatcherTest, ActivateWindow) { |
} |
TEST_F(ShelfWindowWatcherTest, UpdateWindowProperty) { |
- // TODO: investigate failure in mash. http://crbug.com/695562. |
James Cook
2017/06/08 17:14:00
Woo hoo, things work in mash!
|
- if (Shell::GetAshConfig() == Config::MASH) |
- return; |
- |
// ShelfModel only has an APP_LIST item. |
EXPECT_EQ(1, model_->item_count()); |
@@ -219,7 +233,7 @@ TEST_F(ShelfWindowWatcherTest, UpdateWindowProperty) { |
// Update the window's ShelfItemType. |
widget->GetNativeWindow()->SetProperty(kShelfItemTypeKey, |
- static_cast<int32_t>(TYPE_APP)); |
+ static_cast<int32_t>(TYPE_APP_PANEL)); |
// 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. |
@@ -228,10 +242,6 @@ TEST_F(ShelfWindowWatcherTest, UpdateWindowProperty) { |
} |
TEST_F(ShelfWindowWatcherTest, MaximizeAndRestoreWindow) { |
- // TODO: investigate failure in mash. http://crbug.com/695562. |
- if (Shell::GetAshConfig() == Config::MASH) |
- return; |
- |
// ShelfModel only has an APP_LIST item. |
EXPECT_EQ(1, model_->item_count()); |
@@ -269,10 +279,6 @@ TEST_F(ShelfWindowWatcherTest, MaximizeAndRestoreWindow) { |
// 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 (Shell::GetAshConfig() == Config::MASH) |
- return; |
- |
// ShelfModel only has an APP_LIST item. |
EXPECT_EQ(1, model_->item_count()); |
@@ -299,30 +305,20 @@ TEST_F(ShelfWindowWatcherTest, DragWindow) { |
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 (Shell::GetAshConfig() == Config::MASH) |
- return; |
- |
+// Ensure panels and dialogs get shelf items. |
+TEST_F(ShelfWindowWatcherTest, PanelAndDialogWindows) { |
// 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 = |
+ // An item is created for a dialog window. |
+ std::unique_ptr<views::Widget> dialog_widget = |
CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect()); |
- aura::Window* window1 = widget1->GetNativeWindow(); |
- window1->SetProperty(kShelfIDKey, new std::string(ShelfID("a").Serialize())); |
- window1->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_APP)); |
+ aura::Window* dialog = dialog_widget->GetNativeWindow(); |
+ dialog->SetProperty(kShelfIDKey, new std::string(ShelfID("a").Serialize())); |
+ dialog->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_DIALOG)); |
EXPECT_EQ(2, model_->item_count()); |
- std::unique_ptr<views::Widget> widget2 = |
- CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect()); |
- aura::Window* window2 = widget2->GetNativeWindow(); |
- window2->SetProperty(kShelfIDKey, new std::string(ShelfID("b").Serialize())); |
- window2->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_DIALOG)); |
- EXPECT_EQ(3, model_->item_count()); |
- // Create a panel-type widget to mimic Chrome's app panel windows. |
+ // An item is created for a panel window. |
James Cook
2017/06/08 17:14:00
I think this test would be clearer if split into m
|
views::Widget panel_widget; |
views::Widget::InitParams panel_params(views::Widget::InitParams::TYPE_PANEL); |
panel_params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
@@ -331,19 +327,24 @@ TEST_F(ShelfWindowWatcherTest, PanelWindow) { |
&panel_widget, kShellWindowId_PanelContainer, &panel_params); |
panel_widget.Init(panel_params); |
panel_widget.Show(); |
- aura::Window* panel_window = panel_widget.GetNativeWindow(); |
- panel_window->SetProperty(kShelfIDKey, |
- new std::string(ShelfID("c").Serialize())); |
- panel_window->SetProperty(kShelfItemTypeKey, |
- static_cast<int32_t>(TYPE_APP_PANEL)); |
- EXPECT_EQ(4, model_->item_count()); |
+ aura::Window* panel = panel_widget.GetNativeWindow(); |
+ panel->SetProperty(kShelfIDKey, new std::string(ShelfID("b").Serialize())); |
+ panel->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_APP_PANEL)); |
+ EXPECT_EQ(3, model_->item_count()); |
+ |
+ // An item is not created for an app window. |
+ std::unique_ptr<views::Widget> app_widget = |
+ CreateTestWidget(nullptr, kShellWindowId_DefaultContainer, gfx::Rect()); |
+ aura::Window* app = app_widget->GetNativeWindow(); |
+ app->SetProperty(kShelfIDKey, new std::string(ShelfID("c").Serialize())); |
+ app->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_APP)); |
+ EXPECT_EQ(3, model_->item_count()); |
+ app_widget.reset(); |
// 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(); |
+ dialog_widget.reset(); |
EXPECT_EQ(1, model_->item_count()); |
} |
@@ -379,61 +380,66 @@ TEST_F(ShelfWindowWatcherTest, ItemIcon) { |
} |
TEST_F(ShelfWindowWatcherTest, DontCreateShelfEntriesForChildWindows) { |
- const int initial_item_count = model_->item_count(); |
- |
- std::unique_ptr<aura::Window> window(base::MakeUnique<aura::Window>( |
- nullptr, aura::client::WINDOW_TYPE_NORMAL)); |
+ EXPECT_EQ(1, model_->item_count()); |
+ std::unique_ptr<aura::Window> window = |
+ base::MakeUnique<aura::Window>(nullptr, aura::client::WINDOW_TYPE_NORMAL); |
window->Init(ui::LAYER_NOT_DRAWN); |
- window->SetProperty(kShelfIDKey, new std::string(ShelfID("foo").Serialize())); |
- window->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_APP)); |
+ window->SetProperty(kShelfIDKey, new std::string(ShelfID("a").Serialize())); |
+ window->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_DIALOG)); |
Shell::GetPrimaryRootWindow() |
->GetChildById(kShellWindowId_DefaultContainer) |
->AddChild(window.get()); |
window->Show(); |
- EXPECT_EQ(initial_item_count + 1, model_->item_count()); |
- |
- std::unique_ptr<aura::Window> child_window(base::MakeUnique<aura::Window>( |
- nullptr, aura::client::WINDOW_TYPE_NORMAL)); |
- child_window->Init(ui::LAYER_NOT_DRAWN); |
- child_window->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_APP)); |
- window->AddChild(child_window.get()); |
- child_window->Show(); |
- // |child_window| should not result in adding a new entry. |
- EXPECT_EQ(initial_item_count + 1, model_->item_count()); |
- |
- child_window.reset(); |
+ EXPECT_EQ(2, model_->item_count()); |
James Cook
2017/06/08 17:14:00
Hooray for explicit expectations instead of math i
|
+ |
+ std::unique_ptr<aura::Window> child = |
+ base::MakeUnique<aura::Window>(nullptr, aura::client::WINDOW_TYPE_NORMAL); |
+ child->Init(ui::LAYER_NOT_DRAWN); |
+ child->SetProperty(kShelfIDKey, new std::string(ShelfID("b").Serialize())); |
+ child->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_DIALOG)); |
+ window->AddChild(child.get()); |
+ child->Show(); |
+ // There should not be a new shelf item for |child|. |
+ EXPECT_EQ(2, model_->item_count()); |
+ |
+ child.reset(); |
+ EXPECT_EQ(2, model_->item_count()); |
window.reset(); |
- EXPECT_EQ(initial_item_count, model_->item_count()); |
+ EXPECT_EQ(1, model_->item_count()); |
} |
-TEST_F(ShelfWindowWatcherTest, DontCreateShelfEntriesForTransientWindows) { |
- const int initial_item_count = model_->item_count(); |
- |
- std::unique_ptr<aura::Window> window(base::MakeUnique<aura::Window>( |
- nullptr, aura::client::WINDOW_TYPE_NORMAL)); |
+TEST_F(ShelfWindowWatcherTest, CreateShelfEntriesForTransientWindows) { |
+ EXPECT_EQ(1, model_->item_count()); |
+ std::unique_ptr<aura::Window> window = |
+ base::MakeUnique<aura::Window>(nullptr, aura::client::WINDOW_TYPE_NORMAL); |
window->Init(ui::LAYER_NOT_DRAWN); |
- window->SetProperty(kShelfIDKey, new std::string(ShelfID("foo").Serialize())); |
- window->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_APP)); |
+ window->SetProperty(kShelfIDKey, new std::string(ShelfID("a").Serialize())); |
+ window->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_DIALOG)); |
Shell::GetPrimaryRootWindow() |
->GetChildById(kShellWindowId_DefaultContainer) |
->AddChild(window.get()); |
window->Show(); |
- EXPECT_EQ(initial_item_count + 1, model_->item_count()); |
- |
- std::unique_ptr<aura::Window> transient_window(base::MakeUnique<aura::Window>( |
- nullptr, aura::client::WINDOW_TYPE_NORMAL)); |
- transient_window->Init(ui::LAYER_NOT_DRAWN); |
- transient_window->SetProperty(kShelfItemTypeKey, |
- static_cast<int32_t>(TYPE_APP)); |
- ::wm::TransientWindowController::Get()->AddTransientChild( |
- window.get(), transient_window.get()); |
- transient_window->Show(); |
- // |transient_window| should not result in adding a new entry. |
- EXPECT_EQ(initial_item_count + 1, model_->item_count()); |
- |
- transient_window.reset(); |
+ EXPECT_EQ(2, model_->item_count()); |
+ |
+ std::unique_ptr<aura::Window> transient = |
+ base::MakeUnique<aura::Window>(nullptr, aura::client::WINDOW_TYPE_NORMAL); |
+ transient->Init(ui::LAYER_NOT_DRAWN); |
+ transient->SetProperty(kShelfIDKey, |
+ new std::string(ShelfID("b").Serialize())); |
+ transient->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_DIALOG)); |
+ Shell::GetPrimaryRootWindow() |
+ ->GetChildById(kShellWindowId_DefaultContainer) |
+ ->AddChild(transient.get()); |
+ ::wm::TransientWindowController::Get()->AddTransientChild(window.get(), |
+ transient.get()); |
+ transient->Show(); |
+ // There should be a new shelf item for |transient|. |
+ EXPECT_EQ(3, model_->item_count()); |
+ |
+ transient.reset(); |
+ EXPECT_EQ(2, model_->item_count()); |
window.reset(); |
- EXPECT_EQ(initial_item_count, model_->item_count()); |
+ EXPECT_EQ(1, model_->item_count()); |
} |
// Ensures ShelfWindowWatcher supports windows opened prior to session start. |