195640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org#!/usr/bin/env python 295640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved. 301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# Use of this source code is governed by a BSD-style license that can be 401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# found in the LICENSE file. 501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.format.policy_templates.writers import template_writer 801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgNEWLINE = '\r\n' 1101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgdef GetWriter(config): 1401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Factory method for creating AdmWriter objects. 1501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org See the constructor of TemplateWriter for description of 1601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org arguments. 1701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' 1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return AdmWriter(['win'], config) 1901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass IndentedStringBuilder: 2201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Utility class for building text with indented lines.''' 2301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def __init__(self): 2501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.lines = [] 2601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.indent = '' 2701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def AddLine(self, string='', indent_diff=0): 2901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Appends a string with indentation and a linebreak to |self.lines|. 3001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 3101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org Args: 3201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org string: The string to print. 3301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org indent_diff: the difference of indentation of the printed line, 3401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org compared to the next/previous printed line. Increment occurs 3501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org after printing the line, while decrement occurs before that. 3601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' 3701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org indent_diff *= 2 3801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if indent_diff < 0: 3901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.indent = self.indent[(-indent_diff):] 4001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if string != '': 4101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.lines.append(self.indent + string) 4201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org else: 4301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.lines.append('') 4401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if indent_diff > 0: 4501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.indent += ''.ljust(indent_diff) 4601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 4701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def AddLines(self, other): 4801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Appends the content of another |IndentedStringBuilder| to |self.lines|. 4901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org Indentation of the added lines will be the sum of |self.indent| and 5001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org their original indentation. 5101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 5201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org Args: 5301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org other: The buffer from which lines are copied. 5401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' 5501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org for line in other.lines: 5601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.AddLine(line) 5701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 5801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def ToString(self): 5901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Returns |self.lines| as text string.''' 6001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return NEWLINE.join(self.lines) 6101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 6201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 6301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass AdmWriter(template_writer.TemplateWriter): 6401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Class for generating policy templates in Windows ADM format. 6501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org It is used by PolicyTemplateGenerator to write ADM files. 6601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' 6701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 6801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org TYPE_TO_INPUT = { 6901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 'string': 'EDITTEXT', 7001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 'int': 'NUMERIC', 7101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 'string-enum': 'DROPDOWNLIST', 7201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 'int-enum': 'DROPDOWNLIST', 73248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org 'list': 'LISTBOX', 74786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org 'string-enum-list': 'LISTBOX', 75248837b02a1e8da230541fa6c12e4d1b1dea2701joaodasilva@chromium.org 'dict': 'EDITTEXT' 7601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org } 7701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 7801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def _AddGuiString(self, name, value): 7901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # Escape newlines in the value. 8001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org value = value.replace('\n', '\\n') 810bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org if name in self.strings_seen: 821ab22a47727a765d94f9d2ee142cbd8d709849e2joaodasilva@chromium.org err = ('%s was added as "%s" and now added again as "%s"' % 831ab22a47727a765d94f9d2ee142cbd8d709849e2joaodasilva@chromium.org (name, self.strings_seen[name], value)) 841ab22a47727a765d94f9d2ee142cbd8d709849e2joaodasilva@chromium.org assert value == self.strings_seen[name], err 850bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org else: 860bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.strings_seen[name] = value 870bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org line = '%s="%s"' % (name, value) 880bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.strings.AddLine(line) 8901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 900bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org def _WriteSupported(self, builder): 910bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('#if version >= 4', 1) 920bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('SUPPORTED !!SUPPORTED_WINXPSP2') 930bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('#endif', -1) 9401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 950bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org def _WritePart(self, policy, key_name, builder): 9601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Writes the PART ... END PART section of a policy. 9701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 9801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org Args: 9901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org policy: The policy to write to the output. 1000bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org key_name: The registry key backing the policy. 1010bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder: Builder to append lines to. 10201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' 10301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org policy_part_name = policy['name'] + '_Part' 10401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self._AddGuiString(policy_part_name, policy['label']) 10501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 10601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # Print the PART ... END PART section: 1070bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine() 10801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org adm_type = self.TYPE_TO_INPUT[policy['type']] 1090bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('PART !!%s %s' % (policy_part_name, adm_type), 1) 110786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org if policy['type'] in ('list', 'string-enum-list'): 11101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # Note that the following line causes FullArmor ADMX Migrator to create 11201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # corrupt ADMX files. Please use admx_writer to get ADMX files. 1130bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('KEYNAME "%s\\%s"' % (key_name, policy['name'])) 1140bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('VALUEPREFIX ""') 11501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org else: 1160bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('VALUENAME "%s"' % policy['name']) 1179286469aaa9be3f2bef0156a27faf105b8d55449pastarmovj@chromium.org if policy['type'] == 'int': 1189286469aaa9be3f2bef0156a27faf105b8d55449pastarmovj@chromium.org # The default max for NUMERIC values is 9999 which is too small for us. 1199286469aaa9be3f2bef0156a27faf105b8d55449pastarmovj@chromium.org builder.AddLine('MIN 0 MAX 2000000000') 12001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if policy['type'] in ('int-enum', 'string-enum'): 1210bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('ITEMLIST', 1) 12201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org for item in policy['items']: 12301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if policy['type'] == 'int-enum': 12401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org value_text = 'NUMERIC ' + str(item['value']) 12501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org else: 12601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org value_text = '"' + item['value'] + '"' 1270bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('NAME !!%s_DropDown VALUE %s' % 12801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org (item['name'], value_text)) 12901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self._AddGuiString(item['name'] + '_DropDown', item['caption']) 1300bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('END ITEMLIST', -1) 1310bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('END PART', -1) 13201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1330bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org def _WritePolicy(self, policy, key_name, builder): 134e9f965b7a19bfc970bec100fb03e6aa269deb522joaodasilva@chromium.org if policy['type'] == 'external': 135e9f965b7a19bfc970bec100fb03e6aa269deb522joaodasilva@chromium.org # This type can only be set through cloud policy. 136e9f965b7a19bfc970bec100fb03e6aa269deb522joaodasilva@chromium.org return 137e9f965b7a19bfc970bec100fb03e6aa269deb522joaodasilva@chromium.org 13801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self._AddGuiString(policy['name'] + '_Policy', policy['caption']) 1390bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('POLICY !!%s_Policy' % policy['name'], 1) 1400bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self._WriteSupported(builder) 14101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org policy_explain_name = policy['name'] + '_Explain' 14201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self._AddGuiString(policy_explain_name, policy['desc']) 1430bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('EXPLAIN !!' + policy_explain_name) 14401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 14501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if policy['type'] == 'main': 1460bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('VALUENAME "%s"' % policy['name']) 1470bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('VALUEON NUMERIC 1') 1480bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('VALUEOFF NUMERIC 0') 14901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org else: 1500bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self._WritePart(policy, key_name, builder) 1510bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org 1520bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine('END POLICY', -1) 1530bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org builder.AddLine() 1540bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org 1550bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org def WritePolicy(self, policy): 156740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org if self.CanBeMandatory(policy): 157740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org self._WritePolicy(policy, 158740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org self.config['win_reg_mandatory_key_name'], 159740badd5e3e44434a9a47b5d16749daac1e8ea80joaodasilva@chromium.org self.policies) 16001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1610bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org def WriteRecommendedPolicy(self, policy): 1620bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self._WritePolicy(policy, 1630bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.config['win_reg_recommended_key_name'], 1640bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.recommended_policies) 16501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 16601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def BeginPolicyGroup(self, group): 1670bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org category_name = group['name'] + '_Category' 1680bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self._AddGuiString(category_name, group['caption']) 1690bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.policies.AddLine('CATEGORY !!' + category_name, 1) 17001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 17101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def EndPolicyGroup(self): 1720bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.policies.AddLine('END CATEGORY', -1) 1730bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.policies.AddLine('') 1740bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org 1750bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org def BeginRecommendedPolicyGroup(self, group): 1760bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org category_name = group['name'] + '_Category' 1770bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self._AddGuiString(category_name, group['caption']) 1780bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.recommended_policies.AddLine('CATEGORY !!' + category_name, 1) 17901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1800bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org def EndRecommendedPolicyGroup(self): 1810bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.recommended_policies.AddLine('END CATEGORY', -1) 1820bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.recommended_policies.AddLine('') 1830bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org 1840bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org def _CreateTemplate(self, category_path, key_name, policies): 18501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org '''Creates the whole ADM template except for the [Strings] section, and 18601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org returns it as an |IndentedStringBuilder|. 18701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 18801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org Args: 1890bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org category_path: List of strings representing the category path. 1900bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org key_name: Main registry key backing the policies. 19101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org policies: ADM code for all the policies in an |IndentedStringBuilder|. 19201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' 19301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org lines = IndentedStringBuilder() 1940bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org for part in category_path: 1950bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org lines.AddLine('CATEGORY !!' + part, 1) 1960bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org lines.AddLine('KEYNAME "%s"' % key_name) 19701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org lines.AddLine() 19801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 19901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org lines.AddLines(policies) 20001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2010bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org for part in category_path: 20201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org lines.AddLine('END CATEGORY', -1) 2030bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org lines.AddLine() 20401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 20501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return lines 20601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 20701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def BeginTemplate(self): 20801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self._AddGuiString(self.config['win_supported_os'], 20901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.messages['win_supported_winxpsp2']['text']) 2100bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org category_path = self.config['win_mandatory_category_path'] 2110bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org recommended_category_path = self.config['win_recommended_category_path'] 2129cb4f8962b26d916b6e7813858f3644d1fcd29c9joaodasilva@chromium.org recommended_name = '%s - %s' % \ 2130bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org (self.config['app_name'], self.messages['doc_recommended']['text']) 21401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if self.config['build'] == 'chrome': 21501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self._AddGuiString(category_path[0], 'Google') 21601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self._AddGuiString(category_path[1], self.config['app_name']) 2170bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self._AddGuiString(recommended_category_path[1], recommended_name) 21801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org elif self.config['build'] == 'chromium': 21901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self._AddGuiString(category_path[0], self.config['app_name']) 2200bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self._AddGuiString(recommended_category_path[0], recommended_name) 22101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # All the policies will be written into self.policies. 22201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # The final template text will be assembled into self.lines by 22301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # self.EndTemplate(). 22401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 22501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def EndTemplate(self): 22601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # Copy policies into self.lines. 22701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org policy_class = self.config['win_group_policy_class'].upper() 2280bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org for class_name in ['MACHINE', 'USER']: 2290bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org if policy_class != 'BOTH' and policy_class != class_name: 2300bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org continue 2310bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.lines.AddLine('CLASS ' + class_name, 1) 2320bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.lines.AddLines(self._CreateTemplate( 2330bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.config['win_mandatory_category_path'], 2340bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.config['win_reg_mandatory_key_name'], 2350bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.policies)) 2360bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.lines.AddLines(self._CreateTemplate( 2370bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.config['win_recommended_category_path'], 2380bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.config['win_reg_recommended_key_name'], 2390bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.recommended_policies)) 2400bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.lines.AddLine('', -1) 24101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # Copy user strings into self.lines. 24201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.lines.AddLine('[Strings]') 24301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.lines.AddLines(self.strings) 24401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 24501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def Init(self): 24601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # String buffer for building the whole ADM file. 24701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.lines = IndentedStringBuilder() 24801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # String buffer for building the strings section of the ADM file. 24901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.strings = IndentedStringBuilder() 2500bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org # Map of strings seen, to avoid duplicates. 2510bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.strings_seen = {} 25201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # String buffer for building the policies of the ADM file. 25301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.policies = IndentedStringBuilder() 2540bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org # String buffer for building the recommended policies of the ADM file. 2550bb959423818266efea82162f48ad83e5eb2e8b2joaodasilva@chromium.org self.recommended_policies = IndentedStringBuilder() 25601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 25701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def GetTemplateText(self): 25801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return self.lines.ToString() 259