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

Unified Diff: chrome/tools/build/generate_policy_source.py

Issue 58313002: Removed the PolicyDefinitionList. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@chrome-policy-schema-10-use-registry
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
« no previous file with comments | « chrome/chrome_tests_unit.gypi ('k') | components/policy.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/tools/build/generate_policy_source.py
diff --git a/chrome/tools/build/generate_policy_source.py b/chrome/tools/build/generate_policy_source.py
index da620e73e9f0b6db8e96f88b26e63ced94acee75..a5f1989f4cf3bbfd2eba40538bbf0e47e2dea504 100755
--- a/chrome/tools/build/generate_policy_source.py
+++ b/chrome/tools/build/generate_policy_source.py
@@ -212,6 +212,7 @@ def _WritePolicyConstantHeader(policies, os, f):
'\n'
'#include "base/basictypes.h"\n'
'#include "base/values.h"\n'
+ '#include "components/policy/core/common/policy_details.h"\n'
'\n'
'namespace policy {\n'
'\n'
@@ -224,27 +225,10 @@ def _WritePolicyConstantHeader(policies, os, f):
'configuration resides.\n'
'extern const wchar_t kRegistryChromePolicyKey[];\n')
- f.write('// Lists metadata such as name, expected type and id for all\n'
- '// policies. Used to initialize ConfigurationPolicyProviders and\n'
- '// CloudExternalDataManagers.\n'
- 'struct PolicyDefinitionList {\n'
- ' struct Entry {\n'
- ' const char* name;\n'
- ' base::Value::Type value_type;\n'
- ' bool device_policy;\n'
- ' int id;\n'
- ' size_t max_external_data_size;\n'
- ' };\n'
- '\n'
- ' const Entry* begin;\n'
- ' const Entry* end;\n'
- '};\n'
- '\n'
- '// Returns true if the given policy is deprecated.\n'
- 'bool IsDeprecatedPolicy(const std::string& policy);\n'
- '\n'
- '// Returns the default policy definition list for Chrome.\n'
- 'const PolicyDefinitionList* GetChromePolicyDefinitionList();\n'
+ f.write('// Returns the PolicyDetails for |policy| if |policy| is a known\n'
+ '// Chrome policy, otherwise returns NULL.\n'
+ 'const PolicyDetails* GetChromePolicyDetails('
+ 'const std::string& policy);\n'
'\n'
'// Returns the schema data of the Chrome policy schema.\n'
'const internal::SchemaData* GetChromeSchemaData();\n'
@@ -264,10 +248,6 @@ def _WritePolicyConstantHeader(policies, os, f):
#------------------ policy constants source ------------------------#
-def _GetValueType(policy_type):
- return policy_type if policy_type != 'TYPE_EXTERNAL' else 'TYPE_DICTIONARY'
-
-
# A mapping of the simple schema types to base::Value::Types.
SIMPLE_SCHEMA_NAME_MAP = {
'boolean': 'TYPE_BOOLEAN',
@@ -363,6 +343,9 @@ class SchemaNodesGenerator:
begin = len(self.property_nodes)
self.property_nodes += properties
end = len(self.property_nodes)
+ if index == 0:
+ self.root_properties_begin = begin
+ self.root_properties_end = end
extra = len(self.properties_nodes)
self.properties_nodes.append((begin, end, additionalProperties, name))
@@ -405,10 +388,12 @@ class SchemaNodesGenerator:
def _WritePolicyConstantSource(policies, os, f):
- f.write('#include "base/basictypes.h"\n'
+ f.write('#include "policy/policy_constants.h"\n'
+ '\n'
+ '#include <algorithm>\n'
+ '\n'
'#include "base/logging.h"\n'
'#include "components/policy/core/common/schema_internal.h"\n'
- '#include "policy/policy_constants.h"\n'
'\n'
'namespace policy {\n'
'\n'
@@ -426,35 +411,30 @@ def _WritePolicyConstantSource(policies, os, f):
if policy.is_supported:
chrome_schema['properties'][policy.name] = policy.schema
- f.write('const PolicyDefinitionList::Entry kEntries[] = {\n')
+ # Note: this list must be kept in sync with the known property list of the
+ # Chrome schema, so that binary seaching in the PropertyNode array gets the
+ # right index on this array as well. See the implementation of
+ # GetChromePolicyDetails() below.
+ f.write('const PolicyDetails kChromePolicyDetails[] = {\n'
+ '// is_deprecated is_device_policy id max_external_data_size\n')
for policy in policies:
if policy.is_supported:
- f.write(' { key::k%s, base::Value::%s, %s, %s, %s },\n' %
- (policy.name, _GetValueType(policy.policy_type),
- 'true' if policy.is_device_only else 'false', policy.id,
- policy.max_size))
+ f.write(' { %-14s %-16s %3s, %24s },\n' % (
+ 'true,' if policy.is_deprecated else 'false,',
+ 'true,' if policy.is_device_only else 'false,',
+ policy.id,
+ policy.max_size))
f.write('};\n\n')
- f.write('const PolicyDefinitionList kChromePolicyList = {\n'
- ' kEntries,\n'
- ' kEntries + arraysize(kEntries),\n'
- '};\n\n')
-
- has_deprecated_policies = any(
- [p.is_supported and p.is_deprecated for p in policies])
-
- if has_deprecated_policies:
- f.write('// List of deprecated policies.\n'
- 'const char* kDeprecatedPolicyList[] = {\n')
- for policy in policies:
- if policy.is_supported and policy.is_deprecated:
- f.write(' key::k%s,\n' % policy.name)
- f.write('};\n\n')
-
schema_generator = SchemaNodesGenerator(shared_strings)
schema_generator.Generate(chrome_schema, 'root node')
schema_generator.Write(f)
+ f.write('bool CompareKeys(const internal::PropertyNode& node,\n'
+ ' const std::string& key) {\n'
+ ' return node.key < key;\n'
+ '}\n\n')
+
f.write('} // namespace\n\n')
if os == 'win':
@@ -466,25 +446,40 @@ def _WritePolicyConstantSource(policies, os, f):
'L"' + CHROMIUM_POLICY_KEY + '";\n'
'#endif\n\n')
- f.write('bool IsDeprecatedPolicy(const std::string& policy) {\n')
- if has_deprecated_policies:
- # arraysize() doesn't work with empty arrays.
- f.write(' for (size_t i = 0; i < arraysize(kDeprecatedPolicyList);'
- ' ++i) {\n'
- ' if (policy == kDeprecatedPolicyList[i])\n'
- ' return true;\n'
- ' }\n')
- f.write(' return false;\n'
- '}\n\n')
-
- f.write('const PolicyDefinitionList* GetChromePolicyDefinitionList() {\n'
- ' return &kChromePolicyList;\n'
- '}\n\n')
-
f.write('const internal::SchemaData* GetChromeSchemaData() {\n'
' return &kChromeSchemaData;\n'
'}\n\n')
+ f.write('const PolicyDetails* GetChromePolicyDetails('
+ 'const std::string& policy) {\n'
+ ' // First index in kPropertyNodes of the Chrome policies.\n'
+ ' static const int begin_index = %s;\n'
+ ' // One-past-the-end of the Chrome policies in kPropertyNodes.\n'
+ ' static const int end_index = %s;\n' %
+ (schema_generator.root_properties_begin,
+ schema_generator.root_properties_end))
+ f.write(' const internal::PropertyNode* begin =\n'
+ ' kPropertyNodes + begin_index;\n'
+ ' const internal::PropertyNode* end = kPropertyNodes + end_index;\n'
+ ' const internal::PropertyNode* it =\n'
+ ' std::lower_bound(begin, end, policy, CompareKeys);\n'
+ ' if (it == end || it->key != policy)\n'
+ ' return NULL;\n'
+ ' // This relies on kPropertyNodes from begin_index to end_index\n'
+ ' // having exactly the same policies (and in the same order) as\n'
+ ' // kChromePolicyDetails, so that binary searching on the first\n'
+ ' // gets the same results as a binary search on the second would.\n'
+ ' // However, kPropertyNodes has the policy names and\n'
+ ' // kChromePolicyDetails doesn\'t, so we obtain the index into\n'
+ ' // the second array by searching the first to avoid duplicating\n'
+ ' // the policy name pointers.\n'
+ ' // Offsetting |it| from |begin| here obtains the index we\'re\n'
+ ' // looking for.\n'
+ ' size_t index = it - begin;\n'
+ ' CHECK_LT(index, arraysize(kChromePolicyDetails));\n'
+ ' return kChromePolicyDetails + index;\n'
+ '}\n\n')
+
f.write('namespace key {\n\n')
for policy in policies:
# TODO(joaodasilva): Include only supported policies in
« no previous file with comments | « chrome/chrome_tests_unit.gypi ('k') | components/policy.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698