| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" | 5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "ash/ash_switches.h" | 9 #include "ash/ash_switches.h" |
| 10 #include "ash/desktop_background/desktop_background_controller.h" | 10 #include "ash/desktop_background/desktop_background_controller.h" |
| 11 #include "ash/launcher/launcher.h" | 11 #include "ash/launcher/launcher.h" |
| 12 #include "ash/launcher/launcher_item_delegate_manager.h" | |
| 13 #include "ash/multi_profile_uma.h" | 12 #include "ash/multi_profile_uma.h" |
| 14 #include "ash/root_window_controller.h" | 13 #include "ash/root_window_controller.h" |
| 14 #include "ash/shelf/shelf_item_delegate_manager.h" |
| 15 #include "ash/shelf/shelf_layout_manager.h" | 15 #include "ash/shelf/shelf_layout_manager.h" |
| 16 #include "ash/shelf/shelf_model.h" | 16 #include "ash/shelf/shelf_model.h" |
| 17 #include "ash/shelf/shelf_widget.h" | 17 #include "ash/shelf/shelf_widget.h" |
| 18 #include "ash/shell.h" | 18 #include "ash/shell.h" |
| 19 #include "ash/wm/window_util.h" | 19 #include "ash/wm/window_util.h" |
| 20 #include "base/command_line.h" | 20 #include "base/command_line.h" |
| 21 #include "base/prefs/scoped_user_pref_update.h" | 21 #include "base/prefs/scoped_user_pref_update.h" |
| 22 #include "base/strings/string_number_conversions.h" | 22 #include "base/strings/string_number_conversions.h" |
| 23 #include "base/strings/utf_string_conversions.h" | 23 #include "base/strings/utf_string_conversions.h" |
| 24 #include "base/values.h" | 24 #include "base/values.h" |
| (...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 // launcher of status changes. | 374 // launcher of status changes. |
| 375 browser_status_monitor_.reset(new BrowserStatusMonitor(this)); | 375 browser_status_monitor_.reset(new BrowserStatusMonitor(this)); |
| 376 shell_window_controller_.reset(new ShellWindowLauncherController(this)); | 376 shell_window_controller_.reset(new ShellWindowLauncherController(this)); |
| 377 #endif | 377 #endif |
| 378 | 378 |
| 379 // Right now ash::Shell isn't created for tests. | 379 // Right now ash::Shell isn't created for tests. |
| 380 // TODO(mukai): Allows it to observe display change and write tests. | 380 // TODO(mukai): Allows it to observe display change and write tests. |
| 381 if (ash::Shell::HasInstance()) { | 381 if (ash::Shell::HasInstance()) { |
| 382 ash::Shell::GetInstance()->display_controller()->AddObserver(this); | 382 ash::Shell::GetInstance()->display_controller()->AddObserver(this); |
| 383 item_delegate_manager_ = | 383 item_delegate_manager_ = |
| 384 ash::Shell::GetInstance()->launcher_item_delegate_manager(); | 384 ash::Shell::GetInstance()->shelf_item_delegate_manager(); |
| 385 } | 385 } |
| 386 | 386 |
| 387 notification_registrar_.Add(this, | 387 notification_registrar_.Add(this, |
| 388 chrome::NOTIFICATION_EXTENSION_LOADED, | 388 chrome::NOTIFICATION_EXTENSION_LOADED, |
| 389 content::Source<Profile>(profile_)); | 389 content::Source<Profile>(profile_)); |
| 390 notification_registrar_.Add(this, | 390 notification_registrar_.Add(this, |
| 391 chrome::NOTIFICATION_EXTENSION_UNLOADED, | 391 chrome::NOTIFICATION_EXTENSION_UNLOADED, |
| 392 content::Source<Profile>(profile_)); | 392 content::Source<Profile>(profile_)); |
| 393 } | 393 } |
| 394 | 394 |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 492 | 492 |
| 493 void ChromeLauncherController::SetItemController( | 493 void ChromeLauncherController::SetItemController( |
| 494 ash::LauncherID id, | 494 ash::LauncherID id, |
| 495 LauncherItemController* controller) { | 495 LauncherItemController* controller) { |
| 496 CHECK(controller); | 496 CHECK(controller); |
| 497 IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id); | 497 IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id); |
| 498 CHECK(iter != id_to_item_controller_map_.end()); | 498 CHECK(iter != id_to_item_controller_map_.end()); |
| 499 controller->set_launcher_id(id); | 499 controller->set_launcher_id(id); |
| 500 iter->second = controller; | 500 iter->second = controller; |
| 501 // Existing controller is destroyed and replaced by registering again. | 501 // Existing controller is destroyed and replaced by registering again. |
| 502 SetLauncherItemDelegate(id, controller); | 502 SetShelfItemDelegate(id, controller); |
| 503 } | 503 } |
| 504 | 504 |
| 505 void ChromeLauncherController::CloseLauncherItem(ash::LauncherID id) { | 505 void ChromeLauncherController::CloseLauncherItem(ash::LauncherID id) { |
| 506 CHECK(id); | 506 CHECK(id); |
| 507 if (IsPinned(id)) { | 507 if (IsPinned(id)) { |
| 508 // Create a new shortcut controller. | 508 // Create a new shortcut controller. |
| 509 IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id); | 509 IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id); |
| 510 CHECK(iter != id_to_item_controller_map_.end()); | 510 CHECK(iter != id_to_item_controller_map_.end()); |
| 511 SetItemStatus(id, ash::STATUS_CLOSED); | 511 SetItemStatus(id, ash::STATUS_CLOSED); |
| 512 std::string app_id = iter->second->app_id(); | 512 std::string app_id = iter->second->app_id(); |
| 513 iter->second = new AppShortcutLauncherItemController(app_id, this); | 513 iter->second = new AppShortcutLauncherItemController(app_id, this); |
| 514 iter->second->set_launcher_id(id); | 514 iter->second->set_launcher_id(id); |
| 515 // Existing controller is destroyed and replaced by registering again. | 515 // Existing controller is destroyed and replaced by registering again. |
| 516 SetLauncherItemDelegate(id, iter->second); | 516 SetShelfItemDelegate(id, iter->second); |
| 517 } else { | 517 } else { |
| 518 LauncherItemClosed(id); | 518 LauncherItemClosed(id); |
| 519 } | 519 } |
| 520 } | 520 } |
| 521 | 521 |
| 522 void ChromeLauncherController::Pin(ash::LauncherID id) { | 522 void ChromeLauncherController::Pin(ash::LauncherID id) { |
| 523 DCHECK(HasItemController(id)); | 523 DCHECK(HasItemController(id)); |
| 524 | 524 |
| 525 int index = model_->ItemIndexByID(id); | 525 int index = model_->ItemIndexByID(id); |
| 526 DCHECK_GE(index, 0); | 526 DCHECK_GE(index, 0); |
| (...skipping 849 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1376 void ChromeLauncherController::SetAppIconLoaderForTest( | 1376 void ChromeLauncherController::SetAppIconLoaderForTest( |
| 1377 extensions::AppIconLoader* loader) { | 1377 extensions::AppIconLoader* loader) { |
| 1378 app_icon_loader_.reset(loader); | 1378 app_icon_loader_.reset(loader); |
| 1379 } | 1379 } |
| 1380 | 1380 |
| 1381 const std::string& ChromeLauncherController::GetAppIdFromLauncherIdForTest( | 1381 const std::string& ChromeLauncherController::GetAppIdFromLauncherIdForTest( |
| 1382 ash::LauncherID id) { | 1382 ash::LauncherID id) { |
| 1383 return id_to_item_controller_map_[id]->app_id(); | 1383 return id_to_item_controller_map_[id]->app_id(); |
| 1384 } | 1384 } |
| 1385 | 1385 |
| 1386 void ChromeLauncherController::SetLauncherItemDelegateManagerForTest( | 1386 void ChromeLauncherController::SetShelfItemDelegateManagerForTest( |
| 1387 ash::LauncherItemDelegateManager* manager) { | 1387 ash::ShelfItemDelegateManager* manager) { |
| 1388 item_delegate_manager_ = manager; | 1388 item_delegate_manager_ = manager; |
| 1389 } | 1389 } |
| 1390 | 1390 |
| 1391 ash::LauncherID ChromeLauncherController::CreateAppShortcutLauncherItemWithType( | 1391 ash::LauncherID ChromeLauncherController::CreateAppShortcutLauncherItemWithType( |
| 1392 const std::string& app_id, | 1392 const std::string& app_id, |
| 1393 int index, | 1393 int index, |
| 1394 ash::LauncherItemType launcher_item_type) { | 1394 ash::LauncherItemType launcher_item_type) { |
| 1395 AppShortcutLauncherItemController* controller = | 1395 AppShortcutLauncherItemController* controller = |
| 1396 new AppShortcutLauncherItemController(app_id, this); | 1396 new AppShortcutLauncherItemController(app_id, this); |
| 1397 ash::LauncherID launcher_id = InsertAppLauncherItem( | 1397 ash::LauncherID launcher_id = InsertAppLauncherItem( |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1734 status = ash::STATUS_ACTIVE; | 1734 status = ash::STATUS_ACTIVE; |
| 1735 else | 1735 else |
| 1736 status = ash::STATUS_RUNNING; | 1736 status = ash::STATUS_RUNNING; |
| 1737 } | 1737 } |
| 1738 item.status = status; | 1738 item.status = status; |
| 1739 | 1739 |
| 1740 model_->AddAt(index, item); | 1740 model_->AddAt(index, item); |
| 1741 | 1741 |
| 1742 app_icon_loader_->FetchImage(app_id); | 1742 app_icon_loader_->FetchImage(app_id); |
| 1743 | 1743 |
| 1744 SetLauncherItemDelegate(id, controller); | 1744 SetShelfItemDelegate(id, controller); |
| 1745 | 1745 |
| 1746 return id; | 1746 return id; |
| 1747 } | 1747 } |
| 1748 | 1748 |
| 1749 bool ChromeLauncherController::HasItemController(ash::LauncherID id) const { | 1749 bool ChromeLauncherController::HasItemController(ash::LauncherID id) const { |
| 1750 return id_to_item_controller_map_.find(id) != | 1750 return id_to_item_controller_map_.find(id) != |
| 1751 id_to_item_controller_map_.end(); | 1751 id_to_item_controller_map_.end(); |
| 1752 } | 1752 } |
| 1753 | 1753 |
| 1754 std::vector<content::WebContents*> | 1754 std::vector<content::WebContents*> |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1781 ash::LauncherItem browser_shortcut; | 1781 ash::LauncherItem browser_shortcut; |
| 1782 browser_shortcut.type = ash::TYPE_BROWSER_SHORTCUT; | 1782 browser_shortcut.type = ash::TYPE_BROWSER_SHORTCUT; |
| 1783 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 1783 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 1784 browser_shortcut.image = *rb.GetImageSkiaNamed(IDR_PRODUCT_LOGO_32); | 1784 browser_shortcut.image = *rb.GetImageSkiaNamed(IDR_PRODUCT_LOGO_32); |
| 1785 ash::LauncherID id = model_->next_id(); | 1785 ash::LauncherID id = model_->next_id(); |
| 1786 size_t index = GetChromeIconIndexForCreation(); | 1786 size_t index = GetChromeIconIndexForCreation(); |
| 1787 model_->AddAt(index, browser_shortcut); | 1787 model_->AddAt(index, browser_shortcut); |
| 1788 id_to_item_controller_map_[id] = | 1788 id_to_item_controller_map_[id] = |
| 1789 new BrowserShortcutLauncherItemController(this); | 1789 new BrowserShortcutLauncherItemController(this); |
| 1790 id_to_item_controller_map_[id]->set_launcher_id(id); | 1790 id_to_item_controller_map_[id]->set_launcher_id(id); |
| 1791 // LauncherItemDelegateManager owns BrowserShortcutLauncherItemController. | 1791 // ShelfItemDelegateManager owns BrowserShortcutLauncherItemController. |
| 1792 SetLauncherItemDelegate(id, id_to_item_controller_map_[id]); | 1792 SetShelfItemDelegate(id, id_to_item_controller_map_[id]); |
| 1793 return id; | 1793 return id; |
| 1794 } | 1794 } |
| 1795 | 1795 |
| 1796 void ChromeLauncherController::PersistChromeItemIndex(int index) { | 1796 void ChromeLauncherController::PersistChromeItemIndex(int index) { |
| 1797 profile_->GetPrefs()->SetInteger(prefs::kShelfChromeIconIndex, index); | 1797 profile_->GetPrefs()->SetInteger(prefs::kShelfChromeIconIndex, index); |
| 1798 } | 1798 } |
| 1799 | 1799 |
| 1800 int ChromeLauncherController::GetChromeIconIndexFromPref() const { | 1800 int ChromeLauncherController::GetChromeIconIndexFromPref() const { |
| 1801 size_t index = profile_->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex); | 1801 size_t index = profile_->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex); |
| 1802 const base::ListValue* pinned_apps_pref = | 1802 const base::ListValue* pinned_apps_pref = |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1957 browser_to_close.push_back(browser); | 1957 browser_to_close.push_back(browser); |
| 1958 } | 1958 } |
| 1959 } | 1959 } |
| 1960 while (!browser_to_close.empty()) { | 1960 while (!browser_to_close.empty()) { |
| 1961 TabStripModel* tab_strip = browser_to_close.back()->tab_strip_model(); | 1961 TabStripModel* tab_strip = browser_to_close.back()->tab_strip_model(); |
| 1962 tab_strip->CloseWebContentsAt(0, TabStripModel::CLOSE_NONE); | 1962 tab_strip->CloseWebContentsAt(0, TabStripModel::CLOSE_NONE); |
| 1963 browser_to_close.pop_back(); | 1963 browser_to_close.pop_back(); |
| 1964 } | 1964 } |
| 1965 } | 1965 } |
| 1966 | 1966 |
| 1967 void ChromeLauncherController::SetLauncherItemDelegate( | 1967 void ChromeLauncherController::SetShelfItemDelegate( |
| 1968 ash::LauncherID id, | 1968 ash::LauncherID id, |
| 1969 ash::LauncherItemDelegate* item_delegate) { | 1969 ash::ShelfItemDelegate* item_delegate) { |
| 1970 DCHECK_GT(id, 0); | 1970 DCHECK_GT(id, 0); |
| 1971 DCHECK(item_delegate); | 1971 DCHECK(item_delegate); |
| 1972 DCHECK(item_delegate_manager_); | 1972 DCHECK(item_delegate_manager_); |
| 1973 item_delegate_manager_->SetLauncherItemDelegate(id, | 1973 item_delegate_manager_->SetShelfItemDelegate( |
| 1974 scoped_ptr<ash::LauncherItemDelegate>(item_delegate).Pass()); | 1974 id, scoped_ptr<ash::ShelfItemDelegate>(item_delegate).Pass()); |
| 1975 } | 1975 } |
| 1976 | 1976 |
| 1977 void ChromeLauncherController::AttachProfile(Profile* profile) { | 1977 void ChromeLauncherController::AttachProfile(Profile* profile) { |
| 1978 profile_ = profile; | 1978 profile_ = profile; |
| 1979 // Either add the profile to the list of known profiles and make it the active | 1979 // Either add the profile to the list of known profiles and make it the active |
| 1980 // one for some functions of AppTabHelper or create a new one. | 1980 // one for some functions of AppTabHelper or create a new one. |
| 1981 if (!app_tab_helper_.get()) | 1981 if (!app_tab_helper_.get()) |
| 1982 app_tab_helper_.reset(new LauncherAppTabHelper(profile_)); | 1982 app_tab_helper_.reset(new LauncherAppTabHelper(profile_)); |
| 1983 else | 1983 else |
| 1984 app_tab_helper_->SetCurrentUser(profile_); | 1984 app_tab_helper_->SetCurrentUser(profile_); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2011 } | 2011 } |
| 2012 | 2012 |
| 2013 void ChromeLauncherController::ReleaseProfile() { | 2013 void ChromeLauncherController::ReleaseProfile() { |
| 2014 if (app_sync_ui_state_) | 2014 if (app_sync_ui_state_) |
| 2015 app_sync_ui_state_->RemoveObserver(this); | 2015 app_sync_ui_state_->RemoveObserver(this); |
| 2016 | 2016 |
| 2017 PrefServiceSyncable::FromProfile(profile_)->RemoveObserver(this); | 2017 PrefServiceSyncable::FromProfile(profile_)->RemoveObserver(this); |
| 2018 | 2018 |
| 2019 pref_change_registrar_.RemoveAll(); | 2019 pref_change_registrar_.RemoveAll(); |
| 2020 } | 2020 } |
| OLD | NEW |