Index: grit/format/policy_templates/writers/ios_plist_writer.py |
=================================================================== |
--- grit/format/policy_templates/writers/ios_plist_writer.py (revision 202) |
+++ grit/format/policy_templates/writers/ios_plist_writer.py (working copy) |
@@ -1,125 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright (c) 2014 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. |
- |
- |
-import base64 |
- |
-from xml.dom import minidom |
-from grit.format.policy_templates.writers import plist_writer |
- |
- |
-# This writer outputs a Property List with an example for each of the policies |
-# supported on iOS. This plist can be pushed to Chrome on iOS via the MDM API |
-# introduced in iOS 7. |
- |
-CHROME_POLICY_COMMENT = '''\ |
- ChromePolicy is the preferred key to configure Chrome. |
- Each of the keys in this <dict> configures a Chrome policy. |
- All of the Chrome policies are configured with an example |
- value below. |
- Note that it's not necessary to configure all of them. ''' |
- |
-ENCODED_CHROME_POLICY_COMMENT = '''\ |
- EncodedChromePolicy contains a Property List file, encoded in Base64, |
- which contains the same policies that can go in ChromePolicy. |
- This key can be used by vendors that restrict the app configuration |
- types to strings. |
- The value of this string can be validated by running these |
- commands in Mac OS X: |
- |
- # (first, copy-paste the string into a file named "policy.plist") |
- # base64 -D < policy.plist > decoded_policy.plist |
- # plutil -lint decoded_policy.plist |
- |
- plutil should indicate that decoded_policy.plist is valid, |
- otherwise Chrome will reject the encoded string too. |
- |
- This command can be used to pretty-print the plist file: |
- |
- # plutil -convert xml1 decoded_policy.plist |
- |
- Note that <ChromePolicy> is the preferred key to configure Chrome. |
- If <ChromePolicy> is present then <EncodedChromePolicy> is ignored. ''' |
- |
-def GetWriter(config): |
- '''Factory method for creating IOSPlistWriter objects. |
- See the constructor of TemplateWriter for description of |
- arguments. |
- ''' |
- return IOSPlistWriter(['ios'], config) |
- |
- |
-class IOSPlistWriter(plist_writer.PListWriter): |
- '''Class for generating policy templates in the iOS plist format. |
- It is used by PolicyTemplateGenerator to write plist files. |
- ''' |
- |
- # Overridden. |
- def IsPolicySupported(self, policy): |
- # Output examples only for policies that are supported on iOS. |
- for support_on in policy['supported_on']: |
- if ('ios' in support_on['platforms'] and |
- support_on['until_version'] == '' and |
- super(IOSPlistWriter, self).IsPolicySupported(policy)): |
- return True |
- return False |
- |
- def _WriteValue(self, parent, value): |
- if type(value) == bool: |
- self.AddElement(parent, 'true' if value else 'false') |
- elif type(value) == int: |
- self.AddElement(parent, 'integer', {}, str(value)) |
- elif type(value) == str: |
- self.AddElement(parent, 'string', {}, value) |
- elif type(value) == list: |
- array = self.AddElement(parent, 'array') |
- for element in value: |
- self._WriteValue(array, element) |
- elif type(value) == dict: |
- dic = self.AddElement(parent, 'dict') |
- for k, v in sorted(value.iteritems()): |
- self.AddElement(dic, 'key', {}, k) |
- self._WriteValue(dic, v) |
- else: |
- raise ValueError('Unsupported type in example value: ' + type(value)) |
- |
- # Overridden. |
- def WritePolicy(self, policy): |
- for dict in [self._dict, self._encoded_dict]: |
- self.AddElement(dict, 'key', {}, policy['name']) |
- self._WriteValue(dict, policy['example_value']) |
- |
- # Overridden. |
- # |self._plist| is created in super.Init(). |
- def BeginTemplate(self): |
- self._plist.attributes['version'] = '1.0' |
- self._root_dict = self.AddElement(self._plist, 'dict') |
- self.AddComment(self._root_dict, CHROME_POLICY_COMMENT) |
- if self._GetChromiumVersionString() is not None: |
- self.AddComment(self._root_dict, ' ' + self.config['build'] + \ |
- ' version: ' + self._GetChromiumVersionString() + ' ') |
- self._dict = self._AddKeyValuePair(self._root_dict, 'ChromePolicy', 'dict') |
- |
- self._encoded_plist.attributes['version'] = '1.0' |
- self._encoded_dict = self.AddElement(self._encoded_plist, 'dict') |
- |
- # Overridden. |
- def EndTemplate(self): |
- # Add the "EncodedChromePolicy" entry. |
- encoded = base64.b64encode(self._encoded_doc.toxml()) |
- self.AddComment(self._root_dict, ENCODED_CHROME_POLICY_COMMENT) |
- self._AddStringKeyValuePair(self._root_dict, 'EncodedChromePolicy', encoded) |
- |
- # Overridden. |
- def Init(self): |
- super(IOSPlistWriter, self).Init() |
- # Create a secondary DOM for the EncodedChromePolicy Plist, which will be |
- # serialized and encoded in EndTemplate. |
- self._encoded_doc = self.CreatePlistDocument() |
- self._encoded_plist = self._encoded_doc.documentElement |
- |
- # Overridden. |
- def GetTemplateText(self): |
- return self.ToPrettyXml(self._doc, encoding='UTF-8') |