| Index: chrome/installer/util/work_item.h
|
| diff --git a/chrome/installer/util/work_item.h b/chrome/installer/util/work_item.h
|
| index e28bedfa2c425721cb5d9eb5f75e63586e35b23a..446b4914ff51d541fedce318597a844a388731d1 100644
|
| --- a/chrome/installer/util/work_item.h
|
| +++ b/chrome/installer/util/work_item.h
|
| @@ -35,22 +35,6 @@
|
|
|
| // A base class that defines APIs to perform/rollback an action or a
|
| // sequence of actions during install/update/uninstall.
|
| -//
|
| -// Subclasses must implement DoImpl() and RollbackImpl().
|
| -//
|
| -// Do() calls DoImpl(). When the "best-effort" flag is true, it always returns
|
| -// true. Otherwise, it returns the value returned by DoImpl(). Implementations
|
| -// of DoImpl() may use the "best-effort" flag as an indication that they should
|
| -// do as much work as possible (i.e., shouldn't abort as soon as one of the
|
| -// actions they have to perform fails). By default, the "best-effort" flag is
|
| -// false.
|
| -//
|
| -// Rollback() calls RollbackImpl() when the "rollback enabled" flag is true.
|
| -// Otherwise, it's a no-op. Implementations of DoImpl() may read the "rollback
|
| -// enabled" flag to determine whether they should save state to support
|
| -// rollback. By default, the "rollback enabled" flag is true.
|
| -//
|
| -// The "best-effort" and "rollback enabled" must be set before Do() is invoked.
|
| class WorkItem {
|
| public:
|
| // A callback that returns the desired value based on the |existing_value|.
|
| @@ -135,10 +119,12 @@
|
| const std::wstring& value_name);
|
|
|
| // Create a DeleteTreeWorkItem that recursively deletes a file system
|
| - // hierarchy at the given root path.
|
| + // hierarchy at the given root path. A key file can be optionally specified
|
| + // by key_path.
|
| static DeleteTreeWorkItem* CreateDeleteTreeWorkItem(
|
| const base::FilePath& root_path,
|
| - const base::FilePath& temp_path);
|
| + const base::FilePath& temp_path,
|
| + const std::vector<base::FilePath>& key_paths);
|
|
|
| // Create a MoveTreeWorkItem that recursively moves a file system hierarchy
|
| // from source path to destination path.
|
| @@ -198,24 +184,38 @@
|
| // a list of WorkItems.
|
| static WorkItemList* CreateWorkItemList();
|
|
|
| + // Create an empty WorkItemList that cannot be rolled back.
|
| + // Such a work item list executes all items on a best effort basis and does
|
| + // not abort execution if an item in the list fails.
|
| + static WorkItemList* CreateNoRollbackWorkItemList();
|
| +
|
| // Create a conditional work item list that will execute only if
|
| // condition->ShouldRun() returns true. The WorkItemList instance
|
| // assumes ownership of condition.
|
| static WorkItemList* CreateConditionalWorkItemList(Condition* condition);
|
|
|
| - // Perform the actions of WorkItem. Returns true if success or if
|
| - // best_effort(). Can only be called once per instance.
|
| - bool Do();
|
| -
|
| - // Rollback any actions previously carried out by this WorkItem if
|
| - // rollback_enabled(). Can only be called once per instance, after Do() has
|
| - // returned.
|
| - void Rollback();
|
| -
|
| - void set_best_effort(bool best_effort);
|
| - bool best_effort() const { return best_effort_; }
|
| - void set_rollback_enabled(bool rollback_enabled);
|
| - bool rollback_enabled() const { return rollback_enabled_; }
|
| + // Perform the actions of WorkItem. Returns true if success, returns false
|
| + // otherwise.
|
| + // If the WorkItem is transactional, then Do() is done as a transaction.
|
| + // If it returns false, there will be no change on the system.
|
| + virtual bool Do() = 0;
|
| +
|
| + // Rollback any actions previously carried out by this WorkItem. If the
|
| + // WorkItem is transactional, then the previous actions can be fully
|
| + // rolled back. If the WorkItem is non-transactional, the rollback is a
|
| + // best effort.
|
| + virtual void Rollback() = 0;
|
| +
|
| + // If called with true, this WorkItem may return true from its Do() method
|
| + // even on failure and Rollback will have no effect.
|
| + void set_ignore_failure(bool ignore_failure) {
|
| + ignore_failure_ = ignore_failure;
|
| + }
|
| +
|
| + // Returns true if this WorkItem should ignore failures.
|
| + bool ignore_failure() const {
|
| + return ignore_failure_;
|
| + }
|
|
|
| // Sets an optional log message that a work item may use to print additional
|
| // instance-specific information.
|
| @@ -227,30 +227,13 @@
|
| const std::string& log_message() const { return log_message_; }
|
|
|
| protected:
|
| - enum State {
|
| - BEFORE_DO,
|
| - AFTER_DO,
|
| - AFTER_ROLLBACK,
|
| - };
|
| -
|
| WorkItem();
|
|
|
| - State state() const { return state_; }
|
| + // Specifies whether this work item my fail to complete and yet still
|
| + // return true from Do().
|
| + bool ignore_failure_;
|
|
|
| std::string log_message_;
|
| -
|
| - private:
|
| - // Called by Do(). Performs the actions of the Workitem.
|
| - virtual bool DoImpl() = 0;
|
| -
|
| - // Called by Rollback() if rollback_enabled() is true. Rollbacks the actions
|
| - // performed by DoImpl(). Implementations must support invocation of this even
|
| - // when DoImpl() returned false.
|
| - virtual void RollbackImpl() = 0;
|
| -
|
| - State state_ = BEFORE_DO;
|
| - bool best_effort_ = false;
|
| - bool rollback_enabled_ = true;
|
| };
|
|
|
| #endif // CHROME_INSTALLER_UTIL_WORK_ITEM_H_
|
|
|