OLD | NEW |
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 <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 LauncherItemController* test_controller_; | 609 LauncherItemController* test_controller_; |
610 | 610 |
611 ExtensionService* extension_service_; | 611 ExtensionService* extension_service_; |
612 | 612 |
613 ash::ShelfItemDelegateManager* item_delegate_manager_; | 613 ash::ShelfItemDelegateManager* item_delegate_manager_; |
614 | 614 |
615 private: | 615 private: |
616 DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerTest); | 616 DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerTest); |
617 }; | 617 }; |
618 | 618 |
619 // The testing framework to test the legacy shelf layout. | |
620 class LegacyShelfLayoutChromeLauncherControllerTest | |
621 : public ChromeLauncherControllerTest { | |
622 protected: | |
623 LegacyShelfLayoutChromeLauncherControllerTest() { | |
624 } | |
625 | |
626 virtual ~LegacyShelfLayoutChromeLauncherControllerTest() { | |
627 } | |
628 | |
629 // Overwrite the Setup function to use the legacy shelf layout option. | |
630 virtual void SetUp() OVERRIDE { | |
631 CommandLine::ForCurrentProcess()->AppendSwitch( | |
632 ash::switches::kAshDisableAlternateShelfLayout); | |
633 ChromeLauncherControllerTest::SetUp(); | |
634 } | |
635 | |
636 private: | |
637 DISALLOW_COPY_AND_ASSIGN(LegacyShelfLayoutChromeLauncherControllerTest); | |
638 }; | |
639 | |
640 #if defined(OS_CHROMEOS) | 619 #if defined(OS_CHROMEOS) |
641 // A browser window proxy which is able to associate an aura native window with | 620 // A browser window proxy which is able to associate an aura native window with |
642 // it. | 621 // it. |
643 class TestBrowserWindowAura : public TestBrowserWindow { | 622 class TestBrowserWindowAura : public TestBrowserWindow { |
644 public: | 623 public: |
645 // |native_window| will still be owned by the caller after the constructor | 624 // |native_window| will still be owned by the caller after the constructor |
646 // was called. | 625 // was called. |
647 explicit TestBrowserWindowAura(aura::Window* native_window) | 626 explicit TestBrowserWindowAura(aura::Window* native_window) |
648 : native_window_(native_window) { | 627 : native_window_(native_window) { |
649 } | 628 } |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
965 ash::test::TestSessionStateDelegate* session_delegate_; | 944 ash::test::TestSessionStateDelegate* session_delegate_; |
966 ash::test::TestShellDelegate* shell_delegate_; | 945 ash::test::TestShellDelegate* shell_delegate_; |
967 | 946 |
968 ProfileToNameMap created_profiles_; | 947 ProfileToNameMap created_profiles_; |
969 | 948 |
970 DISALLOW_COPY_AND_ASSIGN( | 949 DISALLOW_COPY_AND_ASSIGN( |
971 MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerTest); | 950 MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerTest); |
972 }; | 951 }; |
973 #endif // defined(OS_CHROMEOS) | 952 #endif // defined(OS_CHROMEOS) |
974 | 953 |
975 TEST_F(LegacyShelfLayoutChromeLauncherControllerTest, DefaultApps) { | |
976 InitLauncherController(); | |
977 // Model should only contain the browser shortcut and app list items. | |
978 EXPECT_EQ(2, model_->item_count()); | |
979 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
980 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | |
981 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | |
982 | |
983 // Installing |extension3_| should add it to the launcher - behind the | |
984 // chrome icon. | |
985 extension_service_->AddExtension(extension3_.get()); | |
986 EXPECT_EQ("Chrome, App3, AppList", GetPinnedAppStatus()); | |
987 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
988 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | |
989 } | |
990 | |
991 // Check that the restauration of launcher items is happening in the same order | |
992 // as the user has pinned them (on another system) when they are synced reverse | |
993 // order. | |
994 TEST_F(LegacyShelfLayoutChromeLauncherControllerTest, | |
995 RestoreDefaultAppsReverseOrder) { | |
996 InitLauncherController(); | |
997 | |
998 base::ListValue policy_value; | |
999 InsertPrefValue(&policy_value, 0, extension1_->id()); | |
1000 InsertPrefValue(&policy_value, 1, extension2_->id()); | |
1001 InsertPrefValue(&policy_value, 2, extension3_->id()); | |
1002 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | |
1003 policy_value.DeepCopy()); | |
1004 EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); | |
1005 // Model should only contain the browser shortcut and app list items. | |
1006 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1007 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | |
1008 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | |
1009 EXPECT_EQ("Chrome, AppList", GetPinnedAppStatus()); | |
1010 | |
1011 // Installing |extension3_| should add it to the shelf - behind the | |
1012 // chrome icon. | |
1013 ash::ShelfItem item; | |
1014 extension_service_->AddExtension(extension3_.get()); | |
1015 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1016 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | |
1017 EXPECT_EQ("Chrome, App3, AppList", GetPinnedAppStatus()); | |
1018 | |
1019 // Installing |extension2_| should add it to the launcher - behind the | |
1020 // chrome icon, but in first location. | |
1021 extension_service_->AddExtension(extension2_.get()); | |
1022 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1023 EXPECT_EQ("Chrome, App2, App3, AppList", GetPinnedAppStatus()); | |
1024 | |
1025 // Installing |extension1_| should add it to the launcher - behind the | |
1026 // chrome icon, but in first location. | |
1027 extension_service_->AddExtension(extension1_.get()); | |
1028 EXPECT_EQ("Chrome, App1, App2, App3, AppList", GetPinnedAppStatus()); | |
1029 } | |
1030 | |
1031 // Check that the restauration of launcher items is happening in the same order | |
1032 // as the user has pinned them (on another system) when they are synced random | |
1033 // order. | |
1034 TEST_F(LegacyShelfLayoutChromeLauncherControllerTest, | |
1035 RestoreDefaultAppsRandomOrder) { | |
1036 InitLauncherController(); | |
1037 | |
1038 base::ListValue policy_value; | |
1039 InsertPrefValue(&policy_value, 0, extension1_->id()); | |
1040 InsertPrefValue(&policy_value, 1, extension2_->id()); | |
1041 InsertPrefValue(&policy_value, 2, extension3_->id()); | |
1042 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | |
1043 policy_value.DeepCopy()); | |
1044 EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); | |
1045 // Model should only contain the browser shortcut and app list items. | |
1046 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1047 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | |
1048 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | |
1049 EXPECT_EQ("Chrome, AppList", GetPinnedAppStatus()); | |
1050 | |
1051 // Installing |extension2_| should add it to the launcher - behind the | |
1052 // chrome icon. | |
1053 extension_service_->AddExtension(extension2_.get()); | |
1054 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1055 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | |
1056 EXPECT_EQ("Chrome, App2, AppList", GetPinnedAppStatus()); | |
1057 | |
1058 // Installing |extension1_| should add it to the launcher - behind the | |
1059 // chrome icon, but in first location. | |
1060 extension_service_->AddExtension(extension1_.get()); | |
1061 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | |
1062 EXPECT_EQ("Chrome, App1, App2, AppList", GetPinnedAppStatus()); | |
1063 | |
1064 // Installing |extension3_| should add it to the launcher - behind the | |
1065 // chrome icon, but in first location. | |
1066 extension_service_->AddExtension(extension3_.get()); | |
1067 EXPECT_EQ("Chrome, App1, App2, App3, AppList", GetPinnedAppStatus()); | |
1068 } | |
1069 | |
1070 // Check that the restauration of launcher items is happening in the same order | 954 // Check that the restauration of launcher items is happening in the same order |
1071 // as the user has pinned / moved them (on another system) when they are synced | 955 // as the user has pinned / moved them (on another system) when they are synced |
1072 // random order - including the chrome icon. | 956 // random order - including the chrome icon. |
1073 TEST_F(LegacyShelfLayoutChromeLauncherControllerTest, | |
1074 RestoreDefaultAppsRandomOrderChromeMoved) { | |
1075 InitLauncherController(); | |
1076 | |
1077 base::ListValue policy_value; | |
1078 InsertPrefValue(&policy_value, 0, extension1_->id()); | |
1079 InsertPrefValue(&policy_value, 1, extension2_->id()); | |
1080 InsertPrefValue(&policy_value, 2, extension3_->id()); | |
1081 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | |
1082 policy_value.DeepCopy()); | |
1083 profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex, | |
1084 1); | |
1085 // Model should only contain the browser shortcut and app list items. | |
1086 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1087 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | |
1088 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | |
1089 EXPECT_EQ("Chrome, AppList", GetPinnedAppStatus()); | |
1090 | |
1091 // Installing |extension2_| should add it to the shelf - behind the | |
1092 // chrome icon. | |
1093 ash::ShelfItem item; | |
1094 extension_service_->AddExtension(extension2_.get()); | |
1095 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1096 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | |
1097 EXPECT_EQ("Chrome, App2, AppList", GetPinnedAppStatus()); | |
1098 | |
1099 // Installing |extension1_| should add it to the launcher - behind the | |
1100 // chrome icon, but in first location. | |
1101 extension_service_->AddExtension(extension1_.get()); | |
1102 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | |
1103 EXPECT_EQ("App1, Chrome, App2, AppList", GetPinnedAppStatus()); | |
1104 | |
1105 // Installing |extension3_| should add it to the launcher - behind the | |
1106 // chrome icon, but in first location. | |
1107 extension_service_->AddExtension(extension3_.get()); | |
1108 EXPECT_EQ("App1, Chrome, App2, App3, AppList", GetPinnedAppStatus()); | |
1109 } | |
1110 | |
1111 // Check that syncing to a different state does the correct thing. | |
1112 TEST_F(LegacyShelfLayoutChromeLauncherControllerTest, | |
1113 RestoreDefaultAppsResyncOrder) { | |
1114 InitLauncherController(); | |
1115 base::ListValue policy_value; | |
1116 InsertPrefValue(&policy_value, 0, extension1_->id()); | |
1117 InsertPrefValue(&policy_value, 1, extension2_->id()); | |
1118 InsertPrefValue(&policy_value, 2, extension3_->id()); | |
1119 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | |
1120 policy_value.DeepCopy()); | |
1121 EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); | |
1122 extension_service_->AddExtension(extension2_.get()); | |
1123 extension_service_->AddExtension(extension1_.get()); | |
1124 extension_service_->AddExtension(extension3_.get()); | |
1125 EXPECT_EQ("Chrome, App1, App2, App3, AppList", GetPinnedAppStatus()); | |
1126 | |
1127 // Change the order with increasing chrome position and decreasing position. | |
1128 base::ListValue policy_value1; | |
1129 InsertPrefValue(&policy_value1, 0, extension3_->id()); | |
1130 InsertPrefValue(&policy_value1, 1, extension1_->id()); | |
1131 InsertPrefValue(&policy_value1, 2, extension2_->id()); | |
1132 profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex, | |
1133 2); | |
1134 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | |
1135 policy_value1.DeepCopy()); | |
1136 EXPECT_EQ("App3, App1, Chrome, App2, AppList", GetPinnedAppStatus()); | |
1137 base::ListValue policy_value2; | |
1138 InsertPrefValue(&policy_value2, 0, extension2_->id()); | |
1139 InsertPrefValue(&policy_value2, 1, extension3_->id()); | |
1140 InsertPrefValue(&policy_value2, 2, extension1_->id()); | |
1141 profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex, | |
1142 1); | |
1143 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | |
1144 policy_value2.DeepCopy()); | |
1145 EXPECT_EQ("App2, Chrome, App3, App1, AppList", GetPinnedAppStatus()); | |
1146 } | |
1147 | |
1148 TEST_F(ChromeLauncherControllerTest, DefaultApps) { | 957 TEST_F(ChromeLauncherControllerTest, DefaultApps) { |
1149 InitLauncherController(); | 958 InitLauncherController(); |
1150 // Model should only contain the browser shortcut and app list items. | 959 // Model should only contain the browser shortcut and app list items. |
1151 EXPECT_EQ(2, model_->item_count()); | 960 EXPECT_EQ(2, model_->item_count()); |
1152 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 961 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1153 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 962 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
1154 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 963 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
1155 | 964 |
1156 // Installing |extension3_| should add it to the launcher - behind the | 965 // Installing |extension3_| should add it to the launcher - behind the |
1157 // chrome icon. | 966 // chrome icon. |
1158 extension_service_->AddExtension(extension3_.get()); | 967 extension_service_->AddExtension(extension3_.get()); |
1159 EXPECT_EQ("AppList, Chrome, App3", GetPinnedAppStatus()); | 968 EXPECT_EQ("AppList, Chrome, App3", GetPinnedAppStatus()); |
1160 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 969 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1161 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 970 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
1162 } | 971 } |
1163 | 972 |
1164 // Check that changing from the alternate shelf layout to the old shelflayout | |
1165 // and back does keep the app launcher at location #0. | |
1166 TEST_F(ChromeLauncherControllerTest, | |
1167 SwitchingFromAlternateShelfLayoutToLegacyAndBack) { | |
1168 InitLauncherController(); | |
1169 | |
1170 // We simulate this problem by intentionally placing the app list item in | |
1171 // the middle of several apps which caused a crash (see crbug.com/329597). | |
1172 const char kAppShelfIdPlaceholder[] = "AppShelfIDPlaceholder--------"; | |
1173 | |
1174 base::ListValue policy_value; | |
1175 InsertPrefValue(&policy_value, 0, extension1_->id()); | |
1176 InsertPrefValue(&policy_value, 1, kAppShelfIdPlaceholder); | |
1177 InsertPrefValue(&policy_value, 2, extension2_->id()); | |
1178 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | |
1179 policy_value.DeepCopy()); | |
1180 EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); | |
1181 // Model should only contain the browser shortcut and app list items. | |
1182 extension_service_->AddExtension(extension1_.get()); | |
1183 extension_service_->AddExtension(extension2_.get()); | |
1184 EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus()); | |
1185 } | |
1186 | |
1187 // Check that the restauration of launcher items is happening in the same order | 973 // Check that the restauration of launcher items is happening in the same order |
1188 // as the user has pinned them (on another system) when they are synced reverse | 974 // as the user has pinned them (on another system) when they are synced reverse |
1189 // order. | 975 // order. |
1190 TEST_F(ChromeLauncherControllerTest, RestoreDefaultAppsReverseOrder) { | 976 TEST_F(ChromeLauncherControllerTest, RestoreDefaultAppsReverseOrder) { |
1191 InitLauncherController(); | 977 InitLauncherController(); |
1192 | 978 |
1193 base::ListValue policy_value; | 979 base::ListValue policy_value; |
1194 InsertPrefValue(&policy_value, 0, extension1_->id()); | 980 InsertPrefValue(&policy_value, 0, extension1_->id()); |
1195 InsertPrefValue(&policy_value, 1, extension2_->id()); | 981 InsertPrefValue(&policy_value, 1, extension2_->id()); |
1196 InsertPrefValue(&policy_value, 2, extension3_->id()); | 982 InsertPrefValue(&policy_value, 2, extension3_->id()); |
(...skipping 1590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2787 | 2573 |
2788 EXPECT_EQ(1, app_icon_loader->fetch_count()); | 2574 EXPECT_EQ(1, app_icon_loader->fetch_count()); |
2789 ASSERT_EQ(initial_size + 1, model_->items().size()); | 2575 ASSERT_EQ(initial_size + 1, model_->items().size()); |
2790 EXPECT_TRUE(launcher_controller_->IsAppPinned("1")); | 2576 EXPECT_TRUE(launcher_controller_->IsAppPinned("1")); |
2791 EXPECT_FALSE(launcher_controller_->IsAppPinned("0")); | 2577 EXPECT_FALSE(launcher_controller_->IsAppPinned("0")); |
2792 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[app_index].type); | 2578 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[app_index].type); |
2793 | 2579 |
2794 launcher_controller_->UnpinAppWithID("1"); | 2580 launcher_controller_->UnpinAppWithID("1"); |
2795 ASSERT_EQ(initial_size, model_->items().size()); | 2581 ASSERT_EQ(initial_size, model_->items().size()); |
2796 } | 2582 } |
OLD | NEW |