combined_access_setup_operation.cc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. // Copyright 2022 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/components/phonehub/combined_access_setup_operation.h"
  5. #include <array>
  6. #include "base/check.h"
  7. #include "base/containers/contains.h"
  8. namespace ash {
  9. namespace phonehub {
  10. namespace {
  11. // Status values which are considered "final" - i.e., once the status of an
  12. // operation changes to one of these values, the operation has completed. These
  13. // status values indicate either a success or a fatal error.
  14. constexpr std::array<CombinedAccessSetupOperation::Status, 8>
  15. kOperationFinishedStatus{
  16. CombinedAccessSetupOperation::Status::kTimedOutConnecting,
  17. CombinedAccessSetupOperation::Status::kConnectionDisconnected,
  18. CombinedAccessSetupOperation::Status::kCompletedSuccessfully,
  19. CombinedAccessSetupOperation::Status::kProhibitedFromProvidingAccess,
  20. CombinedAccessSetupOperation::Status::kCompletedUserRejectedAllAccess,
  21. CombinedAccessSetupOperation::Status::kOperationFailedOrCancelled,
  22. CombinedAccessSetupOperation::Status::
  23. kCameraRollGrantedNotificationRejected,
  24. CombinedAccessSetupOperation::Status::
  25. kCameraRollRejectedNotificationGranted,
  26. };
  27. } // namespace
  28. // static
  29. bool CombinedAccessSetupOperation::IsFinalStatus(Status status) {
  30. return base::Contains(kOperationFinishedStatus, status);
  31. }
  32. CombinedAccessSetupOperation::CombinedAccessSetupOperation(
  33. Delegate* delegate,
  34. base::OnceClosure destructor_callback)
  35. : delegate_(delegate),
  36. destructor_callback_(std::move(destructor_callback)) {
  37. DCHECK(delegate_);
  38. DCHECK(destructor_callback_);
  39. }
  40. CombinedAccessSetupOperation::~CombinedAccessSetupOperation() {
  41. std::move(destructor_callback_).Run();
  42. }
  43. void CombinedAccessSetupOperation::NotifyCombinedStatusChanged(
  44. Status new_status) {
  45. current_status_ = new_status;
  46. delegate_->OnCombinedStatusChange(new_status);
  47. }
  48. std::ostream& operator<<(std::ostream& stream,
  49. CombinedAccessSetupOperation::Status status) {
  50. switch (status) {
  51. case CombinedAccessSetupOperation::Status::kConnecting:
  52. stream << "[Connecting]";
  53. break;
  54. case CombinedAccessSetupOperation::Status::kTimedOutConnecting:
  55. stream << "[Timed out connecting]";
  56. break;
  57. case CombinedAccessSetupOperation::Status::kConnectionDisconnected:
  58. stream << "[Connection disconnected]";
  59. break;
  60. case CombinedAccessSetupOperation::Status::
  61. kSentMessageToPhoneAndWaitingForResponse:
  62. stream << "[Sent message to phone; waiting for response]";
  63. break;
  64. case CombinedAccessSetupOperation::Status::kCompletedSuccessfully:
  65. stream << "[Completed successfully]";
  66. break;
  67. case CombinedAccessSetupOperation::Status::kProhibitedFromProvidingAccess:
  68. stream << "[Prohibited from providing access]";
  69. break;
  70. case CombinedAccessSetupOperation::Status::kCompletedUserRejectedAllAccess:
  71. stream << "[User rejected to grant access]";
  72. break;
  73. case CombinedAccessSetupOperation::Status::kOperationFailedOrCancelled:
  74. stream << "[Operation failed or cancelled]";
  75. break;
  76. case CombinedAccessSetupOperation::Status::
  77. kCameraRollGrantedNotificationRejected:
  78. stream << "[User granted access to Camera Roll but rejected access to "
  79. "notification]";
  80. break;
  81. case CombinedAccessSetupOperation::Status::
  82. kCameraRollRejectedNotificationGranted:
  83. stream << "[User rejected access to Camera Roll but granted access to "
  84. "notification]";
  85. break;
  86. }
  87. return stream;
  88. }
  89. } // namespace phonehub
  90. } // namespace ash