schema_registry_service_factory.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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/policy/schema_registry_service_factory.h"
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/logging.h"
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/policy/schema_registry_service.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/schema.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/schema_registry.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/browser_context.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace policy {
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)SchemaRegistryServiceFactory* SchemaRegistryServiceFactory::GetInstance() {
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return Singleton<SchemaRegistryServiceFactory>::get();
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)SchemaRegistryService* SchemaRegistryServiceFactory::GetForContext(
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    content::BrowserContext* context) {
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return GetInstance()->GetForContextInternal(context);
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)scoped_ptr<SchemaRegistryService>
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)SchemaRegistryServiceFactory::CreateForContext(
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    content::BrowserContext* context,
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const Schema& chrome_schema,
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    CombinedSchemaRegistry* global_registry) {
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return GetInstance()->CreateForContextInternal(
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      context, chrome_schema, global_registry);
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)SchemaRegistryServiceFactory::SchemaRegistryServiceFactory()
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    : BrowserContextKeyedBaseFactory(
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          "SchemaRegistryService",
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          BrowserContextDependencyManager::GetInstance()) {}
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)SchemaRegistryServiceFactory::~SchemaRegistryServiceFactory() {}
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)SchemaRegistryService* SchemaRegistryServiceFactory::GetForContextInternal(
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    content::BrowserContext* context) {
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Off-the-record Profiles get their policy from the main Profile's
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // PolicyService, and don't need their own SchemaRegistry nor any policy
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // providers.
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (context->IsOffTheRecord())
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return NULL;
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RegistryMap::const_iterator it = registries_.find(context);
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CHECK(it != registries_.end());
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return it->second;
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)scoped_ptr<SchemaRegistryService>
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)SchemaRegistryServiceFactory::CreateForContextInternal(
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    content::BrowserContext* context,
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const Schema& chrome_schema,
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    CombinedSchemaRegistry* global_registry) {
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DCHECK(!context->IsOffTheRecord());
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DCHECK(registries_.find(context) == registries_.end());
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SchemaRegistryService* registry =
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new SchemaRegistryService(chrome_schema, global_registry);
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  registries_[context] = registry;
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return make_scoped_ptr(registry);
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SchemaRegistryServiceFactory::BrowserContextShutdown(
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    content::BrowserContext* context) {
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (context->IsOffTheRecord())
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return;
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RegistryMap::iterator it = registries_.find(context);
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (it != registries_.end())
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    it->second->Shutdown();
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  else
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    NOTREACHED();
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SchemaRegistryServiceFactory::BrowserContextDestroyed(
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    content::BrowserContext* context) {
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  registries_.erase(context);
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  BrowserContextKeyedBaseFactory::BrowserContextDestroyed(context);
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SchemaRegistryServiceFactory::SetEmptyTestingFactory(
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    content::BrowserContext* context) {}
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SchemaRegistryServiceFactory::CreateServiceNow(
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    content::BrowserContext* context) {}
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace policy
93