summaryrefslogtreecommitdiffstats
path: root/chromium/components/policy/tools/template_writers/writers/gpo_editor_writer.py
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/policy/tools/template_writers/writers/gpo_editor_writer.py')
-rwxr-xr-xchromium/components/policy/tools/template_writers/writers/gpo_editor_writer.py128
1 files changed, 128 insertions, 0 deletions
diff --git a/chromium/components/policy/tools/template_writers/writers/gpo_editor_writer.py b/chromium/components/policy/tools/template_writers/writers/gpo_editor_writer.py
new file mode 100755
index 00000000000..ff36b98df5d
--- /dev/null
+++ b/chromium/components/policy/tools/template_writers/writers/gpo_editor_writer.py
@@ -0,0 +1,128 @@
+#!/usr/bin/env python3
+# Copyright (c) 2018 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 writers import template_writer
+
+
+class GpoEditorWriter(template_writer.TemplateWriter):
+ '''Abstract class for ADM and ADMX writers.
+
+ It includes deprecated policies in its output, and places them in a dedicated
+ 'DeprecatedPolicies' group. Every deprecated policy has the same description.
+
+ It is a superclass for AdmWriter and AdmxWriter.
+ '''
+
+ def IsDeprecatedPolicySupported(self, policy):
+ # Include deprecated policies in the output.
+ return True
+
+ def IsVersionSupported(self, policy, supported_on):
+ # Include deprecated policies in the 'DeprecatedPolicies' group, even if
+ # they aren't supported anymore.
+ major_version = self._GetChromiumMajorVersion()
+ if not major_version:
+ return True
+
+ since_version = supported_on.get('since_version', None)
+
+ return not since_version or major_version >= int(since_version)
+
+ def IsPolicyOnWin7Only(self, policy):
+ ''' Returns true if the policy is supported on win7 only.'''
+ for suppported_on in policy.get('supported_on', []):
+ if 'win7' == suppported_on.get('platform', []):
+ return True
+ return False
+
+ def _IsRemovedPolicy(self, policy):
+ major_version = self._GetChromiumMajorVersion()
+ for supported_on in policy.get('supported_on', []):
+ if '*' in self.platforms or supported_on['platform'] in self.platforms:
+ until_version = supported_on.get('until_version', None)
+ if not until_version or major_version <= int(until_version):
+ # The policy is still supported, return False.
+ return False
+ # No platform+version combo supports this version, return True.
+ return True
+
+ def _FilterPolicies(self, predicate, policy_list):
+ filtered_policies = []
+ for policy in policy_list:
+ if policy['type'] == 'group':
+ for p in policy['policies']:
+ if predicate(p):
+ filtered_policies.append(p)
+ else:
+ if predicate(policy):
+ filtered_policies.append(policy)
+ return filtered_policies
+
+ def _RemovePoliciesFromList(self, policy_list, policies_to_remove):
+ '''Remove policies_to_remove from groups and the top-level list.'''
+ # We only compare the 'name' property.
+ policies_to_remove = set([p['name'] for p in policies_to_remove])
+
+ # Remove from top-level list.
+ policy_list[:] = [
+ p for p in policy_list if p['name'] not in policies_to_remove
+ ]
+
+ # Remove from groups.
+ for group in policy_list:
+ if group['type'] != 'group':
+ continue
+ group['policies'] = [
+ p for p in group['policies'] if p['name'] not in policies_to_remove
+ ]
+
+ # Remove empty groups.
+ policy_list[:] = [
+ p for p in policy_list if p['type'] != 'group' or p['policies']
+ ]
+
+ def _MovePolicyGroup(self, policy_list, predicate, policy_desc, group):
+ '''Remove policies from |policy_list| that satisfy |predicate| and add them
+ to |group|.'''
+ filtered_policies = self._FilterPolicies(predicate, policy_list)
+ self._RemovePoliciesFromList(policy_list, filtered_policies)
+
+ for p in filtered_policies:
+ p['desc'] = policy_desc
+
+ group['policies'] = filtered_policies
+
+ def PreprocessPolicies(self, policy_list):
+ '''Put policies under the DeprecatedPolicies/RemovedPolicies groups.'''
+ removed_policies_group = {
+ 'name': 'RemovedPolicies',
+ 'type': 'group',
+ 'caption': self.messages['removed_policy_group_caption']['text'],
+ 'desc': self.messages['removed_policy_group_desc']['text'],
+ 'policies': []
+ }
+ self._MovePolicyGroup(
+ policy_list,
+ lambda p: self._IsRemovedPolicy(p),
+ self.messages['removed_policy_desc']['text'],
+ removed_policies_group)
+
+ deprecated_policies_group = {
+ 'name': 'DeprecatedPolicies',
+ 'type': 'group',
+ 'caption': self.messages['deprecated_policy_group_caption']['text'],
+ 'desc': self.messages['deprecated_policy_group_desc']['text'],
+ 'policies': []
+ }
+ self._MovePolicyGroup(
+ policy_list,
+ lambda p: p.get('deprecated', False),
+ self.messages['deprecated_policy_desc']['text'],
+ deprecated_policies_group)
+
+ policy_list.append(deprecated_policies_group)
+ policy_list.append(removed_policies_group)
+
+ return super(GpoEditorWriter, self).SortPoliciesGroupsFirst(policy_list)