| 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 from copy import copy | 5 from copy import copy |
| 6 | 6 |
| 7 from branch_utility import BranchUtility | 7 from branch_utility import BranchUtility |
| 8 from compiled_file_system import SingleFile, Unicode | 8 from compiled_file_system import SingleFile, Unicode |
| 9 from docs_server_utils import StringIdentity | 9 from docs_server_utils import StringIdentity |
| 10 from extensions_paths import API_PATHS, JSON_TEMPLATES | 10 from extensions_paths import API_PATHS, JSON_TEMPLATES |
| 11 from file_system import FileNotFoundError | 11 from file_system import FileNotFoundError |
| 12 from future import Future | 12 from future import Future |
| 13 from path_util import Join | 13 from path_util import Join |
| 14 from platform_util import GetExtensionTypes, PlatformToExtensionType | 14 from platform_util import GetExtensionTypes, PlatformToExtensionType |
| 15 from third_party.json_schema_compiler.json_parse import Parse | 15 from third_party.json_schema_compiler.json_parse import Parse |
| 16 | 16 |
| 17 | 17 |
| 18 _API_FEATURES = '_api_features.json' | 18 _API_FEATURES = '_api_features.json' |
| 19 _MANIFEST_FEATURES = '_manifest_features.json' | 19 _MANIFEST_FEATURES = '_manifest_features.json' |
| 20 _PERMISSION_FEATURES = '_permission_features.json' | 20 _PERMISSION_FEATURES = '_permission_features.json' |
| 21 | 21 |
| 22 | 22 |
| 23 def HasParentFeature(feature_name, feature, all_feature_names): | 23 def HasParent(feature_name, feature, all_feature_names): |
| 24 # A feature has a parent if it has a . in its name, its parent exists, | 24 # A feature has a parent if it has a . in its name, its parent exists, |
| 25 # and it does not explicitly specify that it has no parent. | 25 # and it does not explicitly specify that it has no parent. |
| 26 return ('.' in feature_name and | 26 return ('.' in feature_name and |
| 27 feature_name.rsplit('.', 1)[0] in all_feature_names and | 27 feature_name.rsplit('.', 1)[0] in all_feature_names and |
| 28 not feature.get('noparent')) | 28 not feature.get('noparent')) |
| 29 | 29 |
| 30 | 30 |
| 31 def GetParentFeature(feature_name, feature, all_feature_names): | 31 def GetParentName(feature_name, feature, all_feature_names): |
| 32 '''Returns the name of the parent feature, or None if it does not have a | 32 '''Returns the name of the parent feature, or None if it does not have a |
| 33 parent. | 33 parent. |
| 34 ''' | 34 ''' |
| 35 if not HasParentFeature(feature_name, feature, all_feature_names): | 35 if not HasParent(feature_name, feature, all_feature_names): |
| 36 return None | 36 return None |
| 37 return feature_name.rsplit('.', 1)[0] | 37 return feature_name.rsplit('.', 1)[0] |
| 38 | 38 |
| 39 | 39 |
| 40 def _CreateFeaturesFromJSONFutures(json_futures): | 40 def _CreateFeaturesFromJSONFutures(json_futures): |
| 41 '''Returns a dict of features. The value of each feature is a list with | 41 '''Returns a dict of features. The value of each feature is a list with |
| 42 all of its possible values. | 42 all of its possible values. |
| 43 ''' | 43 ''' |
| 44 def ignore_feature(name, value): | 44 def ignore_feature(name, value): |
| 45 '''Returns true if this feature should be ignored. Features are ignored if | 45 '''Returns true if this feature should be ignored. Features are ignored if |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 inherit_valid_platform = 'extension_types' not in value | 115 inherit_valid_platform = 'extension_types' not in value |
| 116 if inherit_valid_platform: | 116 if inherit_valid_platform: |
| 117 valid_platform = None | 117 valid_platform = None |
| 118 else: | 118 else: |
| 119 valid_platform = (value['extension_types'] == 'all' or | 119 valid_platform = (value['extension_types'] == 'all' or |
| 120 platform in value['extension_types']) | 120 platform in value['extension_types']) |
| 121 inherit_channel = 'channel' not in value | 121 inherit_channel = 'channel' not in value |
| 122 channel = value.get('channel') | 122 channel = value.get('channel') |
| 123 | 123 |
| 124 dependencies = value.get('dependencies', []) | 124 dependencies = value.get('dependencies', []) |
| 125 parent = GetParentFeature( | 125 parent = GetParentName( |
| 126 feature_name, value, features_map[features_type]['all_names']) | 126 feature_name, value, features_map[features_type]['all_names']) |
| 127 if parent is not None: | 127 if parent is not None: |
| 128 # The parent data needs to be resolved so the child can inherit it. | 128 # The parent data needs to be resolved so the child can inherit it. |
| 129 if parent in features_map[features_type].get('unresolved', ()): | 129 if parent in features_map[features_type].get('unresolved', ()): |
| 130 return False, None | 130 return False, None |
| 131 value = _CopyParentFeatureValues( | 131 value = _CopyParentFeatureValues( |
| 132 value, features_map[features_type]['resolved'].get(parent)) | 132 value, features_map[features_type]['resolved'].get(parent)) |
| 133 # Add the parent as a dependency to ensure proper platform filtering. | 133 # Add the parent as a dependency to ensure proper platform filtering. |
| 134 dependencies.append(features_type + ':' + parent) | 134 dependencies.append(features_type + ':' + parent) |
| 135 | 135 |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 cache['resolved'][feature_name] = feature | 361 cache['resolved'][feature_name] = feature |
| 362 | 362 |
| 363 for key in to_remove: | 363 for key in to_remove: |
| 364 del cache['unresolved'][key] | 364 del cache['unresolved'][key] |
| 365 | 365 |
| 366 for cache_type, cache in features_map.iteritems(): | 366 for cache_type, cache in features_map.iteritems(): |
| 367 self._object_store.Set(cache_type, cache['resolved']) | 367 self._object_store.Set(cache_type, cache['resolved']) |
| 368 return features_map[features_type]['resolved'] | 368 return features_map[features_type]['resolved'] |
| 369 | 369 |
| 370 return Future(callback=resolve) | 370 return Future(callback=resolve) |
| OLD | NEW |