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_INSTALLER_UTIL_CHANNEL_INFO_H_ 6 #define CHROME_INSTALLER_UTIL_CHANNEL_INFO_H_ 7 8 #include <string> 9 10 namespace base { 11 namespace win { 12 class RegKey; 13 } 14 } 15 16 namespace installer { 17 18 // A helper class for parsing and modifying the Google Update additional 19 // parameter ("ap") client state value for a product. 20 class ChannelInfo { 21 public: 22 23 // Initialize an instance from the "ap" value in a given registry key. 24 // Returns false if the value is present but could not be read from the 25 // registry. Returns true if the value was not present or could be read. 26 // Also returns true if the key is not valid. 27 // An absent "ap" value is treated identically to an empty "ap" value. 28 bool Initialize(const base::win::RegKey& key); 29 30 // Writes the info to the "ap" value in a given registry key. 31 // Returns false if the value could not be written to the registry. 32 bool Write(base::win::RegKey* key) const; 33 value()34 const std::wstring& value() const { return value_; } set_value(const std::wstring & value)35 void set_value(const std::wstring& value) { value_ = value; } Equals(const ChannelInfo & other)36 bool Equals(const ChannelInfo& other) const { 37 return value_ == other.value_; 38 } 39 40 // Determines the update channel for the value. Possible |channel_name| 41 // results are the empty string (stable channel), "beta", and "dev". Returns 42 // false (without modifying |channel_name|) if the channel could not be 43 // determined. 44 bool GetChannelName(std::wstring* channel_name) const; 45 46 // Returns true if the -chrome modifier is present in the value. 47 bool IsChrome() const; 48 49 // Adds or removes the -chrome modifier, returning true if the value is 50 // modified. 51 bool SetChrome(bool value); 52 53 // Returns true if the -chromeframe modifier is present in the value. 54 bool IsChromeFrame() const; 55 56 // Adds or removes the -chromeframe modifier, returning true if the value is 57 // modified. 58 bool SetChromeFrame(bool value); 59 60 // Returns true if the -applauncher modifier is present in the value. 61 bool IsAppLauncher() const; 62 63 // Adds or removes the -applauncher modifier, returning true if the value is 64 // modified. 65 bool SetAppLauncher(bool value); 66 67 // Returns true if the -multi modifier is present in the value. 68 bool IsMultiInstall() const; 69 70 // Adds or removes the -multi modifier, returning true if the value is 71 // modified. 72 bool SetMultiInstall(bool value); 73 74 // Returns true if the -readymode modifier is present in the value. 75 bool IsReadyMode() const; 76 77 // Adds or removes the -readymode modifier, returning true if the value is 78 // modified. 79 bool SetReadyMode(bool value); 80 81 // Adds the -stage: modifier with the given string (if |stage| is non-NULL) or 82 // removes the -stage: modifier (otherwise), returning true if the value is 83 // modified. 84 bool SetStage(const wchar_t* stage); 85 86 // Returns the string identifying the current stage, or an empty string if the 87 // -stage: modifier is not present in the value. 88 std::wstring GetStage() const; 89 90 // Returns true if the -full suffix is present in the value. 91 bool HasFullSuffix() const; 92 93 // Adds or removes the -full suffix, returning true if the value is 94 // modified. 95 bool SetFullSuffix(bool value); 96 97 // Returns true if the -multifail suffix is present in the value. 98 bool HasMultiFailSuffix() const; 99 100 // Adds or removes the -multifail suffix, returning true if the value is 101 // modified. 102 bool SetMultiFailSuffix(bool value); 103 104 // Adds or removes the -migrating suffix, returning true if the value is 105 // modified. 106 bool SetMigratingSuffix(bool value); 107 108 // Returns true if the -migrating suffix is present in the value. 109 bool HasMigratingSuffix() const; 110 111 // Removes all modifiers and suffixes. For example, 2.0-dev-multi-chrome-full 112 // becomes 2.0-dev. Returns true if the value is modified. 113 bool RemoveAllModifiersAndSuffixes(); 114 115 private: 116 std::wstring value_; 117 }; // class ChannelInfo 118 119 } // namespace installer 120 121 #endif // CHROME_INSTALLER_UTIL_CHANNEL_INFO_H_ 122