| Index: chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app_unittest.cc
|
| diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app_unittest.cc
|
| deleted file mode 100644
|
| index ea3861f90553a44d80aa1382140e4b393e3a69be..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app_unittest.cc
|
| +++ /dev/null
|
| @@ -1,1387 +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_app.h"
|
| -
|
| -#include <algorithm>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "ash/ash_switches.h"
|
| -#include "ash/launcher/launcher_model.h"
|
| -#include "ash/launcher/launcher_model_observer.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/message_loop/message_loop.h"
|
| -#include "base/strings/utf_string_conversions.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/browser/ui/ash/launcher/shell_window_launcher_item_controller.h"
|
| -#include "chrome/browser/ui/browser.h"
|
| -#include "chrome/browser/ui/browser_commands.h"
|
| -#include "chrome/browser/ui/browser_finder.h"
|
| -#include "chrome/browser/ui/browser_list.h"
|
| -#include "chrome/browser/ui/host_desktop.h"
|
| -#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| -#include "chrome/common/extensions/extension.h"
|
| -#include "chrome/common/extensions/extension_constants.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "chrome/test/base/browser_with_test_window_test.h"
|
| -#include "chrome/test/base/testing_pref_service_syncable.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "content/public/test/test_browser_thread.h"
|
| -#include "extensions/common/manifest_constants.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "ui/base/models/menu_model.h"
|
| -
|
| -using extensions::Extension;
|
| -using extensions::Manifest;
|
| -
|
| -namespace {
|
| -const char* offline_gmail_url = "https://mail.google.com/mail/mu/u";
|
| -const char* gmail_url = "https://mail.google.com/mail/u";
|
| -}
|
| -
|
| -namespace {
|
| -
|
| -// LauncherModelObserver implementation that tracks what messages are invoked.
|
| -class TestLauncherModelObserver : public ash::LauncherModelObserver {
|
| - public:
|
| - TestLauncherModelObserver()
|
| - : added_(0),
|
| - removed_(0),
|
| - changed_(0) {
|
| - }
|
| -
|
| - virtual ~TestLauncherModelObserver() {
|
| - }
|
| -
|
| - // LauncherModelObserver
|
| - virtual void LauncherItemAdded(int index) OVERRIDE {
|
| - ++added_;
|
| - last_index_ = index;
|
| - }
|
| -
|
| - virtual void LauncherItemRemoved(int index, ash::LauncherID id) OVERRIDE {
|
| - ++removed_;
|
| - last_index_ = index;
|
| - }
|
| -
|
| - virtual void LauncherItemChanged(int index,
|
| - const ash::LauncherItem& old_item) OVERRIDE {
|
| - ++changed_;
|
| - last_index_ = index;
|
| - }
|
| -
|
| - virtual void LauncherItemMoved(int start_index, int target_index) OVERRIDE {
|
| - last_index_ = target_index;
|
| - }
|
| -
|
| - virtual void LauncherStatusChanged() OVERRIDE {
|
| - }
|
| -
|
| - void clear_counts() {
|
| - added_ = 0;
|
| - removed_ = 0;
|
| - changed_ = 0;
|
| - last_index_ = 0;
|
| - }
|
| -
|
| - int added() const { return added_; }
|
| - int removed() const { return removed_; }
|
| - int changed() const { return changed_; }
|
| - int last_index() const { return last_index_; }
|
| -
|
| - private:
|
| - int added_;
|
| - int removed_;
|
| - int changed_;
|
| - int last_index_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TestLauncherModelObserver);
|
| -};
|
| -
|
| -// Test implementation of AppIconLoader.
|
| -class TestAppIconLoaderImpl : public extensions::AppIconLoader {
|
| - public:
|
| - TestAppIconLoaderImpl() : fetch_count_(0) {
|
| - }
|
| -
|
| - virtual ~TestAppIconLoaderImpl() {
|
| - }
|
| -
|
| - // AppIconLoader implementation:
|
| - virtual void FetchImage(const std::string& id) OVERRIDE {
|
| - ++fetch_count_;
|
| - }
|
| -
|
| - virtual void ClearImage(const std::string& id) OVERRIDE {
|
| - }
|
| -
|
| - virtual void UpdateImage(const std::string& id) OVERRIDE {
|
| - }
|
| -
|
| - int fetch_count() const { return fetch_count_; }
|
| -
|
| - private:
|
| - int fetch_count_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TestAppIconLoaderImpl);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -class ChromeLauncherControllerPerAppTest : public BrowserWithTestWindowTest {
|
| - protected:
|
| - ChromeLauncherControllerPerAppTest()
|
| - : extension_service_(NULL) {
|
| - SetHostDesktopType(chrome::HOST_DESKTOP_TYPE_ASH);
|
| - }
|
| -
|
| - virtual ~ChromeLauncherControllerPerAppTest() {
|
| - }
|
| -
|
| - virtual void SetUp() OVERRIDE {
|
| - BrowserWithTestWindowTest::SetUp();
|
| -
|
| - model_.reset(new ash::LauncherModel);
|
| - model_observer_.reset(new TestLauncherModelObserver);
|
| - model_->AddObserver(model_observer_.get());
|
| -
|
| - DictionaryValue manifest;
|
| - manifest.SetString(extensions::manifest_keys::kName,
|
| - "launcher controller test extension");
|
| - manifest.SetString(extensions::manifest_keys::kVersion, "1");
|
| - manifest.SetString(extensions::manifest_keys::kDescription,
|
| - "for testing pinned apps");
|
| -
|
| - extensions::TestExtensionSystem* extension_system(
|
| - static_cast<extensions::TestExtensionSystem*>(
|
| - extensions::ExtensionSystem::Get(profile())));
|
| - 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.
|
| - DictionaryValue manifest_gmail;
|
| - manifest_gmail.SetString(extensions::manifest_keys::kName,
|
| - "Gmail launcher controller test extension");
|
| - manifest_gmail.SetString(extensions::manifest_keys::kVersion, "1");
|
| - manifest_gmail.SetString(extensions::manifest_keys::kDescription,
|
| - "for testing pinned Gmail");
|
| - manifest_gmail.SetString(extensions::manifest_keys::kLaunchWebURL,
|
| - "https://mail.google.com/mail/ca");
|
| - ListValue* list = new ListValue();
|
| - list->Append(Value::CreateStringValue("*://mail.google.com/mail/ca"));
|
| - manifest_gmail.Set(extensions::manifest_keys::kWebURLs, list);
|
| -
|
| - extension3_ = Extension::Create(base::FilePath(), Manifest::UNPACKED,
|
| - manifest_gmail,
|
| - 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 {
|
| - model_->RemoveObserver(model_observer_.get());
|
| - model_observer_.reset();
|
| - launcher_controller_.reset();
|
| - model_.reset();
|
| -
|
| - BrowserWithTestWindowTest::TearDown();
|
| - }
|
| -
|
| - void InitLauncherController() {
|
| - launcher_controller_.reset(
|
| - new ChromeLauncherControllerPerApp(profile(), model_.get()));
|
| - launcher_controller_->Init();
|
| - }
|
| -
|
| - void InitLauncherControllerWithBrowser() {
|
| - chrome::NewTab(browser());
|
| - BrowserList::SetLastActive(browser());
|
| - InitLauncherController();
|
| - }
|
| -
|
| - void SetAppIconLoader(extensions::AppIconLoader* loader) {
|
| - launcher_controller_->SetAppIconLoaderForTest(loader);
|
| - }
|
| -
|
| - 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(ChromeLauncherControllerPerApp* controller,
|
| - std::vector<std::string>* launchers) {
|
| - launchers->clear();
|
| - for (ash::LauncherItems::const_iterator iter(model_->items().begin());
|
| - iter != model_->items().end(); ++iter) {
|
| - ChromeLauncherControllerPerApp::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() {
|
| - 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 if (app == extension4_->id()) {
|
| - result += "App4, ";
|
| - EXPECT_TRUE(launcher_controller_->IsAppPinned(extension4_->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.
|
| - scoped_refptr<Extension> extension1_;
|
| - scoped_refptr<Extension> extension2_;
|
| - scoped_refptr<Extension> extension3_;
|
| - scoped_refptr<Extension> extension4_;
|
| - scoped_ptr<ChromeLauncherControllerPerApp> launcher_controller_;
|
| - scoped_ptr<TestLauncherModelObserver> model_observer_;
|
| - scoped_ptr<ash::LauncherModel> model_;
|
| -
|
| - ExtensionService* extension_service_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerPerAppTest);
|
| -};
|
| -
|
| -// The testing framework to test the alternate shelf layout.
|
| -class AlternateLayoutChromeLauncherControllerPerAppTest
|
| - : public ChromeLauncherControllerPerAppTest {
|
| - protected:
|
| - AlternateLayoutChromeLauncherControllerPerAppTest() {
|
| - }
|
| -
|
| - virtual ~AlternateLayoutChromeLauncherControllerPerAppTest() {
|
| - }
|
| -
|
| - // Overwrite the Setup function to add the Alternate Shelf layout option.
|
| - virtual void SetUp() OVERRIDE {
|
| - CommandLine::ForCurrentProcess()->AppendSwitch(
|
| - ash::switches::kAshUseAlternateShelfLayout);
|
| - ChromeLauncherControllerPerAppTest::SetUp();
|
| - }
|
| -
|
| - // Set the index at which the chrome icon should be.
|
| - void SetShelfChromeIconIndex(int index) {
|
| - profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex,
|
| - index + 1);
|
| - }
|
| -
|
| - private:
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(AlternateLayoutChromeLauncherControllerPerAppTest);
|
| -};
|
| -
|
| -
|
| -TEST_F(ChromeLauncherControllerPerAppTest, 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(ChromeLauncherControllerPerAppTest, 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 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());
|
| -
|
| - // 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(ChromeLauncherControllerPerAppTest, 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(ChromeLauncherControllerPerAppTest,
|
| - 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 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());
|
| -
|
| - // 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(ChromeLauncherControllerPerAppTest, 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(AlternateLayoutChromeLauncherControllerPerAppTest, 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("AppList, Chrome, App3, ", 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(AlternateLayoutChromeLauncherControllerPerAppTest,
|
| - 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());
|
| - SetShelfChromeIconIndex(0);
|
| - // 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("AppList, Chrome, ", GetPinnedAppStatus());
|
| -
|
| - // 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("AppList, Chrome, App3, ", 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("AppList, Chrome, App2, App3, ", GetPinnedAppStatus());
|
| -
|
| - // Installing |extension1_| should add it to the launcher - behind the
|
| - // chrome icon, but in first location.
|
| - extension_service_->AddExtension(extension1_.get());
|
| - EXPECT_EQ("AppList, Chrome, App1, App2, App3, ", 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(AlternateLayoutChromeLauncherControllerPerAppTest,
|
| - 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());
|
| - SetShelfChromeIconIndex(0);
|
| - // 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("AppList, Chrome, ", 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("AppList, Chrome, App2, ", 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("AppList, Chrome, App1, App2, ", GetPinnedAppStatus());
|
| -
|
| - // Installing |extension3_| should add it to the launcher - behind the
|
| - // chrome icon, but in first location.
|
| - extension_service_->AddExtension(extension3_.get());
|
| - EXPECT_EQ("AppList, Chrome, App1, App2, App3, ", 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 - using the alternate shelf layout.
|
| -TEST_F(AlternateLayoutChromeLauncherControllerPerAppTest,
|
| - 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());
|
| - SetShelfChromeIconIndex(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("AppList, Chrome, ", GetPinnedAppStatus());
|
| -
|
| - // 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("AppList, Chrome, App2, ", 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("AppList, App1, Chrome, App2, ", GetPinnedAppStatus());
|
| -
|
| - // Installing |extension3_| should add it to the launcher - behind the
|
| - // chrome icon, but in first location.
|
| - extension_service_->AddExtension(extension3_.get());
|
| - EXPECT_EQ("AppList, App1, Chrome, App2, App3, ", GetPinnedAppStatus());
|
| -}
|
| -
|
| -// Check that syncing to a different state does the correct thing with the
|
| -// alternate shelf layout.
|
| -TEST_F(AlternateLayoutChromeLauncherControllerPerAppTest,
|
| - 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());
|
| - // The alternate shelf layout has always one static item at the beginning.
|
| - SetShelfChromeIconIndex(0);
|
| - extension_service_->AddExtension(extension2_.get());
|
| - EXPECT_EQ("AppList, Chrome, App2, ", GetPinnedAppStatus());
|
| - extension_service_->AddExtension(extension1_.get());
|
| - EXPECT_EQ("AppList, Chrome, App1, App2, ", GetPinnedAppStatus());
|
| - extension_service_->AddExtension(extension3_.get());
|
| - EXPECT_EQ("AppList, Chrome, App1, App2, App3, ", 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());
|
| - SetShelfChromeIconIndex(3);
|
| - profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps,
|
| - policy_value1.DeepCopy());
|
| - EXPECT_EQ("AppList, App3, App1, App2, Chrome, ", GetPinnedAppStatus());
|
| - base::ListValue policy_value2;
|
| - InsertPrefValue(&policy_value2, 0, extension2_->id());
|
| - InsertPrefValue(&policy_value2, 1, extension3_->id());
|
| - InsertPrefValue(&policy_value2, 2, extension1_->id());
|
| - SetShelfChromeIconIndex(2);
|
| - profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps,
|
| - policy_value2.DeepCopy());
|
| - EXPECT_EQ("AppList, App2, App3, Chrome, App1, ", GetPinnedAppStatus());
|
| -
|
| - // Check that the chrome icon can also be at the first possible location.
|
| - SetShelfChromeIconIndex(0);
|
| - base::ListValue policy_value3;
|
| - InsertPrefValue(&policy_value3, 0, extension3_->id());
|
| - InsertPrefValue(&policy_value3, 1, extension2_->id());
|
| - InsertPrefValue(&policy_value3, 2, extension1_->id());
|
| - profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps,
|
| - policy_value3.DeepCopy());
|
| - EXPECT_EQ("AppList, Chrome, App3, App2, App1, ", GetPinnedAppStatus());
|
| -
|
| - // Check that unloading of extensions works as expected.
|
| - extension_service_->UnloadExtension(extension1_->id(),
|
| - extension_misc::UNLOAD_REASON_UNINSTALL);
|
| - EXPECT_EQ("AppList, Chrome, App3, App2, ", GetPinnedAppStatus());
|
| -
|
| - extension_service_->UnloadExtension(extension2_->id(),
|
| - extension_misc::UNLOAD_REASON_UNINSTALL);
|
| - EXPECT_EQ("AppList, Chrome, App3, ", GetPinnedAppStatus());
|
| -
|
| - // Check that an update of an extension does not crash the system.
|
| - extension_service_->UnloadExtension(extension3_->id(),
|
| - extension_misc::UNLOAD_REASON_UPDATE);
|
| - EXPECT_EQ("AppList, Chrome, App3, ", GetPinnedAppStatus());
|
| -}
|
| -
|
| -// Check that simple locking of an application will 'create' a launcher item.
|
| -TEST_F(ChromeLauncherControllerPerAppTest, CheckLockApps) {
|
| - 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_->IsWindowedAppInLauncher(extension1_->id()));
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id()));
|
| - EXPECT_FALSE(
|
| - launcher_controller_->IsWindowedAppInLauncher(extension2_->id()));
|
| -
|
| - launcher_controller_->LockV1AppWithID(extension1_->id());
|
| -
|
| - EXPECT_EQ(3, model_->item_count());
|
| - EXPECT_EQ(ash::TYPE_WINDOWED_APP, model_->items()[1].type);
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id()));
|
| - EXPECT_TRUE(launcher_controller_->IsWindowedAppInLauncher(extension1_->id()));
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id()));
|
| - EXPECT_FALSE(
|
| - launcher_controller_->IsWindowedAppInLauncher(extension2_->id()));
|
| -
|
| - launcher_controller_->UnlockV1AppWithID(extension1_->id());
|
| -
|
| - EXPECT_EQ(2, model_->item_count());
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id()));
|
| - EXPECT_FALSE(
|
| - launcher_controller_->IsWindowedAppInLauncher(extension1_->id()));
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id()));
|
| - EXPECT_FALSE(
|
| - launcher_controller_->IsWindowedAppInLauncher(extension2_->id()));
|
| -}
|
| -
|
| -// Check that multiple locks of an application will be properly handled.
|
| -TEST_F(ChromeLauncherControllerPerAppTest, CheckMukltiLockApps) {
|
| - 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_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - for (int i = 0; i < 2; i++) {
|
| - launcher_controller_->LockV1AppWithID(extension1_->id());
|
| -
|
| - EXPECT_EQ(3, model_->item_count());
|
| - EXPECT_EQ(ash::TYPE_WINDOWED_APP, model_->items()[1].type);
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id()));
|
| - EXPECT_TRUE(launcher_controller_->IsWindowedAppInLauncher(
|
| - extension1_->id()));
|
| - }
|
| -
|
| - launcher_controller_->UnlockV1AppWithID(extension1_->id());
|
| -
|
| - EXPECT_EQ(3, model_->item_count());
|
| - EXPECT_EQ(ash::TYPE_WINDOWED_APP, model_->items()[1].type);
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id()));
|
| - EXPECT_TRUE(launcher_controller_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - launcher_controller_->UnlockV1AppWithID(extension1_->id());
|
| -
|
| - EXPECT_EQ(2, model_->item_count());
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id()));
|
| - EXPECT_FALSE(
|
| - launcher_controller_->IsWindowedAppInLauncher(extension1_->id()));
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id()));
|
| - EXPECT_FALSE(
|
| - launcher_controller_->IsWindowedAppInLauncher(extension1_->id()));
|
| -}
|
| -
|
| -// Check that already pinned items are not effected by locks.
|
| -TEST_F(ChromeLauncherControllerPerAppTest, CheckAlreadyPinnedLockApps) {
|
| - 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_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id()));
|
| - launcher_controller_->PinAppWithID(extension1_->id());
|
| - EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id()));
|
| -
|
| - 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_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - launcher_controller_->LockV1AppWithID(extension1_->id());
|
| -
|
| - 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_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - launcher_controller_->UnlockV1AppWithID(extension1_->id());
|
| -
|
| - 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_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - launcher_controller_->UnpinAppsWithID(extension1_->id());
|
| -
|
| - EXPECT_EQ(2, model_->item_count());
|
| -}
|
| -
|
| -// Check that already pinned items which get locked stay after unpinning.
|
| -TEST_F(ChromeLauncherControllerPerAppTest, CheckPinnedAppsStayAfterUnlock) {
|
| - 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_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - launcher_controller_->PinAppWithID(extension1_->id());
|
| -
|
| - 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_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - launcher_controller_->LockV1AppWithID(extension1_->id());
|
| -
|
| - 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_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - launcher_controller_->UnpinAppsWithID(extension1_->id());
|
| -
|
| - EXPECT_EQ(3, model_->item_count());
|
| - EXPECT_EQ(ash::TYPE_WINDOWED_APP, model_->items()[1].type);
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id()));
|
| - EXPECT_TRUE(launcher_controller_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - launcher_controller_->UnlockV1AppWithID(extension1_->id());
|
| -
|
| - EXPECT_EQ(2, model_->item_count());
|
| -}
|
| -
|
| -// Check that lock -> pin -> unlock -> unpin does properly transition.
|
| -TEST_F(ChromeLauncherControllerPerAppTest, CheckLockPinUnlockUnpin) {
|
| - 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_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - launcher_controller_->LockV1AppWithID(extension1_->id());
|
| -
|
| - EXPECT_EQ(3, model_->item_count());
|
| - EXPECT_EQ(ash::TYPE_WINDOWED_APP, model_->items()[1].type);
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id()));
|
| - EXPECT_TRUE(launcher_controller_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - launcher_controller_->PinAppWithID(extension1_->id());
|
| -
|
| - 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_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - launcher_controller_->UnlockV1AppWithID(extension1_->id());
|
| -
|
| - 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_->IsWindowedAppInLauncher(extension1_->id()));
|
| -
|
| - launcher_controller_->UnpinAppsWithID(extension1_->id());
|
| -
|
| - EXPECT_EQ(2, model_->item_count());
|
| -}
|
| -
|
| -TEST_F(ChromeLauncherControllerPerAppTest, 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.
|
| - InitLauncherController();
|
| - 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()));
|
| -
|
| - // Installing |extension2_| should add it to the launcher.
|
| - extension_service_->AddExtension(extension2_.get());
|
| - EXPECT_EQ(4, model_->item_count());
|
| - EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[1].type);
|
| - EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[2].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(ChromeLauncherControllerPerAppTest, UnpinWithUninstall) {
|
| - extension_service_->AddExtension(extension3_.get());
|
| - extension_service_->AddExtension(extension4_.get());
|
| -
|
| - InitLauncherController();
|
| -
|
| - 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(ChromeLauncherControllerPerAppTest, PrefUpdates) {
|
| - extension_service_->AddExtension(extension2_.get());
|
| - extension_service_->AddExtension(extension3_.get());
|
| - extension_service_->AddExtension(extension4_.get());
|
| -
|
| - InitLauncherController();
|
| -
|
| - 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(launcher_controller_.get(), &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(launcher_controller_.get(), &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(launcher_controller_.get(), &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(launcher_controller_.get(), &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(launcher_controller_.get(), &actual_launchers);
|
| - EXPECT_EQ(expected_launchers, actual_launchers);
|
| -}
|
| -
|
| -TEST_F(ChromeLauncherControllerPerAppTest, PendingInsertionOrder) {
|
| - extension_service_->AddExtension(extension1_.get());
|
| - extension_service_->AddExtension(extension3_.get());
|
| -
|
| - InitLauncherController();
|
| -
|
| - 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(launcher_controller_.get(), &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(launcher_controller_.get(), &actual_launchers);
|
| - EXPECT_EQ(expected_launchers, actual_launchers);
|
| -}
|
| -
|
| -// Checks the created menus and menu lists for correctness. It uses the given
|
| -// |controller| to create the objects for the given |item| and checks the
|
| -// found item count against the |expected_items|. The |title| list contains the
|
| -// menu titles in the order of their appearance in the menu (not including the
|
| -// application name).
|
| -bool CheckMenuCreation(ChromeLauncherControllerPerApp* controller,
|
| - const ash::LauncherItem& item,
|
| - size_t expected_items,
|
| - string16 title[],
|
| - bool is_browser) {
|
| - ChromeLauncherAppMenuItems items = controller->GetApplicationList(item, 0);
|
| - // A new behavior has been added: Only show menus if there is at least one
|
| - // item available.
|
| - if (expected_items < 1 && is_browser) {
|
| - EXPECT_EQ(0u, items.size());
|
| - return items.size() == 0;
|
| - }
|
| - // There should be one item in there: The title.
|
| - EXPECT_EQ(expected_items + 1, items.size());
|
| - EXPECT_FALSE(items[0]->IsEnabled());
|
| - for (size_t i = 0; i < expected_items; i++) {
|
| - EXPECT_EQ(title[i], items[1 + i]->title());
|
| - // Check that the first real item has a leading separator.
|
| - if (i == 1)
|
| - EXPECT_TRUE(items[i]->HasLeadingSeparator());
|
| - else
|
| - EXPECT_FALSE(items[i]->HasLeadingSeparator());
|
| - }
|
| -
|
| - scoped_ptr<ash::LauncherMenuModel> menu(
|
| - controller->CreateApplicationMenu(item, 0));
|
| - // The first element in the menu is a spacing separator. On some systems
|
| - // (e.g. Windows) such things do not exist. As such we check the existence
|
| - // and adjust dynamically.
|
| - int first_item = menu->GetTypeAt(0) == ui::MenuModel::TYPE_SEPARATOR ? 1 : 0;
|
| - int expected_menu_items = first_item +
|
| - (expected_items ? (expected_items + 3) : 2);
|
| - EXPECT_EQ(expected_menu_items, menu->GetItemCount());
|
| - EXPECT_FALSE(menu->IsEnabledAt(first_item));
|
| - if (expected_items) {
|
| - EXPECT_EQ(ui::MenuModel::TYPE_SEPARATOR,
|
| - menu->GetTypeAt(first_item + 1));
|
| - }
|
| - return items.size() == expected_items + 1;
|
| -}
|
| -
|
| -// Check that browsers get reflected correctly in the launcher menu.
|
| -TEST_F(ChromeLauncherControllerPerAppTest, BrowserMenuGeneration) {
|
| - EXPECT_EQ(1U, chrome::GetTotalBrowserCount());
|
| - chrome::NewTab(browser());
|
| -
|
| - InitLauncherController();
|
| -
|
| - // Check that the browser list is empty at this time.
|
| - ash::LauncherItem item_browser;
|
| - item_browser.type = ash::TYPE_BROWSER_SHORTCUT;
|
| - item_browser.id =
|
| - launcher_controller_->GetLauncherIDForAppID(extension_misc::kChromeAppId);
|
| - EXPECT_TRUE(CheckMenuCreation(
|
| - launcher_controller_.get(), item_browser, 0, NULL, true));
|
| -
|
| - // Now make the created browser() visible by adding it to the active browser
|
| - // list.
|
| - BrowserList::SetLastActive(browser());
|
| - string16 title1 = ASCIIToUTF16("Test1");
|
| - NavigateAndCommitActiveTabWithTitle(browser(), GURL("http://test1"), title1);
|
| - string16 one_menu_item[] = {title1};
|
| -
|
| - EXPECT_TRUE(CheckMenuCreation(
|
| - launcher_controller_.get(), item_browser, 1, one_menu_item, true));
|
| -
|
| - // Create one more browser/window and check that one more was added.
|
| - Browser::CreateParams ash_params(profile(), chrome::HOST_DESKTOP_TYPE_ASH);
|
| - scoped_ptr<Browser> browser2(
|
| - chrome::CreateBrowserWithTestWindowForParams(&ash_params));
|
| - chrome::NewTab(browser2.get());
|
| - BrowserList::SetLastActive(browser2.get());
|
| - string16 title2 = ASCIIToUTF16("Test2");
|
| - NavigateAndCommitActiveTabWithTitle(browser2.get(), GURL("http://test2"),
|
| - title2);
|
| -
|
| - // Check that the list contains now two entries - make furthermore sure that
|
| - // the active item is the first entry.
|
| - string16 two_menu_items[] = {title1, title2};
|
| - EXPECT_TRUE(CheckMenuCreation(
|
| - launcher_controller_.get(), item_browser, 2, two_menu_items, true));
|
| -
|
| - // Apparently we have to close all tabs we have.
|
| - chrome::CloseTab(browser2.get());
|
| -}
|
| -
|
| -// Check that V1 apps are correctly reflected in the launcher menu using the
|
| -// refocus logic.
|
| -// Note that the extension matching logic is tested by the extension system
|
| -// and does not need a separate test here.
|
| -TEST_F(ChromeLauncherControllerPerAppTest, V1AppMenuGeneration) {
|
| - EXPECT_EQ(1U, chrome::GetTotalBrowserCount());
|
| - EXPECT_EQ(0, browser()->tab_strip_model()->count());
|
| -
|
| - InitLauncherControllerWithBrowser();
|
| -
|
| - // Model should only contain the browser shortcut and app list items.
|
| - EXPECT_EQ(2, model_->item_count());
|
| - EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id()));
|
| -
|
| - // Installing |extension3_| adds it to the launcher.
|
| - ash::LauncherID gmail_id = model_->next_id();
|
| - extension_service_->AddExtension(extension3_.get());
|
| - EXPECT_EQ(3, model_->item_count());
|
| - int gmail_index = model_->ItemIndexByID(gmail_id);
|
| - EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[gmail_index].type);
|
| - EXPECT_TRUE(launcher_controller_->IsAppPinned(extension3_->id()));
|
| - launcher_controller_->SetRefocusURLPatternForTest(gmail_id, GURL(gmail_url));
|
| -
|
| - // Check the menu content.
|
| - ash::LauncherItem item_browser;
|
| - item_browser.type = ash::TYPE_BROWSER_SHORTCUT;
|
| - item_browser.id =
|
| - launcher_controller_->GetLauncherIDForAppID(extension_misc::kChromeAppId);
|
| -
|
| - ash::LauncherItem item_gmail;
|
| - item_gmail.type = ash::TYPE_APP_SHORTCUT;
|
| - item_gmail.id = gmail_id;
|
| - EXPECT_TRUE(CheckMenuCreation(
|
| - launcher_controller_.get(), item_gmail, 0, NULL, false));
|
| -
|
| - // Set the gmail URL to a new tab.
|
| - string16 title1 = ASCIIToUTF16("Test1");
|
| - NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title1);
|
| -
|
| - string16 one_menu_item[] = {title1};
|
| - EXPECT_TRUE(CheckMenuCreation(
|
| - launcher_controller_.get(), item_gmail, 1, one_menu_item, false));
|
| -
|
| - // Create one empty tab.
|
| - chrome::NewTab(browser());
|
| - string16 title2 = ASCIIToUTF16("Test2");
|
| - NavigateAndCommitActiveTabWithTitle(
|
| - browser(),
|
| - GURL("https://bla"),
|
| - title2);
|
| -
|
| - // and another one with another gmail instance.
|
| - chrome::NewTab(browser());
|
| - string16 title3 = ASCIIToUTF16("Test3");
|
| - NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title3);
|
| - string16 two_menu_items[] = {title1, title3};
|
| - EXPECT_TRUE(CheckMenuCreation(
|
| - launcher_controller_.get(), item_gmail, 2, two_menu_items, false));
|
| -
|
| - // Even though the item is in the V1 app list, it should also be in the
|
| - // browser list.
|
| - string16 browser_menu_item[] = {title3};
|
| - EXPECT_TRUE(CheckMenuCreation(
|
| - launcher_controller_.get(), item_browser, 1, browser_menu_item, false));
|
| -
|
| - // Test that closing of (all) the item(s) does work (and all menus get
|
| - // updated properly).
|
| - launcher_controller_->Close(item_gmail.id);
|
| -
|
| - EXPECT_TRUE(CheckMenuCreation(
|
| - launcher_controller_.get(), item_gmail, 0, NULL, false));
|
| - string16 browser_menu_item2[] = {title2};
|
| - EXPECT_TRUE(CheckMenuCreation(
|
| - launcher_controller_.get(), item_browser, 1, browser_menu_item2, false));
|
| -}
|
| -
|
| -// Checks that the generated menu list properly activates items.
|
| -TEST_F(ChromeLauncherControllerPerAppTest, V1AppMenuExecution) {
|
| - InitLauncherControllerWithBrowser();
|
| -
|
| - // Add |extension3_| to the launcher and add two items.
|
| - GURL gmail = GURL("https://mail.google.com/mail/u");
|
| - ash::LauncherID gmail_id = model_->next_id();
|
| - extension_service_->AddExtension(extension3_.get());
|
| - launcher_controller_->SetRefocusURLPatternForTest(gmail_id, GURL(gmail_url));
|
| - string16 title1 = ASCIIToUTF16("Test1");
|
| - NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title1);
|
| - chrome::NewTab(browser());
|
| - string16 title2 = ASCIIToUTF16("Test2");
|
| - NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title2);
|
| -
|
| - // Check that the menu is properly set.
|
| - ash::LauncherItem item_gmail;
|
| - item_gmail.type = ash::TYPE_APP_SHORTCUT;
|
| - item_gmail.id = gmail_id;
|
| - string16 two_menu_items[] = {title1, title2};
|
| - EXPECT_TRUE(CheckMenuCreation(
|
| - launcher_controller_.get(), item_gmail, 2, two_menu_items, false));
|
| - EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
|
| - // Execute the second item in the list (which shouldn't do anything since that
|
| - // item is per definition already the active tab).
|
| - {
|
| - scoped_ptr<ash::LauncherMenuModel> menu(
|
| - launcher_controller_->CreateApplicationMenu(item_gmail, 0));
|
| - // The first element in the menu is a spacing separator. On some systems
|
| - // (e.g. Windows) such things do not exist. As such we check the existence
|
| - // and adjust dynamically.
|
| - int first_item =
|
| - (menu->GetTypeAt(0) == ui::MenuModel::TYPE_SEPARATOR) ? 1 : 0;
|
| - menu->ActivatedAt(first_item + 3);
|
| - }
|
| - EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
|
| -
|
| - // Execute the first item.
|
| - {
|
| - scoped_ptr<ash::LauncherMenuModel> menu(
|
| - launcher_controller_->CreateApplicationMenu(item_gmail, 0));
|
| - int first_item =
|
| - (menu->GetTypeAt(0) == ui::MenuModel::TYPE_SEPARATOR) ? 1 : 0;
|
| - menu->ActivatedAt(first_item + 2);
|
| - }
|
| - // Now the active tab should be the second item.
|
| - EXPECT_EQ(0, browser()->tab_strip_model()->active_index());
|
| -}
|
| -
|
| -// Checks that the generated menu list properly deletes items.
|
| -TEST_F(ChromeLauncherControllerPerAppTest, V1AppMenuDeletionExecution) {
|
| - InitLauncherControllerWithBrowser();
|
| -
|
| - // Add |extension3_| to the launcher and add two items.
|
| - GURL gmail = GURL("https://mail.google.com/mail/u");
|
| - ash::LauncherID gmail_id = model_->next_id();
|
| - extension_service_->AddExtension(extension3_.get());
|
| - launcher_controller_->SetRefocusURLPatternForTest(gmail_id, GURL(gmail_url));
|
| - string16 title1 = ASCIIToUTF16("Test1");
|
| - NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title1);
|
| - chrome::NewTab(browser());
|
| - string16 title2 = ASCIIToUTF16("Test2");
|
| - NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title2);
|
| -
|
| - // Check that the menu is properly set.
|
| - ash::LauncherItem item_gmail;
|
| - item_gmail.type = ash::TYPE_APP_SHORTCUT;
|
| - item_gmail.id = gmail_id;
|
| - string16 two_menu_items[] = {title1, title2};
|
| - EXPECT_TRUE(CheckMenuCreation(
|
| - launcher_controller_.get(), item_gmail, 2, two_menu_items, false));
|
| -
|
| - int tabs = browser()->tab_strip_model()->count();
|
| - // Activate the proper tab through the menu item.
|
| - {
|
| - ChromeLauncherAppMenuItems items =
|
| - launcher_controller_->GetApplicationList(item_gmail, 0);
|
| - items[1]->Execute(0);
|
| - EXPECT_EQ(tabs, browser()->tab_strip_model()->count());
|
| - }
|
| -
|
| - // Delete one tab through the menu item.
|
| - {
|
| - ChromeLauncherAppMenuItems items =
|
| - launcher_controller_->GetApplicationList(item_gmail, 0);
|
| - items[1]->Execute(ui::EF_SHIFT_DOWN);
|
| - EXPECT_EQ(--tabs, browser()->tab_strip_model()->count());
|
| - }
|
| -}
|
| -
|
| -// Tests that panels create launcher items correctly
|
| -TEST_F(ChromeLauncherControllerPerAppTest, AppPanels) {
|
| - InitLauncherControllerWithBrowser();
|
| - EXPECT_EQ(1, model_observer_->added());
|
| -
|
| - TestAppIconLoaderImpl* app_icon_loader = new TestAppIconLoaderImpl();
|
| - SetAppIconLoader(app_icon_loader);
|
| -
|
| - // Test adding an app panel
|
| - std::string app_id = extension1_->id();
|
| - ShellWindowLauncherItemController app_panel_controller(
|
| - LauncherItemController::TYPE_APP_PANEL, "id", app_id,
|
| - launcher_controller_.get());
|
| - ash::LauncherID launcher_id1 = launcher_controller_->CreateAppLauncherItem(
|
| - &app_panel_controller, app_id, ash::STATUS_RUNNING);
|
| - int panel_index = model_observer_->last_index();
|
| - EXPECT_EQ(2, model_observer_->added());
|
| - EXPECT_EQ(0, model_observer_->changed());
|
| - EXPECT_EQ(1, app_icon_loader->fetch_count());
|
| - model_observer_->clear_counts();
|
| -
|
| - // App panels should have a separate identifier than the app id
|
| - EXPECT_EQ(0, launcher_controller_->GetLauncherIDForAppID(app_id));
|
| -
|
| - // Setting the app image image should not change the panel if it set its icon
|
| - app_panel_controller.set_image_set_by_controller(true);
|
| - gfx::ImageSkia image;
|
| - launcher_controller_->SetAppImage(app_id, image);
|
| - EXPECT_EQ(0, model_observer_->changed());
|
| - model_observer_->clear_counts();
|
| -
|
| - // Add a second app panel and verify that it get the same index as the first
|
| - // one had, being added to the left of the existing panel.
|
| - ash::LauncherID launcher_id2 = launcher_controller_->CreateAppLauncherItem(
|
| - &app_panel_controller, app_id, ash::STATUS_RUNNING);
|
| - EXPECT_EQ(panel_index, model_observer_->last_index());
|
| - EXPECT_EQ(1, model_observer_->added());
|
| - model_observer_->clear_counts();
|
| -
|
| - launcher_controller_->CloseLauncherItem(launcher_id2);
|
| - launcher_controller_->CloseLauncherItem(launcher_id1);
|
| - EXPECT_EQ(2, model_observer_->removed());
|
| -}
|
| -
|
| -// Tests that the Gmail extension matches more then the app itself claims with
|
| -// the manifest file.
|
| -TEST_F(ChromeLauncherControllerPerAppTest, GmailMatching) {
|
| - InitLauncherControllerWithBrowser();
|
| -
|
| - // Create a Gmail browser tab.
|
| - chrome::NewTab(browser());
|
| - string16 title = ASCIIToUTF16("Test");
|
| - NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title);
|
| - content::WebContents* content =
|
| - browser()->tab_strip_model()->GetActiveWebContents();
|
| -
|
| - // Check that the launcher controller does not recognize the running app.
|
| - EXPECT_FALSE(launcher_controller_->ContentCanBeHandledByGmailApp(content));
|
| -
|
| - // Installing |extension3_| adds it to the launcher.
|
| - ash::LauncherID gmail_id = model_->next_id();
|
| - extension_service_->AddExtension(extension3_.get());
|
| - EXPECT_EQ(3, model_->item_count());
|
| - int gmail_index = model_->ItemIndexByID(gmail_id);
|
| - EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[gmail_index].type);
|
| - EXPECT_TRUE(launcher_controller_->IsAppPinned(extension3_->id()));
|
| -
|
| - // Check that it is now handled.
|
| - EXPECT_TRUE(launcher_controller_->ContentCanBeHandledByGmailApp(content));
|
| -
|
| - // Check also that the app has detected that properly.
|
| - ash::LauncherItem item_gmail;
|
| - item_gmail.type = ash::TYPE_APP_SHORTCUT;
|
| - item_gmail.id = gmail_id;
|
| - EXPECT_EQ(2U, launcher_controller_->GetApplicationList(item_gmail, 0).size());
|
| -}
|
| -
|
| -// Tests that the Gmail extension does not match the offline verison.
|
| -TEST_F(ChromeLauncherControllerPerAppTest, GmailOfflineMatching) {
|
| - InitLauncherControllerWithBrowser();
|
| -
|
| - // Create a Gmail browser tab.
|
| - chrome::NewTab(browser());
|
| - string16 title = ASCIIToUTF16("Test");
|
| - NavigateAndCommitActiveTabWithTitle(browser(),
|
| - GURL(offline_gmail_url),
|
| - title);
|
| - content::WebContents* content =
|
| - browser()->tab_strip_model()->GetActiveWebContents();
|
| -
|
| - // Installing |extension3_| adds it to the launcher.
|
| - ash::LauncherID gmail_id = model_->next_id();
|
| - extension_service_->AddExtension(extension3_.get());
|
| - EXPECT_EQ(3, model_->item_count());
|
| - int gmail_index = model_->ItemIndexByID(gmail_id);
|
| - EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[gmail_index].type);
|
| - EXPECT_TRUE(launcher_controller_->IsAppPinned(extension3_->id()));
|
| -
|
| - // The content should not be able to be handled by the app.
|
| - EXPECT_FALSE(launcher_controller_->ContentCanBeHandledByGmailApp(content));
|
| -}
|
|
|