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