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