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

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

Issue 23068021: Remove PerBrowser launcher, reland step 1 of 2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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/browser_launcher_item_controller_unittest.cc
diff --git a/chrome/browser/ui/ash/launcher/browser_launcher_item_controller_unittest.cc b/chrome/browser/ui/ash/launcher/browser_launcher_item_controller_unittest.cc
deleted file mode 100644
index 0f20bc2d49d912ce789dbe736538fc186649e428..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/ash/launcher/browser_launcher_item_controller_unittest.cc
+++ /dev/null
@@ -1,543 +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/browser_launcher_item_controller.h"
-
-#include <map>
-#include <string>
-
-#include "ash/ash_switches.h"
-#include "ash/launcher/launcher_model.h"
-#include "base/command_line.h"
-#include "base/memory/scoped_ptr.h"
-#include "chrome/browser/favicon/favicon_tab_helper.h"
-#include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h"
-#include "chrome/browser/ui/ash/launcher/launcher_item_controller.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/tabs/test_tab_strip_model_delegate.h"
-#include "chrome/test/base/chrome_render_view_host_test_harness.h"
-#include "chrome/test/base/testing_profile.h"
-#include "content/public/browser/web_contents.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/skia/include/core/SkBitmap.h"
-#include "ui/aura/client/activation_change_observer.h"
-#include "ui/aura/client/activation_delegate.h"
-#include "ui/aura/client/aura_constants.h"
-#include "ui/aura/root_window.h"
-#include "ui/aura/test/test_activation_client.h"
-#include "ui/aura/test/test_window_delegate.h"
-#include "ui/aura/window.h"
-#include "ui/aura/window_delegate.h"
-#include "ui/base/events/event.h"
-
-// TODO(skuhne): Remove this module together with the
-// browser_launcher_item_controller.* when the old launcher goes away.
-
-namespace {
-
-// Test implementation of AppTabHelper.
-class AppTabHelperImpl : public ChromeLauncherController::AppTabHelper {
- public:
- AppTabHelperImpl() {}
- virtual ~AppTabHelperImpl() {}
-
- // Sets the id for the specified tab. The id is removed if Remove() is
- // invoked.
- void SetAppID(content::WebContents* tab, const std::string& id) {
- tab_id_map_[tab] = id;
- }
-
- // Returns true if there is an id registered for |tab|.
- bool HasAppID(content::WebContents* tab) const {
- return tab_id_map_.find(tab) != tab_id_map_.end();
- }
-
- // AppTabHelper implementation:
- virtual std::string GetAppID(content::WebContents* tab) OVERRIDE {
- return tab_id_map_.find(tab) != tab_id_map_.end() ? tab_id_map_[tab] :
- std::string();
- }
-
- virtual bool IsValidID(const std::string& id) OVERRIDE {
- for (TabToStringMap::const_iterator i = tab_id_map_.begin();
- i != tab_id_map_.end(); ++i) {
- if (i->second == id)
- return true;
- }
- return false;
- }
-
- private:
- typedef std::map<content::WebContents*, std::string> TabToStringMap;
-
- TabToStringMap tab_id_map_;
-
- DISALLOW_COPY_AND_ASSIGN(AppTabHelperImpl);
-};
-
-// Test implementation of AppIconLoader.
-class AppIconLoaderImpl : public extensions::AppIconLoader {
- public:
- AppIconLoaderImpl() : fetch_count_(0) {}
- virtual ~AppIconLoaderImpl() {}
-
- // Returns the number of times FetchImage() has been invoked and resets the
- // count to 0.
- int GetAndClearFetchCount() {
- int value = fetch_count_;
- fetch_count_ = 0;
- return value;
- }
-
- // 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 {
- }
-
- private:
- int fetch_count_;
-
- DISALLOW_COPY_AND_ASSIGN(AppIconLoaderImpl);
-};
-
-// Test implementation of TabStripModelDelegate.
-class TabHelperTabStripModelDelegate : public TestTabStripModelDelegate {
- public:
- TabHelperTabStripModelDelegate() {}
- virtual ~TabHelperTabStripModelDelegate() {}
-
- virtual void WillAddWebContents(content::WebContents* contents) OVERRIDE {
- // BrowserLauncherItemController assumes that all WebContents passed to it
- // have attached an extensions::TabHelper and a FaviconTabHelper. The
- // TestTabStripModelDelegate adds an extensions::TabHelper.
- TestTabStripModelDelegate::WillAddWebContents(contents);
- FaviconTabHelper::CreateForWebContents(contents);
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(TabHelperTabStripModelDelegate);
-};
-
-} // namespace
-
-// TODO(skuhne): Several of these unit tests need to be moved into a new home
-// when the old launcher & the browser launcher item controller are removed
-// (several of these tests are not testing the BrowserLauncherItemController -
-// but the LauncherController framework).
-class LauncherItemControllerPerAppTest
- : public ChromeRenderViewHostTestHarness {
- public:
- virtual void SetUp() OVERRIDE {
- ChromeRenderViewHostTestHarness::SetUp();
-
- activation_client_.reset(
- new aura::test::TestActivationClient(root_window()));
- launcher_model_.reset(new ash::LauncherModel);
- launcher_delegate_.reset(
- ChromeLauncherController::CreateInstance(profile(),
- launcher_model_.get()));
- app_tab_helper_ = new AppTabHelperImpl;
- app_icon_loader_ = new AppIconLoaderImpl;
- launcher_delegate_->SetAppTabHelperForTest(app_tab_helper_);
- launcher_delegate_->SetAppIconLoaderForTest(app_icon_loader_);
- launcher_delegate_->Init();
- }
-
- virtual void TearDown() OVERRIDE {
- launcher_delegate_.reset();
- ChromeRenderViewHostTestHarness::TearDown();
- }
-
- protected:
- // Contains all the objects needed to create a BrowserLauncherItemController.
- struct State : public aura::client::ActivationDelegate,
- public aura::client::ActivationChangeObserver {
- public:
- State(LauncherItemControllerPerAppTest* test,
- const std::string& app_id,
- BrowserLauncherItemController::Type launcher_type)
- : launcher_test(test),
- window(NULL),
- tab_strip(&tab_strip_delegate, test->profile()),
- updater(launcher_type,
- &window,
- &tab_strip,
- test->launcher_delegate_.get(),
- app_id) {
- window.Init(ui::LAYER_NOT_DRAWN);
- launcher_test->root_window()->AddChild(&window);
- launcher_test->activation_client_->ActivateWindow(&window);
- aura::client::SetActivationDelegate(&window, this);
- aura::client::SetActivationChangeObserver(&window, this);
- updater.Init();
- }
-
- ash::LauncherItem GetUpdaterItem() {
- ash::LauncherID launcher_id =
- BrowserLauncherItemController::TestApi(&updater).item_id();
- int index = launcher_test->launcher_model_->ItemIndexByID(launcher_id);
- return launcher_test->launcher_model_->items()[index];
- }
-
- // aura::client::ActivationDelegate overrides.
- virtual bool ShouldActivate() const OVERRIDE {
- return true;
- }
-
- // aura::client::ActivationChangeObserver overrides:
- virtual void OnWindowActivated(aura::Window* gained_active,
- aura::Window* lost_active) OVERRIDE {
- DCHECK(&window == gained_active || &window == lost_active);
- updater.BrowserActivationStateChanged();
- }
-
- LauncherItemControllerPerAppTest* launcher_test;
- aura::Window window;
- TabHelperTabStripModelDelegate tab_strip_delegate;
- TabStripModel tab_strip;
- BrowserLauncherItemController updater;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(State);
- };
-
- const std::string& GetAppID(ash::LauncherID id) const {
- return launcher_delegate_->GetAppIdFromLauncherIdForTest(id);
- }
-
- void ResetAppTabHelper() {
- launcher_delegate_->SetAppTabHelperForTest(app_tab_helper_);
- }
-
- void ResetAppIconLoader() {
- launcher_delegate_->SetAppIconLoaderForTest(app_icon_loader_);
- }
-
- void UnpinAppsWithID(const std::string& app_id) {
- launcher_delegate_->UnpinAppsWithID(app_id);
- }
-
- const ash::LauncherItem& GetItem(BrowserLauncherItemController* updater) {
- int index = launcher_model_->ItemIndexByID(
- BrowserLauncherItemController::TestApi(updater).item_id());
- return launcher_model_->items()[index];
- }
-
- scoped_ptr<ash::LauncherModel> launcher_model_;
- scoped_ptr<ChromeLauncherController> launcher_delegate_;
-
- // Owned by BrowserLauncherItemController.
- AppTabHelperImpl* app_tab_helper_;
- AppIconLoaderImpl* app_icon_loader_;
-
- scoped_ptr<aura::test::TestActivationClient> activation_client_;
-};
-
-// Verify that the launcher item positions are persisted and restored.
-TEST_F(LauncherItemControllerPerAppTest, PersistLauncherItemPositions) {
- EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
- launcher_model_->items()[0].type);
- EXPECT_EQ(ash::TYPE_APP_LIST,
- launcher_model_->items()[1].type);
- scoped_ptr<content::WebContents> tab1(CreateTestWebContents());
- scoped_ptr<content::WebContents> tab2(CreateTestWebContents());
- app_tab_helper_->SetAppID(tab1.get(), "1");
- app_tab_helper_->SetAppID(tab1.get(), "2");
-
- EXPECT_FALSE(launcher_delegate_->IsAppPinned("1"));
- launcher_delegate_->PinAppWithID("1");
- EXPECT_TRUE(launcher_delegate_->IsAppPinned("1"));
- launcher_delegate_->PinAppWithID("2");
-
- EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
- launcher_model_->items()[0].type);
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
- launcher_model_->items()[1].type);
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
- launcher_model_->items()[2].type);
- EXPECT_EQ(ash::TYPE_APP_LIST,
- launcher_model_->items()[3].type);
-
- launcher_model_->Move(0, 2);
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
- launcher_model_->items()[0].type);
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
- launcher_model_->items()[1].type);
- EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
- launcher_model_->items()[2].type);
- EXPECT_EQ(ash::TYPE_APP_LIST,
- launcher_model_->items()[3].type);
-
- launcher_delegate_.reset();
- launcher_model_.reset(new ash::LauncherModel);
- launcher_delegate_.reset(
- ChromeLauncherController::CreateInstance(profile(),
- launcher_model_.get()));
- app_tab_helper_ = new AppTabHelperImpl;
- app_tab_helper_->SetAppID(tab1.get(), "1");
- app_tab_helper_->SetAppID(tab2.get(), "2");
- ResetAppTabHelper();
-
- launcher_delegate_->Init();
-
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
- launcher_model_->items()[0].type);
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
- launcher_model_->items()[1].type);
- EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
- launcher_model_->items()[2].type);
- EXPECT_EQ(ash::TYPE_APP_LIST,
- launcher_model_->items()[3].type);
-}
-
-class BrowserLauncherItemControllerTest
- : public LauncherItemControllerPerAppTest {
- public:
- BrowserLauncherItemControllerTest() {}
-
- virtual void SetUp() OVERRIDE {
- CommandLine::ForCurrentProcess()->AppendSwitch(
- ash::switches::kAshDisablePerAppLauncher);
-
- LauncherItemControllerPerAppTest::SetUp();
- }
-
- virtual void TearDown() OVERRIDE {
- LauncherItemControllerPerAppTest::TearDown();
- }
-};
-
-// Verifies a new launcher item is added for TYPE_TABBED.
-TEST_F(BrowserLauncherItemControllerTest, TabbedSetup) {
- size_t initial_size = launcher_model_->items().size();
- {
- scoped_ptr<content::WebContents> web_contents(CreateTestWebContents());
- State state(this, std::string(),
- BrowserLauncherItemController::TYPE_TABBED);
-
- // There should be one more item.
- ASSERT_EQ(initial_size + 1, launcher_model_->items().size());
- // New item should be added at the end.
- EXPECT_EQ(ash::TYPE_TABBED, state.GetUpdaterItem().type);
- }
-
- // Deleting the BrowserLauncherItemController should have removed the item.
- ASSERT_EQ(initial_size, launcher_model_->items().size());
-
- // Do the same, but this time add the tab first.
- {
- scoped_ptr<content::WebContents> web_contents(CreateTestWebContents());
-
- TabHelperTabStripModelDelegate tab_strip_delegate;
- TabStripModel tab_strip(&tab_strip_delegate, profile());
- tab_strip.InsertWebContentsAt(0,
- web_contents.get(),
- TabStripModel::ADD_ACTIVE);
- aura::Window window(NULL);
- window.Init(ui::LAYER_NOT_DRAWN);
- root_window()->AddChild(&window);
- BrowserLauncherItemController updater(
- LauncherItemController::TYPE_TABBED,
- &window, &tab_strip, launcher_delegate_.get(),
- std::string());
- updater.Init();
-
- // There should be one more item.
- ASSERT_EQ(initial_size + 1, launcher_model_->items().size());
- // New item should be added at the end.
- EXPECT_EQ(ash::TYPE_TABBED, GetItem(&updater).type);
- }
-}
-
-// Verifies pinned apps are persisted and restored.
-TEST_F(BrowserLauncherItemControllerTest, PersistPinned) {
- size_t initial_size = launcher_model_->items().size();
- scoped_ptr<content::WebContents> tab1(CreateTestWebContents());
-
- app_tab_helper_->SetAppID(tab1.get(), "1");
-
- app_icon_loader_->GetAndClearFetchCount();
- launcher_delegate_->PinAppWithID("1");
- ash::LauncherID id = launcher_delegate_->GetLauncherIDForAppID("1");
- int app_index = launcher_model_->ItemIndexByID(id);
- EXPECT_GT(app_icon_loader_->GetAndClearFetchCount(), 0);
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
- launcher_model_->items()[app_index].type);
- EXPECT_TRUE(launcher_delegate_->IsAppPinned("1"));
- EXPECT_FALSE(launcher_delegate_->IsAppPinned("0"));
- EXPECT_EQ(initial_size + 1, launcher_model_->items().size());
-
- launcher_delegate_.reset();
- launcher_model_.reset(new ash::LauncherModel);
- launcher_delegate_.reset(
- ChromeLauncherController::CreateInstance(profile(),
- launcher_model_.get()));
- app_tab_helper_ = new AppTabHelperImpl;
- app_tab_helper_->SetAppID(tab1.get(), "1");
- ResetAppTabHelper();
- app_icon_loader_ = new AppIconLoaderImpl;
- ResetAppIconLoader();
- launcher_delegate_->Init();
- EXPECT_GT(app_icon_loader_->GetAndClearFetchCount(), 0);
- ASSERT_EQ(initial_size + 1, launcher_model_->items().size());
- EXPECT_TRUE(launcher_delegate_->IsAppPinned("1"));
- EXPECT_FALSE(launcher_delegate_->IsAppPinned("0"));
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
- launcher_model_->items()[app_index].type);
-
- UnpinAppsWithID("1");
- ASSERT_EQ(initial_size, launcher_model_->items().size());
-}
-
-// Verify that launcher item positions are persisted and restored.
-TEST_F(BrowserLauncherItemControllerTest,
- PersistLauncherItemPositionsPerBrowser) {
- int browser_shortcut_index = 0;
- int app_list_index = 1;
-
- EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
- launcher_model_->items()[browser_shortcut_index].type);
- EXPECT_EQ(ash::TYPE_APP_LIST,
- launcher_model_->items()[app_list_index].type);
-
- scoped_ptr<content::WebContents> tab1(CreateTestWebContents());
- scoped_ptr<content::WebContents> tab2(CreateTestWebContents());
-
- app_tab_helper_->SetAppID(tab1.get(), "1");
- app_tab_helper_->SetAppID(tab2.get(), "2");
-
- app_icon_loader_->GetAndClearFetchCount();
- launcher_delegate_->PinAppWithID("1");
- ash::LauncherID id = launcher_delegate_->GetLauncherIDForAppID("1");
- int app1_index = launcher_model_->ItemIndexByID(id);
-
- launcher_delegate_->PinAppWithID("2");
- id = launcher_delegate_->GetLauncherIDForAppID("2");
- int app2_index = launcher_model_->ItemIndexByID(id);
-
- launcher_model_->Move(browser_shortcut_index, app1_index);
-
- browser_shortcut_index = 1;
- app1_index = 0;
-
- EXPECT_GT(app_icon_loader_->GetAndClearFetchCount(), 0);
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
- launcher_model_->items()[app1_index].type);
- EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
- launcher_model_->items()[browser_shortcut_index].type);
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
- launcher_model_->items()[app2_index].type);
-
- launcher_delegate_.reset();
- launcher_model_.reset(new ash::LauncherModel);
- launcher_delegate_.reset(
- ChromeLauncherController::CreateInstance(profile(),
- launcher_model_.get()));
-
- app_tab_helper_ = new AppTabHelperImpl;
- app_tab_helper_->SetAppID(tab1.get(), "1");
- app_tab_helper_->SetAppID(tab2.get(), "2");
- ResetAppTabHelper();
- app_icon_loader_ = new AppIconLoaderImpl;
- ResetAppIconLoader();
- launcher_delegate_->Init();
-
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
- launcher_model_->items()[app1_index].type);
- EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
- launcher_model_->items()[browser_shortcut_index].type);
- EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
- launcher_model_->items()[app2_index].type);
-}
-
-// Confirm that tabbed browsers handle activation correctly.
-TEST_F(BrowserLauncherItemControllerTest, ActivateBrowsers) {
- State state1(this, std::string(), BrowserLauncherItemController::TYPE_TABBED);
-
- // First browser is active.
- EXPECT_EQ(ash::STATUS_ACTIVE, state1.GetUpdaterItem().status);
-
- {
- // Both running.
- State state2(this, std::string(),
- BrowserLauncherItemController::TYPE_TABBED);
- EXPECT_EQ(ash::STATUS_ACTIVE, state2.GetUpdaterItem().status);
- EXPECT_EQ(ash::STATUS_RUNNING, state1.GetUpdaterItem().status);
-
- // Make first browser active again.
- activation_client_->ActivateWindow(&state1.window);
- EXPECT_EQ(ash::STATUS_ACTIVE, state1.GetUpdaterItem().status);
- EXPECT_EQ(ash::STATUS_RUNNING, state2.GetUpdaterItem().status);
-
- // And back to second.
- activation_client_->ActivateWindow(&state2.window);
- EXPECT_EQ(ash::STATUS_ACTIVE, state2.GetUpdaterItem().status);
- EXPECT_EQ(ash::STATUS_RUNNING, state1.GetUpdaterItem().status);
- }
-
- // First browser should be active again after second is closed.
- EXPECT_EQ(ash::STATUS_ACTIVE, state1.GetUpdaterItem().status);
-}
-
-// Confirm that window activation works through the model.
-TEST_F(BrowserLauncherItemControllerTest, SwitchDirectlyToApp) {
- State state1(this, std::string(),
- BrowserLauncherItemController::TYPE_TABBED);
- int index1 = launcher_model_->ItemIndexByID(state1.GetUpdaterItem().id);
-
- // Second app is active and first is inactive.
- State state2(this, std::string(),
- BrowserLauncherItemController::TYPE_TABBED);
- int index2 = launcher_model_->ItemIndexByID(state2.GetUpdaterItem().id);
-
- EXPECT_EQ(ash::STATUS_RUNNING, state1.GetUpdaterItem().status);
- EXPECT_EQ(ash::STATUS_ACTIVE, state2.GetUpdaterItem().status);
- EXPECT_EQ(&state2.window, activation_client_->GetActiveWindow());
-
- // Test that we can properly switch to the first item.
- ash::LauncherItem new_item1(launcher_model_->items()[index1]);
- new_item1.status = ash::STATUS_ACTIVE;
- launcher_model_->Set(index1, new_item1);
- EXPECT_EQ(ash::STATUS_ACTIVE, launcher_model_->items()[index1].status);
- EXPECT_EQ(ash::STATUS_RUNNING, launcher_model_->items()[index2].status);
- EXPECT_EQ(&state1.window, activation_client_->GetActiveWindow());
-
- // And to the second item active.
- ash::LauncherItem new_item2(launcher_model_->items()[index2]);
- new_item2.status = ash::STATUS_ACTIVE;
- launcher_model_->Set(index2, new_item2);
- EXPECT_EQ(ash::STATUS_RUNNING, launcher_model_->items()[index1].status);
- EXPECT_EQ(ash::STATUS_ACTIVE, launcher_model_->items()[index2].status);
- EXPECT_EQ(&state2.window, activation_client_->GetActiveWindow());
-}
-
-// Test attention states of windows.
-TEST_F(BrowserLauncherItemControllerTest, FlashWindow) {
- // App panel first
- State app_state(this, "1", BrowserLauncherItemController::TYPE_APP_PANEL);
- EXPECT_EQ(ash::STATUS_ACTIVE, app_state.GetUpdaterItem().status);
-
- // Active windows don't show attention.
- app_state.window.SetProperty(aura::client::kDrawAttentionKey, true);
- EXPECT_EQ(ash::STATUS_ACTIVE, app_state.GetUpdaterItem().status);
-
- // Then browser window
- State browser_state(
- this, std::string(), BrowserLauncherItemController::TYPE_TABBED);
- // First browser is active.
- EXPECT_EQ(ash::STATUS_ACTIVE, browser_state.GetUpdaterItem().status);
- EXPECT_EQ(ash::STATUS_RUNNING, app_state.GetUpdaterItem().status);
-
- // App window should go to attention state.
- app_state.window.SetProperty(aura::client::kDrawAttentionKey, true);
- EXPECT_EQ(ash::STATUS_ATTENTION, app_state.GetUpdaterItem().status);
-
- // Activating app window should clear attention state.
- activation_client_->ActivateWindow(&app_state.window);
- EXPECT_EQ(ash::STATUS_ACTIVE, app_state.GetUpdaterItem().status);
-}

Powered by Google App Engine
This is Rietveld 408576698