blob: b9285b144cdfc956a55dc573c92632a177e7d660 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_POLICY_MODEL_PROFILE_POLICY_CONNECTOR_H_
#define IOS_CHROME_BROWSER_POLICY_MODEL_PROFILE_POLICY_CONNECTOR_H_
#include <memory>
#include <string>
#include <vector>
#import "base/containers/flat_set.h"
#import "base/memory/raw_ptr.h"
#import "components/policy/core/common/local_test_policy_provider.h"
class BrowserPolicyConnectorIOS;
namespace policy {
class CloudPolicyStore;
class ConfigurationPolicyProvider;
class PolicyService;
class SchemaRegistry;
} // namespace policy
// ProfilePolicyConnector creates and manages the per-Profile policy
// components and their integration with PrefService.
// ProfilePolicyConnector isn't a keyed service because the pref service,
// which isn't a keyed service, has a hard dependency on the policy
// infrastructure. In order to outlive the pref service, the policy connector
// must live outside the keyed services.
class ProfilePolicyConnector {
public:
ProfilePolicyConnector();
~ProfilePolicyConnector();
ProfilePolicyConnector(const ProfilePolicyConnector&) = delete;
ProfilePolicyConnector& operator=(const ProfilePolicyConnector&) = delete;
// Initializes this connector.
void Init(policy::SchemaRegistry* schema_registry,
BrowserPolicyConnectorIOS* browser_policy_connector,
policy::ConfigurationPolicyProvider* user_policy_provider,
policy::CloudPolicyStore* policy_store);
// Returns true if this Profile is under any kind of policy management. You
// must call this method only when the policies system is fully initialized.
bool IsManaged() const;
// Sets the local_test_policy_provider as active and all other policy
// providers to inactive.
void UseLocalTestPolicyProvider();
// Reverts the effects of UseLocalTestPolicyProvider.
void RevertUseLocalTestPolicyProvider();
// Returns true if policies from chrome://policy/test are applied.
bool IsUsingLocalTestPolicyProvider() const;
// Shuts this connector down in preparation for destruction.
void Shutdown();
// Returns the PolicyService managed by this connector. This is never
// nullptr.
policy::PolicyService* GetPolicyService() const {
return policy_service_.get();
}
// Returns the SchemaRegistry associated with this connector.
policy::SchemaRegistry* GetSchemaRegistry() const { return schema_registry_; }
// Returns affiliation IDs contained in the PolicyData corresponding to the
// profile.
base::flat_set<std::string> GetUserAffiliationIds() const;
private:
friend class ProfilePolicyConnectorMock;
// `policy_providers_` contains a list of the policy providers available for
// the PolicyService of this connector, in decreasing order of priority.
//
// Note: All the providers appended to this vector must eventually become
// initialized for every policy domain, otherwise some subsystems will never
// use the policies exposed by the PolicyService!
// The default ConfigurationPolicyProvider::IsInitializationComplete()
// result is true, so take care if a provider overrides that.
std::vector<raw_ptr<policy::ConfigurationPolicyProvider, VectorExperimental>>
policy_providers_;
raw_ptr<policy::LocalTestPolicyProvider> local_test_policy_provider_ =
nullptr;
raw_ptr<const policy::CloudPolicyStore> policy_store_ = nullptr;
// The PolicyService that manages policy for this connector's Profile.
std::unique_ptr<policy::PolicyService> policy_service_;
// The SchemaRegistry associated with this connector's Profile.
raw_ptr<policy::SchemaRegistry> schema_registry_;
};
#endif // IOS_CHROME_BROWSER_POLICY_MODEL_PROFILE_POLICY_CONNECTOR_H_