12638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
22638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov// Use of this source code is governed by a BSD-style license that can be
32638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov// found in the LICENSE file.
42638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
5fed60b0c640828b320f56293c8bebc43fd2b1da8Alex Vakulenko#ifndef LIBBRILLO_POLICY_LIBPOLICY_H_
6fed60b0c640828b320f56293c8bebc43fd2b1da8Alex Vakulenko#define LIBBRILLO_POLICY_LIBPOLICY_H_
72638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
84ec4c4d2e4f8ac46ea8e767c1ed88242811a8f4dLuis Hector Chavez#include <memory>
92638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov#include <string>
102638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
11f2418e562d358917b02b53290d5f4b3690d6f5d3Alex Vakulenko#include <base/macros.h>
122638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
13c313f8219af31069eaa30f1e42ee896ccbafba7dMike Frysinger#pragma GCC visibility push(default)
14c313f8219af31069eaa30f1e42ee896ccbafba7dMike Frysinger
152638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmovnamespace policy {
162638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
172638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmovclass DevicePolicy;
182638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
192638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov// This class holds device settings that are to be enforced across all users.
202638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov//
212638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov// If there is a policy on disk at creation time, we will load it at verify
222638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov// its signature.
232638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmovclass PolicyProvider {
242638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov public:
252638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov  PolicyProvider();
262638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov  virtual ~PolicyProvider();
272638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
28f2418e562d358917b02b53290d5f4b3690d6f5d3Alex Vakulenko  // Constructor for tests only!
29a749d0b68c84ac8f9b6579c43aaa9d3993e08b43Igor  explicit PolicyProvider(std::unique_ptr<DevicePolicy> device_policy);
302638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
31f2418e562d358917b02b53290d5f4b3690d6f5d3Alex Vakulenko  // This function will ensure the freshness of the contents that the getters
32f2418e562d358917b02b53290d5f4b3690d6f5d3Alex Vakulenko  // are delivering. Normally contents are cached to prevent unnecessary load.
335da8faf11780ad48d30921f49684dd648a14833dAlex Deymo  virtual bool Reload();
342638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
355da8faf11780ad48d30921f49684dd648a14833dAlex Deymo  virtual bool device_policy_is_loaded() const;
362638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
372638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov  // Returns a value from the device policy cache.
382638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov  virtual const DevicePolicy& GetDevicePolicy() const;
392638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
402638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov private:
414ec4c4d2e4f8ac46ea8e767c1ed88242811a8f4dLuis Hector Chavez  std::unique_ptr<DevicePolicy> device_policy_;
422638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov  bool device_policy_is_loaded_;
432638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
442638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov  DISALLOW_COPY_AND_ASSIGN(PolicyProvider);
452638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov};
462638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov}  // namespace policy
472638fbc30f4e60caf06d3da3e9b4ef25c0a21e39Julian Pastarmov
48c313f8219af31069eaa30f1e42ee896ccbafba7dMike Frysinger#pragma GCC visibility pop
49c313f8219af31069eaa30f1e42ee896ccbafba7dMike Frysinger
50fed60b0c640828b320f56293c8bebc43fd2b1da8Alex Vakulenko#endif  // LIBBRILLO_POLICY_LIBPOLICY_H_
51