summaryrefslogtreecommitdiff
path: root/chromium/components/policy/core/common/policy_schema.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/policy/core/common/policy_schema.cc')
-rw-r--r--chromium/components/policy/core/common/policy_schema.cc244
1 files changed, 0 insertions, 244 deletions
diff --git a/chromium/components/policy/core/common/policy_schema.cc b/chromium/components/policy/core/common/policy_schema.cc
deleted file mode 100644
index 8c3145ce43a..00000000000
--- a/chromium/components/policy/core/common/policy_schema.cc
+++ /dev/null
@@ -1,244 +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 "components/policy/core/common/policy_schema.h"
-
-#include "base/compiler_specific.h"
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "components/json_schema/json_schema_constants.h"
-#include "components/json_schema/json_schema_validator.h"
-
-namespace policy {
-
-namespace {
-
-const char kJSONSchemaVersion[] = "http://json-schema.org/draft-03/schema#";
-
-// Describes the properties of a TYPE_DICTIONARY policy schema.
-class DictionaryPolicySchema : public PolicySchema {
- public:
- static scoped_ptr<PolicySchema> Parse(const base::DictionaryValue& schema,
- std::string* error);
-
- virtual ~DictionaryPolicySchema();
-
- virtual const PolicySchemaMap* GetProperties() const OVERRIDE;
- virtual const PolicySchema* GetSchemaForAdditionalProperties() const OVERRIDE;
-
- private:
- DictionaryPolicySchema();
-
- PolicySchemaMap properties_;
- scoped_ptr<PolicySchema> additional_properties_;
-
- DISALLOW_COPY_AND_ASSIGN(DictionaryPolicySchema);
-};
-
-// Describes the items of a TYPE_LIST policy schema.
-class ListPolicySchema : public PolicySchema {
- public:
- static scoped_ptr<PolicySchema> Parse(const base::DictionaryValue& schema,
- std::string* error);
-
- virtual ~ListPolicySchema();
-
- virtual const PolicySchema* GetSchemaForItems() const OVERRIDE;
-
- private:
- ListPolicySchema();
-
- scoped_ptr<PolicySchema> items_schema_;
-
- DISALLOW_COPY_AND_ASSIGN(ListPolicySchema);
-};
-
-bool SchemaTypeToValueType(const std::string& type_string,
- base::Value::Type* type) {
- // Note: "any" is not an accepted type.
- static const struct {
- const char* schema_type;
- base::Value::Type value_type;
- } kSchemaToValueTypeMap[] = {
- { json_schema_constants::kArray, base::Value::TYPE_LIST },
- { json_schema_constants::kBoolean, base::Value::TYPE_BOOLEAN },
- { json_schema_constants::kInteger, base::Value::TYPE_INTEGER },
- { json_schema_constants::kNull, base::Value::TYPE_NULL },
- { json_schema_constants::kNumber, base::Value::TYPE_DOUBLE },
- { json_schema_constants::kObject, base::Value::TYPE_DICTIONARY },
- { json_schema_constants::kString, base::Value::TYPE_STRING },
- };
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kSchemaToValueTypeMap); ++i) {
- if (kSchemaToValueTypeMap[i].schema_type == type_string) {
- *type = kSchemaToValueTypeMap[i].value_type;
- return true;
- }
- }
- return false;
-}
-
-scoped_ptr<PolicySchema> ParseSchema(const base::DictionaryValue& schema,
- std::string* error) {
- std::string type_string;
- if (!schema.GetString(json_schema_constants::kType, &type_string)) {
- *error = "The schema type must be declared.";
- return scoped_ptr<PolicySchema>();
- }
-
- base::Value::Type type = base::Value::TYPE_NULL;
- if (!SchemaTypeToValueType(type_string, &type)) {
- *error = "The \"any\" type can't be used.";
- return scoped_ptr<PolicySchema>();
- }
-
- switch (type) {
- case base::Value::TYPE_DICTIONARY:
- return DictionaryPolicySchema::Parse(schema, error);
- case base::Value::TYPE_LIST:
- return ListPolicySchema::Parse(schema, error);
- default:
- return make_scoped_ptr(new PolicySchema(type));
- }
-}
-
-DictionaryPolicySchema::DictionaryPolicySchema()
- : PolicySchema(base::Value::TYPE_DICTIONARY) {}
-
-DictionaryPolicySchema::~DictionaryPolicySchema() {
- STLDeleteValues(&properties_);
-}
-
-const PolicySchemaMap* DictionaryPolicySchema::GetProperties() const {
- return &properties_;
-}
-
-const PolicySchema*
- DictionaryPolicySchema::GetSchemaForAdditionalProperties() const {
- return additional_properties_.get();
-}
-
-// static
-scoped_ptr<PolicySchema> DictionaryPolicySchema::Parse(
- const base::DictionaryValue& schema,
- std::string* error) {
- scoped_ptr<DictionaryPolicySchema> dict_schema(new DictionaryPolicySchema());
-
- const base::DictionaryValue* dict = NULL;
- const base::DictionaryValue* properties = NULL;
- if (schema.GetDictionary(json_schema_constants::kProperties, &properties)) {
- for (base::DictionaryValue::Iterator it(*properties);
- !it.IsAtEnd(); it.Advance()) {
- // This should have been verified by the JSONSchemaValidator.
- CHECK(it.value().GetAsDictionary(&dict));
- scoped_ptr<PolicySchema> sub_schema = ParseSchema(*dict, error);
- if (!sub_schema)
- return scoped_ptr<PolicySchema>();
- dict_schema->properties_[it.key()] = sub_schema.release();
- }
- }
-
- if (schema.GetDictionary(json_schema_constants::kAdditionalProperties,
- &dict)) {
- scoped_ptr<PolicySchema> sub_schema = ParseSchema(*dict, error);
- if (!sub_schema)
- return scoped_ptr<PolicySchema>();
- dict_schema->additional_properties_ = sub_schema.Pass();
- }
-
- return dict_schema.PassAs<PolicySchema>();
-}
-
-ListPolicySchema::ListPolicySchema()
- : PolicySchema(base::Value::TYPE_LIST) {}
-
-ListPolicySchema::~ListPolicySchema() {}
-
-const PolicySchema* ListPolicySchema::GetSchemaForItems() const {
- return items_schema_.get();
-}
-
-scoped_ptr<PolicySchema> ListPolicySchema::Parse(
- const base::DictionaryValue& schema,
- std::string* error) {
- const base::DictionaryValue* dict = NULL;
- if (!schema.GetDictionary(json_schema_constants::kItems, &dict)) {
- *error = "Arrays must declare a single schema for their items.";
- return scoped_ptr<PolicySchema>();
- }
- scoped_ptr<PolicySchema> items_schema = ParseSchema(*dict, error);
- if (!items_schema)
- return scoped_ptr<PolicySchema>();
-
- scoped_ptr<ListPolicySchema> list_schema(new ListPolicySchema());
- list_schema->items_schema_ = items_schema.Pass();
- return list_schema.PassAs<PolicySchema>();
-}
-
-} // namespace
-
-PolicySchema::PolicySchema(base::Value::Type type)
- : type_(type) {}
-
-PolicySchema::~PolicySchema() {}
-
-const PolicySchemaMap* PolicySchema::GetProperties() const {
- NOTREACHED();
- return NULL;
-}
-
-const PolicySchema* PolicySchema::GetSchemaForAdditionalProperties() const {
- NOTREACHED();
- return NULL;
-}
-
-const PolicySchema* PolicySchema::GetSchemaForProperty(
- const std::string& key) const {
- const PolicySchemaMap* properties = GetProperties();
- PolicySchemaMap::const_iterator it = properties->find(key);
- return it == properties->end() ? GetSchemaForAdditionalProperties()
- : it->second;
-}
-
-const PolicySchema* PolicySchema::GetSchemaForItems() const {
- NOTREACHED();
- return NULL;
-}
-
-// static
-scoped_ptr<PolicySchema> PolicySchema::Parse(const std::string& content,
- std::string* error) {
- // Validate as a generic JSON schema.
- scoped_ptr<base::DictionaryValue> dict =
- JSONSchemaValidator::IsValidSchema(content, error);
- if (!dict)
- return scoped_ptr<PolicySchema>();
-
- // Validate the schema version.
- std::string string_value;
- if (!dict->GetString(json_schema_constants::kSchema, &string_value) ||
- string_value != kJSONSchemaVersion) {
- *error = "Must declare JSON Schema v3 version in \"$schema\".";
- return scoped_ptr<PolicySchema>();
- }
-
- // Validate the main type.
- if (!dict->GetString(json_schema_constants::kType, &string_value) ||
- string_value != json_schema_constants::kObject) {
- *error =
- "The main schema must have a type attribute with \"object\" value.";
- return scoped_ptr<PolicySchema>();
- }
-
- // Checks for invalid attributes at the top-level.
- if (dict->HasKey(json_schema_constants::kAdditionalProperties) ||
- dict->HasKey(json_schema_constants::kPatternProperties)) {
- *error = "\"additionalProperties\" and \"patternProperties\" are not "
- "supported at the main schema.";
- return scoped_ptr<PolicySchema>();
- }
-
- return ParseSchema(*dict, error);
-}
-
-} // namespace policy