1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/ash/components/boca/boca_role_util.h"
#include "ash/constants/ash_features.h"
#include "ash/constants/ash_pref_names.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h"
#include "components/user_manager/user.h"
#include "components/user_manager/user_manager.h"
namespace ash::boca_util {
namespace {
inline constexpr std::string_view kDisabled = "disabled";
inline constexpr std::string_view kStudent = "student";
inline constexpr std::string_view kRemoteAdmin = "remote_admin_was_present";
} // namespace
void RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterStringPref(
ash::prefs::kClassManagementToolsAvailabilitySetting, kDisabled);
// Fixes a dangling pointer crash associated with this pref not being
// registered. Need to revisit if this is the best place for this pref to be
// set.
registry->RegisterBooleanPref(kRemoteAdmin, false);
registry->RegisterDictionaryPref(
ash::prefs::kClassManagementToolsNavRuleSetting);
registry->RegisterBooleanPref(
ash::prefs::kClassManagementToolsCaptionEnablementSetting, false);
registry->RegisterBooleanPref(
ash::prefs::kClassManagementToolsCaptionEligibilitySetting, true);
registry->RegisterBooleanPref(
ash::prefs::kClassManagementToolsClassroomEligibilitySetting, true);
registry->RegisterBooleanPref(
ash::prefs::kClassManagementToolsViewScreenEligibilitySetting, true);
registry->RegisterBooleanPref(
ash::prefs::kClassManagementToolsNetworkRestrictionSetting, true);
registry->RegisterIntegerPref(
ash::prefs::kClassManagementToolsOOBEAccessCountSetting, 0);
}
bool IsEnabled(const user_manager::User* user) {
if (!ash::features::IsBocaUberEnabled()) {
return false;
}
if (features::IsBocaEnabled()) {
return true;
}
if (!user) {
return false;
}
if (!user->IsAffiliated()) {
return false;
}
auto* pref_service = user->GetProfilePrefs();
if (!pref_service) {
return false;
}
auto setting =
pref_service->GetString(prefs::kClassManagementToolsAvailabilitySetting);
// TODO(crbug.com/373484445): Currently check against empty in case value is
// not set. Confirm if it can be removed.
return !setting.empty() && setting != kDisabled;
}
bool IsConsumer(const user_manager::User* user) {
if (features::IsBocaEnabled()) {
return features::IsBocaConsumerEnabled();
}
if (!IsEnabled(user)) {
return false;
}
auto* pref_service = user->GetProfilePrefs();
CHECK(pref_service);
return pref_service->GetString(
prefs::kClassManagementToolsAvailabilitySetting) == kStudent;
}
bool IsProducer(const user_manager::User* user) {
return IsEnabled(user) && !IsConsumer(user);
}
} // namespace ash::boca_util
|