user_cloud_policy_manager_factory_chromeos.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/bind.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/command_line.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/files/file_path.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h" 11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/memory/ref_counted.h" 12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/path_service.h" 14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/sequenced_task_runner.h" 15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/threading/sequenced_worker_pool.h" 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/time/time.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/browser_process.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/user.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h" 20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/chromeos/policy/user_cloud_external_data_manager.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/profiles/profile_helper.h" 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/policy/browser_policy_connector.h" 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/policy/schema_registry_service.h" 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/policy/schema_registry_service_factory.h" 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_paths.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_external_data_manager.h" 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/device_management_service.h" 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "policy/policy_constants.h" 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace policy { 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Subdirectory in the user's profile for storing legacy user policies. 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const base::FilePath::CharType kDeviceManagementDir[] = 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FILE_PATH_LITERAL("Device Management"); 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// File in the above directory for storing legacy user policy dmtokens. 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const base::FilePath::CharType kToken[] = FILE_PATH_LITERAL("Token"); 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This constant is used to build two different paths. It can be a file inside 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// kDeviceManagementDir where legacy user policy data is stored, and it can be 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// a directory inside the profile directory where other resources are stored. 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const base::FilePath::CharType kPolicy[] = FILE_PATH_LITERAL("Policy"); 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Directory under kPolicy, in the user's profile dir, where policy for 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// components is cached. 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const base::FilePath::CharType kComponentsDir[] = 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FILE_PATH_LITERAL("Components"); 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Directory in which to store external policy data. This is specified relative 60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// to kPolicy. 61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)const base::FilePath::CharType kPolicyExternalDataDir[] = 62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) FILE_PATH_LITERAL("External Data"); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Timeout in seconds after which to abandon the initial policy fetch and start 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// the session regardless. 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const int kInitialPolicyFetchTimeoutSeconds = 10; 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)UserCloudPolicyManagerFactoryChromeOS* 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UserCloudPolicyManagerFactoryChromeOS::GetInstance() { 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return Singleton<UserCloudPolicyManagerFactoryChromeOS>::get(); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)UserCloudPolicyManagerChromeOS* 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UserCloudPolicyManagerFactoryChromeOS::GetForProfile( 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile) { 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetInstance()->GetManagerForProfile(profile); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)scoped_ptr<UserCloudPolicyManagerChromeOS> 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UserCloudPolicyManagerFactoryChromeOS::CreateForProfile( 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile, 878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool force_immediate_load, 888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> background_task_runner) { 898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return GetInstance()->CreateManagerForProfile( 908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) profile, force_immediate_load, background_task_runner); 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)UserCloudPolicyManagerFactoryChromeOS::UserCloudPolicyManagerFactoryChromeOS() 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : BrowserContextKeyedBaseFactory( 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "UserCloudPolicyManagerChromeOS", 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()) { 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DependsOn(SchemaRegistryServiceFactory::GetInstance()); 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)UserCloudPolicyManagerFactoryChromeOS:: 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ~UserCloudPolicyManagerFactoryChromeOS() {} 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)UserCloudPolicyManagerChromeOS* 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UserCloudPolicyManagerFactoryChromeOS::GetManagerForProfile( 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile) { 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Get the manager for the original profile, since the PolicyService is 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // also shared between the incognito Profile and the original Profile. 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ManagerMap::const_iterator it = managers_.find(profile->GetOriginalProfile()); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return it != managers_.end() ? it->second : NULL; 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)scoped_ptr<UserCloudPolicyManagerChromeOS> 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UserCloudPolicyManagerFactoryChromeOS::CreateManagerForProfile( 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile, 1158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool force_immediate_load, 1168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> background_task_runner) { 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const CommandLine* command_line = CommandLine::ForCurrentProcess(); 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Don't initialize cloud policy for the signin profile. 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (chromeos::ProfileHelper::IsSigninProfile(profile)) 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return scoped_ptr<UserCloudPolicyManagerChromeOS>(); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |user| should never be NULL except for the signin profile. This object is 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // created as part of the Profile creation, which happens right after 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // sign-in. The just-signed-in User is the active user during that time. 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::UserManager* user_manager = chromeos::UserManager::Get(); 1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::User* user = user_manager->GetUserByProfile(profile); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(user); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Only USER_TYPE_REGULAR users have user cloud policy. 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // USER_TYPE_RETAIL_MODE, USER_TYPE_KIOSK_APP, USER_TYPE_GUEST and 13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // USER_TYPE_LOCALLY_MANAGED are not signed in and can't authenticate the 13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // policy registration. 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // USER_TYPE_PUBLIC_ACCOUNT gets its policy from the 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // DeviceLocalAccountPolicyService. 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& username = user->email(); 136a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (user->GetType() != chromeos::User::USER_TYPE_REGULAR || 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BrowserPolicyConnector::IsNonEnterpriseUser(username)) { 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return scoped_ptr<UserCloudPolicyManagerChromeOS>(); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BrowserPolicyConnector* connector = 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_browser_process->browser_policy_connector(); 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UserAffiliation affiliation = connector->GetUserAffiliation(username); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const bool is_managed_user = affiliation == USER_AFFILIATION_MANAGED; 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const bool is_browser_restart = 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line->HasSwitch(chromeos::switches::kLoginUser) && 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !command_line->HasSwitch(chromeos::switches::kLoginPassword); 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const bool wait_for_initial_policy = is_managed_user && !is_browser_restart; 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DeviceManagementService* device_management_service = 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) connector->device_management_service(); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (wait_for_initial_policy) 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) device_management_service->ScheduleInitialization(0); 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath profile_dir = profile->GetPath(); 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath legacy_dir = profile_dir.Append(kDeviceManagementDir); 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath policy_cache_file = legacy_dir.Append(kPolicy); 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath token_cache_file = legacy_dir.Append(kToken); 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::FilePath component_policy_cache_dir = 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile_dir.Append(kPolicy).Append(kComponentsDir); 161d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const base::FilePath external_data_dir = 162d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) profile_dir.Append(kPolicy).Append(kPolicyExternalDataDir); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath policy_key_dir; 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(PathService::Get(chromeos::DIR_USER_POLICY_KEYS, &policy_key_dir)); 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 166bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch scoped_ptr<UserCloudPolicyStoreChromeOS> store( 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new UserCloudPolicyStoreChromeOS( 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::DBusThreadManager::Get()->GetCryptohomeClient(), 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::DBusThreadManager::Get()->GetSessionManagerClient(), 1708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) background_task_runner, 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) username, policy_key_dir, token_cache_file, policy_cache_file)); 172d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 173d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> backend_task_runner = 174d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) content::BrowserThread::GetBlockingPool()->GetSequencedTaskRunner( 175d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) content::BrowserThread::GetBlockingPool()->GetSequenceToken()); 176d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> io_task_runner = 177d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) content::BrowserThread::GetMessageLoopProxyForThread( 178d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) content::BrowserThread::IO); 179d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<CloudExternalDataManager> external_data_manager( 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new UserCloudExternalDataManager(base::Bind(&GetChromePolicyDetails), 181d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) backend_task_runner, 182d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) io_task_runner, 183d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) external_data_dir, 184d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) store.get())); 185bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch if (force_immediate_load) 186bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch store->LoadImmediately(); 187bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> file_task_runner = 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserThread::GetMessageLoopProxyForThread( 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserThread::FILE); 191bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<UserCloudPolicyManagerChromeOS> manager( 19358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) new UserCloudPolicyManagerChromeOS( 19458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) store.PassAs<CloudPolicyStore>(), 195d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) external_data_manager.Pass(), 196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) component_policy_cache_dir, 19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) wait_for_initial_policy, 198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::TimeDelta::FromSeconds(kInitialPolicyFetchTimeoutSeconds), 199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::MessageLoopProxy::current(), 200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) file_task_runner, 201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) io_task_runner)); 202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) manager->Init(SchemaRegistryServiceFactory::GetForContext(profile)); 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manager->Connect(g_browser_process->local_state(), 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) device_management_service, 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_browser_process->system_request_context(), 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) affiliation); 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(managers_.find(profile) == managers_.end()); 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) managers_[profile] = manager.get(); 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return manager.Pass(); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void UserCloudPolicyManagerFactoryChromeOS::BrowserContextShutdown( 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) { 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile = static_cast<Profile*>(context); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (profile->IsOffTheRecord()) 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UserCloudPolicyManagerChromeOS* manager = GetManagerForProfile(profile); 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (manager) 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manager->Shutdown(); 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void UserCloudPolicyManagerFactoryChromeOS::BrowserContextDestroyed( 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) { 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile = static_cast<Profile*>(context); 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) managers_.erase(profile); 22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextKeyedBaseFactory::BrowserContextDestroyed(context); 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserCloudPolicyManagerFactoryChromeOS::SetEmptyTestingFactory( 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) {} 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserCloudPolicyManagerFactoryChromeOS::CreateServiceNow( 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) {} 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace policy 237