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 <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
452 | 452 |
453 #if defined(OS_CHROMEOS) | 453 #if defined(OS_CHROMEOS) |
454 // On Chrome OS using multi profile we want to switch the content of the shelf | 454 // On Chrome OS using multi profile we want to switch the content of the shelf |
455 // with a user change. Note that for unit tests the instance can be NULL. | 455 // with a user change. Note that for unit tests the instance can be NULL. |
456 if (chrome::MultiUserWindowManager::GetMultiProfileMode() != | 456 if (chrome::MultiUserWindowManager::GetMultiProfileMode() != |
457 chrome::MultiUserWindowManager::MULTI_PROFILE_MODE_OFF) { | 457 chrome::MultiUserWindowManager::MULTI_PROFILE_MODE_OFF) { |
458 user_switch_observer_.reset( | 458 user_switch_observer_.reset( |
459 new ChromeLauncherControllerUserSwitchObserver(this)); | 459 new ChromeLauncherControllerUserSwitchObserver(this)); |
460 } | 460 } |
461 | 461 |
462 scoped_ptr<AppWindowLauncherController> extension_app_window_controller; | 462 std::unique_ptr<AppWindowLauncherController> extension_app_window_controller; |
463 // Create our v1/v2 application / browser monitors which will inform the | 463 // Create our v1/v2 application / browser monitors which will inform the |
464 // launcher of status changes. | 464 // launcher of status changes. |
465 if (chrome::MultiUserWindowManager::GetMultiProfileMode() == | 465 if (chrome::MultiUserWindowManager::GetMultiProfileMode() == |
466 chrome::MultiUserWindowManager::MULTI_PROFILE_MODE_SEPARATED) { | 466 chrome::MultiUserWindowManager::MULTI_PROFILE_MODE_SEPARATED) { |
467 // If running in separated destkop mode, we create the multi profile version | 467 // If running in separated destkop mode, we create the multi profile version |
468 // of status monitor. | 468 // of status monitor. |
469 browser_status_monitor_.reset(new MultiProfileBrowserStatusMonitor(this)); | 469 browser_status_monitor_.reset(new MultiProfileBrowserStatusMonitor(this)); |
470 extension_app_window_controller.reset( | 470 extension_app_window_controller.reset( |
471 new MultiProfileAppWindowLauncherController(this)); | 471 new MultiProfileAppWindowLauncherController(this)); |
472 } else { | 472 } else { |
473 // Create our v1/v2 application / browser monitors which will inform the | 473 // Create our v1/v2 application / browser monitors which will inform the |
474 // launcher of status changes. | 474 // launcher of status changes. |
475 browser_status_monitor_.reset(new BrowserStatusMonitor(this)); | 475 browser_status_monitor_.reset(new BrowserStatusMonitor(this)); |
476 extension_app_window_controller.reset( | 476 extension_app_window_controller.reset( |
477 new ExtensionAppWindowLauncherController(this)); | 477 new ExtensionAppWindowLauncherController(this)); |
478 } | 478 } |
479 app_window_controllers_.push_back(std::move(extension_app_window_controller)); | 479 app_window_controllers_.push_back(std::move(extension_app_window_controller)); |
480 | 480 |
481 scoped_ptr<AppWindowLauncherController> arc_app_window_controller; | 481 std::unique_ptr<AppWindowLauncherController> arc_app_window_controller; |
482 arc_app_window_controller.reset(new ArcAppWindowLauncherController(this)); | 482 arc_app_window_controller.reset(new ArcAppWindowLauncherController(this)); |
483 app_window_controllers_.push_back(std::move(arc_app_window_controller)); | 483 app_window_controllers_.push_back(std::move(arc_app_window_controller)); |
484 #else | 484 #else |
485 // Create our v1/v2 application / browser monitors which will inform the | 485 // Create our v1/v2 application / browser monitors which will inform the |
486 // launcher of status changes. | 486 // launcher of status changes. |
487 browser_status_monitor_.reset(new BrowserStatusMonitor(this)); | 487 browser_status_monitor_.reset(new BrowserStatusMonitor(this)); |
488 scoped_ptr<AppWindowLauncherController> extension_app_window_controller; | 488 std::unique_ptr<AppWindowLauncherController> extension_app_window_controller; |
489 extension_app_window_controller.reset( | 489 extension_app_window_controller.reset( |
490 new ExtensionAppWindowLauncherController(this)); | 490 new ExtensionAppWindowLauncherController(this)); |
491 app_window_controllers_.push_back(std::move(extension_app_window_controller)); | 491 app_window_controllers_.push_back(std::move(extension_app_window_controller)); |
492 #endif | 492 #endif |
493 | 493 |
494 // Right now ash::Shell isn't created for tests. | 494 // Right now ash::Shell isn't created for tests. |
495 // TODO(mukai): Allows it to observe display change and write tests. | 495 // TODO(mukai): Allows it to observe display change and write tests. |
496 if (ash::Shell::HasInstance()) { | 496 if (ash::Shell::HasInstance()) { |
497 ash::Shell::GetInstance()->window_tree_host_manager()->AddObserver(this); | 497 ash::Shell::GetInstance()->window_tree_host_manager()->AddObserver(this); |
498 // If it got already set, we remove the observer first again and swap the | 498 // If it got already set, we remove the observer first again and swap the |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
811 // If there is an existing non-shortcut controller for this app, open it. | 811 // If there is an existing non-shortcut controller for this app, open it. |
812 ash::ShelfID id = GetShelfIDForAppID(app_id); | 812 ash::ShelfID id = GetShelfIDForAppID(app_id); |
813 if (id) { | 813 if (id) { |
814 LauncherItemController* controller = GetLauncherItemController(id); | 814 LauncherItemController* controller = GetLauncherItemController(id); |
815 controller->Activate(source); | 815 controller->Activate(source); |
816 return; | 816 return; |
817 } | 817 } |
818 | 818 |
819 // Create a temporary application launcher item and use it to see if there are | 819 // Create a temporary application launcher item and use it to see if there are |
820 // running instances. | 820 // running instances. |
821 scoped_ptr<AppShortcutLauncherItemController> app_controller( | 821 std::unique_ptr<AppShortcutLauncherItemController> app_controller( |
822 new AppShortcutLauncherItemController(app_id, this)); | 822 new AppShortcutLauncherItemController(app_id, this)); |
823 if (!app_controller->GetRunningApplications().empty()) | 823 if (!app_controller->GetRunningApplications().empty()) |
824 app_controller->Activate(source); | 824 app_controller->Activate(source); |
825 else | 825 else |
826 LaunchApp(app_id, source, event_flags); | 826 LaunchApp(app_id, source, event_flags); |
827 } | 827 } |
828 | 828 |
829 extensions::LaunchType ChromeLauncherController::GetLaunchType( | 829 extensions::LaunchType ChromeLauncherController::GetLaunchType( |
830 ash::ShelfID id) { | 830 ash::ShelfID id) { |
831 const Extension* extension = GetExtensionForAppID(GetAppIDForShelfID(id)); | 831 const Extension* extension = GetExtensionForAppID(GetAppIDForShelfID(id)); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
968 if (ignore_persist_pinned_state_change_) | 968 if (ignore_persist_pinned_state_change_) |
969 return; | 969 return; |
970 // It is a coding error to call PersistPinnedState() if the pinned apps are | 970 // It is a coding error to call PersistPinnedState() if the pinned apps are |
971 // not user-editable. The code should check earlier and not perform any | 971 // not user-editable. The code should check earlier and not perform any |
972 // modification actions that trigger persisting the state. | 972 // modification actions that trigger persisting the state. |
973 // Mutating kPinnedLauncherApps is going to notify us and trigger us to | 973 // Mutating kPinnedLauncherApps is going to notify us and trigger us to |
974 // process the change. We don't want that to happen so remove ourselves as a | 974 // process the change. We don't want that to happen so remove ourselves as a |
975 // listener. | 975 // listener. |
976 pref_change_registrar_.Remove(prefs::kPinnedLauncherApps); | 976 pref_change_registrar_.Remove(prefs::kPinnedLauncherApps); |
977 { | 977 { |
978 scoped_ptr<const base::ListValue> pinned_apps_pref = | 978 std::unique_ptr<const base::ListValue> pinned_apps_pref = |
979 profile_->GetPrefs() | 979 profile_->GetPrefs() |
980 ->GetList(prefs::kPinnedLauncherApps) | 980 ->GetList(prefs::kPinnedLauncherApps) |
981 ->CreateDeepCopy(); | 981 ->CreateDeepCopy(); |
982 | 982 |
983 const base::ListValue* policy_pinned_apps_pref = | 983 const base::ListValue* policy_pinned_apps_pref = |
984 profile_->GetPrefs()->GetList(prefs::kPolicyPinnedLauncherApps); | 984 profile_->GetPrefs()->GetList(prefs::kPolicyPinnedLauncherApps); |
985 | 985 |
986 ListPrefUpdate updater(profile_->GetPrefs(), prefs::kPinnedLauncherApps); | 986 ListPrefUpdate updater(profile_->GetPrefs(), prefs::kPinnedLauncherApps); |
987 updater->Clear(); | 987 updater->Clear(); |
988 for (size_t i = 0; i < model_->items().size(); ++i) { | 988 for (size_t i = 0; i < model_->items().size(); ++i) { |
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1458 return CreateAppShortcutLauncherItemWithType(app_id, | 1458 return CreateAppShortcutLauncherItemWithType(app_id, |
1459 index, | 1459 index, |
1460 ash::TYPE_APP_SHORTCUT); | 1460 ash::TYPE_APP_SHORTCUT); |
1461 } | 1461 } |
1462 | 1462 |
1463 void ChromeLauncherController::SetAppTabHelperForTest(AppTabHelper* helper) { | 1463 void ChromeLauncherController::SetAppTabHelperForTest(AppTabHelper* helper) { |
1464 app_tab_helper_.reset(helper); | 1464 app_tab_helper_.reset(helper); |
1465 } | 1465 } |
1466 | 1466 |
1467 void ChromeLauncherController::SetAppIconLoadersForTest( | 1467 void ChromeLauncherController::SetAppIconLoadersForTest( |
1468 std::vector<scoped_ptr<AppIconLoader>>& loaders) { | 1468 std::vector<std::unique_ptr<AppIconLoader>>& loaders) { |
1469 app_icon_loaders_.clear(); | 1469 app_icon_loaders_.clear(); |
1470 for (auto& loader : loaders) | 1470 for (auto& loader : loaders) |
1471 app_icon_loaders_.push_back(std::move(loader)); | 1471 app_icon_loaders_.push_back(std::move(loader)); |
1472 } | 1472 } |
1473 | 1473 |
1474 const std::string& ChromeLauncherController::GetAppIdFromShelfIdForTest( | 1474 const std::string& ChromeLauncherController::GetAppIdFromShelfIdForTest( |
1475 ash::ShelfID id) { | 1475 ash::ShelfID id) { |
1476 return id_to_item_controller_map_[id]->app_id(); | 1476 return id_to_item_controller_map_[id]->app_id(); |
1477 } | 1477 } |
1478 | 1478 |
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2141 } | 2141 } |
2142 } | 2142 } |
2143 | 2143 |
2144 void ChromeLauncherController::SetShelfItemDelegate( | 2144 void ChromeLauncherController::SetShelfItemDelegate( |
2145 ash::ShelfID id, | 2145 ash::ShelfID id, |
2146 ash::ShelfItemDelegate* item_delegate) { | 2146 ash::ShelfItemDelegate* item_delegate) { |
2147 DCHECK_GT(id, 0); | 2147 DCHECK_GT(id, 0); |
2148 DCHECK(item_delegate); | 2148 DCHECK(item_delegate); |
2149 DCHECK(item_delegate_manager_); | 2149 DCHECK(item_delegate_manager_); |
2150 item_delegate_manager_->SetShelfItemDelegate( | 2150 item_delegate_manager_->SetShelfItemDelegate( |
2151 id, scoped_ptr<ash::ShelfItemDelegate>(item_delegate)); | 2151 id, std::unique_ptr<ash::ShelfItemDelegate>(item_delegate)); |
2152 } | 2152 } |
2153 | 2153 |
2154 void ChromeLauncherController::AttachProfile(Profile* profile) { | 2154 void ChromeLauncherController::AttachProfile(Profile* profile) { |
2155 profile_ = profile; | 2155 profile_ = profile; |
2156 // Either add the profile to the list of known profiles and make it the active | 2156 // Either add the profile to the list of known profiles and make it the active |
2157 // one for some functions of AppTabHelper or create a new one. | 2157 // one for some functions of AppTabHelper or create a new one. |
2158 if (!app_tab_helper_.get()) | 2158 if (!app_tab_helper_.get()) |
2159 app_tab_helper_.reset(new LauncherAppTabHelper(profile_)); | 2159 app_tab_helper_.reset(new LauncherAppTabHelper(profile_)); |
2160 else | 2160 else |
2161 app_tab_helper_->SetCurrentUser(profile_); | 2161 app_tab_helper_->SetCurrentUser(profile_); |
2162 // TODO(skuhne): The AppIconLoaderImpl has the same problem. Each loaded | 2162 // TODO(skuhne): The AppIconLoaderImpl has the same problem. Each loaded |
2163 // image is associated with a profile (it's loader requires the profile). | 2163 // image is associated with a profile (it's loader requires the profile). |
2164 // Since icon size changes are possible, the icon could be requested to be | 2164 // Since icon size changes are possible, the icon could be requested to be |
2165 // reloaded. However - having it not multi profile aware would cause problems | 2165 // reloaded. However - having it not multi profile aware would cause problems |
2166 // if the icon cache gets deleted upon user switch. | 2166 // if the icon cache gets deleted upon user switch. |
2167 scoped_ptr<AppIconLoader> extension_app_icon_loader( | 2167 std::unique_ptr<AppIconLoader> extension_app_icon_loader( |
2168 new extensions::ExtensionAppIconLoader( | 2168 new extensions::ExtensionAppIconLoader( |
2169 profile_, extension_misc::EXTENSION_ICON_SMALL, this)); | 2169 profile_, extension_misc::EXTENSION_ICON_SMALL, this)); |
2170 app_icon_loaders_.push_back(std::move(extension_app_icon_loader)); | 2170 app_icon_loaders_.push_back(std::move(extension_app_icon_loader)); |
2171 | 2171 |
2172 #if defined(OS_CHROMEOS) | 2172 #if defined(OS_CHROMEOS) |
2173 scoped_ptr<AppIconLoader> arc_app_icon_loader(new ArcAppIconLoader( | 2173 std::unique_ptr<AppIconLoader> arc_app_icon_loader(new ArcAppIconLoader( |
2174 profile_, extension_misc::EXTENSION_ICON_SMALL, this)); | 2174 profile_, extension_misc::EXTENSION_ICON_SMALL, this)); |
2175 app_icon_loaders_.push_back(std::move(arc_app_icon_loader)); | 2175 app_icon_loaders_.push_back(std::move(arc_app_icon_loader)); |
2176 #endif | 2176 #endif |
2177 | 2177 |
2178 pref_change_registrar_.Init(profile_->GetPrefs()); | 2178 pref_change_registrar_.Init(profile_->GetPrefs()); |
2179 pref_change_registrar_.Add( | 2179 pref_change_registrar_.Add( |
2180 prefs::kPinnedLauncherApps, | 2180 prefs::kPinnedLauncherApps, |
2181 base::Bind(&ChromeLauncherController::UpdateAppLaunchersFromPref, | 2181 base::Bind(&ChromeLauncherController::UpdateAppLaunchersFromPref, |
2182 base::Unretained(this))); | 2182 base::Unretained(this))); |
2183 pref_change_registrar_.Add( | 2183 pref_change_registrar_.Add( |
(...skipping 13 matching lines...) Expand all Loading... |
2197 prefs::kShelfPreferences, | 2197 prefs::kShelfPreferences, |
2198 base::Bind(&ChromeLauncherController::SetShelfBehaviorsFromPrefs, | 2198 base::Bind(&ChromeLauncherController::SetShelfBehaviorsFromPrefs, |
2199 base::Unretained(this))); | 2199 base::Unretained(this))); |
2200 #if defined(OS_CHROMEOS) | 2200 #if defined(OS_CHROMEOS) |
2201 pref_change_registrar_.Add( | 2201 pref_change_registrar_.Add( |
2202 prefs::kTouchVirtualKeyboardEnabled, | 2202 prefs::kTouchVirtualKeyboardEnabled, |
2203 base::Bind(&ChromeLauncherController::SetVirtualKeyboardBehaviorFromPrefs, | 2203 base::Bind(&ChromeLauncherController::SetVirtualKeyboardBehaviorFromPrefs, |
2204 base::Unretained(this))); | 2204 base::Unretained(this))); |
2205 #endif // defined(OS_CHROMEOS) | 2205 #endif // defined(OS_CHROMEOS) |
2206 | 2206 |
2207 scoped_ptr<LauncherAppUpdater> extension_app_updater( | 2207 std::unique_ptr<LauncherAppUpdater> extension_app_updater( |
2208 new LauncherExtensionAppUpdater(this, profile_)); | 2208 new LauncherExtensionAppUpdater(this, profile_)); |
2209 app_updaters_.push_back(std::move(extension_app_updater)); | 2209 app_updaters_.push_back(std::move(extension_app_updater)); |
2210 | 2210 |
2211 #if defined(OS_CHROMEOS) | 2211 #if defined(OS_CHROMEOS) |
2212 scoped_ptr<LauncherAppUpdater> arc_app_updater( | 2212 std::unique_ptr<LauncherAppUpdater> arc_app_updater( |
2213 new LauncherArcAppUpdater(this, profile_)); | 2213 new LauncherArcAppUpdater(this, profile_)); |
2214 app_updaters_.push_back(std::move(arc_app_updater)); | 2214 app_updaters_.push_back(std::move(arc_app_updater)); |
2215 #endif | 2215 #endif |
2216 } | 2216 } |
2217 | 2217 |
2218 void ChromeLauncherController::ReleaseProfile() { | 2218 void ChromeLauncherController::ReleaseProfile() { |
2219 if (app_sync_ui_state_) | 2219 if (app_sync_ui_state_) |
2220 app_sync_ui_state_->RemoveObserver(this); | 2220 app_sync_ui_state_->RemoveObserver(this); |
2221 | 2221 |
2222 app_updaters_.clear(); | 2222 app_updaters_.clear(); |
2223 | 2223 |
2224 PrefServiceSyncableFromProfile(profile_)->RemoveObserver(this); | 2224 PrefServiceSyncableFromProfile(profile_)->RemoveObserver(this); |
2225 | 2225 |
2226 pref_change_registrar_.RemoveAll(); | 2226 pref_change_registrar_.RemoveAll(); |
2227 } | 2227 } |
2228 | 2228 |
2229 AppIconLoader* ChromeLauncherController::GetAppIconLoaderForApp( | 2229 AppIconLoader* ChromeLauncherController::GetAppIconLoaderForApp( |
2230 const std::string& app_id) { | 2230 const std::string& app_id) { |
2231 for (const auto& app_icon_loader : app_icon_loaders_) { | 2231 for (const auto& app_icon_loader : app_icon_loaders_) { |
2232 if (app_icon_loader->CanLoadImageForApp(app_id)) | 2232 if (app_icon_loader->CanLoadImageForApp(app_id)) |
2233 return app_icon_loader.get(); | 2233 return app_icon_loader.get(); |
2234 } | 2234 } |
2235 | 2235 |
2236 return nullptr; | 2236 return nullptr; |
2237 } | 2237 } |
OLD | NEW |