Joshua Pawlicki | b664736 | 2020-09-30 16:43:39 | [diff] [blame] | 1 | // 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 Pawlicki | b664736 | 2020-09-30 16:43:39 | [diff] [blame] | 5 | #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 Pawlicki | 52c8363 | 2020-12-15 16:18:15 | [diff] [blame] | 12 | #include "chrome/updater/constants.h" |
Joshua Pawlicki | b664736 | 2020-09-30 16:43:39 | [diff] [blame] | 13 | #include "chrome/updater/launchd_util.h" |
Mila Green | 1d9a0943 | 2021-08-19 23:36:23 | [diff] [blame] | 14 | #include "chrome/updater/mac/setup/setup.h" |
Joshua Pawlicki | b664736 | 2020-09-30 16:43:39 | [diff] [blame] | 15 | #include "chrome/updater/mac/xpc_service_names.h" |
Mila Green | f6d82f8 | 2021-03-05 22:14:29 | [diff] [blame] | 16 | #include "chrome/updater/updater_scope.h" |
Joshua Pawlicki | b664736 | 2020-09-30 16:43:39 | [diff] [blame] | 17 | |
| 18 | namespace updater { |
| 19 | |
| 20 | namespace { |
| 21 | |
Mila Green | f6d82f8 | 2021-03-05 22:14:29 | [diff] [blame] | 22 | void SetupDone(base::OnceCallback<void(int)> callback, |
| 23 | UpdaterScope scope, |
| 24 | int result) { |
Joshua Pawlicki | ac9b05a | 2022-02-17 02:18:45 | [diff] [blame] | 25 | if (result != kErrorOk) { |
Joshua Pawlicki | b664736 | 2020-09-30 16:43:39 | [diff] [blame] | 26 | std::move(callback).Run(result); |
| 27 | return; |
| 28 | } |
| 29 | PollLaunchctlList( |
Michael Chang | 4db00b34 | 2021-09-22 17:19:42 | [diff] [blame] | 30 | scope, GetUpdateServiceInternalLaunchdName(scope), |
Peter Kasting | e5a38ed | 2021-10-02 03:06:35 | [diff] [blame] | 31 | LaunchctlPresence::kPresent, base::Seconds(kWaitForLaunchctlUpdateSec), |
Joshua Pawlicki | b664736 | 2020-09-30 16:43:39 | [diff] [blame] | 32 | base::BindOnce( |
| 33 | [](base::OnceCallback<void(int)> callback, bool service_exists) { |
| 34 | std::move(callback).Run( |
| 35 | service_exists |
Joshua Pawlicki | ac9b05a | 2022-02-17 02:18:45 | [diff] [blame] | 36 | ? kErrorOk |
| 37 | : kErrorFailedAwaitingLaunchdUpdateServiceInternalJob); |
Joshua Pawlicki | b664736 | 2020-09-30 16:43:39 | [diff] [blame] | 38 | }, |
| 39 | std::move(callback))); |
| 40 | } |
| 41 | |
| 42 | } // namespace |
| 43 | |
Mila Green | f6d82f8 | 2021-03-05 22:14:29 | [diff] [blame] | 44 | void InstallCandidate(UpdaterScope scope, |
| 45 | base::OnceCallback<void(int)> callback) { |
Joshua Pawlicki | b664736 | 2020-09-30 16:43:39 | [diff] [blame] | 46 | base::ThreadPool::PostTaskAndReplyWithResult( |
Mila Green | f6d82f8 | 2021-03-05 22:14:29 | [diff] [blame] | 47 | FROM_HERE, {base::MayBlock()}, base::BindOnce(&Setup, scope), |
| 48 | base::BindOnce(&SetupDone, std::move(callback), scope)); |
Joshua Pawlicki | b664736 | 2020-09-30 16:43:39 | [diff] [blame] | 49 | } |
| 50 | |
| 51 | } // namespace updater |