Home | History | Annotate | Download | only in util
      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 
     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