Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(477)

Unified Diff: components/policy/core/common/schema.h

Issue 47513018: Make the internal storage of policy::Schemas ref counted. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@chrome-policy-schema-4-new-generate
Patch Set: rebase Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/policy/core/common/schema.h
diff --git a/components/policy/core/common/schema.h b/components/policy/core/common/schema.h
index 882fac3bf66f372a73b57ecb5dafb16e8e366710..10d8c3086939ba60d0d000921a4cbf63523644ed 100644
--- a/components/policy/core/common/schema.h
+++ b/components/policy/core/common/schema.h
@@ -8,7 +8,7 @@
#include <string>
#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ref_counted.h"
#include "base/values.h"
#include "components/policy/policy_export.h"
@@ -26,30 +26,41 @@ struct POLICY_EXPORT PropertiesNode;
// types of inner elements, for structured types.
// Objects of this class refer to external, immutable data and are cheap to
// copy.
-// Use the SchemaOwner class to parse a schema and get Schema objects.
class POLICY_EXPORT Schema {
public:
+ // Used internally to store shared data.
+ class InternalStorage;
+
// Builds an empty, invalid schema.
Schema();
- // Builds a schema pointing to the inner structure of |data|,
- // rooted at |node|.
- Schema(const internal::SchemaData* data, const internal::SchemaNode* node);
-
+ // Makes a copy of |schema| that shares the same internal storage.
Schema(const Schema& schema);
+ ~Schema();
+
Schema& operator=(const Schema& schema);
+ // Returns a Schema 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.
+ static Schema Wrap(const internal::SchemaData* data);
+
+ // Parses the JSON schema in |schema| and returns a Schema that owns
+ // the internal representation. If |schema| is invalid then an invalid Schema
+ // is returned and |error| contains a reason for the failure.
+ static Schema Parse(const std::string& schema, std::string* error);
+
// 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 data_ != NULL; }
+ bool valid() const { return node_ != NULL; }
base::Value::Type type() const;
// Used to iterate over the known properties of TYPE_DICTIONARY schemas.
class POLICY_EXPORT Iterator {
public:
- Iterator(const internal::SchemaData* data,
+ Iterator(const scoped_refptr<const InternalStorage>& storage,
const internal::PropertiesNode* node);
Iterator(const Iterator& iterator);
~Iterator();
@@ -69,7 +80,7 @@ class POLICY_EXPORT Schema {
Schema schema() const;
private:
- const internal::SchemaData* data_;
+ scoped_refptr<const InternalStorage> storage_;
const internal::PropertyNode* it_;
const internal::PropertyNode* end_;
};
@@ -99,42 +110,13 @@ class POLICY_EXPORT Schema {
Schema GetItems() const;
private:
- const internal::SchemaData* data_;
- const internal::SchemaNode* node_;
-};
-
-// Owns schemas for policies of a given component.
-class POLICY_EXPORT SchemaOwner {
- public:
- ~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;
-
- // 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.
- 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
- // and |error| contains a reason for the failure.
- static scoped_ptr<SchemaOwner> Parse(const std::string& schema,
- std::string* error);
-
- private:
- 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_;
+ // Builds a schema pointing to the inner structure of |storage|,
+ // rooted at |node|.
+ Schema(const scoped_refptr<const InternalStorage>& storage,
+ const internal::SchemaNode* node);
- DISALLOW_COPY_AND_ASSIGN(SchemaOwner);
+ scoped_refptr<const InternalStorage> storage_;
+ const internal::SchemaNode* node_;
};
} // namespace policy
« no previous file with comments | « chrome/common/extensions/api/storage/storage_schema_manifest_handler.cc ('k') | components/policy/core/common/schema.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698