Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(307)

Side by Side Diff: chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc

Issue 2894743002: Make launching apps from shelf more intuitive (Closed)
Patch Set: This patch set has many platform related issue Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" 5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "ash/public/cpp/shelf_item_delegate.h" 9 #include "ash/public/cpp/shelf_item_delegate.h"
10 #include "ash/public/cpp/window_properties.h" 10 #include "ash/public/cpp/window_properties.h"
(...skipping 909 matching lines...) Expand 10 before | Expand all | Expand 10 after
920 EXPECT_EQ(++tab_count, tab_strip->count()); 920 EXPECT_EQ(++tab_count, tab_strip->count());
921 EXPECT_EQ(ash::STATUS_ACTIVE, (*model_->ItemByID(shortcut_id)).status); 921 EXPECT_EQ(ash::STATUS_ACTIVE, (*model_->ItemByID(shortcut_id)).status);
922 WebContents* tab = tab_strip->GetActiveWebContents(); 922 WebContents* tab = tab_strip->GetActiveWebContents();
923 content::WebContentsDestroyedWatcher destroyed_watcher(tab); 923 content::WebContentsDestroyedWatcher destroyed_watcher(tab);
924 browser()->tab_strip_model()->CloseSelectedTabs(); 924 browser()->tab_strip_model()->CloseSelectedTabs();
925 destroyed_watcher.Wait(); 925 destroyed_watcher.Wait();
926 EXPECT_EQ(--tab_count, tab_strip->count()); 926 EXPECT_EQ(--tab_count, tab_strip->count());
927 EXPECT_EQ(ash::STATUS_CLOSED, (*model_->ItemByID(shortcut_id)).status); 927 EXPECT_EQ(ash::STATUS_CLOSED, (*model_->ItemByID(shortcut_id)).status);
928 } 928 }
929 929
930 // Tests behavior of launching app from shelf in the first display while the
931 // second display has the focus. Initially, Browsers exists in the first
932 // display.
933 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchAppFromDisplayWithoutFocus0) {
934 // Updates the display configuration to add a secondary display.
935 display::DisplayManager* display_manager =
936 ash::Shell::Get()->display_manager();
937 display::test::DisplayManagerTestApi(display_manager)
938 .UpdateDisplay("0+0-800x800,801+0-800x800");
939 display::Displays displays = display_manager->active_display_list();
940 aura::Window::Windows roots = ash::Shell::GetAllRootWindows();
941 EXPECT_EQ(displays.size(), 2U);
942 EXPECT_EQ(roots.size(), 2U);
943 EXPECT_EQ(
944 displays[0].id(),
945 display::Screen::GetScreen()->GetDisplayNearestWindow(roots[0]).id());
946 EXPECT_EQ(
947 displays[1].id(),
948 display::Screen::GetScreen()->GetDisplayNearestWindow(roots[1]).id());
949
950 // Ensures that display 0 has one browser with focus and display 1 has two
951 // browsers. Each browser only has one tab.
952 BrowserList* browser_list = BrowserList::GetInstance();
953 Browser* browser0 = browser();
954 Browser* browser1 = CreateBrowser(browser()->profile());
955 Browser* browser2 = CreateBrowser(browser()->profile());
956 browser0->window()->SetBounds(displays[0].work_area());
957 browser1->window()->SetBounds(displays[1].work_area());
958 browser2->window()->SetBounds(displays[1].work_area());
959 // Ensures browser 2 is above browser 1 in display 1.
960 browser_list->SetLastActive(browser2);
961 browser_list->SetLastActive(browser0);
962 EXPECT_EQ(browser_list->size(), 3U);
963 EXPECT_EQ(browser0->window()->GetNativeWindow()->GetRootWindow(), roots[0]);
964 EXPECT_EQ(browser1->window()->GetNativeWindow()->GetRootWindow(), roots[1]);
965 EXPECT_EQ(browser2->window()->GetNativeWindow()->GetRootWindow(), roots[1]);
966 EXPECT_EQ(browser0->tab_strip_model()->count(), 1);
967 EXPECT_EQ(browser1->tab_strip_model()->count(), 1);
968 EXPECT_EQ(browser2->tab_strip_model()->count(), 1);
969
970 // Launches an app from the shelf of display 0 and expects a new tab is opened
971 // in the uppermost browser in display 0.
972 ash::ShelfID shortcut_id = CreateShortcut("app1");
973 WmShelf::ActivateShelfItemInDisplay(model_->ItemIndexByID(shortcut_id),
974 displays[1].id());
975 EXPECT_EQ(browser0->tab_strip_model()->count(), 1);
976 EXPECT_EQ(browser1->tab_strip_model()->count(), 1);
977 EXPECT_EQ(browser2->tab_strip_model()->count(), 2);
978 }
979
980 // Tests behavior of launching app from shelf in the first display while the
981 // second display has the focus. Initially, No browser exists in the first
982 // display.
983 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchAppFromDisplayWithoutFocus1) {
984 // Updates the display configuration to add a secondary display.
985 display::DisplayManager* display_manager =
986 ash::Shell::Get()->display_manager();
987 display::test::DisplayManagerTestApi(display_manager)
988 .UpdateDisplay("800x800,801+0-800x800");
989 display::Displays displays = display_manager->active_display_list();
990 aura::Window::Windows roots = ash::Shell::GetAllRootWindows();
991 EXPECT_EQ(displays.size(), 2U);
992 EXPECT_EQ(roots.size(), 2U);
993 EXPECT_EQ(
994 displays[0].id(),
995 display::Screen::GetScreen()->GetDisplayNearestWindow(roots[0]).id());
996 EXPECT_EQ(
997 displays[1].id(),
998 display::Screen::GetScreen()->GetDisplayNearestWindow(roots[1]).id());
999
1000 // Ensures that display 0 has one browser with focus and display 1 has no
1001 // browser. The browser only has one tab.
1002 BrowserList* browser_list = BrowserList::GetInstance();
1003 Browser* browser0 = browser();
1004 browser0->window()->SetBounds(displays[0].work_area());
1005 EXPECT_EQ(browser_list->size(), 1U);
1006 EXPECT_EQ(browser0->window()->GetNativeWindow()->GetRootWindow(), roots[0]);
1007 EXPECT_EQ(browser0->tab_strip_model()->count(), 1);
1008
1009 // Launches an app from the shelf of display 0 and expects a new browser with
1010 // one tab is opened in display 0.
1011 ash::ShelfID shortcut_id = CreateShortcut("app1");
1012 WmShelf::ActivateShelfItemInDisplay(model_->ItemIndexByID(shortcut_id),
1013 displays[1].id());
1014 Browser* browser1 = browser_list->GetLastActive();
1015 EXPECT_EQ(browser_list->size(), 2U);
1016 EXPECT_NE(browser1, browser0);
1017 EXPECT_EQ(browser0->tab_strip_model()->count(), 1);
1018 EXPECT_EQ(browser1->tab_strip_model()->count(), 1);
1019 }
1020
930 // Launch the app first and then create the shortcut. 1021 // Launch the app first and then create the shortcut.
931 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchUnpinned) { 1022 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchUnpinned) {
932 TabStripModel* tab_strip = browser()->tab_strip_model(); 1023 TabStripModel* tab_strip = browser()->tab_strip_model();
933 int tab_count = tab_strip->count(); 1024 int tab_count = tab_strip->count();
934 LoadAndLaunchExtension("app1", extensions::LAUNCH_CONTAINER_TAB, 1025 LoadAndLaunchExtension("app1", extensions::LAUNCH_CONTAINER_TAB,
935 WindowOpenDisposition::NEW_FOREGROUND_TAB); 1026 WindowOpenDisposition::NEW_FOREGROUND_TAB);
936 EXPECT_EQ(++tab_count, tab_strip->count()); 1027 EXPECT_EQ(++tab_count, tab_strip->count());
937 ash::ShelfID shortcut_id = CreateShortcut("app1"); 1028 ash::ShelfID shortcut_id = CreateShortcut("app1");
938 EXPECT_EQ(ash::STATUS_ACTIVE, (*model_->ItemByID(shortcut_id)).status); 1029 EXPECT_EQ(ash::STATUS_ACTIVE, (*model_->ItemByID(shortcut_id)).status);
939 WebContents* tab = tab_strip->GetActiveWebContents(); 1030 WebContents* tab = tab_strip->GetActiveWebContents();
940 content::WebContentsDestroyedWatcher destroyed_watcher(tab); 1031 content::WebContentsDestroyedWatcher destroyed_watcher(tab);
941 browser()->tab_strip_model()->CloseSelectedTabs(); 1032 browser()->tab_strip_model()->CloseSelectedTabs();
942 destroyed_watcher.Wait(); 1033 destroyed_watcher.Wait();
943 EXPECT_EQ(--tab_count, tab_strip->count()); 1034 EXPECT_EQ(--tab_count, tab_strip->count());
944 EXPECT_EQ(ash::STATUS_CLOSED, (*model_->ItemByID(shortcut_id)).status); 1035 EXPECT_EQ(ash::STATUS_CLOSED, (*model_->ItemByID(shortcut_id)).status);
945 } 1036 }
946 1037
947 // Launches an app in the background and then tries to open it. This is test for 1038 // Launches an app in the background and then tries to open it. This is test for
948 // a crash we had. 1039 // a crash we had.
949 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchInBackground) { 1040 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchInBackground) {
950 TabStripModel* tab_strip = browser()->tab_strip_model(); 1041 TabStripModel* tab_strip = browser()->tab_strip_model();
951 int tab_count = tab_strip->count(); 1042 int tab_count = tab_strip->count();
952 LoadAndLaunchExtension("app1", extensions::LAUNCH_CONTAINER_TAB, 1043 LoadAndLaunchExtension("app1", extensions::LAUNCH_CONTAINER_TAB,
953 WindowOpenDisposition::NEW_BACKGROUND_TAB); 1044 WindowOpenDisposition::NEW_BACKGROUND_TAB);
954 EXPECT_EQ(++tab_count, tab_strip->count()); 1045 EXPECT_EQ(++tab_count, tab_strip->count());
955 controller_->LaunchApp(ash::ShelfID(last_loaded_extension_id()), 1046 controller_->LaunchApp(ash::ShelfID(last_loaded_extension_id()),
956 ash::LAUNCH_FROM_UNKNOWN, 0); 1047 ash::LAUNCH_FROM_UNKNOWN, 0, NULL);
stevenjb 2017/05/22 17:55:29 Use nullptr throughout.
957 } 1048 }
958 1049
959 // Confirm that clicking a icon for an app running in one of 2 maxmized windows 1050 // Confirm that clicking a icon for an app running in one of 2 maxmized windows
960 // activates the right window. 1051 // activates the right window.
961 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchMaximized) { 1052 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchMaximized) {
962 aura::Window* window1 = browser()->window()->GetNativeWindow(); 1053 aura::Window* window1 = browser()->window()->GetNativeWindow();
963 ash::wm::WindowState* window1_state = ash::wm::GetWindowState(window1); 1054 ash::wm::WindowState* window1_state = ash::wm::GetWindowState(window1);
964 window1_state->Maximize(); 1055 window1_state->Maximize();
965 content::WindowedNotificationObserver open_observer( 1056 content::WindowedNotificationObserver open_observer(
966 chrome::NOTIFICATION_BROWSER_WINDOW_READY, 1057 chrome::NOTIFICATION_BROWSER_WINDOW_READY,
(...skipping 30 matching lines...) Expand all
997 EXPECT_EQ(++tab_count, tab_strip->count()); 1088 EXPECT_EQ(++tab_count, tab_strip->count());
998 controller_->ActivateApp(extension->id(), ash::LAUNCH_FROM_UNKNOWN, 0); 1089 controller_->ActivateApp(extension->id(), ash::LAUNCH_FROM_UNKNOWN, 0);
999 EXPECT_EQ(tab_count, tab_strip->count()); 1090 EXPECT_EQ(tab_count, tab_strip->count());
1000 } 1091 }
1001 1092
1002 // Launching the same app multiple times should launch a copy for each call. 1093 // Launching the same app multiple times should launch a copy for each call.
1003 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchApp) { 1094 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchApp) {
1004 TabStripModel* tab_strip = browser()->tab_strip_model(); 1095 TabStripModel* tab_strip = browser()->tab_strip_model();
1005 int tab_count = tab_strip->count(); 1096 int tab_count = tab_strip->count();
1006 ash::ShelfID id(LoadExtension(test_data_dir_.AppendASCII("app1"))->id()); 1097 ash::ShelfID id(LoadExtension(test_data_dir_.AppendASCII("app1"))->id());
1007 controller_->LaunchApp(id, ash::LAUNCH_FROM_UNKNOWN, 0); 1098 controller_->LaunchApp(id, ash::LAUNCH_FROM_UNKNOWN, 0, NULL);
1008 EXPECT_EQ(++tab_count, tab_strip->count()); 1099 EXPECT_EQ(++tab_count, tab_strip->count());
1009 controller_->LaunchApp(id, ash::LAUNCH_FROM_UNKNOWN, 0); 1100 controller_->LaunchApp(id, ash::LAUNCH_FROM_UNKNOWN, 0, NULL);
1010 EXPECT_EQ(++tab_count, tab_strip->count()); 1101 EXPECT_EQ(++tab_count, tab_strip->count());
1011 } 1102 }
1012 1103
1013 // Launch 2 apps and toggle which is active. 1104 // Launch 2 apps and toggle which is active.
1014 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, MultipleApps) { 1105 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, MultipleApps) {
1015 int item_count = model_->item_count(); 1106 int item_count = model_->item_count();
1016 TabStripModel* tab_strip = browser()->tab_strip_model(); 1107 TabStripModel* tab_strip = browser()->tab_strip_model();
1017 int tab_count = tab_strip->count(); 1108 int tab_count = tab_strip->count();
1018 ash::ShelfID shortcut1 = CreateShortcut("app1"); 1109 ash::ShelfID shortcut1 = CreateShortcut("app1");
1019 EXPECT_EQ(++item_count, model_->item_count()); 1110 EXPECT_EQ(++item_count, model_->item_count());
(...skipping 1385 matching lines...) Expand 10 before | Expand all | Expand 10 after
2405 2496
2406 // Close all windows via the menu item. 2497 // Close all windows via the menu item.
2407 CloseBrowserWindow(browser(), menu1.get(), LauncherContextMenu::MENU_CLOSE); 2498 CloseBrowserWindow(browser(), menu1.get(), LauncherContextMenu::MENU_CLOSE);
2408 EXPECT_EQ(0u, BrowserList::GetInstance()->size()); 2499 EXPECT_EQ(0u, BrowserList::GetInstance()->size());
2409 2500
2410 // Check if "Close" is removed from the context menu. 2501 // Check if "Close" is removed from the context menu.
2411 std::unique_ptr<LauncherContextMenu> menu2 = CreateBrowserItemContextMenu(); 2502 std::unique_ptr<LauncherContextMenu> menu2 = CreateBrowserItemContextMenu();
2412 ASSERT_FALSE( 2503 ASSERT_FALSE(
2413 IsItemPresentInMenu(menu2.get(), LauncherContextMenu::MENU_CLOSE)); 2504 IsItemPresentInMenu(menu2.get(), LauncherContextMenu::MENU_CLOSE));
2414 } 2505 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698