summaryrefslogtreecommitdiffstats
path: root/chrome/tools
diff options
context:
space:
mode:
authordanno@chromium.org <danno@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-27 12:07:08 +0000
committerdanno@chromium.org <danno@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-27 12:07:08 +0000
commit150f43b345029c037176b4d23c2c32aacd8b6dfc (patch)
tree35ea50a24ae1ffc7997a84af592434b80b48dbef /chrome/tools
parent5b8bcd40e3f3b7426ddee939054913505f43156f (diff)
downloadchromium_src-150f43b345029c037176b4d23c2c32aacd8b6dfc.zip
chromium_src-150f43b345029c037176b4d23c2c32aacd8b6dfc.tar.gz
chromium_src-150f43b345029c037176b4d23c2c32aacd8b6dfc.tar.bz2
Policy: generate boilerplate policy type and constant code.
This is the first step to being able to re-constitute policy from a non-generic protobuf in a policy request in a fully automated way (i.e. the code for the process can be generated). The non-generic protobuf is required for automatic merging of policy on the server-side. BUG=68309 TEST=existing policy/provider tests Review URL: http://codereview.chromium.org/6002015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72784 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/tools')
-rw-r--r--chrome/tools/build/generate_policy_source.py142
1 files changed, 142 insertions, 0 deletions
diff --git a/chrome/tools/build/generate_policy_source.py b/chrome/tools/build/generate_policy_source.py
new file mode 100644
index 0000000..1051092
--- /dev/null
+++ b/chrome/tools/build/generate_policy_source.py
@@ -0,0 +1,142 @@
+#!/usr/bin/python
+# Copyright (c) 2011 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.
+
+'''python %prog [options] platform template
+
+platform specifies which platform source is being generated for
+ and can be one of (win, mac, linux).
+template is the path to a .json policy template file.'''
+
+from __future__ import with_statement
+from optparse import OptionParser
+import sys;
+
+
+CHROME_SUBKEY = 'SOFTWARE\\\\Policies\\\\Google\\\\Chrome';
+CHROMIUM_SUBKEY = 'SOFTWARE\\\\Policies\\\\Chromium';
+
+
+def main():
+ parser = OptionParser(usage=__doc__);
+ parser.add_option("--pch", "--policy-constants-header", dest="header_path",
+ help="generate header file of policy constants",
+ metavar="FILE");
+ parser.add_option("--pcc", "--policy-constants-source", dest="source_path",
+ help="generate source file of policy constants",
+ metavar="FILE");
+ parser.add_option("--pth", "--policy-type-header", dest="type_path",
+ help="generate header file for policy type enumeration",
+ metavar="FILE");
+
+ (opts, args) = parser.parse_args();
+
+ if len(args) < 2 or len(args) > 2:
+ print "exactly one platform and input file must be specified."
+ parser.print_help()
+ sys.exit(2)
+ template_file_contents = _LoadJSONFile(args[1]);
+ if opts.header_path is not None:
+ _WritePolicyConstantHeader(template_file_contents,
+ args,
+ opts);
+ if opts.source_path is not None:
+ _WritePolicyConstantSource(template_file_contents,
+ args,
+ opts);
+ if opts.type_path is not None:
+ _WritePolicyTypeEnumerationHeader(template_file_contents,
+ args,
+ opts);
+
+
+def _OutputGeneratedWarningForC(f, template_file_path):
+ f.write('//\n'
+ '// DO NOT MODIFY THIS FILE DIRECTLY!\n'
+ '// IT IS GENERATED BY generate_policy_source.py\n'
+ '// FROM ' + template_file_path + ' \n'
+ '//\n\n')
+
+
+def _WritePolicyConstantHeader(template_file_contents, args, opts):
+ platform = args[0];
+ with open(opts.header_path, "w") as f:
+ _OutputGeneratedWarningForC(f, args[1])
+ f.write('#ifndef CHROME_COMMON_POLICY_CONSTANTS_H_\n'
+ '#define CHROME_COMMON_POLICY_CONSTANTS_H_\n'
+ '#pragma once\n'
+ '\n'
+ 'namespace policy {\n\n')
+ if platform == "win":
+ f.write('// The windows registry path where policy configuration '
+ 'resides.\nextern const wchar_t kRegistrySubKey[];\n\n')
+ f.write('// Key names for the policy settings.\n'
+ 'namespace key {\n\n')
+ for policy_name in _GetPolicyNameList(template_file_contents):
+ f.write('extern const char k' + policy_name + '[];\n')
+ f.write('\n} // namespace key\n\n'
+ '} // namespace policy\n\n'
+ '#endif // CHROME_COMMON_POLICY_CONSTANTS_H_\n')
+
+
+def _WritePolicyConstantSource(template_file_contents, args, opts):
+ platform = args[0];
+ with open(opts.source_path, "w") as f:
+ _OutputGeneratedWarningForC(f, args[1])
+ f.write('#include "policy/policy_constants.h"\n'
+ '\n'
+ 'namespace policy {\n'
+ '\n')
+ if platform == "win":
+ f.write('#if defined(GOOGLE_CHROME_BUILD)\n'
+ 'const wchar_t kRegistrySubKey[] = '
+ 'L"' + CHROME_SUBKEY + '";\n'
+ '#else\n'
+ 'const wchar_t kRegistrySubKey[] = '
+ 'L"' + CHROMIUM_SUBKEY + '";\n'
+ '#endif\n\n')
+ f.write('namespace key {\n\n')
+ for policy_name in _GetPolicyNameList(template_file_contents):
+ f.write('const char k%s[] = "%s";\n' % (policy_name, policy_name))
+ f.write('\n} // namespace key\n\n'
+ '} // namespace policy\n')
+
+
+def _WritePolicyTypeEnumerationHeader(template_file_contents, args, opts):
+ with open(opts.type_path, "w") as f:
+ _OutputGeneratedWarningForC(f, args[1])
+ f.write('#ifndef CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_TYPE_H_\n'
+ '#define CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_TYPE_H_\n'
+ '#pragma once\n'
+ '\n'
+ 'namespace policy {\n'
+ '\n'
+ 'enum ConfigurationPolicyType {\n')
+ for policy_name in _GetPolicyNameList(template_file_contents):
+ f.write(' kPolicy' + policy_name + ",\n");
+ f.write('};\n\n'
+ '} // namespace policy\n\n'
+ '#endif // CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_TYPE_H_\n')
+
+
+def _GetPolicyNameList(template_file_contents):
+ policy_names = [];
+ for policy in template_file_contents['policy_definitions']:
+ if policy['type'] == 'group':
+ for sub_policy in policy['policies']:
+ policy_names.append(sub_policy['name'])
+ else:
+ policy_names.append(policy['name'])
+ policy_names.sort()
+ return policy_names
+
+
+def _LoadJSONFile(json_file):
+ with open(json_file, "r") as f:
+ text = f.read()
+ return eval(text)
+
+
+if __name__ == '__main__':
+ main();