Chromium Code Reviews| Index: third_party/WebKit/Source/bindings/scripts/interface_dependency_resolver.py |
| diff --git a/third_party/WebKit/Source/bindings/scripts/interface_dependency_resolver.py b/third_party/WebKit/Source/bindings/scripts/interface_dependency_resolver.py |
| index 2fa6409d7420b52f6b84d695c97d1e0ce0b79370..f58bee3bda4bdd72f73f679f2010fd1330dc05e1 100644 |
| --- a/third_party/WebKit/Source/bindings/scripts/interface_dependency_resolver.py |
| +++ b/third_party/WebKit/Source/bindings/scripts/interface_dependency_resolver.py |
| @@ -253,17 +253,26 @@ def transfer_extended_attributes(dependency_interface, dependency_interface_base |
| interface post-merging). |
| The data storing consists of: |
| - * applying certain extended attributes from the dependency interface |
| - to its members |
| + * moving certain extended attributes from the dependency interface |
| + to its members (deleting the extended attribute from the interface) |
| * storing the C++ class of the implementation in an internal |
| extended attribute of each member, [PartialInterfaceImplementedAs] |
| No return: modifies dependency_interface in place. |
| """ |
| - merged_extended_attributes = dict( |
| - (key, value) |
| - for key, value in dependency_interface.extended_attributes.iteritems() |
| - if key in DEPENDENCY_EXTENDED_ATTRIBUTES) |
| + merged_extended_attributes = {} |
| + for key in DEPENDENCY_EXTENDED_ATTRIBUTES: |
| + try: |
| + value = dependency_interface.extended_attributes[key] |
|
bashi
2016/04/15 05:50:54
value = dependency_interface.extended_attributes.g
Matt Giuca
2016/04/15 06:21:43
Done. (Though I think the exception checking style
|
| + except KeyError: |
| + continue |
| + |
| + merged_extended_attributes[key] = value |
| + # Remove the merged attributes from the original dependency interface. |
| + # This ensures that if other dependency interfaces are merged onto this |
| + # one, its extended_attributes do not leak through |
| + # (https://crbug.com/603782). |
| + del dependency_interface.extended_attributes[key] |
| # A partial interface's members are implemented as static member functions |
| # in a separate C++ class. This class name is stored in |
| @@ -293,6 +302,10 @@ def transfer_extended_attributes(dependency_interface, dependency_interface_base |
| merged_extended_attributes['PartialInterfaceImplementedAs'] = ( |
| dependency_interface.extended_attributes.get( |
| 'ImplementedAs', dependency_interface_basename)) |
| + try: |
|
bashi
2016/04/15 05:50:54
if 'ImplementedAs' in dependency_interface.extende
Matt Giuca
2016/04/15 06:21:43
That way involves looking up the value in the dict
|
| + del dependency_interface.extended_attributes['ImplementedAs'] |
| + except KeyError: |
| + pass |
| def update_attributes(attributes, extras): |
| for key, value in extras.items(): |