1// Copyright (c) 2012 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#include "chrome/installer/util/callback_work_item.h"
6
7#include "base/callback.h"
8#include "base/logging.h"
9#include "chrome/installer/util/work_item.h"
10
11CallbackWorkItem::CallbackWorkItem(
12    base::Callback<bool(const CallbackWorkItem&)> callback)
13    : callback_(callback),
14      roll_state_(RS_UNDEFINED) {
15}
16
17CallbackWorkItem::~CallbackWorkItem() {
18}
19
20bool CallbackWorkItem::Do() {
21  DCHECK_EQ(roll_state_, RS_UNDEFINED);
22
23  roll_state_ = RS_FORWARD;
24  bool result = callback_.Run(*this);
25  roll_state_ = RS_UNDEFINED;
26
27  return result;
28}
29
30void CallbackWorkItem::Rollback() {
31  DCHECK_EQ(roll_state_, RS_UNDEFINED);
32
33  roll_state_ = RS_BACKWARD;
34  ignore_result(callback_.Run(*this));
35  roll_state_ = RS_UNDEFINED;
36}
37
38bool CallbackWorkItem::IsRollback() const {
39  DCHECK_NE(roll_state_, RS_UNDEFINED);
40  return roll_state_ == RS_BACKWARD;
41}
42