#include "chrome/updater/ipc/update_service_proxy_posix.h"
#include <memory>
#include <optional>
#include <string>
#include <utility>
#include <vector>
#include "base/cancelable_callback.h"
#include "base/check.h"
#include "base/files/file_path.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/logging.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/ranges/algorithm.h"
#include "base/sequence_checker.h"
#include "base/task/bind_post_task.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/thread_pool.h"
#include "base/time/time.h"
#include "base/types/expected.h"
#include "base/version.h"
#include "chrome/updater/app/server/posix/mojom/updater_service.mojom.h"
#include "chrome/updater/constants.h"
#include "chrome/updater/ipc/ipc_names.h"
#include "chrome/updater/ipc/update_service_dialer.h"
#include "chrome/updater/ipc/update_service_proxy.h"
#include "chrome/updater/registration_data.h"
#include "chrome/updater/service_proxy_factory.h"
#include "chrome/updater/update_service.h"
#include "chrome/updater/updater_scope.h"
#include "chrome/updater/util/posix_util.h"
#include "components/named_mojo_ipc_server/named_mojo_ipc_server_client_util.h"
#include "mojo/public/cpp/bindings/callback_helpers.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "mojo/public/cpp/platform/named_platform_channel.h"
#include "mojo/public/cpp/platform/platform_channel_endpoint.h"
#include "mojo/public/cpp/system/isolated_connection.h"
#include "mojo/public/cpp/system/message_pipe.h"
namespace updater {
namespace {
constexpr base::TimeDelta kConnectionTimeout = …;
[[nodiscard]] UpdateService::UpdateState MakeUpdateState(
const mojom::UpdateStatePtr& state_mojom) { … }
[[nodiscard]] UpdateService::AppState MakeAppState(
const mojom::AppStatePtr& app_state_mojo) { … }
[[nodiscard]] mojom::RegistrationRequestPtr MakeRegistrationRequest(
const RegistrationRequest& request) { … }
class StateChangeObserverImpl : public mojom::StateChangeObserver { … };
template <typename T>
base::OnceCallback<void(T)> ToMojoCallback(
base::OnceCallback<void(base::expected<T, RpcError>)> callback) { … }
[[nodiscard]] base::OnceCallback<
void(mojo::PendingReceiver<mojom::StateChangeObserver>)>
MakeStateChangeObserver(
base::RepeatingCallback<void(const UpdateService::UpdateState&)>
state_change_callback,
base::OnceCallback<void(base::expected<UpdateService::Result, RpcError>)>
complete_callback) { … }
std::optional<mojo::PlatformChannelEndpoint> ConnectMojo(UpdaterScope scope,
int tries) { … }
void Connect(
UpdaterScope scope,
int tries,
base::Time deadline,
base::OnceCallback<void(std::optional<mojo::PlatformChannelEndpoint>)>
connected_callback) { … }
}
UpdateServiceProxyImpl::UpdateServiceProxyImpl(
UpdaterScope scope,
const base::TimeDelta& get_version_timeout)
: … { … }
void UpdateServiceProxyImpl::GetVersion(
base::OnceCallback<void(base::expected<base::Version, RpcError>)>
callback) { … }
void UpdateServiceProxyImpl::FetchPolicies(
base::OnceCallback<void(base::expected<int, RpcError>)> callback) { … }
void UpdateServiceProxyImpl::RegisterApp(
const RegistrationRequest& request,
base::OnceCallback<void(base::expected<int, RpcError>)> callback) { … }
void UpdateServiceProxyImpl::GetAppStates(
base::OnceCallback<void(base::expected<std::vector<UpdateService::AppState>,
RpcError>)> callback) { … }
void UpdateServiceProxyImpl::RunPeriodicTasks(
base::OnceCallback<void(base::expected<int, RpcError>)> callback) { … }
void UpdateServiceProxyImpl::CheckForUpdate(
const std::string& app_id,
UpdateService::Priority priority,
UpdateService::PolicySameVersionUpdate policy_same_version_update,
base::RepeatingCallback<void(const UpdateService::UpdateState&)>
state_update,
base::OnceCallback<void(base::expected<UpdateService::Result, RpcError>)>
callback) { … }
void UpdateServiceProxyImpl::Update(
const std::string& app_id,
const std::string& install_data_index,
UpdateService::Priority priority,
UpdateService::PolicySameVersionUpdate policy_same_version_update,
base::RepeatingCallback<void(const UpdateService::UpdateState&)>
state_update,
base::OnceCallback<void(base::expected<UpdateService::Result, RpcError>)>
callback) { … }
void UpdateServiceProxyImpl::UpdateAll(
base::RepeatingCallback<void(const UpdateService::UpdateState&)>
state_update,
base::OnceCallback<void(base::expected<UpdateService::Result, RpcError>)>
callback) { … }
void UpdateServiceProxyImpl::Install(
const RegistrationRequest& registration,
const std::string& client_install_data,
const std::string& install_data_index,
UpdateService::Priority priority,
base::RepeatingCallback<void(const UpdateService::UpdateState&)>
state_update,
base::OnceCallback<void(base::expected<UpdateService::Result, RpcError>)>
callback) { … }
void UpdateServiceProxyImpl::CancelInstalls(const std::string& app_id) { … }
void UpdateServiceProxyImpl::RunInstaller(
const std::string& app_id,
const base::FilePath& installer_path,
const std::string& install_args,
const std::string& install_data,
const std::string& install_settings,
base::RepeatingCallback<void(const UpdateService::UpdateState&)>
state_update,
base::OnceCallback<void(base::expected<UpdateService::Result, RpcError>)>
callback) { … }
void UpdateServiceProxyImpl::OnConnected(
mojo::PendingReceiver<mojom::UpdateService> pending_receiver,
std::optional<mojo::PlatformChannelEndpoint> endpoint) { … }
void UpdateServiceProxyImpl::OnDisconnected() { … }
UpdateServiceProxyImpl::~UpdateServiceProxyImpl() { … }
void UpdateServiceProxyImpl::EnsureConnecting() { … }
scoped_refptr<UpdateService> CreateUpdateServiceProxy(
UpdaterScope scope,
const base::TimeDelta& timeout) { … }
}