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 13class BrowserDistribution; 14 15// Internal free-standing functions that are exported here for testing. 16namespace profiles { 17namespace internal { 18 19// Returns the full path to the profile icon file. 20base::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. 25base::string16 GetShortcutFilenameForProfile(const base::string16& profile_name, 26 BrowserDistribution* distribution); 27 28// Returns the command-line flags to launch Chrome with the given profile. 29base::string16 CreateProfileShortcutFlags(const base::FilePath& profile_path); 30 31} // namespace internal 32} // namespace profiles 33 34class 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