| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_UPDATE_CLIENT_PIPELINE_H_ |
| #define COMPONENTS_UPDATE_CLIENT_PIPELINE_H_ |
| |
| #include <cstdint> |
| #include <string> |
| |
| #include "base/functional/callback_forward.h" |
| #include "base/memory/scoped_refptr.h" |
| #include "base/types/expected.h" |
| #include "base/values.h" |
| #include "components/crx_file/crx_verifier.h" |
| #include "components/update_client/crx_downloader.h" |
| #include "components/update_client/protocol_parser.h" |
| #include "components/update_client/update_client.h" |
| #include "components/update_client/update_client_errors.h" |
| |
| namespace base { |
| class FilePath; |
| } |
| |
| namespace update_client { |
| |
| class Configurator; |
| class CrxCache; |
| |
| using PipelineStartCallback = base::OnceCallback<base::OnceClosure( |
| base::OnceCallback<void(const CategorizedError&)>)>; |
| |
| // Creates a pipeline of operations to update an item, and returns a callback |
| // that starts the pipeline as a parameter of `callback`. The pipeline callback |
| // in turn takes as an argument a completion callback to invoke when done, and |
| // returns a cancellation callback. The completion callback will be invoked on |
| // the same sequence that the pipeline is started on, and the cancellation |
| // callback must only be called on that same sequence. If `result` indicates a |
| // server error, returns instead a CategorizedError with |
| // ErrorCategory::kUpdateCheck. If `result` indicates no-update, returns |
| // instead a CategorizedError with ErrorCategory::kNone. As the pipeline |
| // executes operations, it calls `state_tracker` to record the ComponentState |
| // to expose to observers. It also calls `event_adder` to record events to be |
| // sent to the update server, and `diff_outcome_recorder` to record the outcome |
| // of the differential update (if any). |
| void MakePipeline( |
| scoped_refptr<Configurator> config, |
| base::RepeatingCallback<int64_t(const base::FilePath&)> get_available_space, |
| bool is_foreground, |
| const std::string& session_id, |
| scoped_refptr<CrxCache> crx_cache, |
| crx_file::VerifierFormat crx_format, |
| const std::string& id, |
| const std::vector<uint8_t>& pk_hash, |
| const std::string& install_data_index, |
| scoped_refptr<CrxInstaller> installer, |
| base::RepeatingCallback<void(ComponentState)> state_tracker, |
| base::RepeatingCallback<void(base::Value::Dict)> event_adder, |
| CrxDownloader::ProgressCallback download_progress_callback, |
| CrxInstaller::ProgressCallback install_progress_callback, |
| base::RepeatingCallback<void(const CrxInstaller::Result&)> |
| install_complete_callback, |
| scoped_refptr<ActionHandler> action_handler, |
| const ProtocolParser::App& result, |
| base::OnceCallback<void( |
| base::expected<PipelineStartCallback, CategorizedError>)> callback); |
| |
| } // namespace update_client |
| |
| #endif // COMPONENTS_UPDATE_CLIENT_PIPELINE_H_ |