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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_PROFILES_PROFILE_SHORTCUT_MANAGER_WIN_H_ 6 #define CHROME_BROWSER_PROFILES_PROFILE_SHORTCUT_MANAGER_WIN_H_ 7 8 #include "base/callback.h" 9 #include "chrome/browser/profiles/profile_shortcut_manager.h" 10 #include "content/public/browser/notification_observer.h" 11 #include "content/public/browser/notification_registrar.h" 12 13 class BrowserDistribution; 14 15 // Internal free-standing functions that are exported here for testing. 16 namespace profiles { 17 namespace internal { 18 19 // Returns the full path to the profile icon file. 20 base::FilePath GetProfileIconPath(const base::FilePath& profile_path); 21 22 // Returns the default shortcut filename for the given profile name, 23 // given |distribution|. Returns a filename appropriate for a 24 // single-user installation if |profile_name| is empty. 25 base::string16 GetShortcutFilenameForProfile(const base::string16& profile_name, 26 BrowserDistribution* distribution); 27 28 // Returns the command-line flags to launch Chrome with the given profile. 29 base::string16 CreateProfileShortcutFlags(const base::FilePath& profile_path); 30 31 } // namespace internal 32 } // namespace profiles 33 34 class ProfileShortcutManagerWin : public ProfileShortcutManager, 35 public ProfileInfoCacheObserver, 36 public content::NotificationObserver { 37 public: 38 // Specifies whether only the existing shortcut should be updated, a new 39 // shortcut should be created if none exist, or only the icon for this profile 40 // should be created in the profile directory. 41 enum CreateOrUpdateMode { 42 UPDATE_EXISTING_ONLY, 43 CREATE_WHEN_NONE_FOUND, 44 CREATE_OR_UPDATE_ICON_ONLY, 45 }; 46 // Specifies whether non-profile shortcuts should be updated. 47 enum NonProfileShortcutAction { 48 IGNORE_NON_PROFILE_SHORTCUTS, 49 UPDATE_NON_PROFILE_SHORTCUTS, 50 }; 51 52 explicit ProfileShortcutManagerWin(ProfileManager* manager); 53 virtual ~ProfileShortcutManagerWin(); 54 55 // ProfileShortcutManager implementation: 56 virtual void CreateOrUpdateProfileIcon( 57 const base::FilePath& profile_path) OVERRIDE; 58 virtual void CreateProfileShortcut( 59 const base::FilePath& profile_path) OVERRIDE; 60 virtual void RemoveProfileShortcuts( 61 const base::FilePath& profile_path) OVERRIDE; 62 virtual void HasProfileShortcuts( 63 const base::FilePath& profile_path, 64 const base::Callback<void(bool)>& callback) OVERRIDE; 65 virtual void GetShortcutProperties(const base::FilePath& profile_path, 66 base::CommandLine* command_line, 67 base::string16* name, 68 base::FilePath* icon_path) OVERRIDE; 69 70 // ProfileInfoCacheObserver implementation: 71 virtual void OnProfileAdded(const base::FilePath& profile_path) OVERRIDE; 72 virtual void OnProfileWasRemoved( 73 const base::FilePath& profile_path, 74 const base::string16& profile_name) OVERRIDE; 75 virtual void OnProfileNameChanged( 76 const base::FilePath& profile_path, 77 const base::string16& old_profile_name) OVERRIDE; 78 virtual void OnProfileAvatarChanged( 79 const base::FilePath& profile_path) OVERRIDE; 80 81 // content::NotificationObserver implementation: 82 virtual void Observe(int type, 83 const content::NotificationSource& source, 84 const content::NotificationDetails& details) OVERRIDE; 85 86 private: 87 // Gives the profile path of an alternate profile than |profile_path|. 88 // Must only be called when the number profiles is 2. 89 base::FilePath GetOtherProfilePath(const base::FilePath& profile_path); 90 91 // Creates or updates shortcuts for the profile at |profile_path| according 92 // to the specified |create_mode| and |action|. This will always involve 93 // creating or updating the icon file for this profile. 94 void CreateOrUpdateShortcutsForProfileAtPath( 95 const base::FilePath& profile_path, 96 CreateOrUpdateMode create_mode, 97 NonProfileShortcutAction action); 98 99 ProfileManager* profile_manager_; 100 101 content::NotificationRegistrar registrar_; 102 103 DISALLOW_COPY_AND_ASSIGN(ProfileShortcutManagerWin); 104 }; 105 106 #endif // CHROME_BROWSER_PROFILES_PROFILE_SHORTCUT_MANAGER_WIN_H_ 107