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

Side by Side Diff: third_party/WebKit/Source/bindings/scripts/v8_interface.py

Issue 2130883002: [OriginTrials] Allow origin trials to be installed without an instance object. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 5 months 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 unified diff | Download patch
OLDNEW
1 # Copyright (C) 2013 Google Inc. All rights reserved. 1 # Copyright (C) 2013 Google Inc. All rights reserved.
2 # coding=utf-8 2 # coding=utf-8
3 # 3 #
4 # Redistribution and use in source and binary forms, with or without 4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are 5 # modification, are permitted provided that the following conditions are
6 # met: 6 # met:
7 # 7 #
8 # * Redistributions of source code must retain the above copyright 8 # * Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer. 9 # notice, this list of conditions and the following disclaimer.
10 # * Redistributions in binary form must reproduce the above 10 # * Redistributions in binary form must reproduce the above
(...skipping 18 matching lines...) Expand all
29 29
30 # pylint: disable=relative-import 30 # pylint: disable=relative-import
31 31
32 """Generate template values for an interface. 32 """Generate template values for an interface.
33 33
34 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler 34 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
35 """ 35 """
36 36
37 from collections import defaultdict 37 from collections import defaultdict
38 import itertools 38 import itertools
39 from operator import itemgetter 39 from operator import itemgetter, or_
40 40
41 from idl_definitions import IdlOperation, IdlArgument 41 from idl_definitions import IdlOperation, IdlArgument
42 from idl_types import IdlType, inherits_interface 42 from idl_types import IdlType, inherits_interface
43 import v8_attributes 43 import v8_attributes
44 from v8_globals import includes 44 from v8_globals import includes
45 import v8_methods 45 import v8_methods
46 import v8_types 46 import v8_types
47 import v8_utilities 47 import v8_utilities
48 from v8_utilities import (cpp_name_or_partial, cpp_name, has_extended_attribute_ value, 48 from v8_utilities import (cpp_name_or_partial, cpp_name, has_extended_attribute_ value,
49 runtime_enabled_function_name, is_legacy_interface_typ e_checking) 49 runtime_enabled_function_name, is_legacy_interface_typ e_checking)
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 constant['origin_trial_feature_name']] 91 constant['origin_trial_feature_name']]
92 92
93 93
94 def constant_filters(): 94 def constant_filters():
95 return {'has_constant_configuration': filter_has_constant_configuration, 95 return {'has_constant_configuration': filter_has_constant_configuration,
96 'has_special_getter': filter_has_special_getter, 96 'has_special_getter': filter_has_special_getter,
97 'runtime_enabled_constants': filter_runtime_enabled, 97 'runtime_enabled_constants': filter_runtime_enabled,
98 'origin_trial_enabled_constants': filter_origin_trial_enabled} 98 'origin_trial_enabled_constants': filter_origin_trial_enabled}
99 99
100 100
101 def origin_trial_feature_names(interface, constants, attributes, methods): 101 def origin_trial_features(interface, constants, attributes, methods):
102 """ Returns a list of the names of each origin trial feature used in this in terface. 102 """ Returns a list of the origin trial features used in this interface.
103 103
104 This list is the union of the sets of names used for constants, attributes a nd methods. 104 Each element is a dictionary with keys 'name' and 'needs_instance'.
105 'needs_instance' is true if any member associated with the interface needs
106 to be installed on every instance of the interface. This list is the union
107 of the sets of features used for constants, attributes and methods.
105 """ 108 """
106 109
107 feature_names = set( 110 # Collect all members visible on this interface with a defined origin trial
108 [constant['origin_trial_feature_name'] for constant in constants if cons tant['origin_trial_feature_name']] + 111 origin_trial_members = (
109 [attribute['origin_trial_feature_name'] for attribute in attributes if a ttribute['origin_trial_feature_name']] + 112 [constant for constant in constants if constant['origin_trial_feature_na me']] +
110 [method['origin_trial_feature_name'] for method in methods if ( 113 [attribute for attribute in attributes if attribute['origin_trial_featur e_name']] +
114 [method for method in methods if (
111 v8_methods.method_is_visible(method, interface.is_partial) and 115 v8_methods.method_is_visible(method, interface.is_partial) and
112 method['origin_trial_feature_name'])] 116 method['origin_trial_feature_name'])]
113 ) 117 )
114 if feature_names: 118 # Group members by origin_trial_feature_name
119 members_by_name = itertools.groupby(origin_trial_members, itemgetter('origin _trial_feature_name'))
Marijn Kruisselbrink 2016/07/08 19:44:09 itertools.groupby requires the passed in iterable
120 # Construct the list of dictionaries. 'needs_instance' will be true if any
121 # member for the feature has 'on_instance' defined as true.
122 features = [{'name': name,
123 'needs_instance': reduce(or_, (member.get('on_instance', False)
124 for member in members))}
125 for name, members in members_by_name]
126 if features:
115 includes.add('bindings/core/v8/ScriptState.h') 127 includes.add('bindings/core/v8/ScriptState.h')
116 includes.add('core/origin_trials/OriginTrials.h') 128 includes.add('core/origin_trials/OriginTrials.h')
117 return sorted(feature_names) 129 return sorted(features)
118 130
119 131
120 def interface_context(interface): 132 def interface_context(interface):
121 includes.clear() 133 includes.clear()
122 includes.update(INTERFACE_CPP_INCLUDES) 134 includes.update(INTERFACE_CPP_INCLUDES)
123 header_includes = set(INTERFACE_H_INCLUDES) 135 header_includes = set(INTERFACE_H_INCLUDES)
124 136
125 if interface.is_partial: 137 if interface.is_partial:
126 # A partial interface definition cannot specify that the interface 138 # A partial interface definition cannot specify that the interface
127 # inherits from another interface. Inheritance must be specified on 139 # inherits from another interface. Inheritance must be specified on
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 'named_property_getter': property_getter(interface.named_property_getter , ['propertyName']), 575 'named_property_getter': property_getter(interface.named_property_getter , ['propertyName']),
564 'named_property_setter': property_setter(interface.named_property_setter , interface), 576 'named_property_setter': property_setter(interface.named_property_setter , interface),
565 'named_property_deleter': property_deleter(interface.named_property_dele ter), 577 'named_property_deleter': property_deleter(interface.named_property_dele ter),
566 }) 578 })
567 context.update({ 579 context.update({
568 'has_named_properties_object': is_global and context['named_property_get ter'], 580 'has_named_properties_object': is_global and context['named_property_get ter'],
569 }) 581 })
570 582
571 # Origin Trials 583 # Origin Trials
572 context.update({ 584 context.update({
573 'origin_trial_feature_names': origin_trial_feature_names(interface, cont ext['constants'], context['attributes'], context['methods']), 585 'origin_trial_features': origin_trial_features(interface, context['const ants'], context['attributes'], context['methods']),
574 }) 586 })
575 return context 587 return context
576 588
577 589
578 # [DeprecateAs], [OriginTrialEnabled], [Reflect], [RuntimeEnabled] 590 # [DeprecateAs], [OriginTrialEnabled], [Reflect], [RuntimeEnabled]
579 def constant_context(constant, interface): 591 def constant_context(constant, interface):
580 extended_attributes = constant.extended_attributes 592 extended_attributes = constant.extended_attributes
581 593
582 return { 594 return {
583 'cpp_class': extended_attributes.get('PartialInterfaceImplementedAs'), 595 'cpp_class': extended_attributes.get('PartialInterfaceImplementedAs'),
(...skipping 788 matching lines...) Expand 10 before | Expand all | Expand 10 after
1372 extended_attributes = deleter.extended_attributes 1384 extended_attributes = deleter.extended_attributes
1373 is_call_with_script_state = v8_utilities.has_extended_attribute_value(delete r, 'CallWith', 'ScriptState') 1385 is_call_with_script_state = v8_utilities.has_extended_attribute_value(delete r, 'CallWith', 'ScriptState')
1374 is_ce_reactions = 'CEReactions' in extended_attributes 1386 is_ce_reactions = 'CEReactions' in extended_attributes
1375 return { 1387 return {
1376 'is_call_with_script_state': is_call_with_script_state, 1388 'is_call_with_script_state': is_call_with_script_state,
1377 'is_ce_reactions': is_ce_reactions, 1389 'is_ce_reactions': is_ce_reactions,
1378 'is_custom': 'Custom' in extended_attributes, 1390 'is_custom': 'Custom' in extended_attributes,
1379 'is_raises_exception': 'RaisesException' in extended_attributes, 1391 'is_raises_exception': 'RaisesException' in extended_attributes,
1380 'name': cpp_name(deleter), 1392 'name': cpp_name(deleter),
1381 } 1393 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698