xref: /aosp_15_r20/external/libbrillo/policy/libpolicy.cc (revision 1a96fba65179ea7d3f56207137718607415c5953)
1*1a96fba6SXin Li // Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2*1a96fba6SXin Li // Use of this source code is governed by a BSD-style license that can be
3*1a96fba6SXin Li // found in the LICENSE file.
4*1a96fba6SXin Li 
5*1a96fba6SXin Li #include "policy/libpolicy.h"
6*1a96fba6SXin Li 
7*1a96fba6SXin Li #include <memory>
8*1a96fba6SXin Li #include <utility>
9*1a96fba6SXin Li 
10*1a96fba6SXin Li #include <base/logging.h>
11*1a96fba6SXin Li 
12*1a96fba6SXin Li #include "policy/device_policy.h"
13*1a96fba6SXin Li #ifndef __ANDROID__
14*1a96fba6SXin Li #include "policy/device_policy_impl.h"
15*1a96fba6SXin Li #endif
16*1a96fba6SXin Li 
17*1a96fba6SXin Li namespace policy {
18*1a96fba6SXin Li 
PolicyProvider()19*1a96fba6SXin Li PolicyProvider::PolicyProvider() {
20*1a96fba6SXin Li #ifndef __ANDROID__
21*1a96fba6SXin Li   device_policy_ = std::make_unique<DevicePolicyImpl>();
22*1a96fba6SXin Li   install_attributes_reader_ = std::make_unique<InstallAttributesReader>();
23*1a96fba6SXin Li #endif
24*1a96fba6SXin Li }
25*1a96fba6SXin Li 
PolicyProvider(std::unique_ptr<DevicePolicy> device_policy)26*1a96fba6SXin Li PolicyProvider::PolicyProvider(std::unique_ptr<DevicePolicy> device_policy)
27*1a96fba6SXin Li     : device_policy_(std::move(device_policy)),
28*1a96fba6SXin Li #ifdef __ANDROID__
29*1a96fba6SXin Li       device_policy_is_loaded_(true) {
30*1a96fba6SXin Li }
31*1a96fba6SXin Li #else
32*1a96fba6SXin Li       device_policy_is_loaded_(true),
33*1a96fba6SXin Li       install_attributes_reader_(std::make_unique<InstallAttributesReader>()) {
34*1a96fba6SXin Li }
35*1a96fba6SXin Li #endif  // __ANDROID__
36*1a96fba6SXin Li 
~PolicyProvider()37*1a96fba6SXin Li PolicyProvider::~PolicyProvider() {}
38*1a96fba6SXin Li 
Reload()39*1a96fba6SXin Li bool PolicyProvider::Reload() {
40*1a96fba6SXin Li   if (!device_policy_)
41*1a96fba6SXin Li     return false;
42*1a96fba6SXin Li   device_policy_is_loaded_ = device_policy_->LoadPolicy();
43*1a96fba6SXin Li   if (!device_policy_is_loaded_) {
44*1a96fba6SXin Li     LOG(WARNING) << "Could not load the device policy file.";
45*1a96fba6SXin Li   }
46*1a96fba6SXin Li   return device_policy_is_loaded_;
47*1a96fba6SXin Li }
48*1a96fba6SXin Li 
device_policy_is_loaded() const49*1a96fba6SXin Li bool PolicyProvider::device_policy_is_loaded() const {
50*1a96fba6SXin Li   return device_policy_is_loaded_;
51*1a96fba6SXin Li }
52*1a96fba6SXin Li 
GetDevicePolicy() const53*1a96fba6SXin Li const DevicePolicy& PolicyProvider::GetDevicePolicy() const {
54*1a96fba6SXin Li   DCHECK(device_policy_is_loaded_)
55*1a96fba6SXin Li       << "Trying to get policy data but policy was not loaded!";
56*1a96fba6SXin Li   return *device_policy_;
57*1a96fba6SXin Li }
58*1a96fba6SXin Li 
IsConsumerDevice() const59*1a96fba6SXin Li bool PolicyProvider::IsConsumerDevice() const {
60*1a96fba6SXin Li #ifdef __ANDROID__
61*1a96fba6SXin Li   return true;
62*1a96fba6SXin Li #else
63*1a96fba6SXin Li   if (!install_attributes_reader_->IsLocked())
64*1a96fba6SXin Li     return false;
65*1a96fba6SXin Li 
66*1a96fba6SXin Li   const std::string& device_mode = install_attributes_reader_->GetAttribute(
67*1a96fba6SXin Li       InstallAttributesReader::kAttrMode);
68*1a96fba6SXin Li   return device_mode != InstallAttributesReader::kDeviceModeEnterprise &&
69*1a96fba6SXin Li          device_mode != InstallAttributesReader::kDeviceModeEnterpriseAD;
70*1a96fba6SXin Li #endif  // __ANDROID__
71*1a96fba6SXin Li }
72*1a96fba6SXin Li 
SetDevicePolicyForTesting(std::unique_ptr<DevicePolicy> device_policy)73*1a96fba6SXin Li void PolicyProvider::SetDevicePolicyForTesting(
74*1a96fba6SXin Li     std::unique_ptr<DevicePolicy> device_policy) {
75*1a96fba6SXin Li   device_policy_ = std::move(device_policy);
76*1a96fba6SXin Li   device_policy_is_loaded_ = true;
77*1a96fba6SXin Li }
78*1a96fba6SXin Li 
SetInstallAttributesReaderForTesting(std::unique_ptr<InstallAttributesReader> install_attributes_reader)79*1a96fba6SXin Li void PolicyProvider::SetInstallAttributesReaderForTesting(
80*1a96fba6SXin Li     std::unique_ptr<InstallAttributesReader> install_attributes_reader) {
81*1a96fba6SXin Li   install_attributes_reader_ = std::move(install_attributes_reader);
82*1a96fba6SXin Li }
83*1a96fba6SXin Li 
84*1a96fba6SXin Li }  // namespace policy
85