15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_INSTALLER_UTIL_APP_COMMANDS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_INSTALLER_UTIL_APP_COMMANDS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility> 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/app_command.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace win { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RegKey; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace installer { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A collection of AppCommand objects. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppCommands { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<std::wstring, AppCommand> CommandMap; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::pair<CommandMap::const_iterator, CommandMap::const_iterator> 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandMapRange; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCommands(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AppCommands(); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize an instance from the set of commands in a given registry key 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (typically the "Commands" subkey of a BrowserDistribution's "version key"). 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |key| must have been opened with at least 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE access rights. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Initialize(const base::win::RegKey& key); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Replaces the contents of this object with that of |other|. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCommands& CopyFrom(const AppCommands& other); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears this instance. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Clear(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieves the command identified by |command_id| from the set, copying it 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // into |command| and returning true if present. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Get(const std::wstring& command_id, AppCommand* command) const; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets a command in the collection, adding it if it doesn't already exist. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if a new command is added; false if |command_id| was already 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // present and has been replaced with |command|. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Set(const std::wstring& command_id, const AppCommand& command); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes a command from the collection. Returns false if |command_id| was 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not found. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Remove(const std::wstring& command_id); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a pair of STL iterators defining the range of objects in the 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // collection. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandMapRange GetIterators() const; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandMap commands_; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AppCommands); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace installer 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_INSTALLER_UTIL_APP_COMMANDS_H_ 73