| Index: chrome/browser/policy/schema_registry.cc
|
| diff --git a/chrome/browser/policy/schema_registry.cc b/chrome/browser/policy/schema_registry.cc
|
| deleted file mode 100644
|
| index d1c083523d6961ae2df54aadc995520bfcc26039..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/policy/schema_registry.cc
|
| +++ /dev/null
|
| @@ -1,175 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/policy/schema_registry.h"
|
| -
|
| -#include "base/logging.h"
|
| -
|
| -namespace policy {
|
| -
|
| -SchemaRegistry::Observer::~Observer() {}
|
| -
|
| -SchemaRegistry::SchemaRegistry() : schema_map_(new SchemaMap) {
|
| - for (int i = 0; i < POLICY_DOMAIN_SIZE; ++i)
|
| - domains_ready_[i] = false;
|
| -#if !defined(ENABLE_EXTENSIONS)
|
| - domains_ready_[POLICY_DOMAIN_EXTENSIONS] = true;
|
| -#endif
|
| -}
|
| -
|
| -SchemaRegistry::~SchemaRegistry() {}
|
| -
|
| -void SchemaRegistry::RegisterComponent(const PolicyNamespace& ns,
|
| - const Schema& schema) {
|
| - ComponentMap map;
|
| - map[ns.component_id] = schema;
|
| - RegisterComponents(ns.domain, map);
|
| -}
|
| -
|
| -void SchemaRegistry::RegisterComponents(PolicyDomain domain,
|
| - const ComponentMap& components) {
|
| - // Assume that a schema was updated if the namespace was already registered
|
| - // before.
|
| - DomainMap map(schema_map_->GetDomains());
|
| - for (ComponentMap::const_iterator it = components.begin();
|
| - it != components.end(); ++it) {
|
| - map[domain][it->first] = it->second;
|
| - }
|
| - schema_map_ = new SchemaMap(map);
|
| - Notify(true);
|
| -}
|
| -
|
| -void SchemaRegistry::UnregisterComponent(const PolicyNamespace& ns) {
|
| - DomainMap map(schema_map_->GetDomains());
|
| - if (map[ns.domain].erase(ns.component_id) != 0) {
|
| - schema_map_ = new SchemaMap(map);
|
| - Notify(false);
|
| - } else {
|
| - NOTREACHED();
|
| - }
|
| -}
|
| -
|
| -bool SchemaRegistry::IsReady() const {
|
| - for (int i = 0; i < POLICY_DOMAIN_SIZE; ++i) {
|
| - if (!domains_ready_[i])
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -void SchemaRegistry::SetReady(PolicyDomain domain) {
|
| - if (domains_ready_[domain])
|
| - return;
|
| - domains_ready_[domain] = true;
|
| - if (IsReady())
|
| - FOR_EACH_OBSERVER(Observer, observers_, OnSchemaRegistryReady());
|
| -}
|
| -
|
| -void SchemaRegistry::AddObserver(Observer* observer) {
|
| - observers_.AddObserver(observer);
|
| -}
|
| -
|
| -void SchemaRegistry::RemoveObserver(Observer* observer) {
|
| - observers_.RemoveObserver(observer);
|
| -}
|
| -
|
| -void SchemaRegistry::Notify(bool has_new_schemas) {
|
| - FOR_EACH_OBSERVER(
|
| - Observer, observers_, OnSchemaRegistryUpdated(has_new_schemas));
|
| -}
|
| -
|
| -bool SchemaRegistry::HasObservers() const {
|
| - return observers_.might_have_observers();
|
| -}
|
| -
|
| -CombinedSchemaRegistry::CombinedSchemaRegistry()
|
| - : own_schema_map_(new SchemaMap) {
|
| - // The combined registry is always ready, since it can always start tracking
|
| - // another registry that is not ready yet and going from "ready" to "not
|
| - // ready" is not allowed.
|
| - for (int i = 0; i < POLICY_DOMAIN_SIZE; ++i)
|
| - SetReady(static_cast<PolicyDomain>(i));
|
| -}
|
| -
|
| -CombinedSchemaRegistry::~CombinedSchemaRegistry() {}
|
| -
|
| -void CombinedSchemaRegistry::Track(SchemaRegistry* registry) {
|
| - registries_.insert(registry);
|
| - registry->AddObserver(this);
|
| - // Recombine the maps only if the |registry| has any components other than
|
| - // POLICY_DOMAIN_CHROME.
|
| - if (registry->schema_map()->HasComponents())
|
| - Combine(true);
|
| -}
|
| -
|
| -void CombinedSchemaRegistry::Untrack(SchemaRegistry* registry) {
|
| - registry->RemoveObserver(this);
|
| - if (registries_.erase(registry) != 0) {
|
| - if (registry->schema_map()->HasComponents())
|
| - Combine(false);
|
| - } else {
|
| - NOTREACHED();
|
| - }
|
| -}
|
| -
|
| -void CombinedSchemaRegistry::RegisterComponents(
|
| - PolicyDomain domain,
|
| - const ComponentMap& components) {
|
| - DomainMap map(own_schema_map_->GetDomains());
|
| - for (ComponentMap::const_iterator it = components.begin();
|
| - it != components.end(); ++it) {
|
| - map[domain][it->first] = it->second;
|
| - }
|
| - own_schema_map_ = new SchemaMap(map);
|
| - Combine(true);
|
| -}
|
| -
|
| -void CombinedSchemaRegistry::UnregisterComponent(const PolicyNamespace& ns) {
|
| - DomainMap map(own_schema_map_->GetDomains());
|
| - if (map[ns.domain].erase(ns.component_id) != 0) {
|
| - own_schema_map_ = new SchemaMap(map);
|
| - Combine(false);
|
| - } else {
|
| - NOTREACHED();
|
| - }
|
| -}
|
| -
|
| -void CombinedSchemaRegistry::OnSchemaRegistryUpdated(bool has_new_schemas) {
|
| - Combine(has_new_schemas);
|
| -}
|
| -
|
| -void CombinedSchemaRegistry::OnSchemaRegistryReady() {
|
| - // Ignore.
|
| -}
|
| -
|
| -void CombinedSchemaRegistry::Combine(bool has_new_schemas) {
|
| - // If two registries publish a Schema for the same component then it's
|
| - // undefined which version gets in the combined registry.
|
| - //
|
| - // The common case is that both registries want policy for the same component,
|
| - // and the Schemas should be the same; in that case this makes no difference.
|
| - //
|
| - // But if the Schemas are different then one of the components is out of date.
|
| - // In that case the policy loaded will be valid only for one of them, until
|
| - // the outdated components are updated. This is a known limitation of the
|
| - // way policies are loaded currently, but isn't a problem worth fixing for
|
| - // the time being.
|
| - DomainMap map(own_schema_map_->GetDomains());
|
| - for (std::set<SchemaRegistry*>::const_iterator reg_it = registries_.begin();
|
| - reg_it != registries_.end(); ++reg_it) {
|
| - const DomainMap& reg_domain_map = (*reg_it)->schema_map()->GetDomains();
|
| - for (DomainMap::const_iterator domain_it = reg_domain_map.begin();
|
| - domain_it != reg_domain_map.end(); ++domain_it) {
|
| - const ComponentMap& reg_component_map = domain_it->second;
|
| - for (ComponentMap::const_iterator comp_it = reg_component_map.begin();
|
| - comp_it != reg_component_map.end(); ++comp_it) {
|
| - map[domain_it->first][comp_it->first] = comp_it->second;
|
| - }
|
| - }
|
| - }
|
| - schema_map_ = new SchemaMap(map);
|
| - Notify(has_new_schemas);
|
| -}
|
| -
|
| -} // namespace policy
|
|
|