host_status_provider.cc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Copyright 2018 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. #include "ash/services/multidevice_setup/host_status_provider.h"
  5. #include "ash/components/multidevice/logging/logging.h"
  6. #include "base/logging.h"
  7. namespace ash {
  8. namespace multidevice_setup {
  9. namespace {
  10. std::string HostStatusToString(mojom::HostStatus status) {
  11. switch (status) {
  12. case mojom::HostStatus::kNoEligibleHosts:
  13. return "[kNoEligibleHosts]";
  14. case mojom::HostStatus::kEligibleHostExistsButNoHostSet:
  15. return "[kEligibleHostExistsButNoHostSet]";
  16. case mojom::HostStatus::kHostSetLocallyButWaitingForBackendConfirmation:
  17. return "[kHostSetLocallyButWaitingForBackendConfirmation]";
  18. case mojom::HostStatus::kHostSetButNotYetVerified:
  19. return "[kHostSetButNotYetVerified]";
  20. case mojom::HostStatus::kHostVerified:
  21. return "[kHostVerified]";
  22. }
  23. }
  24. std::string HostStatusWithDeviceToString(
  25. mojom::HostStatus host_status,
  26. const absl::optional<multidevice::RemoteDeviceRef>& host_device) {
  27. std::ostringstream stream;
  28. stream << "{" << std::endl;
  29. stream << " " << HostStatusToString(host_status) << ": "
  30. << (host_device ? host_device->pii_free_name() : " no device")
  31. << std::endl;
  32. stream << "}";
  33. return stream.str();
  34. }
  35. } // namespace
  36. HostStatusProvider::HostStatusWithDevice::HostStatusWithDevice(
  37. mojom::HostStatus host_status,
  38. const absl::optional<multidevice::RemoteDeviceRef>& host_device)
  39. : host_status_(host_status), host_device_(host_device) {
  40. if (host_status_ == mojom::HostStatus::kNoEligibleHosts ||
  41. host_status_ == mojom::HostStatus::kEligibleHostExistsButNoHostSet) {
  42. if (host_device_) {
  43. PA_LOG(ERROR) << "HostStatusWithDevice::HostStatusWithDevice(): Tried to "
  44. << "construct a HostStatusWithDevice with a status "
  45. << "indicating no device, but a device was provided. "
  46. << "Status: " << host_status_ << ", IDs: "
  47. << host_device_->GetInstanceIdDeviceIdForLogs();
  48. NOTREACHED();
  49. }
  50. } else if (!host_device_) {
  51. PA_LOG(ERROR) << "HostStatusWithDevice::HostStatusWithDevice(): Tried to "
  52. << "construct a HostStatusWithDevice with a status "
  53. << "indicating a device, but no device was provided. "
  54. << "Status: " << host_status_;
  55. NOTREACHED();
  56. }
  57. }
  58. HostStatusProvider::HostStatusWithDevice::HostStatusWithDevice(
  59. const HostStatusWithDevice& other) = default;
  60. HostStatusProvider::HostStatusWithDevice::~HostStatusWithDevice() = default;
  61. bool HostStatusProvider::HostStatusWithDevice::operator==(
  62. const HostStatusWithDevice& other) const {
  63. return host_status_ == other.host_status_ &&
  64. host_device_ == other.host_device_;
  65. }
  66. bool HostStatusProvider::HostStatusWithDevice::operator!=(
  67. const HostStatusWithDevice& other) const {
  68. return !(*this == other);
  69. }
  70. HostStatusProvider::HostStatusProvider() = default;
  71. HostStatusProvider::~HostStatusProvider() = default;
  72. void HostStatusProvider::AddObserver(Observer* observer) {
  73. observer_list_.AddObserver(observer);
  74. }
  75. void HostStatusProvider::RemoveObserver(Observer* observer) {
  76. observer_list_.RemoveObserver(observer);
  77. }
  78. void HostStatusProvider::NotifyHostStatusChange(
  79. mojom::HostStatus host_status,
  80. const absl::optional<multidevice::RemoteDeviceRef>& host_device) {
  81. HostStatusWithDevice host_status_with_device(host_status, host_device);
  82. PA_LOG(INFO) << __func__ << ": "
  83. << HostStatusWithDeviceToString(host_status, host_device);
  84. for (auto& observer : observer_list_)
  85. observer.OnHostStatusChange(host_status_with_device);
  86. }
  87. } // namespace multidevice_setup
  88. } // namespace ash