1// Copyright (c) 2013 The Chromium 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 CHROME_BROWSER_POLICY_PROFILE_POLICY_CONNECTOR_H_
6#define CHROME_BROWSER_POLICY_PROFILE_POLICY_CONNECTOR_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/memory/scoped_ptr.h"
12#include "components/keyed_service/core/keyed_service.h"
13
14namespace user_manager {
15class User;
16}
17
18namespace policy {
19
20class CloudPolicyManager;
21class ConfigurationPolicyProvider;
22class PolicyService;
23class SchemaRegistry;
24
25// A KeyedService that creates and manages the per-Profile policy
26// components.
27class ProfilePolicyConnector : public KeyedService {
28 public:
29  ProfilePolicyConnector();
30  virtual ~ProfilePolicyConnector();
31
32  // If |force_immediate_load| then disk caches will be loaded synchronously.
33  void Init(bool force_immediate_load,
34#if defined(OS_CHROMEOS)
35            const user_manager::User* user,
36#endif
37            SchemaRegistry* schema_registry,
38            CloudPolicyManager* user_cloud_policy_manager);
39
40  void InitForTesting(scoped_ptr<PolicyService> service);
41
42  // KeyedService:
43  virtual void Shutdown() OVERRIDE;
44
45  // This is never NULL.
46  PolicyService* policy_service() const { return policy_service_.get(); }
47
48  // Returns true if this Profile is under cloud policy management.
49  bool IsManaged() const;
50
51  // Returns the cloud policy management domain, if this Profile is under
52  // cloud policy management. Otherwise returns an empty string.
53  std::string GetManagementDomain() const;
54
55  // Returns true if the |name| Chrome policy is currently set via the
56  // CloudPolicyManager and isn't being overridden by a higher-level provider.
57  bool IsPolicyFromCloudPolicy(const char* name) const;
58
59 private:
60#if defined(ENABLE_CONFIGURATION_POLICY)
61#if defined(OS_CHROMEOS)
62  // Some of the user policy configuration affects browser global state, and
63  // can only come from one Profile. |is_primary_user_| is true if this
64  // connector belongs to the first signed-in Profile, and in that case that
65  // Profile's policy is the one that affects global policy settings in
66  // local state.
67  bool is_primary_user_;
68
69  scoped_ptr<ConfigurationPolicyProvider> special_user_policy_provider_;
70#endif  // defined(OS_CHROMEOS)
71
72  scoped_ptr<ConfigurationPolicyProvider> forwarding_policy_provider_;
73  CloudPolicyManager* user_cloud_policy_manager_;
74#endif  // defined(ENABLE_CONFIGURATION_POLICY)
75
76  scoped_ptr<PolicyService> policy_service_;
77
78  DISALLOW_COPY_AND_ASSIGN(ProfilePolicyConnector);
79};
80
81}  // namespace policy
82
83#endif  // CHROME_BROWSER_POLICY_PROFILE_POLICY_CONNECTOR_H_
84