15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2010 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/conditional_work_item_list.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ConditionalWorkItemList::ConditionalWorkItemList(Condition* condition) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : condition_(condition) { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ConditionalWorkItemList::~ConditionalWorkItemList() {} 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ConditionalWorkItemList::Do() { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Evaluating " << log_message_ << " condition..."; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (condition_.get() && condition_->ShouldRun()) { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Beginning conditional work item list"; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return WorkItemList::Do(); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "No work to do in condition work item list " 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << log_message_; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConditionalWorkItemList::Rollback() { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Rolling back conditional list " << log_message_; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WorkItemList::Rollback(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Pre-defined conditions: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ConditionRunIfFileExists::ShouldRun() const { 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return base::PathExists(key_path_); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Not::ShouldRun() const { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !original_condition_->ShouldRun(); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42