Home | History | Annotate | Download | only in util
      1 // Copyright (c) 2011 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_APP_COMMANDS_H_
      6 #define CHROME_INSTALLER_UTIL_APP_COMMANDS_H_
      7 
      8 #include <windows.h>
      9 
     10 #include <map>
     11 #include <string>
     12 #include <utility>
     13 
     14 #include "base/basictypes.h"
     15 #include "chrome/installer/util/app_command.h"
     16 
     17 namespace base {
     18 namespace win {
     19 class RegKey;
     20 }
     21 }
     22 
     23 namespace installer {
     24 
     25 // A collection of AppCommand objects.
     26 class AppCommands {
     27  public:
     28   typedef std::map<std::wstring, AppCommand> CommandMap;
     29   typedef std::pair<CommandMap::const_iterator, CommandMap::const_iterator>
     30       CommandMapRange;
     31 
     32   AppCommands();
     33   ~AppCommands();
     34 
     35   // Initialize an instance from the set of commands in a given registry key
     36   // (typically the "Commands" subkey of a BrowserDistribution's "version key").
     37   // |key| must have been opened with at least
     38   // KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE access rights.
     39   bool Initialize(const base::win::RegKey& key);
     40 
     41   // Replaces the contents of this object with that of |other|.
     42   AppCommands& CopyFrom(const AppCommands& other);
     43 
     44   // Clears this instance.
     45   void Clear();
     46 
     47   // Retrieves the command identified by |command_id| from the set, copying it
     48   // into |command| and returning true if present.
     49   bool Get(const std::wstring& command_id, AppCommand* command) const;
     50 
     51   // Sets a command in the collection, adding it if it doesn't already exist.
     52   // Returns true if a new command is added; false if |command_id| was already
     53   // present and has been replaced with |command|.
     54   bool Set(const std::wstring& command_id, const AppCommand& command);
     55 
     56   // Removes a command from the collection.  Returns false if |command_id| was
     57   // not found.
     58   bool Remove(const std::wstring& command_id);
     59 
     60   // Returns a pair of STL iterators defining the range of objects in the
     61   // collection.
     62   CommandMapRange GetIterators() const;
     63 
     64  protected:
     65   CommandMap commands_;
     66 
     67   DISALLOW_COPY_AND_ASSIGN(AppCommands);
     68 };
     69 
     70 }  // namespace installer
     71 
     72 #endif  // CHROME_INSTALLER_UTIL_APP_COMMANDS_H_
     73