15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 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) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/cloud/user_cloud_policy_manager.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind_helpers.h" 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/sequenced_task_runner.h" 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_external_data_manager.h" 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_constants.h" 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_service.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/cloud/user_cloud_policy_store.h" 148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/policy/core/common/policy_pref_names.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_types.h" 16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace em = enterprise_management; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace policy { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManager::UserCloudPolicyManager( 23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<UserCloudPolicyStore> store, 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::FilePath& component_policy_cache_path, 25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<CloudExternalDataManager> external_data_manager, 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& task_runner, 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& file_task_runner, 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& io_task_runner) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : CloudPolicyManager( 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PolicyNamespaceKey(GetChromeUserPolicyType(), std::string()), 31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) store.get(), 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) task_runner, 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) file_task_runner, 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) io_task_runner), 35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) store_(store.Pass()), 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) component_policy_cache_path_(component_policy_cache_path), 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) external_data_manager_(external_data_manager.Pass()) {} 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)UserCloudPolicyManager::~UserCloudPolicyManager() {} 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void UserCloudPolicyManager::Shutdown() { 42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (external_data_manager_) 43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) external_data_manager_->Disconnect(); 44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) CloudPolicyManager::Shutdown(); 45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void UserCloudPolicyManager::SetSigninUsername(const std::string& username) { 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) store_->SetSigninUsername(username); 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void UserCloudPolicyManager::Connect( 52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) PrefService* local_state, 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> request_context, 54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<CloudPolicyClient> client) { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) core()->Connect(client.Pass()); 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) core()->StartRefreshScheduler(); 578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) core()->TrackRefreshDelayPref(local_state, 588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) policy_prefs::kUserPolicyRefreshRate); 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (external_data_manager_) 60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) external_data_manager_->Connect(request_context); 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateComponentCloudPolicyService(component_policy_cache_path_, 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) request_context); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<CloudPolicyClient> 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManager::CreateCloudPolicyClient( 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DeviceManagementService* device_management_service, 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> request_context) { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return make_scoped_ptr( 72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) new CloudPolicyClient( 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string(), 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string(), 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kPolicyVerificationKeyHash, 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) USER_AFFILIATION_NONE, 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) NULL, 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) device_management_service, 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) request_context)).Pass(); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void UserCloudPolicyManager::DisconnectAndRemovePolicy() { 83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (external_data_manager_) 84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) external_data_manager_->Disconnect(); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) core()->Disconnect(); 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // store_->Clear() will publish the updated, empty policy. The component 88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // policy service must be cleared before OnStoreLoaded() is issued, so that 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // component policies are also empty at CheckAndPublishPolicy(). 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ClearAndDestroyComponentCloudPolicyService(); 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // When the |store_| is cleared, it informs the |external_data_manager_| that 93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // all external data references have been removed, causing the 94d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // |external_data_manager_| to clear its cache as well. 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) store_->Clear(); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool UserCloudPolicyManager::IsClientRegistered() const { 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return client() && client()->is_registered(); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace policy 103