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

Unified Diff: tools/grit/grit/format/policy_templates/writers/adml_writer.py

Issue 1410853008: Move grit from DEPS into src. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: webview licenses Created 5 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
Index: tools/grit/grit/format/policy_templates/writers/adml_writer.py
diff --git a/tools/grit/grit/format/policy_templates/writers/adml_writer.py b/tools/grit/grit/format/policy_templates/writers/adml_writer.py
new file mode 100755
index 0000000000000000000000000000000000000000..64f8562ce362c94ce4d6d2e72d4bcdad2560ec61
--- /dev/null
+++ b/tools/grit/grit/format/policy_templates/writers/adml_writer.py
@@ -0,0 +1,186 @@
+#!/usr/bin/env python
+# Copyright (c) 2012 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.
+
+from xml.dom import minidom
+from grit.format.policy_templates.writers import xml_formatted_writer
+
+
+def GetWriter(config):
+ '''Factory method for instanciating the ADMLWriter. Every Writer needs a
+ GetWriter method because the TemplateFormatter uses this method to
+ instantiate a Writer.
+ '''
+ return ADMLWriter(['win'], config)
+
+
+class ADMLWriter(xml_formatted_writer.XMLFormattedWriter):
+ ''' Class for generating an ADML policy template. It is used by the
+ PolicyTemplateGenerator to write the ADML file.
+ '''
+
+ # DOM root node of the generated ADML document.
+ _doc = None
+
+ # The string-table contains all ADML "string" elements.
+ _string_table_elem = None
+
+ # The presentation-table is the container for presentation elements, that
+ # describe the presentation of Policy-Groups and Policies.
+ _presentation_table_elem = None
+
+ def _AddString(self, id, text):
+ ''' Adds an ADML "string" element to _string_table_elem. The following
+ ADML snippet contains an example:
+
+ <string id="$(id)">$(text)</string>
+
+ Args:
+ id: ID of the newly created "string" element.
+ text: Value of the newly created "string" element.
+ '''
+ id = id.replace('.', '_')
+ if id in self.strings_seen:
+ assert text == self.strings_seen[id]
+ else:
+ self.strings_seen[id] = text
+ string_elem = self.AddElement(
+ self._string_table_elem, 'string', {'id': id})
+ string_elem.appendChild(self._doc.createTextNode(text))
+
+ def WritePolicy(self, policy):
+ '''Generates the ADML elements for a Policy.
+ <stringTable>
+ ...
+ <string id="$(policy_group_name)">$(caption)</string>
+ <string id="$(policy_group_name)_Explain">$(description)</string>
+ </stringTable>
+
+ <presentationTables>
+ ...
+ <presentation id=$(policy_group_name)/>
+ </presentationTables>
+
+ Args:
+ policy: The Policy to generate ADML elements for.
+ '''
+ policy_type = policy['type']
+ policy_name = policy['name']
+ if 'caption' in policy:
+ policy_caption = policy['caption']
+ else:
+ policy_caption = policy_name
+ if 'desc' in policy:
+ policy_description = policy['desc']
+ else:
+ policy_description = policy_name
+ if 'label' in policy:
+ policy_label = policy['label']
+ else:
+ policy_label = policy_name
+
+ self._AddString(policy_name, policy_caption)
+ self._AddString(policy_name + '_Explain', policy_description)
+ presentation_elem = self.AddElement(
+ self._presentation_table_elem, 'presentation', {'id': policy_name})
+
+ if policy_type == 'main':
+ pass
+ elif policy_type in ('string', 'dict'):
+ # 'dict' policies are configured as JSON-encoded strings on Windows.
+ textbox_elem = self.AddElement(presentation_elem, 'textBox',
+ {'refId': policy_name})
+ label_elem = self.AddElement(textbox_elem, 'label')
+ label_elem.appendChild(self._doc.createTextNode(policy_label))
+ elif policy_type == 'int':
+ textbox_elem = self.AddElement(presentation_elem, 'decimalTextBox',
+ {'refId': policy_name})
+ textbox_elem.appendChild(self._doc.createTextNode(policy_label + ':'))
+ elif policy_type in ('int-enum', 'string-enum'):
+ for item in policy['items']:
+ self._AddString(item['name'], item['caption'])
+ dropdownlist_elem = self.AddElement(presentation_elem, 'dropdownList',
+ {'refId': policy_name})
+ dropdownlist_elem.appendChild(self._doc.createTextNode(policy_label))
+ elif policy_type in ('list', 'string-enum-list'):
+ self._AddString(policy_name + 'Desc', policy_caption)
+ listbox_elem = self.AddElement(presentation_elem, 'listBox',
+ {'refId': policy_name + 'Desc'})
+ listbox_elem.appendChild(self._doc.createTextNode(policy_label))
+ elif policy_type == 'group':
+ pass
+ elif policy_type == 'external':
+ # This type can only be set through cloud policy.
+ pass
+ else:
+ raise Exception('Unknown policy type %s.' % policy_type)
+
+ def BeginPolicyGroup(self, group):
+ '''Generates ADML elements for a Policy-Group. For each Policy-Group two
+ ADML "string" elements are added to the string-table. One contains the
+ caption of the Policy-Group and the other a description. A Policy-Group also
+ requires an ADML "presentation" element that must be added to the
+ presentation-table. The "presentation" element is the container for the
+ elements that define the visual presentation of the Policy-Goup's Policies.
+ The following ADML snippet shows an example:
+
+ Args:
+ group: The Policy-Group to generate ADML elements for.
+ '''
+ # Add ADML "string" elements to the string-table that are required by a
+ # Policy-Group.
+ self._AddString(group['name'] + '_group', group['caption'])
+
+ def _AddBaseStrings(self, build):
+ ''' Adds ADML "string" elements to the string-table that are referenced by
+ the ADMX file but not related to any specific Policy-Group or Policy.
+ '''
+ self._AddString(self.config['win_supported_os'],
+ self.messages['win_supported_winxpsp2']['text'])
+ recommended_name = '%s - %s' % \
+ (self.config['app_name'], self.messages['doc_recommended']['text'])
+ if build == 'chrome':
+ self._AddString(self.config['win_mandatory_category_path'][0],
+ 'Google')
+ self._AddString(self.config['win_mandatory_category_path'][1],
+ self.config['app_name'])
+ self._AddString(self.config['win_recommended_category_path'][1],
+ recommended_name)
+ elif build == 'chromium':
+ self._AddString(self.config['win_mandatory_category_path'][0],
+ self.config['app_name'])
+ self._AddString(self.config['win_recommended_category_path'][0],
+ recommended_name)
+
+ def BeginTemplate(self):
+ dom_impl = minidom.getDOMImplementation('')
+ self._doc = dom_impl.createDocument(None, 'policyDefinitionResources',
+ None)
+ if self._GetChromiumVersionString() is not None:
+ self.AddComment(self._doc.documentElement, self.config['build'] + \
+ ' version: ' + self._GetChromiumVersionString())
+ policy_definitions_resources_elem = self._doc.documentElement
+ policy_definitions_resources_elem.attributes['revision'] = '1.0'
+ policy_definitions_resources_elem.attributes['schemaVersion'] = '1.0'
+
+ self.AddElement(policy_definitions_resources_elem, 'displayName')
+ self.AddElement(policy_definitions_resources_elem, 'description')
+ resources_elem = self.AddElement(policy_definitions_resources_elem,
+ 'resources')
+ self._string_table_elem = self.AddElement(resources_elem, 'stringTable')
+ self._AddBaseStrings(self.config['build'])
+ self._presentation_table_elem = self.AddElement(resources_elem,
+ 'presentationTable')
+
+ def Init(self):
+ # Map of all strings seen.
+ self.strings_seen = {}
+
+ def GetTemplateText(self):
+ # Using "toprettyxml()" confuses the Windows Group Policy Editor
+ # (gpedit.msc) because it interprets whitespace characters in text between
+ # the "string" tags. This prevents gpedit.msc from displaying the category
+ # names correctly.
+ # TODO(markusheintz): Find a better formatting that works with gpedit.
+ return self._doc.toxml()

Powered by Google App Engine
This is Rietveld 408576698