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)#ifndef CHROME_BROWSER_CHROMEOS_POLICY_POLICY_CERT_SERVICE_FACTORY_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_POLICY_POLICY_CERT_SERVICE_FACTORY_H_
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string>
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/basictypes.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/compiler_specific.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)template <typename T> struct DefaultSingletonTraits;
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PrefRegistrySimple;
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class Profile;
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace policy {
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class PolicyCertService;
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class PolicyCertVerifier;
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Factory to create PolicyCertServices.
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class PolicyCertServiceFactory : public BrowserContextKeyedServiceFactory {
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Returns an existing PolicyCertService for |profile|. See
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // CreateForProfile.
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static PolicyCertService* GetForProfile(Profile* profile);
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Creates a new PolicyCertService and returns the associated
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // PolicyCertVerifier. Returns NULL if this service isn't allowed for
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // |profile|, i.e. if NetworkConfigurationUpdater doesn't exist.
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // This service is created separately for the original profile and the
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // incognito profile.
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Note: NetworkConfigurationUpdater is currently only created for the primary
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // user's profile.
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static scoped_ptr<PolicyCertVerifier> CreateForProfile(Profile* profile);
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static PolicyCertServiceFactory* GetInstance();
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Used to mark or clear |user_id| as having used certificates pushed by
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // policy before.
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static void SetUsedPolicyCertificates(const std::string& user_id);
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static void ClearUsedPolicyCertificates(const std::string& user_id);
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static bool UsedPolicyCertificates(const std::string& user_id);
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static void RegisterPrefs(PrefRegistrySimple* local_state);
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  friend struct DefaultSingletonTraits<PolicyCertServiceFactory>;
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  PolicyCertServiceFactory();
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~PolicyCertServiceFactory();
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // BrowserContextKeyedServiceFactory:
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual KeyedService* BuildServiceInstanceFor(
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      content::BrowserContext* context) const OVERRIDE;
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual content::BrowserContext* GetBrowserContextToUse(
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      content::BrowserContext* context) const OVERRIDE;
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void RegisterProfilePrefs(
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      user_prefs::PrefRegistrySyncable* registry) OVERRIDE;
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool ServiceIsNULLWhileTesting() const OVERRIDE;
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PolicyCertServiceFactory);
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace policy
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_POLICY_POLICY_CERT_SERVICE_FACTORY_H_
72