blob: 5611375b6bcc6754a52b44919d2da359ad99985b [file] [log] [blame]
Alex Deymoaea4c1c2015-08-19 20:24:43 -07001//
2// Copyright (C) 2011 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
adlr@google.com3defe6a2009-12-04 20:57:17 +000016
Gilad Arnoldcf175a02014-07-10 16:48:47 -070017#ifndef UPDATE_ENGINE_OMAHA_RESPONSE_HANDLER_ACTION_H_
18#define UPDATE_ENGINE_OMAHA_RESPONSE_HANDLER_ACTION_H_
adlr@google.com3defe6a2009-12-04 20:57:17 +000019
20#include <string>
Darin Petkov18c7bce2011-06-16 14:07:00 -070021
22#include <gtest/gtest_prod.h> // for FRIEND_TEST
23
adlr@google.com3defe6a2009-12-04 20:57:17 +000024#include "update_engine/action.h"
25#include "update_engine/install_plan.h"
Darin Petkov6a5b3222010-07-13 14:55:28 -070026#include "update_engine/omaha_request_action.h"
Jay Srinivasan6f6ea002012-12-14 11:26:28 -080027#include "update_engine/system_state.h"
adlr@google.com3defe6a2009-12-04 20:57:17 +000028
29// This class reads in an Omaha response and converts what it sees into
30// an install plan which is passed out.
31
32namespace chromeos_update_engine {
33
34class OmahaResponseHandlerAction;
35
36template<>
37class ActionTraits<OmahaResponseHandlerAction> {
38 public:
Darin Petkov6a5b3222010-07-13 14:55:28 -070039 typedef OmahaResponse InputObjectType;
adlr@google.com3defe6a2009-12-04 20:57:17 +000040 typedef InstallPlan OutputObjectType;
41};
42
43class OmahaResponseHandlerAction : public Action<OmahaResponseHandlerAction> {
44 public:
Darin Petkov6c118642010-10-21 12:06:30 -070045 static const char kDeadlineFile[];
46
Gilad Arnold4dbd47e2013-07-22 05:39:26 -070047 explicit OmahaResponseHandlerAction(SystemState* system_state);
48
adlr@google.com3defe6a2009-12-04 20:57:17 +000049 typedef ActionTraits<OmahaResponseHandlerAction>::InputObjectType
50 InputObjectType;
51 typedef ActionTraits<OmahaResponseHandlerAction>::OutputObjectType
52 OutputObjectType;
Alex Deymo610277e2014-11-11 21:18:11 -080053 void PerformAction() override;
adlr@google.com3defe6a2009-12-04 20:57:17 +000054
55 // This is a synchronous action, and thus TerminateProcessing() should
56 // never be called
Alex Deymo610277e2014-11-11 21:18:11 -080057 void TerminateProcessing() override { CHECK(false); }
adlr@google.com3defe6a2009-12-04 20:57:17 +000058
Andrew de los Reyes4fe15d02009-12-10 19:01:36 -080059 bool GotNoUpdateResponse() const { return got_no_update_response_; }
Andrew de los Reyes63b96d72010-05-10 13:08:54 -070060 const InstallPlan& install_plan() const { return install_plan_; }
adlr@google.com3defe6a2009-12-04 20:57:17 +000061
62 // Debugging/logging
63 static std::string StaticType() { return "OmahaResponseHandlerAction"; }
Alex Deymo610277e2014-11-11 21:18:11 -080064 std::string Type() const override { return StaticType(); }
Darin Petkovabc7bc02011-02-23 14:39:43 -080065 void set_key_path(const std::string& path) { key_path_ = path; }
adlr@google.com3defe6a2009-12-04 20:57:17 +000066
67 private:
Jay Srinivasan738fdf32012-12-07 17:40:54 -080068 // Returns true if payload hash checks are mandatory based on the state
69 // of the system and the contents of the Omaha response. False otherwise.
70 bool AreHashChecksMandatory(const OmahaResponse& response);
71
Jay Srinivasan6f6ea002012-12-14 11:26:28 -080072 // Global system context.
73 SystemState* system_state_;
Darin Petkov73058b42010-10-06 16:32:19 -070074
Andrew de los Reyes63b96d72010-05-10 13:08:54 -070075 // The install plan, if we have an update.
76 InstallPlan install_plan_;
Darin Petkov6a5b3222010-07-13 14:55:28 -070077
Andrew de los Reyes4fe15d02009-12-10 19:01:36 -080078 // True only if we got a response and the response said no updates
79 bool got_no_update_response_;
adlr@google.com3defe6a2009-12-04 20:57:17 +000080
Darin Petkovabc7bc02011-02-23 14:39:43 -080081 // Public key path to use for payload verification.
82 std::string key_path_;
83
Gilad Arnold4dbd47e2013-07-22 05:39:26 -070084 // File used for communication deadline to Chrome.
85 const std::string deadline_file_;
86
87 // Special ctor + friend declarations for testing purposes.
88 OmahaResponseHandlerAction(SystemState* system_state,
89 const std::string& deadline_file);
90
91 friend class OmahaResponseHandlerActionTest;
92
93 FRIEND_TEST(UpdateAttempterTest, CreatePendingErrorEventResumedTest);
94
adlr@google.com3defe6a2009-12-04 20:57:17 +000095 DISALLOW_COPY_AND_ASSIGN(OmahaResponseHandlerAction);
96};
97
98} // namespace chromeos_update_engine
99
Gilad Arnoldcf175a02014-07-10 16:48:47 -0700100#endif // UPDATE_ENGINE_OMAHA_RESPONSE_HANDLER_ACTION_H_