Home | History | Annotate | Download | only in profiles
      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