policy_cert_service_factory.cc revision f2477e01787aa58f445919b809d89e252beef54f
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/policy/policy_cert_service_factory.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/singleton.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/policy/policy_cert_service.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/policy/policy_cert_verifier.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/policy/user_network_configuration_updater_factory.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/profiles/incognito_helpers.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/common/pref_names.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace policy { 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)PolicyCertService* PolicyCertServiceFactory::GetForProfile(Profile* profile) { 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return static_cast<PolicyCertService*>( 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetInstance()->GetServiceForBrowserContext(profile, false)); 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)scoped_ptr<PolicyCertVerifier> PolicyCertServiceFactory::CreateForProfile( 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Profile* profile) { 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!GetInstance()->GetServiceForBrowserContext(profile, false)); 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PolicyCertService* service = static_cast<PolicyCertService*>( 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetInstance()->GetServiceForBrowserContext(profile, true)); 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!service) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return scoped_ptr<PolicyCertVerifier>(); 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return service->CreatePolicyCertVerifier(); 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)PolicyCertServiceFactory* PolicyCertServiceFactory::GetInstance() { 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return Singleton<PolicyCertServiceFactory>::get(); 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)PolicyCertServiceFactory::PolicyCertServiceFactory() 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : BrowserContextKeyedServiceFactory( 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "PolicyCertService", 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()) { 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DependsOn(UserNetworkConfigurationUpdaterFactory::GetInstance()); 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)PolicyCertServiceFactory::~PolicyCertServiceFactory() {} 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)BrowserContextKeyedService* PolicyCertServiceFactory::BuildServiceInstanceFor( 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* context) const { 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Profile* profile = static_cast<Profile*>(context); 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UserNetworkConfigurationUpdater* net_conf_updater = 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UserNetworkConfigurationUpdaterFactory::GetForProfile(profile); 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!net_conf_updater) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return NULL; 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // In case of usage of additional trust anchors from an incognito profile, the 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // prefs of the original profile have to be marked. 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return new PolicyCertService(net_conf_updater, 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile->GetOriginalProfile()->GetPrefs()); 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)content::BrowserContext* PolicyCertServiceFactory::GetBrowserContextToUse( 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* context) const { 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return chrome::GetBrowserContextOwnInstanceInIncognito(context); 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void PolicyCertServiceFactory::RegisterProfilePrefs( 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registry->RegisterBooleanPref( 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs::kUsedPolicyCertificatesOnce, 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool PolicyCertServiceFactory::ServiceIsNULLWhileTesting() const { 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return true; 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace policy 82