omaha_response_handler_action.h revision 6a5b3229b44c1f81ee153829e9b501e547f29926
1// Copyright (c) 2009 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 CHROMEOS_PLATFORM_UPDATE_ENGINE_OMAHA_RESPONSE_HANDLER_ACTION_H__ 6#define CHROMEOS_PLATFORM_UPDATE_ENGINE_OMAHA_RESPONSE_HANDLER_ACTION_H__ 7 8#include <string> 9#include "update_engine/action.h" 10#include "update_engine/install_plan.h" 11#include "update_engine/omaha_request_action.h" 12 13// This class reads in an Omaha response and converts what it sees into 14// an install plan which is passed out. 15 16namespace chromeos_update_engine { 17 18class OmahaResponseHandlerAction; 19 20template<> 21class ActionTraits<OmahaResponseHandlerAction> { 22 public: 23 typedef OmahaResponse InputObjectType; 24 typedef InstallPlan OutputObjectType; 25}; 26 27class OmahaResponseHandlerAction : public Action<OmahaResponseHandlerAction> { 28 public: 29 OmahaResponseHandlerAction() : got_no_update_response_(false) {} 30 typedef ActionTraits<OmahaResponseHandlerAction>::InputObjectType 31 InputObjectType; 32 typedef ActionTraits<OmahaResponseHandlerAction>::OutputObjectType 33 OutputObjectType; 34 void PerformAction(); 35 36 // This is a synchronous action, and thus TerminateProcessing() should 37 // never be called 38 void TerminateProcessing() { CHECK(false); } 39 40 // For unit-testing 41 void set_boot_device(const std::string& boot_device) { 42 boot_device_ = boot_device; 43 } 44 45 bool GotNoUpdateResponse() const { return got_no_update_response_; } 46 const InstallPlan& install_plan() const { return install_plan_; } 47 48 // Debugging/logging 49 static std::string StaticType() { return "OmahaResponseHandlerAction"; } 50 std::string Type() const { return StaticType(); } 51 52 private: 53 // Assumes you want to install on the "other" device, where the other 54 // device is what you get if you swap 1 for 2 or 3 for 4 or vice versa 55 // for the number at the end of the boot device. E.g., /dev/sda1 -> /dev/sda2 56 // or /dev/sda4 -> /dev/sda3 57 static bool GetInstallDev(const std::string& boot_dev, 58 std::string* install_dev); 59 60 // set to non-empty in unit tests 61 std::string boot_device_; 62 63 // The install plan, if we have an update. 64 InstallPlan install_plan_; 65 66 // True only if we got a response and the response said no updates 67 bool got_no_update_response_; 68 69 DISALLOW_COPY_AND_ASSIGN(OmahaResponseHandlerAction); 70}; 71 72} // namespace chromeos_update_engine 73 74#endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_OMAHA_RESPONSE_HANDLER_ACTION_H__ 75