OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef COMPONENTS_POLICY_CORE_COMMON_SCHEMA_REGISTRY_H_ | 5 #ifndef COMPONENTS_POLICY_CORE_COMMON_SCHEMA_REGISTRY_H_ |
6 #define COMPONENTS_POLICY_CORE_COMMON_SCHEMA_REGISTRY_H_ | 6 #define COMPONENTS_POLICY_CORE_COMMON_SCHEMA_REGISTRY_H_ |
7 | 7 |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
11 #include "base/macros.h" | 11 #include "base/macros.h" |
12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
13 #include "base/observer_list.h" | 13 #include "base/observer_list.h" |
14 #include "base/threading/non_thread_safe.h" | 14 #include "base/sequence_checker.h" |
15 #include "components/policy/core/common/policy_namespace.h" | 15 #include "components/policy/core/common/policy_namespace.h" |
16 #include "components/policy/core/common/schema.h" | 16 #include "components/policy/core/common/schema.h" |
17 #include "components/policy/core/common/schema_map.h" | 17 #include "components/policy/core/common/schema_map.h" |
18 #include "components/policy/policy_export.h" | 18 #include "components/policy/policy_export.h" |
19 | 19 |
20 namespace policy { | 20 namespace policy { |
21 | 21 |
22 class SchemaMap; | 22 class SchemaMap; |
23 | 23 |
24 // Holds the main reference to the current SchemaMap, and allows a list of | 24 // Holds the main reference to the current SchemaMap, and allows a list of |
25 // observers to get notified whenever it is updated. | 25 // observers to get notified whenever it is updated. |
26 // This object is not thread safe and must be used from the owner's thread, | 26 // This object is not thread safe and must be used from the owner's thread, |
27 // usually UI. | 27 // usually UI. |
28 class POLICY_EXPORT SchemaRegistry : public base::NonThreadSafe { | 28 class POLICY_EXPORT SchemaRegistry { |
29 public: | 29 public: |
30 class POLICY_EXPORT Observer { | 30 class POLICY_EXPORT Observer { |
31 public: | 31 public: |
32 // Invoked whenever schemas are registered or unregistered. | 32 // Invoked whenever schemas are registered or unregistered. |
33 // |has_new_schemas| is true if a new component has been registered since | 33 // |has_new_schemas| is true if a new component has been registered since |
34 // the last update; this allows observers to ignore updates when | 34 // the last update; this allows observers to ignore updates when |
35 // components are unregistered but still get a handle to the current map | 35 // components are unregistered but still get a handle to the current map |
36 // (e.g. for periodic reloads). | 36 // (e.g. for periodic reloads). |
37 virtual void OnSchemaRegistryUpdated(bool has_new_schemas) = 0; | 37 virtual void OnSchemaRegistryUpdated(bool has_new_schemas) = 0; |
38 | 38 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 protected: | 91 protected: |
92 void Notify(bool has_new_schemas); | 92 void Notify(bool has_new_schemas); |
93 | 93 |
94 scoped_refptr<SchemaMap> schema_map_; | 94 scoped_refptr<SchemaMap> schema_map_; |
95 | 95 |
96 private: | 96 private: |
97 base::ObserverList<Observer, true> observers_; | 97 base::ObserverList<Observer, true> observers_; |
98 base::ObserverList<InternalObserver, true> internal_observers_; | 98 base::ObserverList<InternalObserver, true> internal_observers_; |
99 bool domains_ready_[POLICY_DOMAIN_SIZE]; | 99 bool domains_ready_[POLICY_DOMAIN_SIZE]; |
100 | 100 |
| 101 SEQUENCE_CHECKER(sequence_checker_); |
| 102 |
101 DISALLOW_COPY_AND_ASSIGN(SchemaRegistry); | 103 DISALLOW_COPY_AND_ASSIGN(SchemaRegistry); |
102 }; | 104 }; |
103 | 105 |
104 // A registry that combines the maps of other registries. | 106 // A registry that combines the maps of other registries. |
105 class POLICY_EXPORT CombinedSchemaRegistry | 107 class POLICY_EXPORT CombinedSchemaRegistry |
106 : public SchemaRegistry, | 108 : public SchemaRegistry, |
107 public SchemaRegistry::Observer, | 109 public SchemaRegistry::Observer, |
108 public SchemaRegistry::InternalObserver { | 110 public SchemaRegistry::InternalObserver { |
109 public: | 111 public: |
110 CombinedSchemaRegistry(); | 112 CombinedSchemaRegistry(); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 void UpdateReadiness(); | 161 void UpdateReadiness(); |
160 | 162 |
161 SchemaRegistry* wrapped_; | 163 SchemaRegistry* wrapped_; |
162 | 164 |
163 DISALLOW_COPY_AND_ASSIGN(ForwardingSchemaRegistry); | 165 DISALLOW_COPY_AND_ASSIGN(ForwardingSchemaRegistry); |
164 }; | 166 }; |
165 | 167 |
166 } // namespace policy | 168 } // namespace policy |
167 | 169 |
168 #endif // COMPONENTS_POLICY_CORE_COMMON_SCHEMA_REGISTRY_H_ | 170 #endif // COMPONENTS_POLICY_CORE_COMMON_SCHEMA_REGISTRY_H_ |
OLD | NEW |