blob: 8b47fbe98b1e89691c3661202807b98589077ba2 [file] [log] [blame]
Joshua Pawlickib6647362020-09-30 16:43:391// Copyright 2020 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.
4
Joshua Pawlickib6647362020-09-30 16:43:395#include "chrome/updater/setup.h"
6
7#include "base/bind.h"
8#include "base/callback.h"
9#include "base/task/task_traits.h"
10#include "base/task/thread_pool.h"
11#include "base/time/time.h"
Joshua Pawlicki52c83632020-12-15 16:18:1512#include "chrome/updater/constants.h"
Joshua Pawlickib6647362020-09-30 16:43:3913#include "chrome/updater/launchd_util.h"
Mila Green1d9a09432021-08-19 23:36:2314#include "chrome/updater/mac/setup/setup.h"
Joshua Pawlickib6647362020-09-30 16:43:3915#include "chrome/updater/mac/xpc_service_names.h"
Mila Greenf6d82f82021-03-05 22:14:2916#include "chrome/updater/updater_scope.h"
Joshua Pawlickib6647362020-09-30 16:43:3917
18namespace updater {
19
20namespace {
21
Mila Greenf6d82f82021-03-05 22:14:2922void SetupDone(base::OnceCallback<void(int)> callback,
23 UpdaterScope scope,
24 int result) {
Joshua Pawlickiac9b05a2022-02-17 02:18:4525 if (result != kErrorOk) {
Joshua Pawlickib6647362020-09-30 16:43:3926 std::move(callback).Run(result);
27 return;
28 }
29 PollLaunchctlList(
Michael Chang4db00b342021-09-22 17:19:4230 scope, GetUpdateServiceInternalLaunchdName(scope),
Peter Kastinge5a38ed2021-10-02 03:06:3531 LaunchctlPresence::kPresent, base::Seconds(kWaitForLaunchctlUpdateSec),
Joshua Pawlickib6647362020-09-30 16:43:3932 base::BindOnce(
33 [](base::OnceCallback<void(int)> callback, bool service_exists) {
34 std::move(callback).Run(
35 service_exists
Joshua Pawlickiac9b05a2022-02-17 02:18:4536 ? kErrorOk
37 : kErrorFailedAwaitingLaunchdUpdateServiceInternalJob);
Joshua Pawlickib6647362020-09-30 16:43:3938 },
39 std::move(callback)));
40}
41
42} // namespace
43
Mila Greenf6d82f82021-03-05 22:14:2944void InstallCandidate(UpdaterScope scope,
45 base::OnceCallback<void(int)> callback) {
Joshua Pawlickib6647362020-09-30 16:43:3946 base::ThreadPool::PostTaskAndReplyWithResult(
Mila Greenf6d82f82021-03-05 22:14:2947 FROM_HERE, {base::MayBlock()}, base::BindOnce(&Setup, scope),
48 base::BindOnce(&SetupDone, std::move(callback), scope));
Joshua Pawlickib6647362020-09-30 16:43:3949}
50
51} // namespace updater