1 // Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef LIBBRILLO_POLICY_LIBPOLICY_H_
6 #define LIBBRILLO_POLICY_LIBPOLICY_H_
7 
8 #include <memory>
9 #include <string>
10 
11 #include <base/macros.h>
12 
13 #include "install_attributes/libinstallattributes.h"
14 
15 #pragma GCC visibility push(default)
16 
17 namespace policy {
18 
19 class DevicePolicy;
20 
21 // This class holds device settings that are to be enforced across all users.
22 //
23 // If there is a policy on disk at creation time, we will load it at verify
24 // its signature.
25 class PolicyProvider {
26  public:
27   // The default constructor does not load policy.
28   PolicyProvider();
29   virtual ~PolicyProvider();
30 
31   // Constructor for tests only!
32   explicit PolicyProvider(std::unique_ptr<DevicePolicy> device_policy);
33 
34   // This function will ensure the freshness of the contents that the getters
35   // are delivering. Normally contents are cached to prevent unnecessary load.
36   virtual bool Reload();
37 
38   virtual bool device_policy_is_loaded() const;
39 
40   // Returns a value from the device policy cache.
41   virtual const DevicePolicy& GetDevicePolicy() const;
42 
43   // Returns true if the device is not an enterprise enrolled device, so it
44   // won't have device policy before the next powerwash. Returns false if device
45   // is still in OOBE (so device mode is not determined yet).
46   virtual bool IsConsumerDevice() const;
47 
48   void SetDevicePolicyForTesting(
49       std::unique_ptr<DevicePolicy> device_policy);
50   void SetInstallAttributesReaderForTesting(
51       std::unique_ptr<InstallAttributesReader> install_attributes_reader);
52 
53  private:
54   std::unique_ptr<DevicePolicy> device_policy_;
55   bool device_policy_is_loaded_ = false;
56   std::unique_ptr<InstallAttributesReader> install_attributes_reader_;
57 
58   DISALLOW_COPY_AND_ASSIGN(PolicyProvider);
59 };
60 }  // namespace policy
61 
62 #pragma GCC visibility pop
63 
64 #endif  // LIBBRILLO_POLICY_LIBPOLICY_H_
65