| Index: components/policy/core/common/schema.h
|
| diff --git a/components/policy/core/common/schema.h b/components/policy/core/common/schema.h
|
| index 7a734bf02110cda5ad1c967adbb4d7f9606b6c6d..882fac3bf66f372a73b57ecb5dafb16e8e366710 100644
|
| --- a/components/policy/core/common/schema.h
|
| +++ b/components/policy/core/common/schema.h
|
| @@ -6,17 +6,16 @@
|
| #define COMPONENTS_POLICY_CORE_COMMON_SCHEMA_H_
|
|
|
| #include <string>
|
| -#include <vector>
|
|
|
| #include "base/basictypes.h"
|
| #include "base/memory/scoped_ptr.h"
|
| -#include "base/memory/scoped_vector.h"
|
| #include "base/values.h"
|
| #include "components/policy/policy_export.h"
|
|
|
| namespace policy {
|
| namespace internal {
|
|
|
| +struct POLICY_EXPORT SchemaData;
|
| struct POLICY_EXPORT SchemaNode;
|
| struct POLICY_EXPORT PropertyNode;
|
| struct POLICY_EXPORT PropertiesNode;
|
| @@ -33,10 +32,9 @@ class POLICY_EXPORT Schema {
|
| // Builds an empty, invalid schema.
|
| Schema();
|
|
|
| - // Builds a schema pointing to the inner structure of |schema|. If |schema|
|
| - // is NULL then this Schema instance will be invalid.
|
| - // Does not take ownership of |schema|.
|
| - explicit Schema(const internal::SchemaNode* schema);
|
| + // Builds a schema pointing to the inner structure of |data|,
|
| + // rooted at |node|.
|
| + Schema(const internal::SchemaData* data, const internal::SchemaNode* node);
|
|
|
| Schema(const Schema& schema);
|
|
|
| @@ -44,14 +42,15 @@ class POLICY_EXPORT Schema {
|
|
|
| // Returns true if this Schema is valid. Schemas returned by the methods below
|
| // may be invalid, and in those cases the other methods must not be used.
|
| - bool valid() const { return schema_ != NULL; }
|
| + bool valid() const { return data_ != NULL; }
|
|
|
| base::Value::Type type() const;
|
|
|
| // Used to iterate over the known properties of TYPE_DICTIONARY schemas.
|
| class POLICY_EXPORT Iterator {
|
| public:
|
| - explicit Iterator(const internal::PropertiesNode* properties);
|
| + Iterator(const internal::SchemaData* data,
|
| + const internal::PropertiesNode* node);
|
| Iterator(const Iterator& iterator);
|
| ~Iterator();
|
|
|
| @@ -70,6 +69,7 @@ class POLICY_EXPORT Schema {
|
| Schema schema() const;
|
|
|
| private:
|
| + const internal::SchemaData* data_;
|
| const internal::PropertyNode* it_;
|
| const internal::PropertyNode* end_;
|
| };
|
| @@ -99,7 +99,8 @@ class POLICY_EXPORT Schema {
|
| Schema GetItems() const;
|
|
|
| private:
|
| - const internal::SchemaNode* schema_;
|
| + const internal::SchemaData* data_;
|
| + const internal::SchemaNode* node_;
|
| };
|
|
|
| // Owns schemas for policies of a given component.
|
| @@ -109,13 +110,12 @@ class POLICY_EXPORT SchemaOwner {
|
|
|
| // The returned Schema is valid only during the lifetime of the SchemaOwner
|
| // that created it. It may be obtained multiple times.
|
| - Schema schema() const { return Schema(root_); }
|
| + Schema schema() const;
|
|
|
| // Returns a SchemaOwner that references static data. This can be used by
|
| // the embedder to pass structures generated at compile time, which can then
|
| // be quickly loaded at runtime.
|
| - // Note: PropertiesNodes must have their PropertyNodes sorted by key.
|
| - static scoped_ptr<SchemaOwner> Wrap(const internal::SchemaNode* schema);
|
| + static scoped_ptr<SchemaOwner> Wrap(const internal::SchemaData* data);
|
|
|
| // Parses the JSON schema in |schema| and returns a SchemaOwner that owns
|
| // the internal representation. If |schema| is invalid then NULL is returned
|
| @@ -124,30 +124,15 @@ class POLICY_EXPORT SchemaOwner {
|
| std::string* error);
|
|
|
| private:
|
| - explicit SchemaOwner(const internal::SchemaNode* root);
|
| -
|
| - // Parses the JSON schema in |schema| and returns the root SchemaNode if
|
| - // successful, otherwise returns NULL. Any intermediate objects built by
|
| - // this method are appended to the ScopedVectors.
|
| - const internal::SchemaNode* Parse(const base::DictionaryValue& schema,
|
| - std::string* error);
|
| -
|
| - // Helper for Parse().
|
| - const internal::SchemaNode* ParseDictionary(
|
| - const base::DictionaryValue& schema,
|
| - std::string* error);
|
| -
|
| - // Helper for Parse().
|
| - const internal::SchemaNode* ParseList(const base::DictionaryValue& schema,
|
| - std::string* error);
|
| -
|
| - const internal::SchemaNode* root_;
|
| - ScopedVector<internal::SchemaNode> schema_nodes_;
|
| - // Note: |property_nodes_| contains PropertyNode[] elements and must be
|
| - // cleared manually to properly use delete[].
|
| - std::vector<internal::PropertyNode*> property_nodes_;
|
| - ScopedVector<internal::PropertiesNode> properties_nodes_;
|
| - ScopedVector<std::string> keys_;
|
| + class InternalStorage;
|
| +
|
| + SchemaOwner(const internal::SchemaData* data,
|
| + scoped_ptr<InternalStorage> storage);
|
| +
|
| + // Holds the internal structures when a SchemaOwner is created via Parse().
|
| + // SchemaOwners that Wrap() a SchemaData have a NULL storage.
|
| + scoped_ptr<InternalStorage> storage_;
|
| + const internal::SchemaData* data_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(SchemaOwner);
|
| };
|
|
|