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); |
}; |