conditional_work_item_list.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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_CONDITIONAL_WORK_ITEM_LIST_H_ 6#define CHROME_INSTALLER_UTIL_CONDITIONAL_WORK_ITEM_LIST_H_ 7 8#include "chrome/installer/util/work_item_list.h" 9 10#include "base/files/file_path.h" 11#include "base/memory/scoped_ptr.h" 12 13// A WorkItemList subclass that permits conditionally executing a set of 14// WorkItems. 15class ConditionalWorkItemList : public WorkItemList { 16 public: 17 explicit ConditionalWorkItemList(Condition* condition); 18 virtual ~ConditionalWorkItemList(); 19 20 // If condition_->ShouldRun() returns true, then execute the items in this 21 // list and return true iff they all succeed. If condition_->ShouldRun() 22 // returns false, does nothing and returns true. 23 virtual bool Do(); 24 25 // Does a rollback of the items (if any) that were run in Do. 26 virtual void Rollback(); 27 28 protected: 29 // Pointer to a Condition that is used to determine whether to run this 30 // WorkItemList. 31 scoped_ptr<Condition> condition_; 32}; 33 34 35// Pre-defined conditions: 36//------------------------------------------------------------------------------ 37class ConditionRunIfFileExists : public WorkItem::Condition { 38 public: 39 explicit ConditionRunIfFileExists(const base::FilePath& key_path) 40 : key_path_(key_path) {} 41 bool ShouldRun() const; 42 43 private: 44 base::FilePath key_path_; 45}; 46 47// Condition class that inverts the ShouldRun result of another Condition. 48// This class assumes ownership of original_condition. 49class Not : public WorkItem::Condition { 50 public: 51 explicit Not(WorkItem::Condition* original_condition) 52 : original_condition_(original_condition) {} 53 bool ShouldRun() const; 54 55 private: 56 scoped_ptr<WorkItem::Condition> original_condition_; 57}; 58 59 60#endif // CHROME_INSTALLER_UTIL_CONDITIONAL_WORK_ITEM_LIST_H_ 61