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

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

Issue 1486493002: RegistryEntry: Made constructors public. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@shell_util-registryentry-uninline-methods
Patch Set: Created 5 years 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 | « no previous file | no next file » | 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) 2012 The Chromium Authors. All rights reserved. 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 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 defines functions that integrate Chrome in Windows shell. These 5 // This file defines functions that integrate Chrome in Windows shell. These
6 // functions can be used by Chrome as well as Chrome installer. All of the 6 // functions can be used by Chrome as well as Chrome installer. All of the
7 // work is done by the local functions defined in anonymous namespace in 7 // work is done by the local functions defined in anonymous namespace in
8 // this class. 8 // this class.
9 9
10 #include "chrome/installer/util/shell_util.h" 10 #include "chrome/installer/util/shell_util.h"
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 147
148 bool UserSpecificRegistrySuffix::GetSuffix(base::string16* suffix) { 148 bool UserSpecificRegistrySuffix::GetSuffix(base::string16* suffix) {
149 if (suffix_.empty()) { 149 if (suffix_.empty()) {
150 NOTREACHED(); 150 NOTREACHED();
151 return false; 151 return false;
152 } 152 }
153 suffix->assign(suffix_); 153 suffix->assign(suffix_);
154 return true; 154 return true;
155 } 155 }
156 156
157 // This class represents a single registry entry. The objective is to 157 // This class represents a single registry entry (a key and its value). A
158 // encapsulate all the registry entries required for registering Chrome at one 158 // collection of registry entries should be collected into a list and written
159 // place. This class can not be instantiated outside the class and the objects 159 // atomically using a WorkItemList. This is preferred to writing to the registry
160 // of this class type can be obtained only by calling a static method of this 160 // directly, because if anything goes wrong, they can be rolled back atomically.
gab 2015/11/30 13:04:00 I'd say remove the two "atomically" words in this
Matt Giuca 2015/12/01 00:46:35 I think we want to highlight the transactional nat
161 // class.
162 class RegistryEntry { 161 class RegistryEntry {
163 public: 162 public:
164 // A bit-field enum of places to look for this key in the Windows registry. 163 // A bit-field enum of places to look for this key in the Windows registry.
165 enum LookForIn { 164 enum LookForIn {
166 LOOK_IN_HKCU = 1 << 0, 165 LOOK_IN_HKCU = 1 << 0,
167 LOOK_IN_HKLM = 1 << 1, 166 LOOK_IN_HKLM = 1 << 1,
168 LOOK_IN_HKCU_THEN_HKLM = LOOK_IN_HKCU | LOOK_IN_HKLM, 167 LOOK_IN_HKCU_THEN_HKLM = LOOK_IN_HKCU | LOOK_IN_HKLM,
169 }; 168 };
170 169
171 // Identifies the type of removal this RegistryEntry is flagged for, if any. 170 // Identifies the type of removal this RegistryEntry is flagged for, if any.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 base::string16 application_name; 205 base::string16 application_name;
207 base::FilePath application_icon_path; 206 base::FilePath application_icon_path;
208 int application_icon_index; 207 int application_icon_index;
209 base::string16 application_description; 208 base::string16 application_description;
210 base::string16 publisher_name; 209 base::string16 publisher_name;
211 210
212 // The CLSID for the application's DelegateExecute handler. May be empty. 211 // The CLSID for the application's DelegateExecute handler. May be empty.
213 base::string16 delegate_clsid; 212 base::string16 delegate_clsid;
214 }; 213 };
215 214
215 // Create a object that represent default value of a key
216 RegistryEntry(const base::string16& key_path, const base::string16& value);
217
218 // Create a object that represent a key of type REG_SZ
219 RegistryEntry(const base::string16& key_path,
220 const base::string16& name,
221 const base::string16& value);
222
223 // Create a object that represent a key of integer type
gab 2015/11/30 13:04:00 End comments with '.', here and above.
gab 2015/11/30 13:04:00 s/a object/an object/ here and above.
Matt Giuca 2015/12/01 00:46:35 Done (next CL). Note: I wouldn't want to do this
224 RegistryEntry(const base::string16& key_path,
225 const base::string16& name,
226 DWORD value);
227
216 // Returns the Windows browser client registration key for Chrome. For 228 // Returns the Windows browser client registration key for Chrome. For
217 // example: "Software\Clients\StartMenuInternet\Chromium[.user]". Strictly 229 // example: "Software\Clients\StartMenuInternet\Chromium[.user]". Strictly
218 // speaking, we should use the name of the executable (e.g., "chrome.exe"), 230 // speaking, we should use the name of the executable (e.g., "chrome.exe"),
219 // but that ship has sailed. The cost of switching now is re-prompting users 231 // but that ship has sailed. The cost of switching now is re-prompting users
220 // to make Chrome their default browser, which isn't polite. |suffix| is the 232 // to make Chrome their default browser, which isn't polite. |suffix| is the
221 // user-specific registration suffix; see GetUserSpecificDefaultBrowserSuffix 233 // user-specific registration suffix; see GetUserSpecificDefaultBrowserSuffix
222 // in shell_util.h for details. 234 // in shell_util.h for details.
223 static base::string16 GetBrowserClientKey(BrowserDistribution* dist, 235 static base::string16 GetBrowserClientKey(BrowserDistribution* dist,
224 const base::string16& suffix); 236 const base::string16& suffix);
225 237
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 // States this RegistryKey can be in compared to the registry. 380 // States this RegistryKey can be in compared to the registry.
369 enum RegistryStatus { 381 enum RegistryStatus {
370 // |name_| does not exist in the registry 382 // |name_| does not exist in the registry
371 DOES_NOT_EXIST, 383 DOES_NOT_EXIST,
372 // |name_| exists, but its value != |value_| 384 // |name_| exists, but its value != |value_|
373 DIFFERENT_VALUE, 385 DIFFERENT_VALUE,
374 // |name_| exists and its value is |value_| 386 // |name_| exists and its value is |value_|
375 SAME_VALUE, 387 SAME_VALUE,
376 }; 388 };
377 389
378 // Create a object that represent default value of a key
379 RegistryEntry(const base::string16& key_path, const base::string16& value);
380
381 // Create a object that represent a key of type REG_SZ
382 RegistryEntry(const base::string16& key_path,
383 const base::string16& name,
384 const base::string16& value);
385
386 // Create a object that represent a key of integer type
387 RegistryEntry(const base::string16& key_path,
388 const base::string16& name,
389 DWORD value);
390
391 base::string16 key_path_; // key path for the registry entry 390 base::string16 key_path_; // key path for the registry entry
392 base::string16 name_; // name of the registry entry 391 base::string16 name_; // name of the registry entry
393 bool is_string_; // true if current registry entry is of type REG_SZ 392 bool is_string_; // true if current registry entry is of type REG_SZ
394 base::string16 value_; // string value (useful if is_string_ = true) 393 base::string16 value_; // string value (useful if is_string_ = true)
395 DWORD int_value_; // integer value (useful if is_string_ = false) 394 DWORD int_value_; // integer value (useful if is_string_ = false)
396 395
397 // Identifies whether this RegistryEntry is flagged for removal (i.e. no 396 // Identifies whether this RegistryEntry is flagged for removal (i.e. no
398 // longer relevant on the configuration it was created under). 397 // longer relevant on the configuration it was created under).
399 RemovalFlag removal_flag_; 398 RemovalFlag removal_flag_;
400 399
401 // Helper function for ExistsInRegistry(). 400 // Helper function for ExistsInRegistry().
402 // Returns the RegistryStatus of the current registry entry in 401 // Returns the RegistryStatus of the current registry entry in
403 // |root|\|key_path_|\|name_|. 402 // |root|\|key_path_|\|name_|.
404 RegistryStatus StatusInRegistryUnderRoot(HKEY root) const; 403 RegistryStatus StatusInRegistryUnderRoot(HKEY root) const;
405 404
406 DISALLOW_COPY_AND_ASSIGN(RegistryEntry); 405 DISALLOW_COPY_AND_ASSIGN(RegistryEntry);
407 }; // class RegistryEntry 406 }; // class RegistryEntry
408 407
408 RegistryEntry::RegistryEntry(const base::string16& key_path,
409 const base::string16& value)
410 : key_path_(key_path),
411 name_(),
412 is_string_(true),
413 value_(value),
414 int_value_(0),
415 removal_flag_(RemovalFlag::NONE) {}
416
417 RegistryEntry::RegistryEntry(const base::string16& key_path,
418 const base::string16& name,
419 const base::string16& value)
420 : key_path_(key_path),
421 name_(name),
422 is_string_(true),
423 value_(value),
424 int_value_(0),
425 removal_flag_(RemovalFlag::NONE) {}
426
427 RegistryEntry::RegistryEntry(const base::string16& key_path,
428 const base::string16& name,
429 DWORD value)
430 : key_path_(key_path),
431 name_(name),
432 is_string_(false),
433 value_(),
434 int_value_(value),
435 removal_flag_(RemovalFlag::NONE) {}
436
409 // static 437 // static
410 base::string16 RegistryEntry::GetBrowserClientKey( 438 base::string16 RegistryEntry::GetBrowserClientKey(
411 BrowserDistribution* dist, 439 BrowserDistribution* dist,
412 const base::string16& suffix) { 440 const base::string16& suffix) {
413 DCHECK(suffix.empty() || suffix[0] == L'.'); 441 DCHECK(suffix.empty() || suffix[0] == L'.');
414 return base::string16(ShellUtil::kRegStartMenuInternet) 442 return base::string16(ShellUtil::kRegStartMenuInternet)
415 .append(1, L'\\') 443 .append(1, L'\\')
416 .append(dist->GetBaseAppName()) 444 .append(dist->GetBaseAppName())
417 .append(suffix); 445 .append(suffix);
418 } 446 }
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 DCHECK(look_for_in); 862 DCHECK(look_for_in);
835 863
836 RegistryStatus status = DOES_NOT_EXIST; 864 RegistryStatus status = DOES_NOT_EXIST;
837 if (look_for_in & LOOK_IN_HKCU) 865 if (look_for_in & LOOK_IN_HKCU)
838 status = StatusInRegistryUnderRoot(HKEY_CURRENT_USER); 866 status = StatusInRegistryUnderRoot(HKEY_CURRENT_USER);
839 if (status == DOES_NOT_EXIST && (look_for_in & LOOK_IN_HKLM)) 867 if (status == DOES_NOT_EXIST && (look_for_in & LOOK_IN_HKLM))
840 status = StatusInRegistryUnderRoot(HKEY_LOCAL_MACHINE); 868 status = StatusInRegistryUnderRoot(HKEY_LOCAL_MACHINE);
841 return status != DOES_NOT_EXIST; 869 return status != DOES_NOT_EXIST;
842 } 870 }
843 871
844 RegistryEntry::RegistryEntry(const base::string16& key_path,
845 const base::string16& value)
846 : key_path_(key_path),
847 name_(),
848 is_string_(true),
849 value_(value),
850 int_value_(0),
851 removal_flag_(RemovalFlag::NONE) {}
852
853 RegistryEntry::RegistryEntry(const base::string16& key_path,
854 const base::string16& name,
855 const base::string16& value)
856 : key_path_(key_path),
857 name_(name),
858 is_string_(true),
859 value_(value),
860 int_value_(0),
861 removal_flag_(RemovalFlag::NONE) {}
862
863 RegistryEntry::RegistryEntry(const base::string16& key_path,
864 const base::string16& name,
865 DWORD value)
866 : key_path_(key_path),
867 name_(name),
868 is_string_(false),
869 value_(),
870 int_value_(value),
871 removal_flag_(RemovalFlag::NONE) {}
872
873 RegistryEntry::RegistryStatus RegistryEntry::StatusInRegistryUnderRoot( 872 RegistryEntry::RegistryStatus RegistryEntry::StatusInRegistryUnderRoot(
874 HKEY root) const { 873 HKEY root) const {
875 RegKey key(root, key_path_.c_str(), KEY_QUERY_VALUE); 874 RegKey key(root, key_path_.c_str(), KEY_QUERY_VALUE);
876 bool found = false; 875 bool found = false;
877 bool correct_value = false; 876 bool correct_value = false;
878 if (is_string_) { 877 if (is_string_) {
879 base::string16 read_value; 878 base::string16 read_value;
880 found = key.ReadValue(name_.c_str(), &read_value) == ERROR_SUCCESS; 879 found = key.ReadValue(name_.c_str(), &read_value) == ERROR_SUCCESS;
881 if (found) { 880 if (found) {
882 correct_value = 881 correct_value =
(...skipping 1717 matching lines...) Expand 10 before | Expand all | Expand 10 after
2600 base::string16 key_path(ShellUtil::kRegClasses); 2599 base::string16 key_path(ShellUtil::kRegClasses);
2601 key_path.push_back(base::FilePath::kSeparators[0]); 2600 key_path.push_back(base::FilePath::kSeparators[0]);
2602 key_path.append(prog_id); 2601 key_path.append(prog_id);
2603 return InstallUtil::DeleteRegistryKey( 2602 return InstallUtil::DeleteRegistryKey(
2604 HKEY_CURRENT_USER, key_path, WorkItem::kWow64Default); 2603 HKEY_CURRENT_USER, key_path, WorkItem::kWow64Default);
2605 2604
2606 // TODO(mgiuca): Remove the extension association entries. This requires that 2605 // TODO(mgiuca): Remove the extension association entries. This requires that
2607 // the extensions associated with a particular prog_id are stored in that 2606 // the extensions associated with a particular prog_id are stored in that
2608 // prog_id's key. 2607 // prog_id's key.
2609 } 2608 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698