• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright (C) 2016 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 //
16 
17 #ifndef UPDATE_ENGINE_AOSP_SERVICE_DELEGATE_ANDROID_INTERFACE_H_
18 #define UPDATE_ENGINE_AOSP_SERVICE_DELEGATE_ANDROID_INTERFACE_H_
19 
20 #include <memory>
21 #include <string>
22 #include <vector>
23 
24 #include "update_engine/common/error.h"
25 
26 namespace chromeos_update_engine {
27 
28 // See ServiceDelegateAndroidInterface.CleanupSuccessfulUpdate
29 // Wraps a IUpdateEngineCallback binder object used specifically for
30 // CleanupSuccessfulUpdate.
31 class CleanupSuccessfulUpdateCallbackInterface {
32  public:
~CleanupSuccessfulUpdateCallbackInterface()33   virtual ~CleanupSuccessfulUpdateCallbackInterface() {}
34   virtual void OnCleanupProgressUpdate(double progress) = 0;
35   virtual void OnCleanupComplete(int32_t error_code) = 0;
36   // Call RegisterForDeathNotifications on the internal binder object.
37   virtual void RegisterForDeathNotifications(
38       const std::function<void()>& unbind) = 0;
39 };
40 
41 // This class defines the interface exposed by the Android version of the
42 // daemon service. This interface only includes the method calls that such
43 // daemon exposes. For asynchronous events initiated by a class implementing
44 // this interface see the ServiceObserverInterface class.
45 class ServiceDelegateAndroidInterface {
46  public:
47   virtual ~ServiceDelegateAndroidInterface() = default;
48 
49   // Start an update attempt to download an apply the provided |payload_url| if
50   // no other update is running. The extra |key_value_pair_headers| will be
51   // included when fetching the payload. Returns whether the update was started
52   // successfully, which means that no other update was running and the passed
53   // parameters were correct, but not necessarily that the update finished
54   // correctly.
55   virtual bool ApplyPayload(
56       const std::string& payload_url,
57       int64_t payload_offset,
58       int64_t payload_size,
59       const std::vector<std::string>& key_value_pair_headers,
60       Error* error) = 0;
61 
62   virtual bool ApplyPayload(
63       int fd,
64       int64_t payload_offset,
65       int64_t payload_size,
66       const std::vector<std::string>& key_value_pair_headers,
67       Error* error) = 0;
68 
69   virtual bool TriggerPostinstall(const std::string& partition,
70                                   Error* error) = 0;
71 
72   // Suspend an ongoing update. Returns true if there was an update ongoing and
73   // it was suspended. In case of failure, it returns false and sets |error|
74   // accordingly.
75   virtual bool SuspendUpdate(Error* error) = 0;
76 
77   // Resumes an update suspended with SuspendUpdate(). The update can't be
78   // suspended after it finished and this method will fail in that case.
79   // Returns whether the resume operation was successful, which only implies
80   // that there was a suspended update. In case of error, returns false and sets
81   // |error| accordingly.
82   virtual bool ResumeUpdate(Error* error) = 0;
83 
84   // Cancel the ongoing update. The update could be running or suspended, but it
85   // can't be canceled after it was done. In case of error, returns false and
86   // sets |error| accordingly.
87   virtual bool CancelUpdate(Error* error) = 0;
88 
89   // Reset the already applied update back to an idle state. This method can
90   // only be called when no update attempt is going on, and it will reset the
91   // status back to idle, deleting the currently applied update if any. In case
92   // of error, returns false and sets |error| accordingly.
93   virtual bool ResetStatus(Error* error) = 0;
94 
95   // Verifies whether a payload (delegated by the payload metadata) can be
96   // applied to the current device. Returns whether the payload is applicable.
97   // In case of error, returns false and sets |error| accordingly.
98   virtual bool VerifyPayloadApplicable(const std::string& metadata_filename,
99                                        Error* error) = 0;
100   // Sets the A/B slot switch for the next boot after applying an ota update.
101   // If applyPayload hasn't switched the slot by itself, the client can call
102   // this API to switch the slot and apply the update on next boot. Returns
103   // true on success.
104   virtual bool setShouldSwitchSlotOnReboot(const std::string& metadata_filename,
105                                            Error* error) = 0;
106 
107   // Resets the boot slot to the source/current slot, without cancelling the
108   // update progress. This can be called after the update is installed, and to
109   // prevent the device from accidentally taking the update when it reboots.
110   virtual bool resetShouldSwitchSlotOnReboot(Error* error) = 0;
111 
112   // Allocates space for a payload.
113   // Returns 0 if space is successfully preallocated.
114   // Return non-zero if not enough space is not available; returned value is
115   // the total space required (in bytes) to be free on the device for this
116   // update to be applied, and |error| is unset.
117   // In case of error, returns 0, and sets |error| accordingly.
118   //
119   // This function may block for several minutes in the worst case.
120   virtual uint64_t AllocateSpaceForPayload(
121       const std::string& metadata_filename,
122       const std::vector<std::string>& key_value_pair_headers,
123       Error* error) = 0;
124 
125   // Wait for merge to complete, then clean up merge after an update has been
126   // successful.
127   //
128   // This function returns immediately. Progress updates are provided in
129   // |callback|.
130   virtual void CleanupSuccessfulUpdate(
131       std::unique_ptr<CleanupSuccessfulUpdateCallbackInterface> callback,
132       Error* error) = 0;
133 
134  protected:
135   ServiceDelegateAndroidInterface() = default;
136 };
137 
138 }  // namespace chromeos_update_engine
139 
140 #endif  // UPDATE_ENGINE_AOSP_SERVICE_DELEGATE_ANDROID_INTERFACE_H_
141