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