| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_UPDATE_CLIENT_ACTION_H_ |
| #define COMPONENTS_UPDATE_CLIENT_ACTION_H_ |
| |
| #include <stddef.h> |
| |
| #include <string> |
| |
| #include "base/callback.h" |
| #include "base/macros.h" |
| #include "base/threading/thread_checker.h" |
| #include "components/update_client/crx_update_item.h" |
| #include "components/update_client/update_client.h" |
| |
| namespace update_client { |
| |
| enum class Error; |
| struct CrxUpdateItem; |
| struct UpdateContext; |
| |
| // Any update can be broken down as a sequence of discrete steps, such as |
| // checking for updates, downloading patches, updating, and waiting between |
| // successive updates. An action is the smallest unit of work executed by |
| // the update engine. |
| // |
| // Defines an abstract interface for a unit of work, executed by the |
| // update engine as part of an update. |
| class Action { |
| public: |
| virtual ~Action() {} |
| |
| // Runs the code encapsulated by the action. When an action completes, it can |
| // chain up and transfer the execution flow to another action or it can |
| // invoke the |callback| when this function has completed and there is nothing |
| // else to do. |
| virtual void Run(UpdateContext* update_context, Callback callback) = 0; |
| }; |
| |
| // Provides a reusable implementation of common functions needed by actions. |
| class ActionImpl { |
| protected: |
| ActionImpl(); |
| ~ActionImpl(); |
| |
| void Run(UpdateContext* update_context, Callback callback); |
| |
| // Changes the current state of the |item| to the new state |to|. |
| void ChangeItemState(CrxUpdateItem* item, CrxUpdateItem::State to); |
| |
| // Changes the state of all items in |update_context_|. Returns the count |
| // of items affected by the call. |
| size_t ChangeAllItemsState(CrxUpdateItem::State from, |
| CrxUpdateItem::State to); |
| |
| // Returns the item associated with the component |id| or nullptr in case |
| // of errors. |
| CrxUpdateItem* FindUpdateItemById(const std::string& id) const; |
| |
| void NotifyObservers(UpdateClient::Observer::Events event, |
| const std::string& id); |
| |
| // Updates the CRX at the front of the CRX queue in this update context. |
| void UpdateCrx(); |
| |
| // Completes updating the CRX at the front of the queue, and initiates |
| // the update for the next CRX in the queue, if the queue is not empty. |
| void UpdateCrxComplete(CrxUpdateItem* item); |
| |
| // Called when the updates for all CRXs have finished and the execution |
| // flow must return back to the update engine. |
| void UpdateComplete(Error error); |
| |
| base::ThreadChecker thread_checker_; |
| |
| UpdateContext* update_context_; // Not owned by this class. |
| Callback callback_; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(ActionImpl); |
| }; |
| |
| } // namespace update_client |
| |
| #endif // COMPONENTS_UPDATE_CLIENT_ACTION_H_ |