• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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