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

Unified Diff: chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser_unittest.cc

Issue 22887015: Remove PerBrowser launcher (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix nit Created 7 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser_unittest.cc
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser_unittest.cc
deleted file mode 100644
index f91430bbcd41b6d94bcc0e59d300ad9031a49780..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser_unittest.cc
+++ /dev/null
@@ -1,462 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.h"
-
-#include <algorithm>
-#include <string>
-#include <vector>
-
-#include "ash/launcher/launcher_model.h"
-#include "base/command_line.h"
-#include "base/compiler_specific.h"
-#include "base/files/file_path.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/run_loop.h"
-#include "base/values.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/test_extension_system.h"
-#include "chrome/browser/ui/ash/chrome_launcher_prefs.h"
-#include "chrome/browser/ui/ash/launcher/launcher_item_controller.h"
-#include "chrome/common/extensions/extension.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/test/base/testing_pref_service_syncable.h"
-#include "chrome/test/base/testing_profile.h"
-#include "content/public/test/test_browser_thread_bundle.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-#if defined(OS_CHROMEOS)
-#include "chrome/browser/chromeos/login/user_manager.h"
-#include "chrome/browser/chromeos/settings/cros_settings.h"
-#include "chrome/browser/chromeos/settings/device_settings_service.h"
-#endif
-
-using extensions::Extension;
-using extensions::Manifest;
-
-class ChromeLauncherControllerPerBrowserTest : public testing::Test {
- protected:
- ChromeLauncherControllerPerBrowserTest()
- : profile_(new TestingProfile()),
- extension_service_(NULL) {
- DictionaryValue manifest;
- manifest.SetString("name", "launcher controller test extension");
- manifest.SetString("version", "1");
- manifest.SetString("description", "for testing pinned apps");
-
- extensions::TestExtensionSystem* extension_system(
- static_cast<extensions::TestExtensionSystem*>(
- extensions::ExtensionSystem::Get(profile_.get())));
- extension_service_ = extension_system->CreateExtensionService(
- CommandLine::ForCurrentProcess(), base::FilePath(), false);
-
- std::string error;
- extension1_ = Extension::Create(base::FilePath(), Manifest::UNPACKED,
- manifest,
- Extension::NO_FLAGS,
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- &error);
- extension2_ = Extension::Create(base::FilePath(), Manifest::UNPACKED,
- manifest,
- Extension::NO_FLAGS,
- "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
- &error);
- // Fake gmail extension.
- extension3_ = Extension::Create(base::FilePath(), Manifest::UNPACKED,
- manifest,
- Extension::NO_FLAGS,
- extension_misc::kGmailAppId,
- &error);
- // Fake search extension.
- extension4_ = Extension::Create(base::FilePath(), Manifest::UNPACKED,
- manifest,
- Extension::NO_FLAGS,
- extension_misc::kGoogleSearchAppId,
- &error);
- }
-
- virtual void TearDown() OVERRIDE {
- profile_.reset();
- // Execute any pending deletion tasks.
- base::RunLoop().RunUntilIdle();
- }
-
- void InsertPrefValue(base::ListValue* pref_value,
- int index,
- const std::string& extension_id) {
- base::DictionaryValue* entry = new DictionaryValue();
- entry->SetString(ash::kPinnedAppsPrefAppIDPath, extension_id);
- pref_value->Insert(index, entry);
- }
-
- // Gets the currently configured app launchers from the controller.
- void GetAppLaunchers(ChromeLauncherControllerPerBrowser* controller,
- std::vector<std::string>* launchers) {
- launchers->clear();
- for (ash::LauncherItems::const_iterator iter(model_.items().begin());
- iter != model_.items().end(); ++iter) {
- ChromeLauncherControllerPerBrowser::IDToItemControllerMap::const_iterator
- entry(controller->id_to_item_controller_map_.find(iter->id));
- if (iter->type == ash::TYPE_APP_SHORTCUT &&
- entry != controller->id_to_item_controller_map_.end()) {
- launchers->push_back(entry->second->app_id());
- }
- }
- }
-
- std::string GetPinnedAppStatus(
- ChromeLauncherController* launcher_controller) {
- std::string result;
- for (int i = 0; i < model_.item_count(); i++) {
- switch (model_.items()[i].type) {
- case ash::TYPE_APP_SHORTCUT: {
- const std::string& app =
- launcher_controller->GetAppIDForLauncherID(
- model_.items()[i].id);
- if (app == extension1_->id()) {
- result += "App1, ";
- EXPECT_TRUE(launcher_controller->IsAppPinned(extension1_->id()));
- } else if (app == extension2_->id()) {
- result += "App2, ";
- EXPECT_TRUE(launcher_controller->IsAppPinned(extension2_->id()));
- } else if (app == extension3_->id()) {
- result += "App3, ";
- EXPECT_TRUE(launcher_controller->IsAppPinned(extension3_->id()));
- } else {
- result += "unknown";
- }
- break;
- }
- case ash::TYPE_BROWSER_SHORTCUT:
- result += "Chrome, ";
- break;
- case ash::TYPE_APP_LIST:
- result += "AppList";
- break;
- default:
- result += "Unknown";
- break;
- }
- }
- return result;
- }
-
- // Needed for extension service & friends to work.
- content::TestBrowserThreadBundle thread_bundle_;
-
-#if defined OS_CHROMEOS
- chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
- chromeos::ScopedTestCrosSettings test_cros_settings_;
- chromeos::ScopedTestUserManager test_user_manager_;
-#endif
-
- scoped_refptr<Extension> extension1_;
- scoped_refptr<Extension> extension2_;
- scoped_refptr<Extension> extension3_;
- scoped_refptr<Extension> extension4_;
- scoped_ptr<TestingProfile> profile_;
- ash::LauncherModel model_;
-
- ExtensionService* extension_service_;
-
- DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerPerBrowserTest);
-};
-
-TEST_F(ChromeLauncherControllerPerBrowserTest, DefaultApps) {
- ChromeLauncherControllerPerBrowser launcher_controller(profile_.get(),
- &model_);
- launcher_controller.Init();
-
- // 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(&launcher_controller));
- 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(ChromeLauncherControllerPerBrowserTest, RestoreDefaultAppsReverseOrder) {
- ChromeLauncherControllerPerBrowser launcher_controller(profile_.get(),
- &model_);
- launcher_controller.Init();
-
- 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(&launcher_controller));
-
- // Installing |extension3_| should add it to the launcher - behind the
- // chrome icon.
- ash::LauncherItem 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(&launcher_controller));
-
- // 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(&launcher_controller));
-
- // 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(&launcher_controller));
-}
-
-// 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(ChromeLauncherControllerPerBrowserTest, RestoreDefaultAppsRandomOrder) {
- ChromeLauncherControllerPerBrowser launcher_controller(profile_.get(),
- &model_);
- launcher_controller.Init();
-
- 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(&launcher_controller));
-
- // 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(&launcher_controller));
-
- // 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(&launcher_controller));
-
- // 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(&launcher_controller));
-}
-
-// 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(ChromeLauncherControllerPerBrowserTest,
- RestoreDefaultAppsRandomOrderChromeMoved) {
- ChromeLauncherControllerPerBrowser launcher_controller(profile_.get(),
- &model_);
- launcher_controller.Init();
- 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(&launcher_controller));
-
- // Installing |extension2_| should add it to the launcher - behind the
- // chrome icon.
- ash::LauncherItem 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(&launcher_controller));
-
- // 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(&launcher_controller));
-
- // 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(&launcher_controller));
-}
-
-TEST_F(ChromeLauncherControllerPerBrowserTest, Policy) {
- extension_service_->AddExtension(extension1_.get());
- extension_service_->AddExtension(extension3_.get());
-
- base::ListValue policy_value;
- InsertPrefValue(&policy_value, 0, extension1_->id());
- InsertPrefValue(&policy_value, 1, extension2_->id());
- profile_->GetTestingPrefService()->SetManagedPref(prefs::kPinnedLauncherApps,
- policy_value.DeepCopy());
-
- // Only |extension1_| should get pinned. |extension2_| is specified but not
- // installed, and |extension3_| is part of the default set, but that shouldn't
- // take effect when the policy override is in place.
- ChromeLauncherControllerPerBrowser launcher_controller(profile_.get(),
- &model_);
- launcher_controller.Init();
- EXPECT_EQ(3, model_.item_count());
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_.items()[1].type);
- EXPECT_TRUE(launcher_controller.IsAppPinned(extension1_->id()));
- EXPECT_FALSE(launcher_controller.IsAppPinned(extension2_->id()));
- EXPECT_FALSE(launcher_controller.IsAppPinned(extension3_->id()));
-
- EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT, model_.items()[0].type);
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_.items()[1].type);
- EXPECT_EQ(ash::TYPE_APP_LIST, model_.items()[2].type);
-
- // Installing |extension2_| should add it to the launcher.
- extension_service_->AddExtension(extension2_.get());
- EXPECT_EQ(4, model_.item_count());
- EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT, model_.items()[0].type);
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_.items()[1].type);
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_.items()[2].type);
- EXPECT_EQ(ash::TYPE_APP_LIST, model_.items()[3].type);
- EXPECT_TRUE(launcher_controller.IsAppPinned(extension1_->id()));
- EXPECT_TRUE(launcher_controller.IsAppPinned(extension2_->id()));
- EXPECT_FALSE(launcher_controller.IsAppPinned(extension3_->id()));
-
- // Removing |extension1_| from the policy should be reflected in the launcher.
- policy_value.Remove(0, NULL);
- profile_->GetTestingPrefService()->SetManagedPref(prefs::kPinnedLauncherApps,
- policy_value.DeepCopy());
- EXPECT_EQ(3, model_.item_count());
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_.items()[1].type);
- EXPECT_FALSE(launcher_controller.IsAppPinned(extension1_->id()));
- EXPECT_TRUE(launcher_controller.IsAppPinned(extension2_->id()));
- EXPECT_FALSE(launcher_controller.IsAppPinned(extension3_->id()));
-}
-
-TEST_F(ChromeLauncherControllerPerBrowserTest, UnpinWithUninstall) {
- extension_service_->AddExtension(extension3_.get());
- extension_service_->AddExtension(extension4_.get());
-
- ChromeLauncherControllerPerBrowser launcher_controller(profile_.get(),
- &model_);
- launcher_controller.Init();
-
- EXPECT_TRUE(launcher_controller.IsAppPinned(extension3_->id()));
- EXPECT_TRUE(launcher_controller.IsAppPinned(extension4_->id()));
-
- extension_service_->UnloadExtension(extension3_->id(),
- extension_misc::UNLOAD_REASON_UNINSTALL);
-
- EXPECT_FALSE(launcher_controller.IsAppPinned(extension3_->id()));
- EXPECT_TRUE(launcher_controller.IsAppPinned(extension4_->id()));
-}
-
-TEST_F(ChromeLauncherControllerPerBrowserTest, PrefUpdates) {
- extension_service_->AddExtension(extension2_.get());
- extension_service_->AddExtension(extension3_.get());
- extension_service_->AddExtension(extension4_.get());
- ChromeLauncherControllerPerBrowser controller(profile_.get(), &model_);
- controller.Init();
-
- std::vector<std::string> expected_launchers;
- std::vector<std::string> actual_launchers;
- base::ListValue pref_value;
- profile_->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps,
- pref_value.DeepCopy());
- GetAppLaunchers(&controller, &actual_launchers);
- EXPECT_EQ(expected_launchers, actual_launchers);
-
- // Unavailable extensions don't create launcher items.
- InsertPrefValue(&pref_value, 0, extension1_->id());
- InsertPrefValue(&pref_value, 1, extension2_->id());
- InsertPrefValue(&pref_value, 2, extension4_->id());
- profile_->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps,
- pref_value.DeepCopy());
- expected_launchers.push_back(extension2_->id());
- expected_launchers.push_back(extension4_->id());
- GetAppLaunchers(&controller, &actual_launchers);
- EXPECT_EQ(expected_launchers, actual_launchers);
-
- // Redundant pref entries show up only once.
- InsertPrefValue(&pref_value, 2, extension3_->id());
- InsertPrefValue(&pref_value, 2, extension3_->id());
- InsertPrefValue(&pref_value, 5, extension3_->id());
- profile_->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps,
- pref_value.DeepCopy());
- expected_launchers.insert(expected_launchers.begin() + 1, extension3_->id());
- GetAppLaunchers(&controller, &actual_launchers);
- EXPECT_EQ(expected_launchers, actual_launchers);
-
- // Order changes are reflected correctly.
- pref_value.Clear();
- InsertPrefValue(&pref_value, 0, extension4_->id());
- InsertPrefValue(&pref_value, 1, extension3_->id());
- InsertPrefValue(&pref_value, 2, extension2_->id());
- profile_->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps,
- pref_value.DeepCopy());
- std::reverse(expected_launchers.begin(), expected_launchers.end());
- GetAppLaunchers(&controller, &actual_launchers);
- EXPECT_EQ(expected_launchers, actual_launchers);
-
- // Clearing works.
- pref_value.Clear();
- profile_->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps,
- pref_value.DeepCopy());
- expected_launchers.clear();
- GetAppLaunchers(&controller, &actual_launchers);
- EXPECT_EQ(expected_launchers, actual_launchers);
-}
-
-TEST_F(ChromeLauncherControllerPerBrowserTest, PendingInsertionOrder) {
- extension_service_->AddExtension(extension1_.get());
- extension_service_->AddExtension(extension3_.get());
- ChromeLauncherControllerPerBrowser controller(profile_.get(), &model_);
- controller.Init();
-
- base::ListValue pref_value;
- InsertPrefValue(&pref_value, 0, extension1_->id());
- InsertPrefValue(&pref_value, 1, extension2_->id());
- InsertPrefValue(&pref_value, 2, extension3_->id());
- profile_->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps,
- pref_value.DeepCopy());
-
- std::vector<std::string> expected_launchers;
- expected_launchers.push_back(extension1_->id());
- expected_launchers.push_back(extension3_->id());
- std::vector<std::string> actual_launchers;
-
- GetAppLaunchers(&controller, &actual_launchers);
- EXPECT_EQ(expected_launchers, actual_launchers);
-
- // Install |extension2| and verify it shows up between the other two.
- extension_service_->AddExtension(extension2_.get());
- expected_launchers.insert(expected_launchers.begin() + 1, extension2_->id());
- GetAppLaunchers(&controller, &actual_launchers);
- EXPECT_EQ(expected_launchers, actual_launchers);
-}

Powered by Google App Engine
This is Rietveld 408576698