OLD | NEW |
1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 ''' | 5 ''' |
6 Provides a Manifest Feature abstraction, similar to but more strict than the | 6 Provides a Manifest Feature abstraction, similar to but more strict than the |
7 Feature schema (see feature_utility.py). | 7 Feature schema (see feature_utility.py). |
8 | 8 |
9 Each Manifest Feature has a 'level' in addition to the keys defined in a | 9 Each Manifest Feature has a 'level' in addition to the keys defined in a |
10 Feature. 'level' can be 'required', 'only_one', 'recommended', or 'optional', | 10 Feature. 'level' can be 'required', 'only_one', 'recommended', or 'optional', |
11 indicating how an app or extension should define a manifest property. If 'level' | 11 indicating how an app or extension should define a manifest property. If 'level' |
12 is missing, 'optional' is assumed. | 12 is missing, 'optional' is assumed. |
13 ''' | 13 ''' |
14 | 14 |
15 import features_utility | |
16 | |
17 def CreateManifestFeatures(features_json, manifest_json, filter_platform=None): | |
18 '''Create a manifest features dictionary by normalizing |features_json| and | |
19 merging it with |manifest_json|. If filter_platform is 'app' or 'extension' | |
20 then irrelevant features will be removed. | |
21 ''' | |
22 assert filter_platform in ['app', 'extension', None] | |
23 manifest_features = features_utility.MergedWith( | |
24 features_utility.Parse(features_json), manifest_json) | |
25 | |
26 if filter_platform: | |
27 manifest_features = features_utility.Filtered( | |
28 manifest_features, filter_platform) | |
29 | |
30 return manifest_features | |
31 | |
32 | |
33 def ConvertDottedKeysToNested(features): | 15 def ConvertDottedKeysToNested(features): |
34 '''Some Manifest Features are subordinate to others, such as app.background to | 16 '''Some Manifest Features are subordinate to others, such as app.background to |
35 app. Subordinate Features can be moved inside the parent Feature under the key | 17 app. Subordinate Features can be moved inside the parent Feature under the key |
36 'children'. | 18 'children'. |
37 | 19 |
38 Modifies |features|, a Manifest Features dictionary, by moving subordinate | 20 Modifies |features|, a Manifest Features dictionary, by moving subordinate |
39 Features with names of the form 'parent.child' into the 'parent' Feature. | 21 Features with names of the form 'parent.child' into the 'parent' Feature. |
40 Child features are renamed to the 'child' section of their previous name. | 22 Child features are renamed to the 'child' section of their previous name. |
41 | 23 |
42 Applied recursively so that children can be nested arbitrarily. | 24 Applied recursively so that children can be nested arbitrarily. |
(...skipping 10 matching lines...) Expand all Loading... |
53 value = features.pop(name) | 35 value = features.pop(name) |
54 parent, child_name = name.split('.', 1) | 36 parent, child_name = name.split('.', 1) |
55 add_child(features, parent, child_name, value) | 37 add_child(features, parent, child_name, value) |
56 | 38 |
57 for value in features.values(): | 39 for value in features.values(): |
58 if 'children' in value: | 40 if 'children' in value: |
59 insert_children(value['children']) | 41 insert_children(value['children']) |
60 | 42 |
61 insert_children(features) | 43 insert_children(features) |
62 return features | 44 return features |
OLD | NEW |