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)