blob: 7c667dcaca5e993386994d3cb545f431fb7557a5 [file]
// 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 "chromeos/components/phonehub/notification_access_setup_operation.h"
#include <array>
#include "base/check.h"
#include "base/containers/contains.h"
namespace chromeos {
namespace phonehub {
namespace {
// Status values which are considered "final" - i.e., once the status of an
// operation changes to one of these values, the operation has completed. These
// status values indicate either a success or a fatal error.
constexpr std::array<NotificationAccessSetupOperation::Status, 4>
kOperationFinishedStatus{
NotificationAccessSetupOperation::Status::kTimedOutConnecting,
NotificationAccessSetupOperation::Status::kConnectionDisconnected,
NotificationAccessSetupOperation::Status::kCompletedSuccessfully,
NotificationAccessSetupOperation::Status::
kProhibitedFromProvidingAccess,
};
} // namespace
// static
bool NotificationAccessSetupOperation::IsFinalStatus(Status status) {
return base::Contains(kOperationFinishedStatus, status);
}
NotificationAccessSetupOperation::NotificationAccessSetupOperation(
Delegate* delegate,
base::OnceClosure destructor_callback)
: delegate_(delegate),
destructor_callback_(std::move(destructor_callback)) {
DCHECK(delegate_);
DCHECK(destructor_callback_);
}
NotificationAccessSetupOperation::~NotificationAccessSetupOperation() {
std::move(destructor_callback_).Run();
}
void NotificationAccessSetupOperation::NotifyStatusChanged(Status new_status) {
delegate_->OnStatusChange(new_status);
}
std::ostream& operator<<(std::ostream& stream,
NotificationAccessSetupOperation::Status status) {
switch (status) {
case NotificationAccessSetupOperation::Status::kConnecting:
stream << "[Connecting]";
break;
case NotificationAccessSetupOperation::Status::kTimedOutConnecting:
stream << "[Timed out connecting]";
break;
case NotificationAccessSetupOperation::Status::kConnectionDisconnected:
stream << "[Connection disconnected]";
break;
case NotificationAccessSetupOperation::Status::
kSentMessageToPhoneAndWaitingForResponse:
stream << "[Sent message to phone; waiting for response]";
break;
case NotificationAccessSetupOperation::Status::kCompletedSuccessfully:
stream << "[Completed successfully]";
break;
case NotificationAccessSetupOperation::Status::
kProhibitedFromProvidingAccess:
stream << "[Prohibited from providing access]";
break;
}
return stream;
}
} // namespace phonehub
} // namespace chromeos