12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_manager.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind_helpers.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/cloud_policy_constants.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/cloud_policy_service.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_store.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/policy_types.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace em = enterprise_management;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace policy {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManager::UserCloudPolicyManager(
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Profile* profile,
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    scoped_ptr<UserCloudPolicyStore> store)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : CloudPolicyManager(
24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          PolicyNamespaceKey(GetChromeUserPolicyType(), std::string()),
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          store.get()),
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      profile_(profile),
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      store_(store.Pass()) {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UserCloudPolicyManagerFactory::GetInstance()->Register(profile_, this);
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManager::~UserCloudPolicyManager() {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UserCloudPolicyManagerFactory::GetInstance()->Unregister(profile_, this);
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void UserCloudPolicyManager::Connect(
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PrefService* local_state, scoped_ptr<CloudPolicyClient> client) {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  core()->Connect(client.Pass());
38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  StartRefreshScheduler();
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  core()->TrackRefreshDelayPref(local_state, prefs::kUserPolicyRefreshRate);
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<CloudPolicyClient>
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManager::CreateCloudPolicyClient(
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DeviceManagementService* device_management_service) {
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return make_scoped_ptr(
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      new CloudPolicyClient(std::string(), std::string(),
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            USER_AFFILIATION_NONE,
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            NULL, device_management_service)).Pass();
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void UserCloudPolicyManager::DisconnectAndRemovePolicy() {
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  core()->Disconnect();
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  store_->Clear();
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool UserCloudPolicyManager::IsClientRegistered() const {
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return client() && client()->is_registered();
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace policy
62