OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/notifications/message_center_settings_controller.h" | 5 #include "chrome/browser/notifications/message_center_settings_controller.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/i18n/string_compare.h" | 10 #include "base/i18n/string_compare.h" |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 // rebuild the list when we get any of them. | 127 // rebuild the list when we get any of them. |
128 registrar_.Add(this, | 128 registrar_.Add(this, |
129 chrome::NOTIFICATION_PROFILE_CREATED, | 129 chrome::NOTIFICATION_PROFILE_CREATED, |
130 content::NotificationService::AllBrowserContextsAndSources()); | 130 content::NotificationService::AllBrowserContextsAndSources()); |
131 registrar_.Add(this, | 131 registrar_.Add(this, |
132 chrome::NOTIFICATION_PROFILE_ADDED, | 132 chrome::NOTIFICATION_PROFILE_ADDED, |
133 content::NotificationService::AllBrowserContextsAndSources()); | 133 content::NotificationService::AllBrowserContextsAndSources()); |
134 registrar_.Add(this, | 134 registrar_.Add(this, |
135 chrome::NOTIFICATION_PROFILE_DESTROYED, | 135 chrome::NOTIFICATION_PROFILE_DESTROYED, |
136 content::NotificationService::AllBrowserContextsAndSources()); | 136 content::NotificationService::AllBrowserContextsAndSources()); |
137 registrar_.Add(this, | 137 g_browser_process->profile_manager()->GetProfileInfoCache().AddObserver(this); |
138 chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, | 138 RebuildNotifierGroups(false); |
139 content::NotificationService::AllBrowserContextsAndSources()); | |
140 RebuildNotifierGroups(); | |
141 | 139 |
142 #if defined(OS_CHROMEOS) | 140 #if defined(OS_CHROMEOS) |
143 // UserManager may not exist in some tests. | 141 // UserManager may not exist in some tests. |
144 if (user_manager::UserManager::IsInitialized()) | 142 if (user_manager::UserManager::IsInitialized()) |
145 user_manager::UserManager::Get()->AddSessionStateObserver(this); | 143 user_manager::UserManager::Get()->AddSessionStateObserver(this); |
146 #endif | 144 #endif |
147 } | 145 } |
148 | 146 |
149 MessageCenterSettingsController::~MessageCenterSettingsController() { | 147 MessageCenterSettingsController::~MessageCenterSettingsController() { |
| 148 g_browser_process->profile_manager()-> |
| 149 GetProfileInfoCache().RemoveObserver(this); |
150 #if defined(OS_CHROMEOS) | 150 #if defined(OS_CHROMEOS) |
151 // UserManager may not exist in some tests. | 151 // UserManager may not exist in some tests. |
152 if (user_manager::UserManager::IsInitialized()) | 152 if (user_manager::UserManager::IsInitialized()) |
153 user_manager::UserManager::Get()->RemoveSessionStateObserver(this); | 153 user_manager::UserManager::Get()->RemoveSessionStateObserver(this); |
154 #endif | 154 #endif |
155 } | 155 } |
156 | 156 |
157 void MessageCenterSettingsController::AddObserver( | 157 void MessageCenterSettingsController::AddObserver( |
158 message_center::NotifierSettingsObserver* observer) { | 158 message_center::NotifierSettingsObserver* observer) { |
159 observers_.AddObserver(observer); | 159 observers_.AddObserver(observer); |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
396 const favicon_base::FaviconImageResult& favicon_result) { | 396 const favicon_base::FaviconImageResult& favicon_result) { |
397 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, | 397 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, |
398 observers_, | 398 observers_, |
399 UpdateIconImage(NotifierId(url), favicon_result.image)); | 399 UpdateIconImage(NotifierId(url), favicon_result.image)); |
400 } | 400 } |
401 | 401 |
402 | 402 |
403 #if defined(OS_CHROMEOS) | 403 #if defined(OS_CHROMEOS) |
404 void MessageCenterSettingsController::ActiveUserChanged( | 404 void MessageCenterSettingsController::ActiveUserChanged( |
405 const user_manager::User* active_user) { | 405 const user_manager::User* active_user) { |
406 RebuildNotifierGroups(); | 406 RebuildNotifierGroups(false); |
407 } | 407 } |
408 #endif | 408 #endif |
409 | 409 |
410 void MessageCenterSettingsController::SetAppImage(const std::string& id, | 410 void MessageCenterSettingsController::SetAppImage(const std::string& id, |
411 const gfx::ImageSkia& image) { | 411 const gfx::ImageSkia& image) { |
412 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, | 412 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, |
413 observers_, | 413 observers_, |
414 UpdateIconImage(NotifierId(NotifierId::APPLICATION, id), | 414 UpdateIconImage(NotifierId(NotifierId::APPLICATION, id), |
415 gfx::Image(image))); | 415 gfx::Image(image))); |
416 } | 416 } |
417 | 417 |
418 void MessageCenterSettingsController::Observe( | 418 void MessageCenterSettingsController::Observe( |
419 int type, | 419 int type, |
420 const content::NotificationSource& source, | 420 const content::NotificationSource& source, |
421 const content::NotificationDetails& details) { | 421 const content::NotificationDetails& details) { |
422 // GetOffTheRecordProfile() may create a new off-the-record profile, but that | 422 // GetOffTheRecordProfile() may create a new off-the-record profile, but that |
423 // doesn't need to rebuild the groups. | 423 // doesn't need to rebuild the groups. |
424 if (type == chrome::NOTIFICATION_PROFILE_CREATED && | 424 if (type == chrome::NOTIFICATION_PROFILE_CREATED && |
425 content::Source<Profile>(source).ptr()->IsOffTheRecord()) { | 425 content::Source<Profile>(source).ptr()->IsOffTheRecord()) { |
426 return; | 426 return; |
427 } | 427 } |
428 | 428 |
429 RebuildNotifierGroups(); | 429 RebuildNotifierGroups(true); |
430 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, | 430 } |
431 observers_, | 431 |
432 NotifierGroupChanged()); | 432 void MessageCenterSettingsController::OnProfileAdded( |
| 433 const base::FilePath& profile_path) { |
| 434 RebuildNotifierGroups(true); |
| 435 } |
| 436 void MessageCenterSettingsController::OnProfileWasRemoved( |
| 437 const base::FilePath& profile_path, |
| 438 const base::string16& profile_name) { |
| 439 RebuildNotifierGroups(true); |
| 440 } |
| 441 void MessageCenterSettingsController::OnProfileNameChanged( |
| 442 const base::FilePath& profile_path, |
| 443 const base::string16& old_profile_name) { |
| 444 RebuildNotifierGroups(true); |
| 445 } |
| 446 void MessageCenterSettingsController::OnProfileUserNameChanged( |
| 447 const base::FilePath& profile_path) { |
| 448 RebuildNotifierGroups(true); |
433 } | 449 } |
434 | 450 |
435 #if defined(OS_CHROMEOS) | 451 #if defined(OS_CHROMEOS) |
436 void MessageCenterSettingsController::CreateNotifierGroupForGuestLogin() { | 452 void MessageCenterSettingsController::CreateNotifierGroupForGuestLogin() { |
437 // Already created. | 453 // Already created. |
438 if (!notifier_groups_.empty()) | 454 if (!notifier_groups_.empty()) |
439 return; | 455 return; |
440 | 456 |
441 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); | 457 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); |
442 // |notifier_groups_| can be empty in login screen too. | 458 // |notifier_groups_| can be empty in login screen too. |
(...skipping 10 matching lines...) Expand all Loading... |
453 user->GetDisplayName(), | 469 user->GetDisplayName(), |
454 0, | 470 0, |
455 profile)); | 471 profile)); |
456 | 472 |
457 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, | 473 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, |
458 observers_, | 474 observers_, |
459 NotifierGroupChanged()); | 475 NotifierGroupChanged()); |
460 } | 476 } |
461 #endif | 477 #endif |
462 | 478 |
463 void MessageCenterSettingsController::RebuildNotifierGroups() { | 479 void MessageCenterSettingsController::RebuildNotifierGroups(bool notify) { |
464 notifier_groups_.clear(); | 480 notifier_groups_.clear(); |
465 current_notifier_group_ = 0; | 481 current_notifier_group_ = 0; |
466 | 482 |
467 const size_t count = profile_info_cache_->GetNumberOfProfiles(); | 483 const size_t count = profile_info_cache_->GetNumberOfProfiles(); |
468 | |
469 for (size_t i = 0; i < count; ++i) { | 484 for (size_t i = 0; i < count; ++i) { |
470 scoped_ptr<message_center::ProfileNotifierGroup> group( | 485 scoped_ptr<message_center::ProfileNotifierGroup> group( |
471 new message_center::ProfileNotifierGroup( | 486 new message_center::ProfileNotifierGroup( |
472 profile_info_cache_->GetAvatarIconOfProfileAtIndex(i), | 487 profile_info_cache_->GetAvatarIconOfProfileAtIndex(i), |
473 profile_info_cache_->GetNameOfProfileAtIndex(i), | 488 profile_info_cache_->GetNameOfProfileAtIndex(i), |
474 profile_info_cache_->GetUserNameOfProfileAtIndex(i), | 489 profile_info_cache_->GetUserNameOfProfileAtIndex(i), |
475 i, | 490 i, |
476 profile_info_cache_->GetPathOfProfileAtIndex(i))); | 491 profile_info_cache_->GetPathOfProfileAtIndex(i))); |
477 if (group->profile() == NULL) | 492 if (group->profile() == NULL) |
478 continue; | 493 continue; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 // registering it as the primary one, which causes this method which causes | 525 // registering it as the primary one, which causes this method which causes |
511 // another creating a primary profile, and causes an infinite loop. | 526 // another creating a primary profile, and causes an infinite loop. |
512 // Thus, it would be better to delay creating group for guest login. | 527 // Thus, it would be better to delay creating group for guest login. |
513 base::MessageLoopProxy::current()->PostTask( | 528 base::MessageLoopProxy::current()->PostTask( |
514 FROM_HERE, | 529 FROM_HERE, |
515 base::Bind( | 530 base::Bind( |
516 &MessageCenterSettingsController::CreateNotifierGroupForGuestLogin, | 531 &MessageCenterSettingsController::CreateNotifierGroupForGuestLogin, |
517 weak_factory_.GetWeakPtr())); | 532 weak_factory_.GetWeakPtr())); |
518 } | 533 } |
519 #endif | 534 #endif |
| 535 |
| 536 if (notify) { |
| 537 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, |
| 538 observers_, |
| 539 NotifierGroupChanged()); |
| 540 } |
520 } | 541 } |
OLD | NEW |