Index: chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc |
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc |
index 5033de334f560ccd0cf1297da68cc92b80230923..e104fc12cc7f448b9da5e68cee7806eb0c3fadcb 100644 |
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc |
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc |
@@ -616,6 +616,27 @@ |
DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerTest); |
}; |
+// The testing framework to test the legacy shelf layout. |
+class LegacyShelfLayoutChromeLauncherControllerTest |
+ : public ChromeLauncherControllerTest { |
+ protected: |
+ LegacyShelfLayoutChromeLauncherControllerTest() { |
+ } |
+ |
+ virtual ~LegacyShelfLayoutChromeLauncherControllerTest() { |
+ } |
+ |
+ // Overwrite the Setup function to use the legacy shelf layout option. |
+ virtual void SetUp() OVERRIDE { |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ ash::switches::kAshDisableAlternateShelfLayout); |
+ ChromeLauncherControllerTest::SetUp(); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(LegacyShelfLayoutChromeLauncherControllerTest); |
+}; |
+ |
#if defined(OS_CHROMEOS) |
// A browser window proxy which is able to associate an aura native window with |
// it. |
@@ -951,9 +972,179 @@ |
}; |
#endif // defined(OS_CHROMEOS) |
+TEST_F(LegacyShelfLayoutChromeLauncherControllerTest, DefaultApps) { |
+ InitLauncherController(); |
+ // Model should only contain the browser shortcut and app list items. |
+ EXPECT_EQ(2, model_->item_count()); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
+ |
+ // Installing |extension3_| should add it to the launcher - behind the |
+ // chrome icon. |
+ extension_service_->AddExtension(extension3_.get()); |
+ EXPECT_EQ("Chrome, App3, AppList", GetPinnedAppStatus()); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
+} |
+ |
+// Check that the restauration of launcher items is happening in the same order |
+// as the user has pinned them (on another system) when they are synced reverse |
+// order. |
+TEST_F(LegacyShelfLayoutChromeLauncherControllerTest, |
+ RestoreDefaultAppsReverseOrder) { |
+ InitLauncherController(); |
+ |
+ base::ListValue policy_value; |
+ InsertPrefValue(&policy_value, 0, extension1_->id()); |
+ InsertPrefValue(&policy_value, 1, extension2_->id()); |
+ InsertPrefValue(&policy_value, 2, extension3_->id()); |
+ profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
+ policy_value.DeepCopy()); |
+ EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); |
+ // Model should only contain the browser shortcut and app list items. |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
+ EXPECT_EQ("Chrome, AppList", GetPinnedAppStatus()); |
+ |
+ // Installing |extension3_| should add it to the shelf - behind the |
+ // chrome icon. |
+ ash::ShelfItem item; |
+ extension_service_->AddExtension(extension3_.get()); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
+ EXPECT_EQ("Chrome, App3, AppList", GetPinnedAppStatus()); |
+ |
+ // Installing |extension2_| should add it to the launcher - behind the |
+ // chrome icon, but in first location. |
+ extension_service_->AddExtension(extension2_.get()); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
+ EXPECT_EQ("Chrome, App2, App3, AppList", GetPinnedAppStatus()); |
+ |
+ // Installing |extension1_| should add it to the launcher - behind the |
+ // chrome icon, but in first location. |
+ extension_service_->AddExtension(extension1_.get()); |
+ EXPECT_EQ("Chrome, App1, App2, App3, AppList", GetPinnedAppStatus()); |
+} |
+ |
+// Check that the restauration of launcher items is happening in the same order |
+// as the user has pinned them (on another system) when they are synced random |
+// order. |
+TEST_F(LegacyShelfLayoutChromeLauncherControllerTest, |
+ RestoreDefaultAppsRandomOrder) { |
+ InitLauncherController(); |
+ |
+ base::ListValue policy_value; |
+ InsertPrefValue(&policy_value, 0, extension1_->id()); |
+ InsertPrefValue(&policy_value, 1, extension2_->id()); |
+ InsertPrefValue(&policy_value, 2, extension3_->id()); |
+ profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
+ policy_value.DeepCopy()); |
+ EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); |
+ // Model should only contain the browser shortcut and app list items. |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
+ EXPECT_EQ("Chrome, AppList", GetPinnedAppStatus()); |
+ |
+ // Installing |extension2_| should add it to the launcher - behind the |
+ // chrome icon. |
+ extension_service_->AddExtension(extension2_.get()); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
+ EXPECT_EQ("Chrome, App2, AppList", GetPinnedAppStatus()); |
+ |
+ // Installing |extension1_| should add it to the launcher - behind the |
+ // chrome icon, but in first location. |
+ extension_service_->AddExtension(extension1_.get()); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
+ EXPECT_EQ("Chrome, App1, App2, AppList", GetPinnedAppStatus()); |
+ |
+ // Installing |extension3_| should add it to the launcher - behind the |
+ // chrome icon, but in first location. |
+ extension_service_->AddExtension(extension3_.get()); |
+ EXPECT_EQ("Chrome, App1, App2, App3, AppList", GetPinnedAppStatus()); |
+} |
+ |
// Check that the restauration of launcher items is happening in the same order |
// as the user has pinned / moved them (on another system) when they are synced |
// random order - including the chrome icon. |
+TEST_F(LegacyShelfLayoutChromeLauncherControllerTest, |
+ RestoreDefaultAppsRandomOrderChromeMoved) { |
+ InitLauncherController(); |
+ |
+ base::ListValue policy_value; |
+ InsertPrefValue(&policy_value, 0, extension1_->id()); |
+ InsertPrefValue(&policy_value, 1, extension2_->id()); |
+ InsertPrefValue(&policy_value, 2, extension3_->id()); |
+ profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
+ policy_value.DeepCopy()); |
+ profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex, |
+ 1); |
+ // Model should only contain the browser shortcut and app list items. |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
+ EXPECT_EQ("Chrome, AppList", GetPinnedAppStatus()); |
+ |
+ // Installing |extension2_| should add it to the shelf - behind the |
+ // chrome icon. |
+ ash::ShelfItem item; |
+ extension_service_->AddExtension(extension2_.get()); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
+ EXPECT_EQ("Chrome, App2, AppList", GetPinnedAppStatus()); |
+ |
+ // Installing |extension1_| should add it to the launcher - behind the |
+ // chrome icon, but in first location. |
+ extension_service_->AddExtension(extension1_.get()); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
+ EXPECT_EQ("App1, Chrome, App2, AppList", GetPinnedAppStatus()); |
+ |
+ // Installing |extension3_| should add it to the launcher - behind the |
+ // chrome icon, but in first location. |
+ extension_service_->AddExtension(extension3_.get()); |
+ EXPECT_EQ("App1, Chrome, App2, App3, AppList", GetPinnedAppStatus()); |
+} |
+ |
+// Check that syncing to a different state does the correct thing. |
+TEST_F(LegacyShelfLayoutChromeLauncherControllerTest, |
+ RestoreDefaultAppsResyncOrder) { |
+ InitLauncherController(); |
+ base::ListValue policy_value; |
+ InsertPrefValue(&policy_value, 0, extension1_->id()); |
+ InsertPrefValue(&policy_value, 1, extension2_->id()); |
+ InsertPrefValue(&policy_value, 2, extension3_->id()); |
+ profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
+ policy_value.DeepCopy()); |
+ EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); |
+ extension_service_->AddExtension(extension2_.get()); |
+ extension_service_->AddExtension(extension1_.get()); |
+ extension_service_->AddExtension(extension3_.get()); |
+ EXPECT_EQ("Chrome, App1, App2, App3, AppList", GetPinnedAppStatus()); |
+ |
+ // Change the order with increasing chrome position and decreasing position. |
+ base::ListValue policy_value1; |
+ InsertPrefValue(&policy_value1, 0, extension3_->id()); |
+ InsertPrefValue(&policy_value1, 1, extension1_->id()); |
+ InsertPrefValue(&policy_value1, 2, extension2_->id()); |
+ profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex, |
+ 2); |
+ profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
+ policy_value1.DeepCopy()); |
+ EXPECT_EQ("App3, App1, Chrome, App2, AppList", GetPinnedAppStatus()); |
+ base::ListValue policy_value2; |
+ InsertPrefValue(&policy_value2, 0, extension2_->id()); |
+ InsertPrefValue(&policy_value2, 1, extension3_->id()); |
+ InsertPrefValue(&policy_value2, 2, extension1_->id()); |
+ profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex, |
+ 1); |
+ profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
+ policy_value2.DeepCopy()); |
+ EXPECT_EQ("App2, Chrome, App3, App1, AppList", GetPinnedAppStatus()); |
+} |
+ |
TEST_F(ChromeLauncherControllerTest, DefaultApps) { |
InitLauncherController(); |
// Model should only contain the browser shortcut and app list items. |
@@ -968,6 +1159,29 @@ |
EXPECT_EQ("AppList, Chrome, App3", GetPinnedAppStatus()); |
EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
+} |
+ |
+// Check that changing from the alternate shelf layout to the old shelflayout |
+// and back does keep the app launcher at location #0. |
+TEST_F(ChromeLauncherControllerTest, |
+ SwitchingFromAlternateShelfLayoutToLegacyAndBack) { |
+ InitLauncherController(); |
+ |
+ // We simulate this problem by intentionally placing the app list item in |
+ // the middle of several apps which caused a crash (see crbug.com/329597). |
+ const char kAppShelfIdPlaceholder[] = "AppShelfIDPlaceholder--------"; |
+ |
+ base::ListValue policy_value; |
+ InsertPrefValue(&policy_value, 0, extension1_->id()); |
+ InsertPrefValue(&policy_value, 1, kAppShelfIdPlaceholder); |
+ InsertPrefValue(&policy_value, 2, extension2_->id()); |
+ profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
+ policy_value.DeepCopy()); |
+ EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); |
+ // Model should only contain the browser shortcut and app list items. |
+ extension_service_->AddExtension(extension1_.get()); |
+ extension_service_->AddExtension(extension2_.get()); |
+ EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus()); |
} |
// Check that the restauration of launcher items is happening in the same order |