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_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.
     15 class 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 //------------------------------------------------------------------------------
     37 class 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.
     49 class 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