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

Side by Side Diff: chrome/browser/profiles/profile_shortcut_manager_win.cc

Issue 33753002: Sooper experimental refactoring of the profile info cache. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 7 years, 1 month 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/profiles/profile_metrics.cc ('k') | chrome/browser/profiles/profiles_state.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/profiles/profile_shortcut_manager_win.h" 5 #include "chrome/browser/profiles/profile_shortcut_manager_win.h"
6 6
7 #include <shlobj.h> // For SHChangeNotify(). 7 #include <shlobj.h> // For SHChangeNotify().
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 722
723 void ProfileShortcutManagerWin::OnProfileWasRemoved( 723 void ProfileShortcutManagerWin::OnProfileWasRemoved(
724 const base::FilePath& profile_path, 724 const base::FilePath& profile_path,
725 const string16& profile_name) { 725 const string16& profile_name) {
726 const ProfileInfoCache& cache = profile_manager_->GetProfileInfoCache(); 726 const ProfileInfoCache& cache = profile_manager_->GetProfileInfoCache();
727 // If there is only one profile remaining, remove the badging information 727 // If there is only one profile remaining, remove the badging information
728 // from an existing shortcut. 728 // from an existing shortcut.
729 const bool deleting_down_to_last_profile = (cache.GetNumberOfProfiles() == 1); 729 const bool deleting_down_to_last_profile = (cache.GetNumberOfProfiles() == 1);
730 if (deleting_down_to_last_profile) { 730 if (deleting_down_to_last_profile) {
731 // This is needed to unbadge the icon. 731 // This is needed to unbadge the icon.
732 CreateOrUpdateShortcutsForProfileAtPath(cache.GetPathOfProfileAtIndex(0), 732 const std::vector<ProfileInfoEntry> entries(cache.GetProfilesSortedByName()) ;
733 CreateOrUpdateShortcutsForProfileAtPath(entries[0].path(),
733 UPDATE_EXISTING_ONLY, 734 UPDATE_EXISTING_ONLY,
734 IGNORE_NON_PROFILE_SHORTCUTS, 735 IGNORE_NON_PROFILE_SHORTCUTS,
735 base::Closure()); 736 base::Closure());
736 } 737 }
737 738
738 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 739 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
739 base::Bind(&DeleteDesktopShortcuts, 740 base::Bind(&DeleteDesktopShortcuts,
740 profile_path, 741 profile_path,
741 deleting_down_to_last_profile)); 742 deleting_down_to_last_profile));
742 } 743 }
743 744
744 void ProfileShortcutManagerWin::OnProfileNameChanged( 745 void ProfileShortcutManagerWin::OnProfileNameChanged(
745 const base::FilePath& profile_path, 746 const base::FilePath& profile_path,
746 const string16& old_profile_name) { 747 const string16& old_profile_name) {
747 CreateOrUpdateShortcutsForProfileAtPath(profile_path, UPDATE_EXISTING_ONLY, 748 CreateOrUpdateShortcutsForProfileAtPath(profile_path, UPDATE_EXISTING_ONLY,
748 IGNORE_NON_PROFILE_SHORTCUTS, 749 IGNORE_NON_PROFILE_SHORTCUTS,
749 base::Closure()); 750 base::Closure());
750 } 751 }
751 752
752 void ProfileShortcutManagerWin::OnProfileAvatarChanged( 753 void ProfileShortcutManagerWin::OnProfileAvatarChanged(
753 const base::FilePath& profile_path) { 754 const base::FilePath& profile_path) {
754 CreateOrUpdateProfileIcon(profile_path, base::Closure()); 755 CreateOrUpdateProfileIcon(profile_path, base::Closure());
755 } 756 }
756 757
757 base::FilePath ProfileShortcutManagerWin::GetOtherProfilePath( 758 base::FilePath ProfileShortcutManagerWin::GetOtherProfilePath(
758 const base::FilePath& profile_path) { 759 const base::FilePath& profile_path) {
759 const ProfileInfoCache& cache = profile_manager_->GetProfileInfoCache(); 760 const ProfileInfoCache& cache = profile_manager_->GetProfileInfoCache();
760 DCHECK_EQ(2U, cache.GetNumberOfProfiles()); 761 DCHECK_EQ(2U, cache.GetNumberOfProfiles());
762
761 // Get the index of the current profile, in order to find the index of the 763 // Get the index of the current profile, in order to find the index of the
762 // other profile. 764 // other profile.
763 size_t current_profile_index = cache.GetIndexOfProfileWithPath(profile_path); 765 base::FilePath other_path;
764 size_t other_profile_index = (current_profile_index == 0) ? 1 : 0; 766 const std::vector<ProfileInfoEntry> entries(cache.GetProfilesSortedByName());
765 return cache.GetPathOfProfileAtIndex(other_profile_index); 767 for (std::vector<ProfileInfoEntry>::const_iterator it = entries.begin();
768 it != entries.end(); ++it) {
769 if (it->path() != profile_path)
770 return it->path();
771 }
772
773 // We should never actually reach this point, but need to return something
774 // to make the compiler happy.
775 return profile_path;
766 } 776 }
767 777
768 void ProfileShortcutManagerWin::CreateOrUpdateShortcutsForProfileAtPath( 778 void ProfileShortcutManagerWin::CreateOrUpdateShortcutsForProfileAtPath(
769 const base::FilePath& profile_path, 779 const base::FilePath& profile_path,
770 CreateOrUpdateMode create_mode, 780 CreateOrUpdateMode create_mode,
771 NonProfileShortcutAction action, 781 NonProfileShortcutAction action,
772 const base::Closure& callback) { 782 const base::Closure& callback) {
773 DCHECK(!BrowserThread::IsThreadInitialized(BrowserThread::UI) || 783 DCHECK(!BrowserThread::IsThreadInitialized(BrowserThread::UI) ||
774 BrowserThread::CurrentlyOn(BrowserThread::UI)); 784 BrowserThread::CurrentlyOn(BrowserThread::UI));
775 CreateOrUpdateShortcutsParams params(profile_path, create_mode, action); 785 CreateOrUpdateShortcutsParams params(profile_path, create_mode, action);
776 786
777 ProfileInfoCache* cache = &profile_manager_->GetProfileInfoCache(); 787 ProfileInfoCache* cache = &profile_manager_->GetProfileInfoCache();
778 size_t profile_index = cache->GetIndexOfProfileWithPath(profile_path); 788 ProfileInfoEntry entry;
779 if (profile_index == std::string::npos) 789 if (!cache->GetInfoForProfile(profile_path, &entry))
780 return; 790 return;
791
781 bool remove_badging = cache->GetNumberOfProfiles() == 1; 792 bool remove_badging = cache->GetNumberOfProfiles() == 1;
782 793
783 params.old_profile_name = 794 params.old_profile_name = entry.shortcut_name();
784 cache->GetShortcutNameOfProfileAtIndex(profile_index);
785 795
786 // Exit early if the mode is to update existing profile shortcuts only and 796 // Exit early if the mode is to update existing profile shortcuts only and
787 // none were ever created for this profile, per the shortcut name not being 797 // none were ever created for this profile, per the shortcut name not being
788 // set in the profile info cache. 798 // set in the profile info cache.
789 if (params.old_profile_name.empty() && 799 if (params.old_profile_name.empty() &&
790 create_mode == UPDATE_EXISTING_ONLY && 800 create_mode == UPDATE_EXISTING_ONLY &&
791 action == IGNORE_NON_PROFILE_SHORTCUTS) { 801 action == IGNORE_NON_PROFILE_SHORTCUTS) {
792 return; 802 return;
793 } 803 }
794 804
795 if (!remove_badging) { 805 if (!remove_badging) {
796 params.profile_name = cache->GetNameOfProfileAtIndex(profile_index); 806 params.profile_name = entry.GetDisplayName();
797 807
798 const size_t icon_index = 808 const size_t icon_index = entry.icon_index();
799 cache->GetAvatarIconIndexOfProfileAtIndex(profile_index);
800 const int resource_id_1x = 809 const int resource_id_1x =
801 cache->GetDefaultAvatarIconResourceIDAtIndex(icon_index); 810 cache->GetDefaultAvatarIconResourceIDAtIndex(icon_index);
802 const int resource_id_2x = kProfileAvatarIconResources2x[icon_index]; 811 const int resource_id_2x = kProfileAvatarIconResources2x[icon_index];
803 // Make a copy of the SkBitmaps to ensure that we can safely use the image 812 // Make a copy of the SkBitmaps to ensure that we can safely use the image
804 // data on the FILE thread. 813 // data on the FILE thread.
805 params.avatar_image_1x = GetImageResourceSkBitmapCopy(resource_id_1x); 814 params.avatar_image_1x = GetImageResourceSkBitmapCopy(resource_id_1x);
806 params.avatar_image_2x = GetImageResourceSkBitmapCopy(resource_id_2x); 815 params.avatar_image_2x = GetImageResourceSkBitmapCopy(resource_id_2x);
807 } 816 }
808 BrowserThread::PostTask( 817 BrowserThread::PostTask(
809 BrowserThread::FILE, FROM_HERE, 818 BrowserThread::FILE, FROM_HERE,
810 base::Bind(&CreateOrUpdateDesktopShortcutsAndIconForProfile, params, 819 base::Bind(&CreateOrUpdateDesktopShortcutsAndIconForProfile, params,
811 callback)); 820 callback));
812 821
813 cache->SetShortcutNameOfProfileAtIndex(profile_index, 822 entry.set_shortcut_name(params.profile_name);
814 params.profile_name); 823 cache->SetInfoForProfile(entry);
815 } 824 }
816 825
817 void ProfileShortcutManagerWin::Observe( 826 void ProfileShortcutManagerWin::Observe(
818 int type, 827 int type,
819 const content::NotificationSource& source, 828 const content::NotificationSource& source,
820 const content::NotificationDetails& details) { 829 const content::NotificationDetails& details) {
821 switch (type) { 830 switch (type) {
822 // This notification is triggered when a profile is loaded. 831 // This notification is triggered when a profile is loaded.
823 case chrome::NOTIFICATION_PROFILE_CREATED: { 832 case chrome::NOTIFICATION_PROFILE_CREATED: {
824 Profile* profile = 833 Profile* profile =
825 content::Source<Profile>(source).ptr()->GetOriginalProfile(); 834 content::Source<Profile>(source).ptr()->GetOriginalProfile();
826 if (profile->GetPrefs()->GetInteger(prefs::kProfileIconVersion) < 835 if (profile->GetPrefs()->GetInteger(prefs::kProfileIconVersion) <
827 kCurrentProfileIconVersion) { 836 kCurrentProfileIconVersion) {
828 // Ensure the profile's icon file has been created. 837 // Ensure the profile's icon file has been created.
829 CreateOrUpdateProfileIcon( 838 CreateOrUpdateProfileIcon(
830 profile->GetPath(), 839 profile->GetPath(),
831 base::Bind(&OnProfileIconCreateSuccess, profile->GetPath())); 840 base::Bind(&OnProfileIconCreateSuccess, profile->GetPath()));
832 } 841 }
833 break; 842 break;
834 } 843 }
835 default: 844 default:
836 NOTREACHED(); 845 NOTREACHED();
837 break; 846 break;
838 } 847 }
839 } 848 }
OLDNEW
« no previous file with comments | « chrome/browser/profiles/profile_metrics.cc ('k') | chrome/browser/profiles/profiles_state.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698