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

Side by Side Diff: chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc

Issue 565213002: ChromeLaunchController does proper action when extension unloaded (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 unified diff | Download patch
« no previous file with comments | « chrome/browser/ui/ash/launcher/chrome_launcher_controller.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 chrome::MultiUserWindowManager::GetInstance()->AddUser(profile); 354 chrome::MultiUserWindowManager::GetInstance()->AddUser(profile);
355 controller_->AdditionalUserAddedToSession(profile->GetOriginalProfile()); 355 controller_->AdditionalUserAddedToSession(profile->GetOriginalProfile());
356 } 356 }
357 #endif 357 #endif
358 358
359 ChromeLauncherController::ChromeLauncherController(Profile* profile, 359 ChromeLauncherController::ChromeLauncherController(Profile* profile,
360 ash::ShelfModel* model) 360 ash::ShelfModel* model)
361 : model_(model), 361 : model_(model),
362 item_delegate_manager_(NULL), 362 item_delegate_manager_(NULL),
363 profile_(profile), 363 profile_(profile),
364 extension_registry_(NULL),
364 app_sync_ui_state_(NULL), 365 app_sync_ui_state_(NULL),
365 ignore_persist_pinned_state_change_(false) { 366 ignore_persist_pinned_state_change_(false) {
366 if (!profile_) { 367 if (!profile_) {
367 // If no profile was passed, we take the currently active profile and use it 368 // If no profile was passed, we take the currently active profile and use it
368 // as the owner of the current desktop. 369 // as the owner of the current desktop.
369 // Use the original profile as on chromeos we may get a temporary off the 370 // Use the original profile as on chromeos we may get a temporary off the
370 // record profile, unless in guest session (where off the record profile is 371 // record profile, unless in guest session (where off the record profile is
371 // the right one). 372 // the right one).
372 Profile* active_profile = ProfileManager::GetActiveUserProfile(); 373 Profile* active_profile = ProfileManager::GetActiveUserProfile();
373 profile_ = active_profile->IsGuestSession() ? active_profile : 374 profile_ = active_profile->IsGuestSession() ? active_profile :
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 app_window_controller_.reset(new AppWindowLauncherController(this)); 418 app_window_controller_.reset(new AppWindowLauncherController(this));
418 #endif 419 #endif
419 420
420 // Right now ash::Shell isn't created for tests. 421 // Right now ash::Shell isn't created for tests.
421 // TODO(mukai): Allows it to observe display change and write tests. 422 // TODO(mukai): Allows it to observe display change and write tests.
422 if (ash::Shell::HasInstance()) { 423 if (ash::Shell::HasInstance()) {
423 ash::Shell::GetInstance()->display_controller()->AddObserver(this); 424 ash::Shell::GetInstance()->display_controller()->AddObserver(this);
424 item_delegate_manager_ = 425 item_delegate_manager_ =
425 ash::Shell::GetInstance()->shelf_item_delegate_manager(); 426 ash::Shell::GetInstance()->shelf_item_delegate_manager();
426 } 427 }
427
428 notification_registrar_.Add(
James Cook 2014/09/12 20:35:35 +skuhne -- I'm not sure about the old code here.
Mr4D (OOO till 08-26) 2014/09/12 23:12:11 A closer look reviles that everything should be as
429 this,
430 extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
431 content::Source<Profile>(profile_));
432 notification_registrar_.Add(
433 this,
434 extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
435 content::Source<Profile>(profile_));
436 } 428 }
437 429
438 ChromeLauncherController::~ChromeLauncherController() { 430 ChromeLauncherController::~ChromeLauncherController() {
439 // Reset the BrowserStatusMonitor as it has a weak pointer to this. 431 // Reset the BrowserStatusMonitor as it has a weak pointer to this.
440 browser_status_monitor_.reset(); 432 browser_status_monitor_.reset();
441 433
442 // Reset the app window controller here since it has a weak pointer to this. 434 // Reset the app window controller here since it has a weak pointer to this.
443 app_window_controller_.reset(); 435 app_window_controller_.reset();
444 436
445 for (std::set<ash::Shelf*>::iterator iter = shelves_.begin(); 437 for (std::set<ash::Shelf*>::iterator iter = shelves_.begin();
(...skipping 724 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 // Force on-screen keyboard to reset. 1162 // Force on-screen keyboard to reset.
1171 if (keyboard::IsKeyboardEnabled()) 1163 if (keyboard::IsKeyboardEnabled())
1172 ash::Shell::GetInstance()->CreateKeyboard(); 1164 ash::Shell::GetInstance()->CreateKeyboard();
1173 } 1165 }
1174 1166
1175 void ChromeLauncherController::AdditionalUserAddedToSession(Profile* profile) { 1167 void ChromeLauncherController::AdditionalUserAddedToSession(Profile* profile) {
1176 // Switch the running applications to the new user. 1168 // Switch the running applications to the new user.
1177 app_window_controller_->AdditionalUserAddedToSession(profile); 1169 app_window_controller_->AdditionalUserAddedToSession(profile);
1178 } 1170 }
1179 1171
1180 void ChromeLauncherController::Observe( 1172 void ChromeLauncherController::OnExtensionLoaded(
1181 int type, 1173 content::BrowserContext* browser_context,
1182 const content::NotificationSource& source, 1174 const extensions::Extension* extension) {
1183 const content::NotificationDetails& details) { 1175 if (IsAppPinned(extension->id())) {
1184 switch (type) { 1176 // Clear and re-fetch to ensure icon is up-to-date.
1185 case extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: { 1177 app_icon_loader_->ClearImage(extension->id());
1186 const Extension* extension = 1178 app_icon_loader_->FetchImage(extension->id());
1187 content::Details<const Extension>(details).ptr(); 1179 }
1188 if (IsAppPinned(extension->id())) {
1189 // Clear and re-fetch to ensure icon is up-to-date.
1190 app_icon_loader_->ClearImage(extension->id());
1191 app_icon_loader_->FetchImage(extension->id());
1192 }
1193 1180
1194 UpdateAppLaunchersFromPref(); 1181 UpdateAppLaunchersFromPref();
1195 break; 1182 }
1183
1184 void ChromeLauncherController::OnExtensionUnloaded(
1185 content::BrowserContext* browser_context,
1186 const extensions::Extension* extension,
1187 extensions::UnloadedExtensionInfo::Reason reason) {
1188 const std::string& id = extension->id();
1189 // Since we might have windowed apps of this type which might have
1190 // outstanding locks which needs to be removed.
1191 if (GetShelfIDForAppID(id) &&
1192 reason == UnloadedExtensionInfo::REASON_UNINSTALL) {
Mr4D (OOO till 08-26) 2014/09/12 23:12:11 You should forward the profile to CloseWindowedApp
limasdf 2014/09/13 18:31:01 Done.
1193 CloseWindowedAppsFromRemovedExtension(id);
1194 }
1195
1196 if (IsAppPinned(id)) {
Mr4D (OOO till 08-26) 2014/09/12 23:12:11 DoUnpinAppWithID() should only be called if the pa
limasdf 2014/09/13 18:31:01 :: DoUnpinAppWithID() should only be called if the
1197 if (reason == UnloadedExtensionInfo::REASON_UNINSTALL) {
1198 DoUnpinAppWithID(id);
1199 app_icon_loader_->ClearImage(id);
1200 } else {
1201 app_icon_loader_->UpdateImage(id);
1196 } 1202 }
1197 case extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
1198 const content::Details<UnloadedExtensionInfo>& unload_info(details);
1199 const Extension* extension = unload_info->extension;
1200 const std::string& id = extension->id();
1201 // Since we might have windowed apps of this type which might have
1202 // outstanding locks which needs to be removed.
1203 if (GetShelfIDForAppID(id) &&
1204 unload_info->reason == UnloadedExtensionInfo::REASON_UNINSTALL) {
1205 CloseWindowedAppsFromRemovedExtension(id);
1206 }
1207
1208 if (IsAppPinned(id)) {
1209 if (unload_info->reason == UnloadedExtensionInfo::REASON_UNINSTALL) {
1210 DoUnpinAppWithID(id);
1211 app_icon_loader_->ClearImage(id);
1212 } else {
1213 app_icon_loader_->UpdateImage(id);
1214 }
1215 }
1216 break;
1217 }
1218 default:
1219 NOTREACHED() << "Unexpected notification type=" << type;
1220 } 1203 }
1221 } 1204 }
1222 1205
1223 void ChromeLauncherController::OnShelfAlignmentChanged( 1206 void ChromeLauncherController::OnShelfAlignmentChanged(
1224 aura::Window* root_window) { 1207 aura::Window* root_window) {
1225 const char* pref_value = NULL; 1208 const char* pref_value = NULL;
1226 switch (ash::Shell::GetInstance()->GetShelfAlignment(root_window)) { 1209 switch (ash::Shell::GetInstance()->GetShelfAlignment(root_window)) {
1227 case ash::SHELF_ALIGNMENT_BOTTOM: 1210 case ash::SHELF_ALIGNMENT_BOTTOM:
1228 pref_value = ash::kShelfAlignmentBottom; 1211 pref_value = ash::kShelfAlignmentBottom;
1229 break; 1212 break;
(...skipping 855 matching lines...) Expand 10 before | Expand all | Expand 10 after
2085 pref_change_registrar_.Add( 2068 pref_change_registrar_.Add(
2086 prefs::kShelfPreferences, 2069 prefs::kShelfPreferences,
2087 base::Bind(&ChromeLauncherController::SetShelfBehaviorsFromPrefs, 2070 base::Bind(&ChromeLauncherController::SetShelfBehaviorsFromPrefs,
2088 base::Unretained(this))); 2071 base::Unretained(this)));
2089 #if defined(OS_CHROMEOS) 2072 #if defined(OS_CHROMEOS)
2090 pref_change_registrar_.Add( 2073 pref_change_registrar_.Add(
2091 prefs::kTouchVirtualKeyboardEnabled, 2074 prefs::kTouchVirtualKeyboardEnabled,
2092 base::Bind(&ChromeLauncherController::SetVirtualKeyboardBehaviorFromPrefs, 2075 base::Bind(&ChromeLauncherController::SetVirtualKeyboardBehaviorFromPrefs,
2093 base::Unretained(this))); 2076 base::Unretained(this)));
2094 #endif // defined(OS_CHROMEOS) 2077 #endif // defined(OS_CHROMEOS)
2078
2079 extension_registry_ = extensions::ExtensionRegistry::Get(profile_);
James Cook 2014/09/12 20:35:35 Can you get rid of the extension_registry_ member
limasdf 2014/09/12 20:53:00 Done.
2080 extension_registry_->AddObserver(this);
2095 } 2081 }
2096 2082
2097 void ChromeLauncherController::ReleaseProfile() { 2083 void ChromeLauncherController::ReleaseProfile() {
2098 if (app_sync_ui_state_) 2084 if (app_sync_ui_state_)
2099 app_sync_ui_state_->RemoveObserver(this); 2085 app_sync_ui_state_->RemoveObserver(this);
2100 2086
2087 if (extension_registry_)
2088 extension_registry_->RemoveObserver(this);
2089 extension_registry_ = NULL;
2090
2101 PrefServiceSyncable::FromProfile(profile_)->RemoveObserver(this); 2091 PrefServiceSyncable::FromProfile(profile_)->RemoveObserver(this);
2102 2092
2103 pref_change_registrar_.RemoveAll(); 2093 pref_change_registrar_.RemoveAll();
2104 } 2094 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/ash/launcher/chrome_launcher_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698