delete_reg_value_work_item.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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_DELETE_REG_VALUE_WORK_ITEM_H_ 6#define CHROME_INSTALLER_UTIL_DELETE_REG_VALUE_WORK_ITEM_H_ 7 8#include <windows.h> 9 10#include <string> 11 12#include "chrome/installer/util/work_item.h" 13 14// A WorkItem subclass that deletes a registry value with REG_SZ, REG_DWORD, or 15// REG_QWORD type at the specified path. The value is only deleted if the target 16// key exists. 17class DeleteRegValueWorkItem : public WorkItem { 18 public: 19 virtual ~DeleteRegValueWorkItem(); 20 21 virtual bool Do(); 22 23 virtual void Rollback(); 24 25 private: 26 friend class WorkItem; 27 28 enum DeletionStatus { 29 // The status before Do is called. 30 DELETE_VALUE, 31 // One possible outcome after Do(). Value is deleted. 32 VALUE_DELETED, 33 // One possible outcome after Do(). Value is not found. 34 VALUE_NOT_FOUND, 35 // The status after Do() and Rollback() is called. 36 VALUE_ROLLED_BACK, 37 // Another possible outcome after Do() (when there is an error). 38 VALUE_UNCHANGED 39 }; 40 41 DeleteRegValueWorkItem(HKEY predefined_root, const std::wstring& key_path, 42 const std::wstring& value_name); 43 44 // Root key of the target key under which the value is set. The root key can 45 // only be one of the predefined keys on Windows. 46 HKEY predefined_root_; 47 48 // Path of the target key under which the value is set. 49 std::wstring key_path_; 50 51 // Name of the value to be set. 52 std::wstring value_name_; 53 54 DeletionStatus status_; 55 56 // Previous value. 57 DWORD previous_type_; 58 std::string previous_value_; 59}; 60 61#endif // CHROME_INSTALLER_UTIL_DELETE_REG_VALUE_WORK_ITEM_H_ 62