| 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  | 
|    11 #include "ash/ash_switches.h" |    11 #include "ash/ash_switches.h" | 
|    12 #include "ash/desktop_background/desktop_background_controller.h" |    12 #include "ash/desktop_background/desktop_background_controller.h" | 
|    13 #include "ash/multi_profile_uma.h" |    13 #include "ash/multi_profile_uma.h" | 
|    14 #include "ash/root_window_controller.h" |    14 #include "ash/root_window_controller.h" | 
|    15 #include "ash/shelf/shelf.h" |    15 #include "ash/shelf/shelf.h" | 
|    16 #include "ash/shelf/shelf_item_delegate_manager.h" |    16 #include "ash/shelf/shelf_item_delegate_manager.h" | 
|    17 #include "ash/shelf/shelf_layout_manager.h" |  | 
|    18 #include "ash/shelf/shelf_model.h" |    17 #include "ash/shelf/shelf_model.h" | 
|    19 #include "ash/shell.h" |    18 #include "ash/shell.h" | 
|    20 #include "ash/system/tray/system_tray_delegate.h" |    19 #include "ash/system/tray/system_tray_delegate.h" | 
|    21 #include "ash/wm/window_util.h" |    20 #include "ash/wm/window_util.h" | 
|    22 #include "base/command_line.h" |    21 #include "base/command_line.h" | 
|    23 #include "base/macros.h" |    22 #include "base/macros.h" | 
|    24 #include "base/strings/pattern.h" |    23 #include "base/strings/pattern.h" | 
|    25 #include "base/strings/string_number_conversions.h" |    24 #include "base/strings/string_number_conversions.h" | 
|    26 #include "base/strings/string_util.h" |    25 #include "base/strings/string_util.h" | 
|    27 #include "base/strings/utf_string_conversions.h" |    26 #include "base/strings/utf_string_conversions.h" | 
| (...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   509 ChromeLauncherController::~ChromeLauncherController() { |   508 ChromeLauncherController::~ChromeLauncherController() { | 
|   510   if (item_delegate_manager_) |   509   if (item_delegate_manager_) | 
|   511     item_delegate_manager_->RemoveObserver(this); |   510     item_delegate_manager_->RemoveObserver(this); | 
|   512  |   511  | 
|   513   // Reset the BrowserStatusMonitor as it has a weak pointer to this. |   512   // Reset the BrowserStatusMonitor as it has a weak pointer to this. | 
|   514   browser_status_monitor_.reset(); |   513   browser_status_monitor_.reset(); | 
|   515  |   514  | 
|   516   // Reset the app window controllers here since it has a weak pointer to this. |   515   // Reset the app window controllers here since it has a weak pointer to this. | 
|   517   app_window_controllers_.clear(); |   516   app_window_controllers_.clear(); | 
|   518  |   517  | 
|   519   for (auto iter : shelves_) |  | 
|   520     iter->shelf_layout_manager()->RemoveObserver(this); |  | 
|   521  |  | 
|   522   model_->RemoveObserver(this); |   518   model_->RemoveObserver(this); | 
|   523   if (ash::Shell::HasInstance()) |   519   if (ash::Shell::HasInstance()) | 
|   524     ash::Shell::GetInstance()->window_tree_host_manager()->RemoveObserver(this); |   520     ash::Shell::GetInstance()->window_tree_host_manager()->RemoveObserver(this); | 
|   525   for (IDToItemControllerMap::iterator i = id_to_item_controller_map_.begin(); |   521   for (IDToItemControllerMap::iterator i = id_to_item_controller_map_.begin(); | 
|   526        i != id_to_item_controller_map_.end(); ++i) { |   522        i != id_to_item_controller_map_.end(); ++i) { | 
|   527     int index = model_->ItemIndexByID(i->first); |   523     int index = model_->ItemIndexByID(i->first); | 
|   528     // A "browser proxy" is not known to the model and this removal does |   524     // A "browser proxy" is not known to the model and this removal does | 
|   529     // therefore not need to be propagated to the model. |   525     // therefore not need to be propagated to the model. | 
|   530     if (index != -1 && |   526     if (index != -1 && | 
|   531         model_->items()[index].type != ash::TYPE_BROWSER_SHORTCUT) |   527         model_->items()[index].type != ash::TYPE_BROWSER_SHORTCUT) | 
|   532       model_->RemoveItemAt(index); |   528       model_->RemoveItemAt(index); | 
|   533   } |   529   } | 
|   534  |   530  | 
|   535   if (ash::Shell::HasInstance()) |  | 
|   536     ash::Shell::GetInstance()->RemoveShellObserver(this); |  | 
|   537  |  | 
|   538   // Release all profile dependent resources. |   531   // Release all profile dependent resources. | 
|   539   ReleaseProfile(); |   532   ReleaseProfile(); | 
|   540   if (instance_ == this) |   533   if (instance_ == this) | 
|   541     instance_ = NULL; |   534     instance_ = NULL; | 
|   542  |   535  | 
|   543   // Get rid of the multi user window manager instance. |   536   // Get rid of the multi user window manager instance. | 
|   544   chrome::MultiUserWindowManager::DeleteInstance(); |   537   chrome::MultiUserWindowManager::DeleteInstance(); | 
|   545 } |   538 } | 
|   546  |   539  | 
|   547 // static |   540 // static | 
|   548 ChromeLauncherController* ChromeLauncherController::CreateInstance( |   541 ChromeLauncherController* ChromeLauncherController::CreateInstance( | 
|   549     Profile* profile, |   542     Profile* profile, | 
|   550     ash::ShelfModel* model) { |   543     ash::ShelfModel* model) { | 
|   551   // We do not check here for re-creation of the ChromeLauncherController since |   544   // We do not check here for re-creation of the ChromeLauncherController since | 
|   552   // it appears that it might be intentional that the ChromeLauncherController |   545   // it appears that it might be intentional that the ChromeLauncherController | 
|   553   // can be re-created. |   546   // can be re-created. | 
|   554   instance_ = new ChromeLauncherController(profile, model); |   547   instance_ = new ChromeLauncherController(profile, model); | 
|   555   return instance_; |   548   return instance_; | 
|   556 } |   549 } | 
|   557  |   550  | 
|   558 void ChromeLauncherController::Init() { |   551 void ChromeLauncherController::Init() { | 
|   559   CreateBrowserShortcutLauncherItem(); |   552   CreateBrowserShortcutLauncherItem(); | 
|   560   UpdateAppLaunchersFromPref(); |   553   UpdateAppLaunchersFromPref(); | 
|   561  |   554  | 
 |   555 #if defined(OS_CHROMEOS) | 
|   562   // TODO(sky): update unit test so that this test isn't necessary. |   556   // TODO(sky): update unit test so that this test isn't necessary. | 
|   563   if (ash::Shell::HasInstance()) { |   557   if (ash::Shell::HasInstance()) | 
|   564     SetShelfAutoHideBehaviorFromPrefs(); |  | 
|   565     SetShelfAlignmentFromPrefs(); |  | 
|   566 #if defined(OS_CHROMEOS) |  | 
|   567     SetVirtualKeyboardBehaviorFromPrefs(); |   558     SetVirtualKeyboardBehaviorFromPrefs(); | 
|   568 #endif  // defined(OS_CHROMEOS) |   559 #endif  // defined(OS_CHROMEOS) | 
|   569     syncable_prefs::PrefServiceSyncable* prefs = |   560  | 
|   570         PrefServiceSyncableFromProfile(profile_); |   561   syncable_prefs::PrefServiceSyncable* prefs = | 
|   571     if (!prefs->FindPreference(prefs::kShelfAlignmentLocal)->HasUserSetting() || |   562       PrefServiceSyncableFromProfile(profile_); | 
|   572         !prefs->FindPreference(prefs::kShelfAutoHideBehaviorLocal)-> |   563   if (!prefs->FindPreference(prefs::kShelfAlignmentLocal)->HasUserSetting() || | 
|   573             HasUserSetting()) { |   564       !prefs->FindPreference(prefs::kShelfAutoHideBehaviorLocal) | 
|   574       // This causes OnIsSyncingChanged to be called when the value of |   565            ->HasUserSetting()) { | 
|   575       // PrefService::IsSyncing() changes. |   566     // This causes OnIsSyncingChanged to be called when the value of | 
|   576       prefs->AddObserver(this); |   567     // PrefService::IsSyncing() changes. | 
|   577     } |   568     prefs->AddObserver(this); | 
|   578     ash::Shell::GetInstance()->AddShellObserver(this); |  | 
|   579   } |   569   } | 
|   580 } |   570 } | 
|   581  |   571  | 
|   582 ash::ShelfID ChromeLauncherController::CreateAppLauncherItem( |   572 ash::ShelfID ChromeLauncherController::CreateAppLauncherItem( | 
|   583     LauncherItemController* controller, |   573     LauncherItemController* controller, | 
|   584     const std::string& app_id, |   574     const std::string& app_id, | 
|   585     ash::ShelfItemStatus status) { |   575     ash::ShelfItemStatus status) { | 
|   586   CHECK(controller); |   576   CHECK(controller); | 
|   587   int index = 0; |   577   int index = 0; | 
|   588   // Panels are inserted on the left so as not to push all existing panels over. |   578   // Panels are inserted on the left so as not to push all existing panels over. | 
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   886     int index = model_->ItemIndexByID(i->first); |   876     int index = model_->ItemIndexByID(i->first); | 
|   887     if (index == -1) |   877     if (index == -1) | 
|   888       continue; |   878       continue; | 
|   889     ash::ShelfItem item = model_->items()[index]; |   879     ash::ShelfItem item = model_->items()[index]; | 
|   890     item.image = image; |   880     item.image = image; | 
|   891     model_->Set(index, item); |   881     model_->Set(index, item); | 
|   892     // It's possible we're waiting on more than one item, so don't break. |   882     // It's possible we're waiting on more than one item, so don't break. | 
|   893   } |   883   } | 
|   894 } |   884 } | 
|   895  |   885  | 
|   896 void ChromeLauncherController::OnAutoHideBehaviorChanged( |  | 
|   897     aura::Window* root_window, |  | 
|   898     ash::ShelfAutoHideBehavior new_behavior) { |  | 
|   899   SetShelfAutoHideBehaviorPrefs(new_behavior, root_window); |  | 
|   900 } |  | 
|   901  |  | 
|   902 void ChromeLauncherController::SetLauncherItemImage( |   886 void ChromeLauncherController::SetLauncherItemImage( | 
|   903     ash::ShelfID shelf_id, |   887     ash::ShelfID shelf_id, | 
|   904     const gfx::ImageSkia& image) { |   888     const gfx::ImageSkia& image) { | 
|   905   int index = model_->ItemIndexByID(shelf_id); |   889   int index = model_->ItemIndexByID(shelf_id); | 
|   906   if (index == -1) |   890   if (index == -1) | 
|   907     return; |   891     return; | 
|   908   ash::ShelfItem item = model_->items()[index]; |   892   ash::ShelfItem item = model_->items()[index]; | 
|   909   item.image = image; |   893   item.image = image; | 
|   910   model_->Set(index, item); |   894   model_->Set(index, item); | 
|   911 } |   895 } | 
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1149     window->Minimize(); |  1133     window->Minimize(); | 
|  1150     return ash::ShelfItemDelegate::kNoAction; |  1134     return ash::ShelfItemDelegate::kNoAction; | 
|  1151   } |  1135   } | 
|  1152  |  1136  | 
|  1153   window->Show(); |  1137   window->Show(); | 
|  1154   window->Activate(); |  1138   window->Activate(); | 
|  1155   return ash::ShelfItemDelegate::kExistingWindowActivated; |  1139   return ash::ShelfItemDelegate::kExistingWindowActivated; | 
|  1156 } |  1140 } | 
|  1157  |  1141  | 
|  1158 void ChromeLauncherController::OnShelfCreated(ash::Shelf* shelf) { |  1142 void ChromeLauncherController::OnShelfCreated(ash::Shelf* shelf) { | 
|  1159   shelves_.insert(shelf); |  1143   aura::Window* root_window = | 
|  1160   shelf->shelf_layout_manager()->AddObserver(this); |  1144       shelf->shelf_widget()->GetNativeWindow()->GetRootWindow(); | 
 |  1145  | 
 |  1146   shelf->SetAutoHideBehavior( | 
 |  1147       GetShelfAutoHideBehaviorFromPrefs(profile_, root_window)); | 
 |  1148  | 
 |  1149   if (ash::ShelfWidget::ShelfAlignmentAllowed()) | 
 |  1150     shelf->SetAlignment(GetShelfAlignmentFromPrefs(profile_, root_window)); | 
|  1161 } |  1151 } | 
|  1162  |  1152  | 
|  1163 void ChromeLauncherController::OnShelfDestroyed(ash::Shelf* shelf) { |  1153 void ChromeLauncherController::OnShelfDestroyed(ash::Shelf* shelf) {} | 
|  1164   shelves_.erase(shelf); |  1154  | 
|  1165   // RemoveObserver is not called here, since by the time this method is called |  1155 void ChromeLauncherController::OnShelfAlignmentChanged(ash::Shelf* shelf) { | 
|  1166   // Shelf is already in its destructor. |  1156   const char* value = nullptr; | 
 |  1157   switch (shelf->GetAlignment()) { | 
 |  1158     case ash::SHELF_ALIGNMENT_BOTTOM: | 
 |  1159       value = ash::kShelfAlignmentBottom; | 
 |  1160       break; | 
 |  1161     case ash::SHELF_ALIGNMENT_LEFT: | 
 |  1162       value = ash::kShelfAlignmentLeft; | 
 |  1163       break; | 
 |  1164     case ash::SHELF_ALIGNMENT_RIGHT: | 
 |  1165       value = ash::kShelfAlignmentRight; | 
 |  1166       break; | 
 |  1167   } | 
 |  1168  | 
 |  1169   aura::Window* root_window = | 
 |  1170       shelf->shelf_widget()->GetNativeWindow()->GetRootWindow(); | 
 |  1171  | 
 |  1172   UpdatePerDisplayPref(profile_->GetPrefs(), root_window, | 
 |  1173                        prefs::kShelfAlignment, value); | 
 |  1174  | 
 |  1175   if (root_window == ash::Shell::GetPrimaryRootWindow()) { | 
 |  1176     // See comment in |kShelfAlignment| about why we have two prefs here. | 
 |  1177     profile_->GetPrefs()->SetString(prefs::kShelfAlignmentLocal, value); | 
 |  1178     profile_->GetPrefs()->SetString(prefs::kShelfAlignment, value); | 
 |  1179   } | 
 |  1180 } | 
 |  1181  | 
 |  1182 void ChromeLauncherController::OnShelfAutoHideBehaviorChanged( | 
 |  1183     ash::Shelf* shelf) { | 
 |  1184   const char* value = nullptr; | 
 |  1185   switch (shelf->GetAutoHideBehavior()) { | 
 |  1186     case ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS: | 
 |  1187       value = ash::kShelfAutoHideBehaviorAlways; | 
 |  1188       break; | 
 |  1189     case ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER: | 
 |  1190       value = ash::kShelfAutoHideBehaviorNever; | 
 |  1191       break; | 
 |  1192     case ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN: | 
 |  1193       // This one should not be a valid preference option for now. We only want | 
 |  1194       // to completely hide it when we run in app mode - or while we temporarily | 
 |  1195       // hide the shelf as part of an animation (e.g. the multi user change). | 
 |  1196       return; | 
 |  1197   } | 
 |  1198  | 
 |  1199   aura::Window* root_window = | 
 |  1200       shelf->shelf_widget()->GetNativeWindow()->GetRootWindow(); | 
 |  1201  | 
 |  1202   UpdatePerDisplayPref(profile_->GetPrefs(), root_window, | 
 |  1203                        prefs::kShelfAutoHideBehavior, value); | 
 |  1204  | 
 |  1205   if (root_window == ash::Shell::GetPrimaryRootWindow()) { | 
 |  1206     // See comment in |kShelfAlignment| about why we have two prefs here. | 
 |  1207     profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehaviorLocal, value); | 
 |  1208     profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehavior, value); | 
 |  1209   } | 
|  1167 } |  1210 } | 
|  1168  |  1211  | 
|  1169 void ChromeLauncherController::ShelfItemAdded(int index) { |  1212 void ChromeLauncherController::ShelfItemAdded(int index) { | 
|  1170   // The app list launcher can get added to the shelf after we applied the |  1213   // The app list launcher can get added to the shelf after we applied the | 
|  1171   // preferences. In that case the item might be at the wrong spot. As such we |  1214   // preferences. In that case the item might be at the wrong spot. As such we | 
|  1172   // call the function again. |  1215   // call the function again. | 
|  1173   if (model_->items()[index].type == ash::TYPE_APP_LIST) |  1216   if (model_->items()[index].type == ash::TYPE_APP_LIST) | 
|  1174     UpdateAppLaunchersFromPref(); |  1217     UpdateAppLaunchersFromPref(); | 
|  1175 } |  1218 } | 
|  1176  |  1219  | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1210   // When coming here, the active user has already be changed so that we can |  1253   // When coming here, the active user has already be changed so that we can | 
|  1211   // set it as active. |  1254   // set it as active. | 
|  1212   AttachProfile(ProfileManager::GetActiveUserProfile()); |  1255   AttachProfile(ProfileManager::GetActiveUserProfile()); | 
|  1213   // Update the V1 applications. |  1256   // Update the V1 applications. | 
|  1214   browser_status_monitor_->ActiveUserChanged(user_email); |  1257   browser_status_monitor_->ActiveUserChanged(user_email); | 
|  1215   // Switch the running applications to the new user. |  1258   // Switch the running applications to the new user. | 
|  1216   for (auto& controller : app_window_controllers_) |  1259   for (auto& controller : app_window_controllers_) | 
|  1217     controller->ActiveUserChanged(user_email); |  1260     controller->ActiveUserChanged(user_email); | 
|  1218   // Update the user specific shell properties from the new user profile. |  1261   // Update the user specific shell properties from the new user profile. | 
|  1219   UpdateAppLaunchersFromPref(); |  1262   UpdateAppLaunchersFromPref(); | 
|  1220   SetShelfAlignmentFromPrefs(); |  | 
|  1221   SetShelfAutoHideBehaviorFromPrefs(); |  | 
|  1222   SetShelfBehaviorsFromPrefs(); |  1263   SetShelfBehaviorsFromPrefs(); | 
|  1223 #if defined(OS_CHROMEOS) |  1264 #if defined(OS_CHROMEOS) | 
|  1224   SetVirtualKeyboardBehaviorFromPrefs(); |  1265   SetVirtualKeyboardBehaviorFromPrefs(); | 
|  1225 #endif  // defined(OS_CHROMEOS) |  1266 #endif  // defined(OS_CHROMEOS) | 
|  1226   // Restore the order of running, but unpinned applications for the activated |  1267   // Restore the order of running, but unpinned applications for the activated | 
|  1227   // user. |  1268   // user. | 
|  1228   RestoreUnpinnedRunningApplicationOrder(user_email); |  1269   RestoreUnpinnedRunningApplicationOrder(user_email); | 
|  1229   // Inform the system tray of the change. |  1270   // Inform the system tray of the change. | 
|  1230   ash::Shell::GetInstance()->system_tray_delegate()->ActiveUserWasChanged(); |  1271   ash::Shell::GetInstance()->system_tray_delegate()->ActiveUserWasChanged(); | 
|  1231   // Force on-screen keyboard to reset. |  1272   // Force on-screen keyboard to reset. | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1275  |  1316  | 
|  1276   if (IsAppPinned(app_id)) { |  1317   if (IsAppPinned(app_id)) { | 
|  1277     if (profile == profile_) |  1318     if (profile == profile_) | 
|  1278       DoUnpinAppWithID(app_id); |  1319       DoUnpinAppWithID(app_id); | 
|  1279     AppIconLoader* app_icon_loader = GetAppIconLoaderForApp(app_id); |  1320     AppIconLoader* app_icon_loader = GetAppIconLoaderForApp(app_id); | 
|  1280     if (app_icon_loader) |  1321     if (app_icon_loader) | 
|  1281       app_icon_loader->ClearImage(app_id); |  1322       app_icon_loader->ClearImage(app_id); | 
|  1282   } |  1323   } | 
|  1283 } |  1324 } | 
|  1284  |  1325  | 
|  1285 void ChromeLauncherController::OnShelfAlignmentChanged( |  | 
|  1286     aura::Window* root_window) { |  | 
|  1287   const char* pref_value = NULL; |  | 
|  1288   switch (ash::Shell::GetInstance()->GetShelfAlignment(root_window)) { |  | 
|  1289     case ash::SHELF_ALIGNMENT_BOTTOM: |  | 
|  1290       pref_value = ash::kShelfAlignmentBottom; |  | 
|  1291       break; |  | 
|  1292     case ash::SHELF_ALIGNMENT_LEFT: |  | 
|  1293       pref_value = ash::kShelfAlignmentLeft; |  | 
|  1294       break; |  | 
|  1295     case ash::SHELF_ALIGNMENT_RIGHT: |  | 
|  1296       pref_value = ash::kShelfAlignmentRight; |  | 
|  1297       break; |  | 
|  1298   } |  | 
|  1299  |  | 
|  1300   UpdatePerDisplayPref( |  | 
|  1301       profile_->GetPrefs(), root_window, prefs::kShelfAlignment, pref_value); |  | 
|  1302  |  | 
|  1303   if (root_window == ash::Shell::GetPrimaryRootWindow()) { |  | 
|  1304     // See comment in |kShelfAlignment| about why we have two prefs here. |  | 
|  1305     profile_->GetPrefs()->SetString(prefs::kShelfAlignmentLocal, pref_value); |  | 
|  1306     profile_->GetPrefs()->SetString(prefs::kShelfAlignment, pref_value); |  | 
|  1307   } |  | 
|  1308 } |  | 
|  1309  |  | 
|  1310 void ChromeLauncherController::OnDisplayConfigurationChanged() { |  1326 void ChromeLauncherController::OnDisplayConfigurationChanged() { | 
|  1311   SetShelfBehaviorsFromPrefs(); |  1327   SetShelfBehaviorsFromPrefs(); | 
|  1312 } |  1328 } | 
|  1313  |  1329  | 
|  1314 void ChromeLauncherController::OnIsSyncingChanged() { |  1330 void ChromeLauncherController::OnIsSyncingChanged() { | 
|  1315   syncable_prefs::PrefServiceSyncable* prefs = |  1331   syncable_prefs::PrefServiceSyncable* prefs = | 
|  1316       PrefServiceSyncableFromProfile(profile_); |  1332       PrefServiceSyncableFromProfile(profile_); | 
|  1317   MaybePropagatePrefToLocal(prefs, |  1333   MaybePropagatePrefToLocal(prefs, | 
|  1318                             prefs::kShelfAlignmentLocal, |  1334                             prefs::kShelfAlignmentLocal, | 
|  1319                             prefs::kShelfAlignment); |  1335                             prefs::kShelfAlignment); | 
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1784       if (app_list_index != -1 && target_index <= app_list_index) |  1800       if (app_list_index != -1 && target_index <= app_list_index) | 
|  1785         ++app_list_index; |  1801         ++app_list_index; | 
|  1786     } else { |  1802     } else { | 
|  1787       int target_index = FindInsertionPoint(is_app_list); |  1803       int target_index = FindInsertionPoint(is_app_list); | 
|  1788       MoveChromeOrApplistToFinalPosition( |  1804       MoveChromeOrApplistToFinalPosition( | 
|  1789           is_chrome, is_app_list, target_index, &chrome_index, &app_list_index); |  1805           is_chrome, is_app_list, target_index, &chrome_index, &app_list_index); | 
|  1790     } |  1806     } | 
|  1791   } |  1807   } | 
|  1792 } |  1808 } | 
|  1793  |  1809  | 
|  1794 void ChromeLauncherController::SetShelfAutoHideBehaviorPrefs( |  | 
|  1795     ash::ShelfAutoHideBehavior behavior, |  | 
|  1796     aura::Window* root_window) { |  | 
|  1797   const char* value = NULL; |  | 
|  1798   switch (behavior) { |  | 
|  1799     case ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS: |  | 
|  1800       value = ash::kShelfAutoHideBehaviorAlways; |  | 
|  1801       break; |  | 
|  1802     case ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER: |  | 
|  1803       value = ash::kShelfAutoHideBehaviorNever; |  | 
|  1804       break; |  | 
|  1805     case ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN: |  | 
|  1806       // This one should not be a valid preference option for now. We only want |  | 
|  1807       // to completely hide it when we run in app mode - or while we temporarily |  | 
|  1808       // hide the shelf as part of an animation (e.g. the multi user change). |  | 
|  1809       return; |  | 
|  1810   } |  | 
|  1811  |  | 
|  1812   UpdatePerDisplayPref( |  | 
|  1813       profile_->GetPrefs(), root_window, prefs::kShelfAutoHideBehavior, value); |  | 
|  1814  |  | 
|  1815   if (root_window == ash::Shell::GetPrimaryRootWindow()) { |  | 
|  1816     // See comment in |kShelfAlignment| about why we have two prefs here. |  | 
|  1817     profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehaviorLocal, value); |  | 
|  1818     profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehavior, value); |  | 
|  1819   } |  | 
|  1820 } |  | 
|  1821  |  | 
|  1822 void ChromeLauncherController::SetShelfAutoHideBehaviorFromPrefs() { |  1810 void ChromeLauncherController::SetShelfAutoHideBehaviorFromPrefs() { | 
|  1823   aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows(); |  1811   for (auto* window : ash::Shell::GetAllRootWindows()) { | 
|  1824   for (auto i = root_windows.begin(); i != root_windows.end(); ++i) { |  1812     ash::Shelf* shelf = ash::Shelf::ForWindow(window); | 
|  1825     ash::Shell::GetInstance()->SetShelfAutoHideBehavior( |  1813     if (shelf) { | 
|  1826         GetShelfAutoHideBehaviorFromPrefs(profile_, *i), *i); |  1814       shelf->SetAutoHideBehavior( | 
 |  1815           GetShelfAutoHideBehaviorFromPrefs(profile_, window)); | 
 |  1816     } | 
|  1827   } |  1817   } | 
|  1828 } |  1818 } | 
|  1829  |  1819  | 
|  1830 void ChromeLauncherController::SetShelfAlignmentFromPrefs() { |  1820 void ChromeLauncherController::SetShelfAlignmentFromPrefs() { | 
|  1831   if (!ash::ShelfWidget::ShelfAlignmentAllowed()) |  1821   if (!ash::ShelfWidget::ShelfAlignmentAllowed()) | 
|  1832     return; |  1822     return; | 
|  1833  |  1823  | 
|  1834   aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows(); |  1824   for (auto* window : ash::Shell::GetAllRootWindows()) { | 
|  1835   for (auto i = root_windows.begin(); i != root_windows.end(); ++i) { |  1825     ash::Shelf* shelf = ash::Shelf::ForWindow(window); | 
|  1836     ash::Shell::GetInstance()->SetShelfAlignment( |  1826     if (shelf) | 
|  1837         GetShelfAlignmentFromPrefs(profile_, *i), *i); |  1827       shelf->SetAlignment(GetShelfAlignmentFromPrefs(profile_, window)); | 
|  1838   } |  1828   } | 
|  1839 } |  1829 } | 
|  1840  |  1830  | 
|  1841 void ChromeLauncherController::SetShelfBehaviorsFromPrefs() { |  1831 void ChromeLauncherController::SetShelfBehaviorsFromPrefs() { | 
|  1842   SetShelfAutoHideBehaviorFromPrefs(); |  1832   SetShelfAutoHideBehaviorFromPrefs(); | 
|  1843   SetShelfAlignmentFromPrefs(); |  1833   SetShelfAlignmentFromPrefs(); | 
|  1844 } |  1834 } | 
|  1845  |  1835  | 
|  1846 #if defined(OS_CHROMEOS) |  1836 #if defined(OS_CHROMEOS) | 
|  1847 void ChromeLauncherController::SetVirtualKeyboardBehaviorFromPrefs() { |  1837 void ChromeLauncherController::SetVirtualKeyboardBehaviorFromPrefs() { | 
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2238  |  2228  | 
|  2239 AppIconLoader* ChromeLauncherController::GetAppIconLoaderForApp( |  2229 AppIconLoader* ChromeLauncherController::GetAppIconLoaderForApp( | 
|  2240     const std::string& app_id) { |  2230     const std::string& app_id) { | 
|  2241   for (const auto& app_icon_loader : app_icon_loaders_) { |  2231   for (const auto& app_icon_loader : app_icon_loaders_) { | 
|  2242     if (app_icon_loader->CanLoadImageForApp(app_id)) |  2232     if (app_icon_loader->CanLoadImageForApp(app_id)) | 
|  2243       return app_icon_loader.get(); |  2233       return app_icon_loader.get(); | 
|  2244   } |  2234   } | 
|  2245  |  2235  | 
|  2246   return nullptr; |  2236   return nullptr; | 
|  2247 } |  2237 } | 
| OLD | NEW |