| Index: trunk/src/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
|
| ===================================================================
|
| --- trunk/src/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc (revision 226578)
|
| +++ trunk/src/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc (working copy)
|
| @@ -43,6 +43,8 @@
|
| #include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item_tab.h"
|
| #include "chrome/browser/ui/ash/launcher/chrome_launcher_types.h"
|
| #include "chrome/browser/ui/ash/launcher/launcher_app_tab_helper.h"
|
| +#include "chrome/browser/ui/ash/launcher/launcher_application_menu_item_model.h"
|
| +#include "chrome/browser/ui/ash/launcher/launcher_context_menu.h"
|
| #include "chrome/browser/ui/ash/launcher/launcher_item_controller.h"
|
| #include "chrome/browser/ui/ash/launcher/shell_window_launcher_controller.h"
|
| #include "chrome/browser/ui/ash/launcher/shell_window_launcher_item_controller.h"
|
| @@ -81,6 +83,7 @@
|
| #include "ui/views/corewm/window_animations.h"
|
|
|
| #if defined(OS_CHROMEOS)
|
| +#include "chrome/browser/chromeos/login/default_pinned_apps_field_trial.h"
|
| #include "chrome/browser/chromeos/login/user_manager.h"
|
| #include "chrome/browser/chromeos/login/wallpaper_manager.h"
|
| #include "chrome/browser/ui/ash/chrome_shell_delegate.h"
|
| @@ -253,7 +256,6 @@
|
| Profile* profile,
|
| ash::LauncherModel* model)
|
| : model_(model),
|
| - item_delegate_manager_(NULL),
|
| profile_(profile),
|
| app_sync_ui_state_(NULL),
|
| ignore_persist_pinned_state_change_(false) {
|
| @@ -274,11 +276,8 @@
|
| model_->AddObserver(this);
|
| // Right now ash::Shell isn't created for tests.
|
| // TODO(mukai): Allows it to observe display change and write tests.
|
| - if (ash::Shell::HasInstance()) {
|
| + if (ash::Shell::HasInstance())
|
| ash::Shell::GetInstance()->display_controller()->AddObserver(this);
|
| - item_delegate_manager_ =
|
| - ash::Shell::GetInstance()->launcher_item_delegate_manager();
|
| - }
|
| // TODO(stevenjb): Find a better owner for shell_window_controller_?
|
| shell_window_controller_.reset(new ShellWindowLauncherController(this));
|
|
|
| @@ -289,6 +288,11 @@
|
| chrome::NOTIFICATION_EXTENSION_UNLOADED,
|
| content::Source<Profile>(profile_));
|
|
|
| + // This check is needed for win7_aura. Without this, all tests in
|
| + // ChromeLauncherControllerTest will fail by win7_aura.
|
| + if (ash::Shell::HasInstance())
|
| + RegisterLauncherItemDelegate();
|
| +
|
| #if defined(OS_CHROMEOS)
|
| // On Chrome OS using multi profile we want to switch the content of the shelf
|
| // with a user change. Note that for unit tests the instance can be NULL.
|
| @@ -317,6 +321,7 @@
|
| ash::Shell::GetInstance()->display_controller()->RemoveObserver(this);
|
| for (IDToItemControllerMap::iterator i = id_to_item_controller_map_.begin();
|
| i != id_to_item_controller_map_.end(); ++i) {
|
| + i->second->OnRemoved();
|
| int index = model_->ItemIndexByID(i->first);
|
| // A "browser proxy" is not known to the model and this removal does
|
| // therefore not need to be propagated to the model.
|
| @@ -401,10 +406,9 @@
|
| CHECK(controller);
|
| IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id);
|
| CHECK(iter != id_to_item_controller_map_.end());
|
| + iter->second->OnRemoved();
|
| + iter->second = controller;
|
| controller->set_launcher_id(id);
|
| - iter->second = controller;
|
| - // Existing controller is destroyed and replaced by registering again.
|
| - SetLauncherItemDelegate(id, controller);
|
| }
|
|
|
| void ChromeLauncherController::CloseLauncherItem(ash::LauncherID id) {
|
| @@ -415,10 +419,9 @@
|
| CHECK(iter != id_to_item_controller_map_.end());
|
| SetItemStatus(id, ash::STATUS_CLOSED);
|
| std::string app_id = iter->second->app_id();
|
| + iter->second->OnRemoved();
|
| iter->second = new AppShortcutLauncherItemController(app_id, this);
|
| iter->second->set_launcher_id(id);
|
| - // Existing controller is destroyed and replaced by registering again.
|
| - SetLauncherItemDelegate(id, iter->second);
|
| } else {
|
| LauncherItemClosed(id);
|
| }
|
| @@ -942,6 +945,37 @@
|
| }
|
| }
|
|
|
| +void ChromeLauncherController::ItemSelected(const ash::LauncherItem& item,
|
| + const ui::Event& event) {
|
| + DCHECK(HasItemController(item.id));
|
| + LauncherItemController* item_controller = id_to_item_controller_map_[item.id];
|
| +#if defined(OS_CHROMEOS)
|
| + if (!item_controller->app_id().empty()) {
|
| + chromeos::default_pinned_apps_field_trial::RecordShelfAppClick(
|
| + item_controller->app_id());
|
| + }
|
| +#endif
|
| + item_controller->Clicked(event);
|
| +}
|
| +
|
| +string16 ChromeLauncherController::GetTitle(const ash::LauncherItem& item) {
|
| + DCHECK(HasItemController(item.id));
|
| + return id_to_item_controller_map_[item.id]->GetTitle();
|
| +}
|
| +
|
| +ui::MenuModel* ChromeLauncherController::CreateContextMenu(
|
| + const ash::LauncherItem& item,
|
| + aura::RootWindow* root_window) {
|
| + return new LauncherContextMenu(this, &item, root_window);
|
| +}
|
| +
|
| +ash::LauncherMenuModel* ChromeLauncherController::CreateApplicationMenu(
|
| + const ash::LauncherItem& item,
|
| + int event_flags) {
|
| + return new LauncherApplicationMenuItemModel(GetApplicationList(item,
|
| + event_flags));
|
| +}
|
| +
|
| ash::LauncherID ChromeLauncherController::GetIDByWindow(aura::Window* window) {
|
| int browser_index = ash::GetBrowserItemIndex(*model_);
|
| DCHECK_GE(browser_index, 0);
|
| @@ -963,6 +997,19 @@
|
| return 0;
|
| }
|
|
|
| +bool ChromeLauncherController::IsDraggable(const ash::LauncherItem& item) {
|
| + return (item.type == ash::TYPE_APP_SHORTCUT ||
|
| + item.type == ash::TYPE_WINDOWED_APP) ? CanPin() : true;
|
| +}
|
| +
|
| +bool ChromeLauncherController::ShouldShowTooltip(
|
| + const ash::LauncherItem& item) {
|
| + if (item.type == ash::TYPE_APP_PANEL &&
|
| + id_to_item_controller_map_[item.id]->IsVisible())
|
| + return false;
|
| + return true;
|
| +}
|
| +
|
| void ChromeLauncherController::OnLauncherCreated(ash::Launcher* launcher) {
|
| launchers_.insert(launcher);
|
| launcher->shelf_widget()->shelf_layout_manager()->AddObserver(this);
|
| @@ -1242,11 +1289,6 @@
|
| return id_to_item_controller_map_[id]->app_id();
|
| }
|
|
|
| -void ChromeLauncherController::SetLauncherItemDelegateManagerForTest(
|
| - ash::LauncherItemDelegateManager* manager) {
|
| - item_delegate_manager_ = manager;
|
| -}
|
| -
|
| ash::LauncherID ChromeLauncherController::CreateAppShortcutLauncherItemWithType(
|
| const std::string& app_id,
|
| int index,
|
| @@ -1258,13 +1300,6 @@
|
| return launcher_id;
|
| }
|
|
|
| -LauncherItemController* ChromeLauncherController::GetLauncherItemController(
|
| - const ash::LauncherID id) {
|
| - if (!HasItemController(id))
|
| - return NULL;
|
| - return id_to_item_controller_map_[id];
|
| -}
|
| -
|
| Profile* ChromeLauncherController::GetProfileForNewWindows() {
|
| return ProfileManager::GetDefaultProfileOrOffTheRecord();
|
| }
|
| @@ -1274,6 +1309,7 @@
|
| CHECK(iter != id_to_item_controller_map_.end());
|
| CHECK(iter->second);
|
| app_icon_loader_->ClearImage(iter->second->app_id());
|
| + iter->second->OnRemoved();
|
| id_to_item_controller_map_.erase(iter);
|
| int index = model_->ItemIndexByID(id);
|
| // A "browser proxy" is not known to the model and this removal does
|
| @@ -1591,8 +1627,6 @@
|
|
|
| app_icon_loader_->FetchImage(app_id);
|
|
|
| - SetLauncherItemDelegate(id, controller);
|
| -
|
| return id;
|
| }
|
|
|
| @@ -1635,11 +1669,10 @@
|
| ash::LauncherID id = model_->next_id();
|
| size_t index = GetChromeIconIndexForCreation();
|
| model_->AddAt(index, browser_shortcut);
|
| - id_to_item_controller_map_[id] =
|
| - new BrowserShortcutLauncherItemController(this);
|
| + browser_item_controller_.reset(
|
| + new BrowserShortcutLauncherItemController(this));
|
| + id_to_item_controller_map_[id] = browser_item_controller_.get();
|
| id_to_item_controller_map_[id]->set_launcher_id(id);
|
| - // LauncherItemDelegateManager owns BrowserShortcutLauncherItemController.
|
| - SetLauncherItemDelegate(id, id_to_item_controller_map_[id]);
|
| return id;
|
| }
|
|
|
| @@ -1814,14 +1847,16 @@
|
| }
|
| }
|
|
|
| -void ChromeLauncherController::SetLauncherItemDelegate(
|
| - ash::LauncherID id,
|
| - ash::LauncherItemDelegate* item_delegate) {
|
| - DCHECK_GT(id, 0);
|
| - DCHECK(item_delegate);
|
| - DCHECK(item_delegate_manager_);
|
| - item_delegate_manager_->SetLauncherItemDelegate(id,
|
| - scoped_ptr<ash::LauncherItemDelegate>(item_delegate).Pass());
|
| +void ChromeLauncherController::RegisterLauncherItemDelegate() {
|
| + // TODO(simon.hong81): Register LauncherItemDelegate when LauncherItemDelegate
|
| + // is created.
|
| + ash::LauncherItemDelegateManager* manager =
|
| + ash::Shell::GetInstance()->launcher_item_delegate_manager();
|
| + manager->RegisterLauncherItemDelegate(ash::TYPE_APP_PANEL, this);
|
| + manager->RegisterLauncherItemDelegate(ash::TYPE_APP_SHORTCUT, this);
|
| + manager->RegisterLauncherItemDelegate(ash::TYPE_BROWSER_SHORTCUT, this);
|
| + manager->RegisterLauncherItemDelegate(ash::TYPE_PLATFORM_APP, this);
|
| + manager->RegisterLauncherItemDelegate(ash::TYPE_WINDOWED_APP, this);
|
| }
|
|
|
| void ChromeLauncherController::AttachProfile(Profile* profile) {
|
|
|