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.
5 #ifndef CHROMEOS_DBUS_UPDATE_ENGINE_CLIENT_H_
6 #define CHROMEOS_DBUS_UPDATE_ENGINE_CLIENT_H_
8 #include "base/callback.h"
9 #include "base/observer_list.h"
10 #include "chromeos/chromeos_export.h"
11 #include "chromeos/dbus/dbus_client.h"
12 #include "chromeos/dbus/dbus_client_implementation_type.h"
18 // UpdateEngineClient is used to communicate with the update engine.
19 class CHROMEOS_EXPORT UpdateEngineClient
: public DBusClient
{
21 // Edges for state machine
22 // IDLE->CHECKING_FOR_UPDATE
23 // CHECKING_FOR_UPDATE->IDLE
24 // CHECKING_FOR_UPDATE->UPDATE_AVAILABLE
26 // FINALIZING->UPDATE_NEED_REBOOT
27 // Any state can transition to REPORTING_ERROR_EVENT and then on to IDLE.
28 enum UpdateStatusOperation
{
29 UPDATE_STATUS_ERROR
= -1,
30 UPDATE_STATUS_IDLE
= 0,
31 UPDATE_STATUS_CHECKING_FOR_UPDATE
,
32 UPDATE_STATUS_UPDATE_AVAILABLE
,
33 UPDATE_STATUS_DOWNLOADING
,
34 UPDATE_STATUS_VERIFYING
,
35 UPDATE_STATUS_FINALIZING
,
36 UPDATE_STATUS_UPDATED_NEED_REBOOT
,
37 UPDATE_STATUS_REPORTING_ERROR_EVENT
,
38 UPDATE_STATUS_ATTEMPTING_ROLLBACK
41 // The status of the ongoing update attempt.
43 Status() : status(UPDATE_STATUS_IDLE
),
44 download_progress(0.0),
49 UpdateStatusOperation status
;
50 double download_progress
; // 0.0 - 1.0
51 int64_t last_checked_time
; // As reported by std::time().
52 std::string new_version
;
53 int64_t new_size
; // Valid during DOWNLOADING, in bytes.
56 // The result code used for RequestUpdateCheck().
57 enum UpdateCheckResult
{
58 UPDATE_RESULT_SUCCESS
,
60 UPDATE_RESULT_NOTIMPLEMENTED
,
63 // Interface for observing changes from the update engine.
66 // Called when the status is updated.
67 virtual void UpdateStatusChanged(const Status
& status
) {}
70 virtual ~UpdateEngineClient();
72 // Adds and removes the observer.
73 virtual void AddObserver(Observer
* observer
) = 0;
74 virtual void RemoveObserver(Observer
* observer
) = 0;
75 // Returns true if this object has the given observer.
76 virtual bool HasObserver(Observer
* observer
) = 0;
78 // Called once RequestUpdateCheck() is complete. Takes one parameter:
79 // - UpdateCheckResult: the result of the update check.
80 typedef base::Callback
<void(UpdateCheckResult
)> UpdateCheckCallback
;
82 // Requests an update check and calls |callback| when completed.
83 virtual void RequestUpdateCheck(const UpdateCheckCallback
& callback
) = 0;
85 // Reboots if update has been performed.
86 virtual void RebootAfterUpdate() = 0;
89 virtual void Rollback() = 0;
91 // Called once CanRollbackCheck() is complete. Takes one parameter:
92 // - bool: the result of the rollback availability check.
93 typedef base::Callback
<void(bool can_rollback
)> RollbackCheckCallback
;
95 // Checks if Rollback is available and calls |callback| when completed.
96 virtual void CanRollbackCheck(
97 const RollbackCheckCallback
& callback
) = 0;
99 // Called once GetChannel() is complete. Takes one parameter;
100 // - string: the channel name like "beta-channel".
101 typedef base::Callback
<void(const std::string
& channel_name
)>
104 // Returns the last status the object received from the update engine.
106 // Ideally, the D-Bus client should be state-less, but there are clients
107 // that need this information.
108 virtual Status
GetLastStatus() = 0;
110 // Changes the current channel of the device to the target
111 // channel. If the target channel is a less stable channel than the
112 // current channel, then the channel change happens immediately (at
113 // the next update check). If the target channel is a more stable
114 // channel, then if |is_powerwash_allowed| is set to true, then also
115 // the change happens immediately but with a powerwash if
116 // required. Otherwise, the change takes effect eventually (when the
117 // version on the target channel goes above the version number of
118 // what the device currently has). |target_channel| should look like
119 // "dev-channel", "beta-channel" or "stable-channel".
120 virtual void SetChannel(const std::string
& target_channel
,
121 bool is_powerwash_allowed
) = 0;
123 // If |get_current_channel| is set to true, calls |callback| with
124 // the name of the channel that the device is currently
125 // on. Otherwise, it calls it with the name of the channel the
126 // device is supposed to be (in case of a pending channel
127 // change). On error, calls |callback| with an empty string.
128 virtual void GetChannel(bool get_current_channel
,
129 const GetChannelCallback
& callback
) = 0;
131 // Returns an empty UpdateCheckCallback that does nothing.
132 static UpdateCheckCallback
EmptyUpdateCheckCallback();
134 // Creates the instance.
135 static UpdateEngineClient
* Create(DBusClientImplementationType type
);
138 // Create() should be used instead.
139 UpdateEngineClient();
142 DISALLOW_COPY_AND_ASSIGN(UpdateEngineClient
);
145 } // namespace chromeos
147 #endif // CHROMEOS_DBUS_UPDATE_ENGINE_CLIENT_H_