Index: chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_browsertest.cc |
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_browsertest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_browsertest.cc |
index be80e2d21ce205896f2e12f12e0467365c6b57cc..3c28d4019ee2c4e5fd7ae8aa2490464b1e5f7eb8 100644 |
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_browsertest.cc |
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_browsertest.cc |
@@ -415,6 +415,27 @@ IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, LaunchUnpinned) { |
EXPECT_EQ(item_count, shelf_model()->item_count()); |
} |
+IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, |
+ LaunchUnpinnedShowInShelfWindow) { |
+ int item_count = shelf_model()->item_count(); |
+ const Extension* extension = LoadAndLaunchPlatformApp("launch", "Launched"); |
+ AppWindow::CreateParams params; |
+ |
+ // Open a window shown in shelf. |
+ params.show_in_shelf = true; |
+ params.window_key = "window"; |
+ AppWindow* window = |
+ CreateAppWindowFromParams(browser()->profile(), extension, params); |
+ ++item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ const ash::ShelfItem& item = GetLastLauncherItem(); |
+ EXPECT_EQ(ash::TYPE_APP, item.type); |
+ EXPECT_EQ(ash::STATUS_ACTIVE, item.status); |
+ CloseAppWindow(window); |
+ --item_count; |
+ EXPECT_EQ(item_count, shelf_model()->item_count()); |
+} |
+ |
// Test that we can launch a platform app that already has a shortcut. |
IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, LaunchPinned) { |
int item_count = shelf_model()->item_count(); |
@@ -448,6 +469,43 @@ IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, LaunchPinned) { |
EXPECT_EQ(ash::STATUS_CLOSED, item.status); |
} |
+IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, |
+ LaunchPinnedShowInShelfWindow) { |
+ int item_count = shelf_model()->item_count(); |
+ |
+ // First get app_id. |
+ const Extension* extension = LoadAndLaunchPlatformApp("launch", "Launched"); |
+ const std::string app_id = extension->id(); |
+ AppWindow::CreateParams params; |
+ |
+ // Then create a shortcut. |
+ ash::ShelfID shortcut_id = CreateAppShortcutLauncherItem( |
+ ash::launcher::AppLauncherId(app_id, "window")); |
+ ++item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ ash::ShelfItem item = *shelf_model()->ItemByID(shortcut_id); |
+ EXPECT_EQ(ash::TYPE_APP_SHORTCUT, item.type); |
+ EXPECT_EQ(ash::STATUS_CLOSED, item.status); |
+ |
+ // Open a window shown in shelf. Confirm the item is now running. |
+ params.show_in_shelf = true; |
+ params.window_key = "window"; |
+ AppWindow* window = |
+ CreateAppWindowFromParams(browser()->profile(), extension, params); |
+ ash::wm::ActivateWindow(window->GetNativeWindow()); |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ item = *shelf_model()->ItemByID(shortcut_id); |
+ EXPECT_EQ(ash::TYPE_APP_SHORTCUT, item.type); |
+ EXPECT_EQ(ash::STATUS_ACTIVE, item.status); |
+ |
+ // Then close it, make sure there's still an item. |
+ CloseAppWindow(window); |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ item = *shelf_model()->ItemByID(shortcut_id); |
+ EXPECT_EQ(ash::TYPE_APP_SHORTCUT, item.type); |
+ EXPECT_EQ(ash::STATUS_CLOSED, item.status); |
+} |
+ |
IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, PinRunning) { |
// Run. |
int item_count = shelf_model()->item_count(); |
@@ -488,6 +546,69 @@ IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, PinRunning) { |
ASSERT_EQ(item_count, shelf_model()->item_count()); |
} |
+IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, |
+ PinRunningShowInShelfWindow) { |
+ // Run. |
+ int item_count = shelf_model()->item_count(); |
+ const Extension* extension = LoadAndLaunchPlatformApp("launch", "Launched"); |
+ AppWindow::CreateParams params; |
+ |
+ AppWindow* window1 = CreateAppWindow(browser()->profile(), extension); |
+ ++item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ const ash::ShelfItem& item_window1 = GetLastLauncherItem(); |
+ ash::ShelfID id_window1 = item_window1.id; |
+ EXPECT_EQ(ash::TYPE_APP, item_window1.type); |
+ EXPECT_EQ(ash::STATUS_ACTIVE, item_window1.status); |
+ |
+ // Open a window shown in shelf. |
+ params.show_in_shelf = true; |
+ params.window_key = "window2"; |
+ AppWindow* window2 = |
+ CreateAppWindowFromParams(browser()->profile(), extension, params); |
+ ++item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ const ash::ShelfItem& item_window2 = GetLastLauncherItem(); |
+ ash::ShelfID id_window2 = item_window2.id; |
+ EXPECT_EQ(ash::TYPE_APP, item_window2.type); |
+ EXPECT_EQ(ash::STATUS_ACTIVE, item_window2.status); |
+ |
+ // Create a shortcut. The app window1 and window2 should be after it. |
+ ash::ShelfID foo_id = |
+ CreateAppShortcutLauncherItem(ash::launcher::AppLauncherId("foo")); |
+ ++item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ EXPECT_LT(shelf_model()->ItemIndexByID(foo_id), |
+ shelf_model()->ItemIndexByID(id_window1)); |
+ EXPECT_LT(shelf_model()->ItemIndexByID(foo_id), |
+ shelf_model()->ItemIndexByID(id_window2)); |
+ |
+ // Pin the app window1. The item should remain. |
+ controller_->Pin(id_window1); |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ const ash::ShelfItem& item_window = *shelf_model()->ItemByID(id_window1); |
+ EXPECT_EQ(ash::TYPE_APP_SHORTCUT, item_window.type); |
+ EXPECT_EQ(ash::STATUS_RUNNING, item_window.status); |
+ |
+ // New shortcuts should come after the app window1 and before window2. |
+ ash::ShelfID bar_id = |
+ CreateAppShortcutLauncherItem(ash::launcher::AppLauncherId("bar")); |
+ ++item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ EXPECT_LT(shelf_model()->ItemIndexByID(id_window1), |
+ shelf_model()->ItemIndexByID(bar_id)); |
+ EXPECT_LT(shelf_model()->ItemIndexByID(bar_id), |
+ shelf_model()->ItemIndexByID(id_window2)); |
+ |
+ // Then close the app window1, make sure the item remains. |
+ CloseAppWindow(window1); |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ // Then close the app window2. |
+ CloseAppWindow(window2); |
+ --item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+} |
+ |
IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, UnpinRunning) { |
int item_count = shelf_model()->item_count(); |
@@ -537,6 +658,74 @@ IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, UnpinRunning) { |
ASSERT_EQ(item_count, shelf_model()->item_count()); |
} |
+IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, |
+ UnpinRunningShowInShelfWindow) { |
+ int item_count = shelf_model()->item_count(); |
+ |
+ // First get app_id. |
+ const Extension* extension = LoadAndLaunchPlatformApp("launch", "Launched"); |
+ const std::string app_id = extension->id(); |
+ AppWindow::CreateParams params; |
+ |
+ // Then create a shortcut window1. |
+ ash::ShelfID shortcut_id_window1 = |
+ CreateAppShortcutLauncherItem(ash::launcher::AppLauncherId(app_id)); |
+ ++item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ ash::ShelfItem item_window1 = *shelf_model()->ItemByID(shortcut_id_window1); |
+ EXPECT_EQ(ash::TYPE_APP_SHORTCUT, item_window1.type); |
+ EXPECT_EQ(ash::STATUS_CLOSED, item_window1.status); |
+ |
+ // Create a second shortcut. This will be needed to force the first one to |
+ // move once it gets unpinned. |
+ ash::ShelfID foo_id = |
+ CreateAppShortcutLauncherItem(ash::launcher::AppLauncherId("foo")); |
+ ++item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ EXPECT_LT(shelf_model()->ItemIndexByID(shortcut_id_window1), |
+ shelf_model()->ItemIndexByID(foo_id)); |
+ |
+ // Open app window1. Confirm the item is now running. |
+ AppWindow* window1 = CreateAppWindow(browser()->profile(), extension); |
+ ash::wm::ActivateWindow(window1->GetNativeWindow()); |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ item_window1 = *shelf_model()->ItemByID(shortcut_id_window1); |
+ EXPECT_EQ(ash::TYPE_APP_SHORTCUT, item_window1.type); |
+ EXPECT_EQ(ash::STATUS_ACTIVE, item_window1.status); |
+ |
+ // Open the app window2 shown in shelf. |
+ params.show_in_shelf = true; |
+ params.window_key = "window2"; |
+ AppWindow* window2 = |
+ CreateAppWindowFromParams(browser()->profile(), extension, params); |
+ ++item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ const ash::ShelfItem& item_window2 = GetLastLauncherItem(); |
+ ash::ShelfID id_window2 = item_window2.id; |
+ EXPECT_EQ(ash::TYPE_APP, item_window2.type); |
+ EXPECT_EQ(ash::STATUS_ACTIVE, item_window2.status); |
+ EXPECT_GT(shelf_model()->ItemIndexByID(id_window2), |
+ shelf_model()->ItemIndexByID(foo_id)); |
+ |
+ // Unpin the app window1. The item should remain. |
+ controller_->Unpin(shortcut_id_window1); |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ item_window1 = *shelf_model()->ItemByID(shortcut_id_window1); |
+ EXPECT_EQ(ash::TYPE_APP, item_window1.type); |
+ EXPECT_EQ(ash::STATUS_RUNNING, item_window1.status); |
+ // The app window1 should have moved after the other shortcuts. |
+ EXPECT_GT(shelf_model()->ItemIndexByID(shortcut_id_window1), |
+ shelf_model()->ItemIndexByID(foo_id)); |
+ |
+ // Then close app window1 and window2, make sure the item's gone. |
+ CloseAppWindow(window1); |
+ --item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ CloseAppWindow(window2); |
+ --item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+} |
+ |
// Test that we can launch a platform app with more than one window. |
IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, MultipleWindows) { |
int item_count = shelf_model()->item_count(); |
@@ -2424,3 +2613,80 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, |
ASSERT_FALSE( |
IsItemPresentInMenu(menu2.get(), LauncherContextMenu::MENU_CLOSE)); |
} |
+ |
+IN_PROC_BROWSER_TEST_F(LauncherPlatformAppBrowserTest, |
+ PinAndRestoreShowInShelfWindow) { |
+ // Run. |
+ int item_count = shelf_model()->item_count(); |
+ const Extension* extension = LoadAndLaunchPlatformApp("launch", "Launched"); |
+ AppWindow::CreateParams params; |
+ |
+ AppWindow* window1 = CreateAppWindow(browser()->profile(), extension); |
+ ++item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ const ash::ShelfItem& item_window1 = GetLastLauncherItem(); |
+ EXPECT_EQ(ash::TYPE_APP, item_window1.type); |
+ EXPECT_EQ(ash::STATUS_ACTIVE, item_window1.status); |
+ |
+ // Open a window shown in shelf. |
+ params.show_in_shelf = true; |
+ params.window_key = "window2"; |
+ AppWindow* window2 = |
+ CreateAppWindowFromParams(browser()->profile(), extension, params); |
+ ++item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ const ash::ShelfItem& item_window2 = GetLastLauncherItem(); |
+ ash::ShelfID id_window2 = item_window2.id; |
+ EXPECT_EQ(ash::TYPE_APP, item_window2.type); |
+ EXPECT_EQ(ash::STATUS_ACTIVE, item_window2.status); |
+ |
+ // Open the second window shown in shelf. |
+ params.show_in_shelf = true; |
+ params.window_key = "window3"; |
+ AppWindow* window3 = |
+ CreateAppWindowFromParams(browser()->profile(), extension, params); |
+ ++item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ const ash::ShelfItem& item_window3 = GetLastLauncherItem(); |
+ ash::ShelfID id_window3 = item_window3.id; |
+ EXPECT_EQ(ash::TYPE_APP, item_window3.type); |
+ EXPECT_EQ(ash::STATUS_ACTIVE, item_window3.status); |
+ |
+ // Pin the app window2. The item should remain. |
+ controller_->Pin(id_window2); |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ const ash::ShelfItem& item_window_p2 = *shelf_model()->ItemByID(id_window2); |
+ EXPECT_EQ(ash::TYPE_APP_SHORTCUT, item_window_p2.type); |
+ EXPECT_EQ(ash::STATUS_RUNNING, item_window_p2.status); |
+ |
+ // Pin the app window3. The item should remain. |
+ controller_->Pin(id_window3); |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ const ash::ShelfItem& item_window_p3 = *shelf_model()->ItemByID(id_window3); |
+ EXPECT_EQ(ash::TYPE_APP_SHORTCUT, item_window_p3.type); |
+ EXPECT_EQ(ash::STATUS_ACTIVE, item_window_p3.status); |
+ |
+ // Then close the app window2, make sure the item remains. |
+ CloseAppWindow(window2); |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ // Then close the app window1. |
+ CloseAppWindow(window1); |
+ --item_count; |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ // Then close the app window3, make sure the item remains. |
+ CloseAppWindow(window3); |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ |
+ // Open app window2. Confirm the item is now running. |
+ EXPECT_EQ(ash::TYPE_APP_SHORTCUT, item_window_p2.type); |
+ EXPECT_EQ(ash::STATUS_CLOSED, item_window_p2.status); |
+ params.show_in_shelf = true; |
+ params.window_key = "window2"; |
+ AppWindow* window_p2 = |
+ CreateAppWindowFromParams(browser()->profile(), extension, params); |
+ ash::wm::ActivateWindow(window_p2->GetNativeWindow()); |
+ ASSERT_EQ(item_count, shelf_model()->item_count()); |
+ const ash::ShelfItem& item_window_r2 = *shelf_model()->ItemByID(id_window2); |
+ EXPECT_EQ(ash::TYPE_APP_SHORTCUT, item_window_r2.type); |
+ EXPECT_EQ(ash::STATUS_ACTIVE, item_window_r2.status); |
+} |