blob: 3f9aa3a00c555892d5b65837fa825c47a6b6e23d [file] [log] [blame]
// Copyright 2021 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 "components/services/app_service/public/cpp/capability_access_update.h"
#include "base/logging.h"
namespace apps {
// static
void CapabilityAccessUpdate::Merge(apps::mojom::CapabilityAccess* state,
const apps::mojom::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;
}
if (delta->camera != apps::mojom::OptionalBool::kUnknown) {
state->camera = delta->camera;
}
if (delta->microphone != apps::mojom::OptionalBool::kUnknown) {
state->microphone = delta->microphone;
}
// When adding new fields to the CapabilityAccess Mojo type, this function
// should also be updated.
}
CapabilityAccessUpdate::CapabilityAccessUpdate(
const apps::mojom::CapabilityAccess* state,
const apps::mojom::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;
}
apps::mojom::OptionalBool CapabilityAccessUpdate::Camera() const {
if (delta_ && (delta_->camera != apps::mojom::OptionalBool::kUnknown)) {
return delta_->camera;
}
if (state_) {
return state_->camera;
}
return apps::mojom::OptionalBool::kUnknown;
}
bool CapabilityAccessUpdate::CameraChanged() const {
return delta_ && (delta_->camera != apps::mojom::OptionalBool::kUnknown) &&
(!state_ || (delta_->camera != state_->camera));
}
apps::mojom::OptionalBool CapabilityAccessUpdate::Microphone() const {
if (delta_ && (delta_->microphone != apps::mojom::OptionalBool::kUnknown)) {
return delta_->microphone;
}
if (state_) {
return state_->microphone;
}
return apps::mojom::OptionalBool::kUnknown;
}
bool CapabilityAccessUpdate::MicrophoneChanged() const {
return delta_ &&
(delta_->microphone != apps::mojom::OptionalBool::kUnknown) &&
(!state_ || (delta_->microphone != state_->microphone));
}
const ::AccountId& CapabilityAccessUpdate::AccountId() const {
return account_id_;
}
} // namespace apps