blob: a027d5d194cc8e6c4c38ef23ef639fac8787994d [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/services/app_service/public/cpp/capability_access_update.h"
#include "base/check.h"
#include "base/logging.h"
#include "components/services/app_service/public/cpp/macros.h"
namespace apps {
// static
void CapabilityAccessUpdate::Merge(CapabilityAccess* state,
const CapabilityAccess* delta) {
DCHECK(state);
if (!delta) {
return;
}
if (delta->app_id != state->app_id) {
LOG(ERROR) << "inconsistent (app_id): (" << delta->app_id << ") vs ("
<< state->app_id << ") ";
DCHECK(false);
return;
}
SET_OPTIONAL_VALUE(camera);
SET_OPTIONAL_VALUE(microphone);
// When adding new fields to the CapabilityAccess Mojo type, this function
// should also be updated.
}
CapabilityAccessUpdate::CapabilityAccessUpdate(const CapabilityAccess* state,
const CapabilityAccess* delta,
const ::AccountId& account_id)
: state_(state), delta_(delta), account_id_(account_id) {
DCHECK(state_ || delta_);
if (state_ && delta_) {
DCHECK(state_->app_id == delta->app_id);
}
}
bool CapabilityAccessUpdate::StateIsNull() const {
return state_ == nullptr;
}
const std::string& CapabilityAccessUpdate::AppId() const {
return delta_ ? delta_->app_id : state_->app_id;
}
absl::optional<bool> CapabilityAccessUpdate::Camera() const {
GET_VALUE_WITH_FALLBACK(camera, absl::nullopt)
}
bool CapabilityAccessUpdate::CameraChanged() const {
RETURN_OPTIONAL_VALUE_CHANGED(camera)}
absl::optional<bool> CapabilityAccessUpdate::Microphone() const {
GET_VALUE_WITH_FALLBACK(microphone, absl::nullopt)
}
bool CapabilityAccessUpdate::MicrophoneChanged() const {
RETURN_OPTIONAL_VALUE_CHANGED(microphone)
}
const ::AccountId& CapabilityAccessUpdate::AccountId() const {
return *account_id_;
}
} // namespace apps