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
10namespace base {
11namespace win {
12class RegKey;
13}
14}
15
16namespace installer {
17
18// A helper class for parsing and modifying the Google Update additional
19// parameter ("ap") client state value for a product.
20class 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
34  const std::wstring& value() const { return value_; }
35  void set_value(const std::wstring& value) { value_ = value; }
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