1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef COMPONENTS_POLICY_CORE_COMMON_POLICY_TEST_UTILS_H_
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define COMPONENTS_POLICY_CORE_COMMON_POLICY_TEST_UTILS_H_
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <map>
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <ostream>
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <string>
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/basictypes.h"
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_details.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h"
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_service.h"
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_types.h"
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace policy {
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class PolicyBundle;
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct PolicyNamespace;
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A mapping of policy names to PolicyDetails that can be used to set the
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// PolicyDetails for test policies.
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class PolicyDetailsMap {
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  PolicyDetailsMap();
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ~PolicyDetailsMap();
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // The returned callback's lifetime is tied to |this| object.
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GetChromePolicyDetailsCallback GetCallback() const;
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Does not take ownership of |details|.
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SetDetails(const std::string& policy, const PolicyDetails* details);
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  typedef std::map<std::string, const PolicyDetails*> PolicyDetailsMapping;
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  const PolicyDetails* Lookup(const std::string& policy) const;
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  PolicyDetailsMapping map_;
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PolicyDetailsMap);
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Returns true if |service| is not serving any policies. Otherwise logs the
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// current policies and returns false.
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool PolicyServiceIsEmpty(const PolicyService* service);
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_IOS) || defined(OS_MACOSX)
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Converts a base::Value to the equivalent CFPropertyListRef.
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// The returned value is owned by the caller.
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)CFPropertyListRef ValueToProperty(const base::Value* value);
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace policy
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)std::ostream& operator<<(std::ostream& os, const policy::PolicyBundle& bundle);
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)std::ostream& operator<<(std::ostream& os, policy::PolicyScope scope);
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)std::ostream& operator<<(std::ostream& os, policy::PolicyLevel level);
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)std::ostream& operator<<(std::ostream& os, policy::PolicyDomain domain);
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)std::ostream& operator<<(std::ostream& os, const policy::PolicyMap& policies);
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)std::ostream& operator<<(std::ostream& os, const policy::PolicyMap::Entry& e);
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)std::ostream& operator<<(std::ostream& os, const policy::PolicyNamespace& ns);
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // COMPONENTS_POLICY_CORE_COMMON_POLICY_TEST_UTILS_H_
69