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

Unified Diff: third_party/WebKit/Source/bindings/scripts/interface_dependency_resolver.py

Issue 1884423002: IDL bindings: Avoid extended attributes leaking onto merged interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update documentation. Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/bindings/tests/idls/modules/TestInterface2Partial.idl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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():
« no previous file with comments | « no previous file | third_party/WebKit/Source/bindings/tests/idls/modules/TestInterface2Partial.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698