summaryrefslogtreecommitdiffstats
path: root/chromium/components/policy/tools/generate_policy_source_test_data.py
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/policy/tools/generate_policy_source_test_data.py')
-rw-r--r--chromium/components/policy/tools/generate_policy_source_test_data.py937
1 files changed, 937 insertions, 0 deletions
diff --git a/chromium/components/policy/tools/generate_policy_source_test_data.py b/chromium/components/policy/tools/generate_policy_source_test_data.py
new file mode 100644
index 00000000000..2bc4db62ca7
--- /dev/null
+++ b/chromium/components/policy/tools/generate_policy_source_test_data.py
@@ -0,0 +1,937 @@
+# Copyright 2021 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.
+
+# pylint: disable=line-too-long
+# Disable this warning because shortening the lines in this file to 80
+# characters will negatively impact readability as the strings will no longer
+# look the same as the output files.
+
+EXPECTED_CLOUD_POLICY_PROTOBUF = '''
+syntax = "proto2";
+
+%(full_runtime_comment)soption optimize_for = LITE_RUNTIME;
+
+package enterprise_management;
+
+option go_package="chromium/policy/enterprise_management_proto";
+
+import "policy_common_definitions%(full_runtime_suffix)s.proto";
+
+message CloudPolicySubProto1 {
+ optional BooleanPolicyProto ChunkOneFirstFieldBooleanPolicy = 1;
+ optional BooleanPolicyProto ChunkOneLastFieldBooleanPolicy = 800;
+}
+
+message CloudPolicySubProto2 {
+ optional StringPolicyProto ChunkTwoFirstFieldStringPolicy = 1;
+ optional StringPolicyProto ChunkTwoLastFieldStringPolicy = 800;
+}
+
+message CloudPolicySettings {
+ optional StringPolicyProto ExampleStringPolicy = 3;
+ optional BooleanPolicyProto ExampleBoolPolicy = 4;
+ optional BooleanPolicyProto ExampleBoolMergeMetapolicy = 5;
+ optional BooleanPolicyProto ExampleBoolPrecedenceMetapolicy = 6;
+ optional BooleanPolicyProto CloudOnlyPolicy = 7;
+ optional StringPolicyProto CloudManagementEnrollmentToken = 8;
+ optional BooleanPolicyProto ChunkZeroLastFieldBooleanPolicy = 1017;
+ optional CloudPolicySubProto1 subProto1 = 1018;
+ optional CloudPolicySubProto2 subProto2 = 1019;
+}
+'''
+
+EXPECTED_CHROME_SETTINGS_PROTOBUF = """
+syntax = "proto2";
+
+%(full_runtime_comment)soption optimize_for = LITE_RUNTIME;
+
+package enterprise_management;
+
+option go_package="chromium/policy/enterprise_management_proto";
+
+// For StringList and PolicyOptions.
+import "policy_common_definitions%(full_runtime_suffix)s.proto";
+
+// PBs for individual settings.
+
+// ExampleStringPolicy caption
+//
+// ExampleStringPolicy desc
+//
+// Supported on: chrome_os
+message ExampleStringPolicyProto {
+ optional PolicyOptions policy_options = 1;
+ optional string ExampleStringPolicy = 2;
+}
+
+// ExampleBoolPolicy caption
+//
+// ExampleBoolPolicy desc
+//
+// Supported on: chrome_os
+message ExampleBoolPolicyProto {
+ optional PolicyOptions policy_options = 1;
+ optional bool ExampleBoolPolicy = 2;
+}
+
+// ExampleBoolMergeMetapolicy caption
+//
+// ExampleBoolMergeMetapolicy desc
+//
+// Supported on: chrome_os
+message ExampleBoolMergeMetapolicyProto {
+ optional PolicyOptions policy_options = 1;
+ optional bool ExampleBoolMergeMetapolicy = 2;
+}
+
+// ExampleBoolPrecedenceMetapolicy caption
+//
+// ExampleBoolPrecedenceMetapolicy desc
+//
+// Supported on: chrome_os
+message ExampleBoolPrecedenceMetapolicyProto {
+ optional PolicyOptions policy_options = 1;
+ optional bool ExampleBoolPrecedenceMetapolicy = 2;
+}
+
+// CloudOnlyPolicy caption
+//
+// CloudOnlyPolicy desc
+//
+// Supported on: android, chrome_os
+message CloudOnlyPolicyProto {
+ optional PolicyOptions policy_options = 1;
+ optional bool CloudOnlyPolicy = 2;
+}
+
+// CloudManagementEnrollmentToken caption
+//
+// CloudManagementEnrollmentToken desc
+//
+// Supported on: android, chrome_os
+message CloudManagementEnrollmentTokenProto {
+ optional PolicyOptions policy_options = 1;
+ optional string CloudManagementEnrollmentToken = 2;
+}
+
+// ChunkZeroLastFieldBooleanPolicy caption
+//
+// ChunkZeroLastFieldBooleanPolicy desc.
+//
+// Supported on: chrome_os
+message ChunkZeroLastFieldBooleanPolicyProto {
+ optional PolicyOptions policy_options = 1;
+ optional bool ChunkZeroLastFieldBooleanPolicy = 2;
+}
+
+// ChunkOneFirstFieldBooleanPolicy caption
+//
+// ChunkOneFirstFieldBooleanPolicy desc.
+//
+// Supported on: chrome_os
+message ChunkOneFirstFieldBooleanPolicyProto {
+ optional PolicyOptions policy_options = 1;
+ optional bool ChunkOneFirstFieldBooleanPolicy = 2;
+}
+
+// ChunkOneLastFieldBooleanPolicy caption
+//
+// ChunkOneLastFieldBooleanPolicy desc.
+//
+// Supported on: chrome_os
+message ChunkOneLastFieldBooleanPolicyProto {
+ optional PolicyOptions policy_options = 1;
+ optional bool ChunkOneLastFieldBooleanPolicy = 2;
+}
+
+// ChunkTwoFirstFieldStringPolicy caption
+//
+// ChunkTwoFirstFieldStringPolicy desc
+//
+// Supported on: chrome_os
+message ChunkTwoFirstFieldStringPolicyProto {
+ optional PolicyOptions policy_options = 1;
+ optional string ChunkTwoFirstFieldStringPolicy = 2;
+}
+
+// ChunkTwoLastFieldStringPolicy caption
+//
+// ChunkTwoLastFieldStringPolicy desc
+//
+// Supported on: chrome_os
+message ChunkTwoLastFieldStringPolicyProto {
+ optional PolicyOptions policy_options = 1;
+ optional string ChunkTwoLastFieldStringPolicy = 2;
+}
+
+// --------------------------------------------------
+// PBs for policies with ID > 1015.
+
+message ChromeSettingsSubProto1 {
+ optional ChunkOneFirstFieldBooleanPolicyProto ChunkOneFirstFieldBooleanPolicy = 1;
+ optional ChunkOneLastFieldBooleanPolicyProto ChunkOneLastFieldBooleanPolicy = 800;
+}
+
+message ChromeSettingsSubProto2 {
+ optional ChunkTwoFirstFieldStringPolicyProto ChunkTwoFirstFieldStringPolicy = 1;
+ optional ChunkTwoLastFieldStringPolicyProto ChunkTwoLastFieldStringPolicy = 800;
+}
+
+// --------------------------------------------------
+// Big wrapper PB containing the above groups.
+
+message ChromeSettingsProto {
+ optional ExampleStringPolicyProto ExampleStringPolicy = 3;
+ optional ExampleBoolPolicyProto ExampleBoolPolicy = 4;
+ optional ExampleBoolMergeMetapolicyProto ExampleBoolMergeMetapolicy = 5;
+ optional ExampleBoolPrecedenceMetapolicyProto ExampleBoolPrecedenceMetapolicy = 6;
+ optional CloudOnlyPolicyProto CloudOnlyPolicy = 7;
+ optional CloudManagementEnrollmentTokenProto CloudManagementEnrollmentToken = 8;
+ optional ChunkZeroLastFieldBooleanPolicyProto ChunkZeroLastFieldBooleanPolicy = 1017;
+ optional ChromeSettingsSubProto1 subProto1 = 1018;
+ optional ChromeSettingsSubProto2 subProto2 = 1019;
+}
+"""
+
+EXPECTED_POLICY_PROTO = '''\
+// ExampleStringPolicy caption
+//
+// ExampleStringPolicy desc
+//
+// Supported on: chrome_os
+message ExampleStringPolicyProto {
+ optional PolicyOptions policy_options = 1;
+ optional string ExampleStringPolicy = 2;
+}
+'''
+
+EXPECTED_POLICY_CONSTANTS_HEADER = '''
+#ifndef COMPONENTS_POLICY_POLICY_CONSTANTS_H_
+#define COMPONENTS_POLICY_POLICY_CONSTANTS_H_
+
+#include <cstdint>
+#include <string>
+
+#include "components/policy/core/common/policy_details.h"
+#include "components/policy/core/common/policy_map.h"
+
+namespace enterprise_management {
+class BooleanPolicyProto;
+class CloudPolicySettings;
+class IntegerPolicyProto;
+class StringListPolicyProto;
+class StringPolicyProto;
+}
+
+namespace em = enterprise_management;
+
+namespace policy {
+
+namespace internal {
+struct SchemaData;
+}
+%(windows_only_part)s
+#if BUILDFLAG(IS_CHROMEOS)
+// Sets default profile policies values for enterprise users.
+void SetEnterpriseUsersProfileDefaults(PolicyMap* policy_map);
+// Sets default system-wide policies values for enterprise users.
+void SetEnterpriseUsersSystemWideDefaults(PolicyMap* policy_map);
+// Sets all default values for enterprise users.
+void SetEnterpriseUsersDefaults(PolicyMap* policy_map);
+#endif
+
+// Returns the PolicyDetails for |policy| if |policy| is a known
+// Chrome policy, otherwise returns nullptr.
+const PolicyDetails* GetChromePolicyDetails(
+const std::string& policy);
+
+// Returns the schema data of the Chrome policy schema.
+const internal::SchemaData* GetChromeSchemaData();
+
+// Key names for the policy settings.
+namespace key {
+
+extern const char kExampleStringPolicy[];
+extern const char kExampleBoolPolicy[];
+extern const char kExampleBoolMergeMetapolicy[];
+extern const char kExampleBoolPrecedenceMetapolicy[];
+extern const char kCloudOnlyPolicy[];
+extern const char kCloudManagementEnrollmentToken[];
+extern const char kChunkZeroLastFieldBooleanPolicy[];
+extern const char kChunkOneFirstFieldBooleanPolicy[];
+extern const char kChunkOneLastFieldBooleanPolicy[];
+extern const char kChunkTwoFirstFieldStringPolicy[];
+extern const char kChunkTwoLastFieldStringPolicy[];
+
+} // namespace key
+
+// Group names for the policy settings.
+namespace group {
+
+
+} // namespace group
+
+struct AtomicGroup {
+ const short id;
+ const char* policy_group;
+ const char* const* policies;
+};
+
+extern const AtomicGroup kPolicyAtomicGroupMappings[];
+
+extern const size_t kPolicyAtomicGroupMappingsLength;
+
+// Arrays of metapolicies.
+namespace metapolicy {
+
+extern const char* const kMerge[1];
+extern const char* const kPrecedence[1];
+
+} // namespace metapolicy
+
+enum class StringPolicyType {
+ STRING,
+ JSON,
+ EXTERNAL,
+};
+
+// Read access to the protobufs of all supported boolean user policies.
+struct BooleanPolicyAccess {
+ const char* policy_key;
+ bool per_profile;
+ bool (*has_proto)(const em::CloudPolicySettings& policy);
+ const em::BooleanPolicyProto& (*get_proto)(
+ const em::CloudPolicySettings& policy);
+};
+extern const std::array<BooleanPolicyAccess, 7> kBooleanPolicyAccess;
+
+// Read access to the protobufs of all supported integer user policies.
+struct IntegerPolicyAccess {
+ const char* policy_key;
+ bool per_profile;
+ bool (*has_proto)(const em::CloudPolicySettings& policy);
+ const em::IntegerPolicyProto& (*get_proto)(
+ const em::CloudPolicySettings& policy);
+};
+extern const std::array<IntegerPolicyAccess, 0> kIntegerPolicyAccess;
+
+// Read access to the protobufs of all supported string user policies.
+struct StringPolicyAccess {
+ const char* policy_key;
+ bool per_profile;
+ bool (*has_proto)(const em::CloudPolicySettings& policy);
+ const em::StringPolicyProto& (*get_proto)(
+ const em::CloudPolicySettings& policy);
+ const StringPolicyType type;
+};
+extern const std::array<StringPolicyAccess, 4> kStringPolicyAccess;
+
+// Read access to the protobufs of all supported stringlist user policies.
+struct StringListPolicyAccess {
+ const char* policy_key;
+ bool per_profile;
+ bool (*has_proto)(const em::CloudPolicySettings& policy);
+ const em::StringListPolicyProto& (*get_proto)(
+ const em::CloudPolicySettings& policy);
+};
+extern const std::array<StringListPolicyAccess, 0> kStringListPolicyAccess;
+
+constexpr int64_t kDevicePolicyExternalDataResourceCacheSize = 0;
+
+} // namespace policy
+
+#endif // COMPONENTS_POLICY_POLICY_CONSTANTS_H_
+'''
+
+POLICY_CONSTANTS_HEADER_WIN_ONLY_PART = '''
+// The windows registry path where Chrome policy configuration resides.
+extern const wchar_t kRegistryChromePolicyKey[];'''
+
+EXPECTED_POLICY_CONSTANTS_SOURCE = '''\
+#include "components/policy/policy_constants.h"
+
+#include <algorithm>
+#include <climits>
+#include <iterator>
+#include <memory>
+
+#include "base/check_op.h"
+#include "base/values.h"
+#include "build/branding_buildflags.h"
+#include "components/policy/core/common/policy_types.h"
+#include "components/policy/core/common/schema_internal.h"
+#include "components/policy/proto/cloud_policy.pb.h"
+#include "components/policy/risk_tag.h"
+
+namespace policy {
+
+[[maybe_unused]] const PolicyDetails kChromePolicyDetails[] = {
+// is_deprecated is_future is_device_policy id max_external_data_size, risk tags
+ // ExampleStringPolicy
+ { false, false, false, 1, 0, { } },
+ // ExampleBoolPolicy
+ { false, false, false, 2, 0, { } },
+ // ExampleBoolMergeMetapolicy
+ { false, false, false, 3, 0, { } },
+ // ExampleBoolPrecedenceMetapolicy
+ { false, false, false, 4, 0, { } },
+ // CloudOnlyPolicy
+ { false, false, false, 5, 0, { } },
+ // CloudManagementEnrollmentToken
+ { false, false, false, 6, 0, { } },
+ // ChunkZeroLastFieldBooleanPolicy
+ { false, false, false, 1015, 0, { } },
+ // ChunkOneFirstFieldBooleanPolicy
+ { false, false, false, 1016, 0, { } },
+ // ChunkOneLastFieldBooleanPolicy
+ { false, false, false, 1815, 0, { } },
+ // ChunkTwoFirstFieldStringPolicy
+ { false, false, false, 1816, 0, { } },
+ // ChunkTwoLastFieldStringPolicy
+ { false, false, false, 2615, 0, { } },
+};
+
+const internal::SchemaNode kSchemas[] = {
+// Type Extra IsSensitiveValue HasSensitiveChildren
+ { base::Value::Type::DICTIONARY, 0, false, false }, // root node
+ { base::Value::Type::BOOLEAN, -1, false, false }, // simple type: boolean
+ { base::Value::Type::STRING, -1, false, false }, // simple type: string
+};
+
+const internal::PropertyNode kPropertyNodes[] = {
+// Property Schema
+ { key::kChunkOneFirstFieldBooleanPolicy, 1 },
+ { key::kChunkOneLastFieldBooleanPolicy, 1 },
+ { key::kChunkTwoFirstFieldStringPolicy, 2 },
+ { key::kChunkTwoLastFieldStringPolicy, 2 },
+ { key::kChunkZeroLastFieldBooleanPolicy, 1 },
+ { key::kCloudManagementEnrollmentToken, 2 },
+ { key::kCloudOnlyPolicy, 1 },
+ { key::kExampleBoolMergeMetapolicy, 1 },
+ { key::kExampleBoolPolicy, 1 },
+ { key::kExampleBoolPrecedenceMetapolicy, 1 },
+ { key::kExampleStringPolicy, 2 },
+};
+
+const internal::PropertiesNode kProperties[] = {
+// Begin End PatternEnd RequiredBegin RequiredEnd Additional Properties
+ { 0, 11, 11, 0, 0, -1 }, // root node
+};
+
+const internal::SchemaData* GetChromeSchemaData() {
+ static const internal::SchemaData kChromeSchemaData = {
+ kSchemas,
+ kPropertyNodes,
+ kProperties,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ -1, // validation_schema root index
+ };
+
+ return &kChromeSchemaData;
+}
+
+
+namespace {
+bool CompareKeys(const internal::PropertyNode& node,
+ const std::string& key) {
+ return node.key < key;
+}
+
+} // namespace
+%(windows_only_part)s
+#if BUILDFLAG(IS_CHROMEOS)
+void SetEnterpriseUsersProfileDefaults(PolicyMap* policy_map) {
+
+}
+
+void SetEnterpriseUsersSystemWideDefaults(PolicyMap* policy_map) {
+
+}
+
+void SetEnterpriseUsersDefaults(PolicyMap* policy_map) {
+ SetEnterpriseUsersProfileDefaults(policy_map);
+ SetEnterpriseUsersSystemWideDefaults(policy_map);
+}
+#endif
+
+const PolicyDetails* GetChromePolicyDetails(const std::string& policy) {
+ // First index in kPropertyNodes of the Chrome policies.
+ static const int begin_index = 0;
+ // One-past-the-end of the Chrome policies in kPropertyNodes.
+ static const int end_index = 11;
+ const internal::PropertyNode* begin =
+ kPropertyNodes + begin_index;
+ const internal::PropertyNode* end = kPropertyNodes + end_index;
+ const internal::PropertyNode* it =
+ std::lower_bound(begin, end, policy, CompareKeys);
+ if (it == end || it->key != policy)
+ return nullptr;
+ // This relies on kPropertyNodes from begin_index to end_index
+ // having exactly the same policies (and in the same order) as
+ // kChromePolicyDetails, so that binary searching on the first
+ // gets the same results as a binary search on the second would.
+ // However, kPropertyNodes has the policy names and
+ // kChromePolicyDetails doesn't, so we obtain the index into
+ // the second array by searching the first to avoid duplicating
+ // the policy name pointers.
+ // Offsetting |it| from |begin| here obtains the index we're
+ // looking for.
+ size_t index = it - begin;
+ CHECK_LT(index, std::size(kChromePolicyDetails));
+ return kChromePolicyDetails + index;
+}
+
+namespace key {
+
+const char kExampleStringPolicy[] = "ExampleStringPolicy";
+const char kExampleBoolPolicy[] = "ExampleBoolPolicy";
+const char kExampleBoolMergeMetapolicy[] = "ExampleBoolMergeMetapolicy";
+const char kExampleBoolPrecedenceMetapolicy[] = "ExampleBoolPrecedenceMetapolicy";
+const char kCloudOnlyPolicy[] = "CloudOnlyPolicy";
+const char kCloudManagementEnrollmentToken[] = "CloudManagementEnrollmentToken";
+const char kChunkZeroLastFieldBooleanPolicy[] = "ChunkZeroLastFieldBooleanPolicy";
+const char kChunkOneFirstFieldBooleanPolicy[] = "ChunkOneFirstFieldBooleanPolicy";
+const char kChunkOneLastFieldBooleanPolicy[] = "ChunkOneLastFieldBooleanPolicy";
+const char kChunkTwoFirstFieldStringPolicy[] = "ChunkTwoFirstFieldStringPolicy";
+const char kChunkTwoLastFieldStringPolicy[] = "ChunkTwoLastFieldStringPolicy";
+
+} // namespace key
+
+namespace group {
+
+
+namespace {
+
+
+} // namespace
+
+} // namespace group
+
+const AtomicGroup kPolicyAtomicGroupMappings[] = {
+};
+
+const size_t kPolicyAtomicGroupMappingsLength = 0;
+
+namespace metapolicy {
+
+const char* const kMerge[1] = {
+ key::kExampleBoolMergeMetapolicy,
+};
+
+const char* const kPrecedence[1] = {
+ key::kExampleBoolPrecedenceMetapolicy,
+};
+
+} // namespace metapolicy
+
+const std::array<BooleanPolicyAccess, 7> kBooleanPolicyAccess {{
+ {key::kExampleBoolPolicy,
+ false,
+ [](const em::CloudPolicySettings& policy) {
+ return policy.has_exampleboolpolicy();
+ },
+ [](const em::CloudPolicySettings& policy)
+ -> const em::BooleanPolicyProto& {
+ return policy.exampleboolpolicy();
+ }
+ },
+ {key::kExampleBoolMergeMetapolicy,
+ false,
+ [](const em::CloudPolicySettings& policy) {
+ return policy.has_exampleboolmergemetapolicy();
+ },
+ [](const em::CloudPolicySettings& policy)
+ -> const em::BooleanPolicyProto& {
+ return policy.exampleboolmergemetapolicy();
+ }
+ },
+ {key::kExampleBoolPrecedenceMetapolicy,
+ false,
+ [](const em::CloudPolicySettings& policy) {
+ return policy.has_exampleboolprecedencemetapolicy();
+ },
+ [](const em::CloudPolicySettings& policy)
+ -> const em::BooleanPolicyProto& {
+ return policy.exampleboolprecedencemetapolicy();
+ }
+ },
+ {key::kCloudOnlyPolicy,
+ false,
+ [](const em::CloudPolicySettings& policy) {
+ return policy.has_cloudonlypolicy();
+ },
+ [](const em::CloudPolicySettings& policy)
+ -> const em::BooleanPolicyProto& {
+ return policy.cloudonlypolicy();
+ }
+ },
+ {key::kChunkZeroLastFieldBooleanPolicy,
+ false,
+ [](const em::CloudPolicySettings& policy) {
+ return policy.has_chunkzerolastfieldbooleanpolicy();
+ },
+ [](const em::CloudPolicySettings& policy)
+ -> const em::BooleanPolicyProto& {
+ return policy.chunkzerolastfieldbooleanpolicy();
+ }
+ },
+ {key::kChunkOneFirstFieldBooleanPolicy,
+ false,
+ [](const em::CloudPolicySettings& policy) {
+ return policy.has_subproto1() &&
+ policy.subproto1().has_chunkonefirstfieldbooleanpolicy();
+ },
+ [](const em::CloudPolicySettings& policy)
+ -> const em::BooleanPolicyProto& {
+ return policy.subproto1().chunkonefirstfieldbooleanpolicy();
+ }
+ },
+ {key::kChunkOneLastFieldBooleanPolicy,
+ false,
+ [](const em::CloudPolicySettings& policy) {
+ return policy.has_subproto1() &&
+ policy.subproto1().has_chunkonelastfieldbooleanpolicy();
+ },
+ [](const em::CloudPolicySettings& policy)
+ -> const em::BooleanPolicyProto& {
+ return policy.subproto1().chunkonelastfieldbooleanpolicy();
+ }
+ },
+}};
+
+const std::array<IntegerPolicyAccess, 0> kIntegerPolicyAccess {{
+}};
+
+const std::array<StringPolicyAccess, 4> kStringPolicyAccess {{
+ {key::kExampleStringPolicy,
+ false,
+ [](const em::CloudPolicySettings& policy) {
+ return policy.has_examplestringpolicy();
+ },
+ [](const em::CloudPolicySettings& policy)
+ -> const em::StringPolicyProto& {
+ return policy.examplestringpolicy();
+ },
+ StringPolicyType::STRING
+ },
+ {key::kCloudManagementEnrollmentToken,
+ false,
+ [](const em::CloudPolicySettings& policy) {
+ return policy.has_cloudmanagementenrollmenttoken();
+ },
+ [](const em::CloudPolicySettings& policy)
+ -> const em::StringPolicyProto& {
+ return policy.cloudmanagementenrollmenttoken();
+ },
+ StringPolicyType::STRING
+ },
+ {key::kChunkTwoFirstFieldStringPolicy,
+ false,
+ [](const em::CloudPolicySettings& policy) {
+ return policy.has_subproto2() &&
+ policy.subproto2().has_chunktwofirstfieldstringpolicy();
+ },
+ [](const em::CloudPolicySettings& policy)
+ -> const em::StringPolicyProto& {
+ return policy.subproto2().chunktwofirstfieldstringpolicy();
+ },
+ StringPolicyType::STRING
+ },
+ {key::kChunkTwoLastFieldStringPolicy,
+ false,
+ [](const em::CloudPolicySettings& policy) {
+ return policy.has_subproto2() &&
+ policy.subproto2().has_chunktwolastfieldstringpolicy();
+ },
+ [](const em::CloudPolicySettings& policy)
+ -> const em::StringPolicyProto& {
+ return policy.subproto2().chunktwolastfieldstringpolicy();
+ },
+ StringPolicyType::STRING
+ },
+}};
+
+const std::array<StringListPolicyAccess, 0> kStringListPolicyAccess {{
+}};
+
+
+} // namespace policy
+'''
+
+POLICY_CONSTANTS_SOURCE_WIN_ONLY_PART = '''
+#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+const wchar_t kRegistryChromePolicyKey[] = L"SOFTWARE\\\\Policies\\\\Google\\\\Chrome";
+#else
+const wchar_t kRegistryChromePolicyKey[] = L"SOFTWARE\\\\Policies\\\\Chromium";
+#endif
+'''
+
+EXPECTED_CROS_POLICY_CONSTANTS_HEADER = '''
+#ifndef __BINDINGS_POLICY_CONSTANTS_H_
+#define __BINDINGS_POLICY_CONSTANTS_H_
+
+#include <array>
+
+namespace enterprise_management {
+class CloudPolicySettings;
+class BooleanPolicyProto;
+class IntegerPolicyProto;
+class StringPolicyProto;
+class StringListPolicyProto;
+} // namespace enterprise_management
+
+namespace policy {
+
+// Registry key names for user and device policies.
+namespace key {
+
+extern const char kExampleStringPolicy[];
+extern const char kExampleBoolPolicy[];
+extern const char kExampleBoolMergeMetapolicy[];
+extern const char kExampleBoolPrecedenceMetapolicy[];
+extern const char kCloudOnlyPolicy[];
+extern const char kCloudManagementEnrollmentToken[];
+extern const char kChunkZeroLastFieldBooleanPolicy[];
+extern const char kChunkOneFirstFieldBooleanPolicy[];
+extern const char kChunkOneLastFieldBooleanPolicy[];
+extern const char kChunkTwoFirstFieldStringPolicy[];
+extern const char kChunkTwoLastFieldStringPolicy[];
+
+} // namespace key
+
+// NULL-terminated list of device policy registry key names.
+extern const char* kDevicePolicyKeys[];
+
+// Access to the mutable protobuf function of all supported boolean user
+// policies.
+struct BooleanPolicyAccess {
+ const char* policy_key;
+ bool per_profile;
+ enterprise_management::BooleanPolicyProto* (*mutable_proto_ptr)(
+ enterprise_management::CloudPolicySettings* policy);
+};
+extern const std::array<BooleanPolicyAccess, 7> kBooleanPolicyAccess;
+
+// Access to the mutable protobuf function of all supported integer user
+// policies.
+struct IntegerPolicyAccess {
+ const char* policy_key;
+ bool per_profile;
+ enterprise_management::IntegerPolicyProto* (*mutable_proto_ptr)(
+ enterprise_management::CloudPolicySettings* policy);
+};
+extern const std::array<IntegerPolicyAccess, 0> kIntegerPolicyAccess;
+
+// Access to the mutable protobuf function of all supported string user
+// policies.
+struct StringPolicyAccess {
+ const char* policy_key;
+ bool per_profile;
+ enterprise_management::StringPolicyProto* (*mutable_proto_ptr)(
+ enterprise_management::CloudPolicySettings* policy);
+};
+extern const std::array<StringPolicyAccess, 4> kStringPolicyAccess;
+
+// Access to the mutable protobuf function of all supported stringlist user
+// policies.
+struct StringListPolicyAccess {
+ const char* policy_key;
+ bool per_profile;
+ enterprise_management::StringListPolicyProto* (*mutable_proto_ptr)(
+ enterprise_management::CloudPolicySettings* policy);
+};
+extern const std::array<StringListPolicyAccess, 0> kStringListPolicyAccess;
+
+} // namespace policy
+
+#endif // __BINDINGS_POLICY_CONSTANTS_H_
+'''
+
+EXPECTED_CROS_POLICY_CONSTANTS_SOURCE = '''
+#include "bindings/cloud_policy.pb.h"
+#include "bindings/policy_constants.h"
+
+namespace em = enterprise_management;
+
+namespace policy {
+
+namespace key {
+
+const char kExampleStringPolicy[] = "ExampleStringPolicy";
+const char kExampleBoolPolicy[] = "ExampleBoolPolicy";
+const char kExampleBoolMergeMetapolicy[] = "ExampleBoolMergeMetapolicy";
+const char kExampleBoolPrecedenceMetapolicy[] = "ExampleBoolPrecedenceMetapolicy";
+const char kCloudOnlyPolicy[] = "CloudOnlyPolicy";
+const char kCloudManagementEnrollmentToken[] = "CloudManagementEnrollmentToken";
+const char kChunkZeroLastFieldBooleanPolicy[] = "ChunkZeroLastFieldBooleanPolicy";
+const char kChunkOneFirstFieldBooleanPolicy[] = "ChunkOneFirstFieldBooleanPolicy";
+const char kChunkOneLastFieldBooleanPolicy[] = "ChunkOneLastFieldBooleanPolicy";
+const char kChunkTwoFirstFieldStringPolicy[] = "ChunkTwoFirstFieldStringPolicy";
+const char kChunkTwoLastFieldStringPolicy[] = "ChunkTwoLastFieldStringPolicy";
+
+} // namespace key
+
+const char* kDevicePolicyKeys[] = {
+
+ nullptr};
+
+const std::array<BooleanPolicyAccess, 7> kBooleanPolicyAccess {{
+ {key::kExampleBoolPolicy,
+ false,
+ [](em::CloudPolicySettings* policy)
+ -> em::BooleanPolicyProto* {
+ return policy->mutable_exampleboolpolicy();
+ }
+ },
+ {key::kExampleBoolMergeMetapolicy,
+ false,
+ [](em::CloudPolicySettings* policy)
+ -> em::BooleanPolicyProto* {
+ return policy->mutable_exampleboolmergemetapolicy();
+ }
+ },
+ {key::kExampleBoolPrecedenceMetapolicy,
+ false,
+ [](em::CloudPolicySettings* policy)
+ -> em::BooleanPolicyProto* {
+ return policy->mutable_exampleboolprecedencemetapolicy();
+ }
+ },
+ {key::kCloudOnlyPolicy,
+ false,
+ [](em::CloudPolicySettings* policy)
+ -> em::BooleanPolicyProto* {
+ return policy->mutable_cloudonlypolicy();
+ }
+ },
+ {key::kChunkZeroLastFieldBooleanPolicy,
+ false,
+ [](em::CloudPolicySettings* policy)
+ -> em::BooleanPolicyProto* {
+ return policy->mutable_chunkzerolastfieldbooleanpolicy();
+ }
+ },
+ {key::kChunkOneFirstFieldBooleanPolicy,
+ false,
+ [](em::CloudPolicySettings* policy)
+ -> em::BooleanPolicyProto* {
+ return policy->mutable_subproto1()->mutable_chunkonefirstfieldbooleanpolicy();
+ }
+ },
+ {key::kChunkOneLastFieldBooleanPolicy,
+ false,
+ [](em::CloudPolicySettings* policy)
+ -> em::BooleanPolicyProto* {
+ return policy->mutable_subproto1()->mutable_chunkonelastfieldbooleanpolicy();
+ }
+ },
+}};
+
+const std::array<IntegerPolicyAccess, 0> kIntegerPolicyAccess {{
+}};
+
+const std::array<StringPolicyAccess, 4> kStringPolicyAccess {{
+ {key::kExampleStringPolicy,
+ false,
+ [](em::CloudPolicySettings* policy)
+ -> em::StringPolicyProto* {
+ return policy->mutable_examplestringpolicy();
+ }
+ },
+ {key::kCloudManagementEnrollmentToken,
+ false,
+ [](em::CloudPolicySettings* policy)
+ -> em::StringPolicyProto* {
+ return policy->mutable_cloudmanagementenrollmenttoken();
+ }
+ },
+ {key::kChunkTwoFirstFieldStringPolicy,
+ false,
+ [](em::CloudPolicySettings* policy)
+ -> em::StringPolicyProto* {
+ return policy->mutable_subproto2()->mutable_chunktwofirstfieldstringpolicy();
+ }
+ },
+ {key::kChunkTwoLastFieldStringPolicy,
+ false,
+ [](em::CloudPolicySettings* policy)
+ -> em::StringPolicyProto* {
+ return policy->mutable_subproto2()->mutable_chunktwolastfieldstringpolicy();
+ }
+ },
+}};
+
+const std::array<StringListPolicyAccess, 0> kStringListPolicyAccess {{
+}};
+
+} // namespace policy
+'''
+
+EXPECTED_APP_RESTRICTIONS_XML = '''
+<restrictions xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <restriction
+ android:key="CloudManagementEnrollmentToken"
+ android:title="@string/CloudManagementEnrollmentTokenTitle"
+ android:description="@string/CloudManagementEnrollmentTokenDesc"
+ android:restrictionType="string"/>
+
+ <restriction
+ android:key="ChunkOneFirstFieldBooleanPolicy"
+ android:title="@string/ChunkOneFirstFieldBooleanPolicyTitle"
+ android:description="@string/ChunkOneFirstFieldBooleanPolicyDesc"
+ android:restrictionType="bool"/>
+
+ <restriction
+ android:key="ChunkOneLastFieldBooleanPolicy"
+ android:title="@string/ChunkOneLastFieldBooleanPolicyTitle"
+ android:description="@string/ChunkOneLastFieldBooleanPolicyDesc"
+ android:restrictionType="bool"/>
+
+ <restriction
+ android:key="ChunkTwoFirstFieldStringPolicy"
+ android:title="@string/ChunkTwoFirstFieldStringPolicyTitle"
+ android:description="@string/ChunkTwoFirstFieldStringPolicyDesc"
+ android:restrictionType="string"/>
+
+ <restriction
+ android:key="ChunkTwoLastFieldStringPolicy"
+ android:title="@string/ChunkTwoLastFieldStringPolicyTitle"
+ android:description="@string/ChunkTwoLastFieldStringPolicyDesc"
+ android:restrictionType="string"/>
+
+ <restriction
+ android:key="ChunkZeroLastFieldBooleanPolicy"
+ android:title="@string/ChunkZeroLastFieldBooleanPolicyTitle"
+ android:description="@string/ChunkZeroLastFieldBooleanPolicyDesc"
+ android:restrictionType="bool"/>
+
+ <restriction
+ android:key="ExampleBoolMergeMetapolicy"
+ android:title="@string/ExampleBoolMergeMetapolicyTitle"
+ android:description="@string/ExampleBoolMergeMetapolicyDesc"
+ android:restrictionType="bool"/>
+
+ <restriction
+ android:key="ExampleBoolPolicy"
+ android:title="@string/ExampleBoolPolicyTitle"
+ android:description="@string/ExampleBoolPolicyDesc"
+ android:restrictionType="bool"/>
+
+ <restriction
+ android:key="ExampleBoolPrecedenceMetapolicy"
+ android:title="@string/ExampleBoolPrecedenceMetapolicyTitle"
+ android:description="@string/ExampleBoolPrecedenceMetapolicyDesc"
+ android:restrictionType="bool"/>
+
+ <restriction
+ android:key="ExampleStringPolicy"
+ android:title="@string/ExampleStringPolicyTitle"
+ android:description="@string/ExampleStringPolicyDesc"
+ android:restrictionType="string"/>
+
+</restrictions>'''