12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // Copyright 2020 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.
- #include "remoting/host/setup/host_stopper.h"
- #include "base/logging.h"
- #include "base/threading/platform_thread.h"
- #include "base/values.h"
- namespace remoting {
- HostStopper::HostStopper(std::unique_ptr<ServiceClient> service_client,
- scoped_refptr<DaemonController> daemon_controller)
- : service_client_(std::move(service_client)),
- daemon_controller_(daemon_controller) {
- weak_ptr_ = weak_ptr_factory_.GetWeakPtr();
- }
- HostStopper::~HostStopper() = default;
- void HostStopper::StopLocalHost(std::string access_token,
- base::OnceClosure on_done) {
- DCHECK(!on_done_);
- access_token_ = access_token;
- on_done_ = std::move(on_done);
- daemon_controller_->GetConfig(
- base::BindOnce(&HostStopper::OnConfigLoaded, weak_ptr_));
- }
- void HostStopper::OnConfigLoaded(absl::optional<base::Value::Dict> config) {
- const std::string* hostId = nullptr;
- if (!config || !(hostId = config->FindString("host_id"))) {
- std::move(on_done_).Run();
- return;
- }
- LOG(INFO) << "Stopping existing host: " << *hostId
- << ". This may take a few seconds.";
- service_client_->UnregisterHost(*hostId, access_token_, this);
- }
- void HostStopper::StopHost() {
- daemon_controller_->Stop(base::BindOnce(&HostStopper::OnStopped, weak_ptr_));
- }
- void HostStopper::OnStopped(DaemonController::AsyncResult) {
- bool stopped = false;
- for (auto i = 0; !stopped && i < 10; i++) {
- stopped =
- (daemon_controller_->GetState() == DaemonController::STATE_STOPPED);
- if (!stopped)
- base::PlatformThread::Sleep(base::Seconds(1));
- }
- if (!stopped)
- LOG(WARNING) << "Unable to stop existing host process. Setup will "
- << "continue, but you may need to reboot to complete it.";
- std::move(on_done_).Run();
- }
- void HostStopper::OnHostRegistered(const std::string& authorization_code) {
- NOTREACHED();
- }
- void HostStopper::OnHostUnregistered() {
- StopHost();
- }
- void HostStopper::OnOAuthError() {
- StopHost();
- }
- void HostStopper::OnNetworkError(int response_code) {
- StopHost();
- }
- } // namespace remoting
|