Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(267)

Side by Side Diff: chrome/installer/util/shell_util.h

Issue 159172: Allow two user level installs of Chrome to have default browser settings. (Closed)
Patch Set: update comment. Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/installer/setup/uninstall.cc ('k') | chrome/installer/util/shell_util.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // This file declares methods that are useful for integrating Chrome in 5 // This file declares methods that are useful for integrating Chrome in
6 // Windows shell. These methods are all static and currently part of 6 // Windows shell. These methods are all static and currently part of
7 // ShellUtil class. 7 // ShellUtil class.
8 8
9 #ifndef CHROME_INSTALLER_UTIL_SHELL_UTIL_H__ 9 #ifndef CHROME_INSTALLER_UTIL_SHELL_UTIL_H_
10 #define CHROME_INSTALLER_UTIL_SHELL_UTIL_H__ 10 #define CHROME_INSTALLER_UTIL_SHELL_UTIL_H_
11 11
12 #include <windows.h> 12 #include <windows.h>
13 #include <string> 13 #include <string>
14 14
15 #include "base/basictypes.h" 15 #include "base/basictypes.h"
16 #include "chrome/installer/util/work_item_list.h" 16 #include "chrome/installer/util/work_item_list.h"
17 17
18 // This is a utility class that provides common shell integration methods 18 // This is a utility class that provides common shell integration methods
19 // that can be used by installer as well as Chrome. 19 // that can be used by installer as well as Chrome.
20 class ShellUtil { 20 class ShellUtil {
21 public: 21 public:
22 // Input to any methods that make changes to OS shell. 22 // Input to any methods that make changes to OS shell.
23 enum ShellChange { 23 enum ShellChange {
24 CURRENT_USER = 0x1, // Make any shell changes only at the user level 24 CURRENT_USER = 0x1, // Make any shell changes only at the user level
25 SYSTEM_LEVEL = 0x2 // Make any shell changes only at the system level 25 SYSTEM_LEVEL = 0x2 // Make any shell changes only at the system level
26 }; 26 };
27 27
28 // Return value of AddChromeToSetAccessDefaults.
29 enum RegisterStatus {
30 SUCCESS, // Registration of Chrome successful (in HKLM)
31 FAILURE, // Registration failed (no changes made)
32 REGISTERED_PER_USER // Registered Chrome as per user (in HKCU)
33 };
34
35 // Relative path of DefaultIcon registry entry (prefixed with '\'). 28 // Relative path of DefaultIcon registry entry (prefixed with '\').
36 static const wchar_t* kRegDefaultIcon; 29 static const wchar_t* kRegDefaultIcon;
37 30
38 // Relative path of "shell" registry key. 31 // Relative path of "shell" registry key.
39 static const wchar_t* kRegShellPath; 32 static const wchar_t* kRegShellPath;
40 33
41 // Relative path of shell open command in Windows registry 34 // Relative path of shell open command in Windows registry
42 // (i.e. \\shell\\open\\command). 35 // (i.e. \\shell\\open\\command).
43 static const wchar_t* kRegShellOpen; 36 static const wchar_t* kRegShellOpen;
44 37
(...skipping 10 matching lines...) Expand all
55 static const wchar_t* kRegRegisteredApplications; 48 static const wchar_t* kRegRegisteredApplications;
56 49
57 // The key path and key name required to register Chrome on Windows such 50 // The key path and key name required to register Chrome on Windows such
58 // that it can be launched from Start->Run just by name (chrome.exe). 51 // that it can be launched from Start->Run just by name (chrome.exe).
59 static const wchar_t* kAppPathsRegistryKey; 52 static const wchar_t* kAppPathsRegistryKey;
60 static const wchar_t* kAppPathsRegistryPathName; 53 static const wchar_t* kAppPathsRegistryPathName;
61 54
62 // Name that we give to Chrome file association handler ProgId. 55 // Name that we give to Chrome file association handler ProgId.
63 static const wchar_t* kChromeHTMLProgId; 56 static const wchar_t* kChromeHTMLProgId;
64 57
65 // Description of Chrome file/URL association handler ProgId. 58 // Description of Chrome file association handler ProgId.
66 static const wchar_t* kChromeHTMLProgIdDesc; 59 static const wchar_t* kChromeHTMLProgIdDesc;
67 60
68 // Registry path that stores url associations on Vista. 61 // Registry path that stores url associations on Vista.
69 static const wchar_t* kRegVistaUrlPrefs; 62 static const wchar_t* kRegVistaUrlPrefs;
70 63
71 // File extensions that Chrome registers itself for. 64 // File extensions that Chrome registers itself for.
72 static const wchar_t* kFileAssociations[]; 65 static const wchar_t* kFileAssociations[];
73 66
74 // Protocols that Chrome registers itself for. 67 // Protocols that Chrome registers itself for.
75 static const wchar_t* kProtocolAssociations[]; 68 static const wchar_t* kProtocolAssociations[];
76 69
77 // Registry value name that is needed for ChromeHTML ProgId 70 // Registry value name that is needed for ChromeHTML ProgId
78 static const wchar_t* kRegUrlProtocol; 71 static const wchar_t* kRegUrlProtocol;
79 72
80 // Name that we give to Chrome extension file association handler ProgId. 73 // Name that we give to Chrome extension file association handler ProgId.
81 static const wchar_t* kChromeExtProgId; 74 static const wchar_t* kChromeExtProgId;
82 75
83 // Description of Chrome file/URL association handler ProgId. 76 // Description of Chrome file/URL association handler ProgId.
84 static const wchar_t* kChromeExtProgIdDesc; 77 static const wchar_t* kChromeExtProgIdDesc;
85 78
86 // This method adds Chrome to the list that shows up in Add/Remove Programs->
87 // Set Program Access and Defaults and also creates Chrome ProgIds under
88 // Software\Classes. This method requires write access to HKLM so is just
89 // best effort deal. If write to HKLM fails and skip_if_not_admin is false,
90 // this method will:
91 // - add the ProgId entries to HKCU on XP. HKCU entries will not make
92 // Chrome show in Set Program Access and Defaults but they are still useful
93 // because we can make Chrome run when user clicks on http link or html
94 // file.
95 // - will try to launch setup.exe with admin priviledges on Vista to do
96 // these tasks. Users will see standard Vista elevation prompt and if they
97 // enter the right credentials, the write operation will work.
98 // Currently skip_if_not_admin is false only when user tries to make Chrome
99 // default browser and Chrome is not registered on the machine.
100 //
101 // chrome_exe: full path to chrome.exe.
102 // skip_if_not_admin: if false will make this method try alternate methods
103 // as described above.
104 static RegisterStatus AddChromeToSetAccessDefaults(
105 const std::wstring& chrome_exe, bool skip_if_not_admin);
106
107 // Checks if we need Admin rights for registry cleanup by checking if any 79 // Checks if we need Admin rights for registry cleanup by checking if any
108 // entry exists in HKLM. 80 // entry exists in HKLM.
109 static bool AdminNeededForRegistryCleanup(); 81 static bool AdminNeededForRegistryCleanup();
110 82
111 // Create Chrome shortcut on Desktop 83 // Create Chrome shortcut on Desktop
112 // If shell_change is CURRENT_USER, the shortcut is created in the 84 // If shell_change is CURRENT_USER, the shortcut is created in the
113 // Desktop folder of current user's profile. 85 // Desktop folder of current user's profile.
114 // If shell_change is SYSTEM_LEVEL, the shortcut is created in the 86 // If shell_change is SYSTEM_LEVEL, the shortcut is created in the
115 // Desktop folder of "All Users" profile. 87 // Desktop folder of "All Users" profile.
116 // If alternate is true, an alternate text for the shortcut is used. 88 // If alternate is true, an alternate text for the shortcut is used.
(...skipping 13 matching lines...) Expand all
130 // system. 102 // system.
131 // create_new: If false, will only update the shortcut. If true, the function 103 // create_new: If false, will only update the shortcut. If true, the function
132 // will create a new shortcut if it doesn't exist already. 104 // will create a new shortcut if it doesn't exist already.
133 static bool CreateChromeQuickLaunchShortcut(const std::wstring& chrome_exe, 105 static bool CreateChromeQuickLaunchShortcut(const std::wstring& chrome_exe,
134 int shell_change, 106 int shell_change,
135 bool create_new); 107 bool create_new);
136 108
137 // This method appends the Chrome icon index inside chrome.exe to the 109 // This method appends the Chrome icon index inside chrome.exe to the
138 // chrome.exe path passed in as input, to generate the full path for 110 // chrome.exe path passed in as input, to generate the full path for
139 // Chrome icon that can be used as value for Windows registry keys. 111 // Chrome icon that can be used as value for Windows registry keys.
140 // chrome_icon: full path to chrome.exe. 112 // |chrome_exe| full path to chrome.exe.
141 static bool GetChromeIcon(std::wstring& chrome_icon); 113 static std::wstring GetChromeIcon(const std::wstring& chrome_exe);
142 114
143 // This method returns the command to open URLs/files using chrome. Typically 115 // This method returns the command to open URLs/files using chrome. Typically
144 // this command is written to the registry under shell\open\command key. 116 // this command is written to the registry under shell\open\command key.
145 // chrome_exe: the full path to chrome.exe 117 // chrome_exe: the full path to chrome.exe
146 static std::wstring GetChromeShellOpenCmd(const std::wstring& chrome_exe); 118 static std::wstring GetChromeShellOpenCmd(const std::wstring& chrome_exe);
147 119
148 // This method returns the command to open .crx files using chrome in order 120 // This method returns the command to open .crx files using chrome in order
149 // to install them as extensions. Similar to above method. 121 // to install them as extensions. Similar to above method.
150 static std::wstring GetChromeInstallExtensionCmd( 122 static std::wstring GetChromeInstallExtensionCmd(
151 const std::wstring& chrome_exe); 123 const std::wstring& chrome_exe);
152 124
153 // Returns the localized name of Chrome shortcut. If |alternate| is true 125 // Returns the localized name of Chrome shortcut. If |alternate| is true
154 // it returns a second localized text that is better suited for certain 126 // it returns a second localized text that is better suited for certain
155 // scenarios. 127 // scenarios.
156 static bool GetChromeShortcutName(std::wstring* shortcut, bool alternate); 128 static bool GetChromeShortcutName(std::wstring* shortcut, bool alternate);
157 129
158 // Gets the desktop path for the current user or all users (if system_level 130 // Gets the desktop path for the current user or all users (if system_level
159 // is true) and returns it in 'path' argument. Return true if successful, 131 // is true) and returns it in 'path' argument. Return true if successful,
160 // otherwise returns false. 132 // otherwise returns false.
161 static bool GetDesktopPath(bool system_level, std::wstring* path); 133 static bool GetDesktopPath(bool system_level, std::wstring* path);
162 134
163 // Gets the Quick Launch shortcuts path for the current user and 135 // Gets the Quick Launch shortcuts path for the current user and
164 // returns it in 'path' argument. Return true if successful, otherwise 136 // returns it in 'path' argument. Return true if successful, otherwise
165 // returns false. If system_level is true this function returns the path 137 // returns false. If system_level is true this function returns the path
166 // to Default Users Quick Launch shortcuts path. Adding a shortcut to Default 138 // to Default Users Quick Launch shortcuts path. Adding a shortcut to Default
167 // User's profile only affects any new user profiles (not existing ones). 139 // User's profile only affects any new user profiles (not existing ones).
168 static bool GetQuickLaunchPath(bool system_level, std::wstring* path); 140 static bool GetQuickLaunchPath(bool system_level, std::wstring* path);
169 141
170 // Make Chrome default browser. Before calling this function Chrome should 142 // This function gets a suffix (user's login name) that can be added
171 // already have been registered by calling AddChromeToSetAccessDefaults() 143 // to Chromium default browser entry in the registry to create a unique name
172 // method, otherwise this function will fail. 144 // if there are multiple users on the machine, each with their own copy of
145 // Chromium that they want to set as default browser.
146 // This suffix value is assigned to |entry|.
147 static bool GetUserSpecificDefaultBrowserSuffix(std::wstring* entry);
148
149 // Make Chrome default browser.
173 // shell_change: Defined whether to register as default browser at system 150 // shell_change: Defined whether to register as default browser at system
174 // level or user level. If value has ShellChange::SYSTEM_LEVEL 151 // level or user level. If value has ShellChange::SYSTEM_LEVEL
175 // we should be running as admin user. Currently this setting 152 // we should be running as admin user.
176 // does not have any effect on Vista where we always set
177 // as default only for the current user.
178 // chrome_exe: The chrome.exe path to register as default browser. 153 // chrome_exe: The chrome.exe path to register as default browser.
154 // elevate_if_not_admin: On Vista if user is not admin, try to elevate for
155 // Chrome registration.
179 static bool MakeChromeDefault(int shell_change, 156 static bool MakeChromeDefault(int shell_change,
180 const std::wstring& chrome_exe); 157 const std::wstring& chrome_exe,
158 bool elevate_if_not_admin);
159
160 // This method adds Chrome to the list that shows up in Add/Remove Programs->
161 // Set Program Access and Defaults and also creates Chrome ProgIds under
162 // Software\Classes. This method requires write access to HKLM so is just
163 // best effort deal. If write to HKLM fails and elevate_if_not_admin is true,
164 // this method will:
165 // - add the ProgId entries to HKCU on XP. HKCU entries will not make
166 // Chrome show in Set Program Access and Defaults but they are still useful
167 // because we can make Chrome run when user clicks on http link or html
168 // file.
169 // - will try to launch setup.exe with admin priviledges on Vista to do
170 // these tasks. Users will see standard Vista elevation prompt and if they
171 // enter the right credentials, the write operation will work.
172 // Currently elevate_if_not_admin is true only when user tries to make Chrome
173 // default browser (through the UI or through installer options) and Chrome
174 // is not registered on the machine.
175 //
176 // |chrome_exe| full path to chrome.exe.
177 // |unique_suffix| Optional input. If given, this function appends the value
178 // to default browser entries names that it creates in the registry.
179 // |elevate_if_not_admin| if true will make this method try alternate methods
180 // as described above.
181 static bool RegisterChromeBrowser(const std::wstring& chrome_exe,
182 const std::wstring& unique_suffix,
183 bool elevate_if_not_admin);
181 184
182 // Remove Chrome shortcut from Desktop. 185 // Remove Chrome shortcut from Desktop.
183 // If shell_change is CURRENT_USER, the shortcut is removed from the 186 // If shell_change is CURRENT_USER, the shortcut is removed from the
184 // Desktop folder of current user's profile. 187 // Desktop folder of current user's profile.
185 // If shell_change is SYSTEM_LEVEL, the shortcut is removed from the 188 // If shell_change is SYSTEM_LEVEL, the shortcut is removed from the
186 // Desktop folder of "All Users" profile. 189 // Desktop folder of "All Users" profile.
187 // If alternate is true, the shortcut with the alternate name is removed. See 190 // If alternate is true, the shortcut with the alternate name is removed. See
188 // CreateChromeDesktopShortcut() for more information. 191 // CreateChromeDesktopShortcut() for more information.
189 static bool RemoveChromeDesktopShortcut(int shell_change, bool alternate); 192 static bool RemoveChromeDesktopShortcut(int shell_change, bool alternate);
190 193
191 // Remove Chrome shortcut from Quick Launch Bar. 194 // Remove Chrome shortcut from Quick Launch Bar.
192 // If shell_change is CURRENT_USER, the shortcut is removed from 195 // If shell_change is CURRENT_USER, the shortcut is removed from
193 // the Quick Launch folder of current user's profile. 196 // the Quick Launch folder of current user's profile.
194 // If shell_change is SYSTEM_LEVEL, the shortcut is removed from 197 // If shell_change is SYSTEM_LEVEL, the shortcut is removed from
195 // the Quick Launch folder of "Default User" profile. 198 // the Quick Launch folder of "Default User" profile.
196 static bool RemoveChromeQuickLaunchShortcut(int shell_change); 199 static bool RemoveChromeQuickLaunchShortcut(int shell_change);
197 200
198 // Updates shortcut (or creates a new shortcut) at destination given by 201 // Updates shortcut (or creates a new shortcut) at destination given by
199 // shortcut to a target given by chrome_exe. The arguments is left NULL 202 // shortcut to a target given by chrome_exe. The arguments is left NULL
200 // for the target and icon is set as icon at index 0 from exe. 203 // for the target and icon is set as icon at index 0 from exe.
201 // If create_new is set to true, the function will create a new shortcut if 204 // If create_new is set to true, the function will create a new shortcut if
202 // if doesn't exist. 205 // if doesn't exist.
203 static bool UpdateChromeShortcut(const std::wstring& chrome_exe, 206 static bool UpdateChromeShortcut(const std::wstring& chrome_exe,
204 const std::wstring& shortcut, 207 const std::wstring& shortcut,
205 const std::wstring& description, 208 const std::wstring& description,
206 bool create_new); 209 bool create_new);
207 210
208 private: 211 private:
209 DISALLOW_EVIL_CONSTRUCTORS(ShellUtil); 212 DISALLOW_COPY_AND_ASSIGN(ShellUtil);
210 }; 213 };
211 214
212 215
213 #endif // CHROME_INSTALLER_UTIL_SHELL_UTIL_H__ 216 #endif // CHROME_INSTALLER_UTIL_SHELL_UTIL_H_
OLDNEW
« no previous file with comments | « chrome/installer/setup/uninstall.cc ('k') | chrome/installer/util/shell_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698