schema_registry_service_factory.cc revision f2477e01787aa58f445919b809d89e252beef54f
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/policy/schema_registry_service_factory.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/policy/schema_registry_service.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h"
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/policy/core/common/schema.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "components/policy/core/common/schema_registry.h"
12424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "content/public/browser/browser_context.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SchemaRegistryServiceFactory* SchemaRegistryServiceFactory::GetInstance() {
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return Singleton<SchemaRegistryServiceFactory>::get();
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochSchemaRegistryService* SchemaRegistryServiceFactory::GetForContext(
23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    content::BrowserContext* context) {
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return GetInstance()->GetForContextInternal(context);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_ptr<SchemaRegistryService>
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SchemaRegistryServiceFactory::CreateForContext(
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::BrowserContext* context,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const Schema& chrome_schema,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CombinedSchemaRegistry* global_registry) {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetInstance()->CreateForContextInternal(
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      context, chrome_schema, global_registry);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochSchemaRegistryServiceFactory::SchemaRegistryServiceFactory()
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    : BrowserContextKeyedBaseFactory(
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          "SchemaRegistryService",
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          BrowserContextDependencyManager::GetInstance()) {}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SchemaRegistryServiceFactory::~SchemaRegistryServiceFactory() {}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)SchemaRegistryService* SchemaRegistryServiceFactory::GetForContextInternal(
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    content::BrowserContext* context) {
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Off-the-record Profiles get their policy from the main Profile's
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // PolicyService, and don't need their own SchemaRegistry nor any policy
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // providers.
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (context->IsOffTheRecord())
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return NULL;
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  RegistryMap::const_iterator it = registries_.find(context);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(it != registries_.end());
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return it->second;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)scoped_ptr<SchemaRegistryService>
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SchemaRegistryServiceFactory::CreateForContextInternal(
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::BrowserContext* context,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const Schema& chrome_schema,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CombinedSchemaRegistry* global_registry) {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!context->IsOffTheRecord());
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(registries_.find(context) == registries_.end());
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SchemaRegistryService* registry =
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      new SchemaRegistryService(chrome_schema, global_registry);
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  registries_[context] = registry;
66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return make_scoped_ptr(registry);
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SchemaRegistryServiceFactory::BrowserContextShutdown(
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::BrowserContext* context) {
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (context->IsOffTheRecord())
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return;
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  RegistryMap::iterator it = registries_.find(context);
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (it != registries_.end())
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    it->second->Shutdown();
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  else
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void SchemaRegistryServiceFactory::BrowserContextDestroyed(
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    content::BrowserContext* context) {
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  registries_.erase(context);
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  BrowserContextKeyedBaseFactory::BrowserContextDestroyed(context);
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void SchemaRegistryServiceFactory::SetEmptyTestingFactory(
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    content::BrowserContext* context) {}
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SchemaRegistryServiceFactory::CreateServiceNow(
90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    content::BrowserContext* context) {}
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace policy
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)