Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / profiles / profile_shortcut_manager_win.h
bloba2bb5d80963587182dd3d7877de34da34681751f
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.
5 #ifndef CHROME_BROWSER_PROFILES_PROFILE_SHORTCUT_MANAGER_WIN_H_
6 #define CHROME_BROWSER_PROFILES_PROFILE_SHORTCUT_MANAGER_WIN_H_
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"
13 class BrowserDistribution;
15 // Internal free-standing functions that are exported here for testing.
16 namespace profiles {
17 namespace internal {
19 // Returns the full path to the profile icon file.
20 base::FilePath GetProfileIconPath(const base::FilePath& profile_path);
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);
28 // Returns the command-line flags to launch Chrome with the given profile.
29 base::string16 CreateProfileShortcutFlags(const base::FilePath& profile_path);
31 } // namespace internal
32 } // namespace profiles
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,
46 // Specifies whether non-profile shortcuts should be updated.
47 enum NonProfileShortcutAction {
48 IGNORE_NON_PROFILE_SHORTCUTS,
49 UPDATE_NON_PROFILE_SHORTCUTS,
52 explicit ProfileShortcutManagerWin(ProfileManager* manager);
53 virtual ~ProfileShortcutManagerWin();
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 CommandLine* command_line,
67 base::string16* name,
68 base::FilePath* icon_path) OVERRIDE;
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;
81 // content::NotificationObserver implementation:
82 virtual void Observe(int type,
83 const content::NotificationSource& source,
84 const content::NotificationDetails& details) OVERRIDE;
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);
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);
99 ProfileManager* profile_manager_;
101 content::NotificationRegistrar registrar_;
103 DISALLOW_COPY_AND_ASSIGN(ProfileShortcutManagerWin);
106 #endif // CHROME_BROWSER_PROFILES_PROFILE_SHORTCUT_MANAGER_WIN_H_