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

Unified Diff: tools/dom/scripts/generate_blink_file.py

Issue 2875773003: Roll 50: Updated for push to origin/master. (Closed)
Patch Set: Roll 50: Updated to latest Created 3 years, 7 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
Index: tools/dom/scripts/generate_blink_file.py
diff --git a/tools/dom/scripts/generate_blink_file.py b/tools/dom/scripts/generate_blink_file.py
index 1aba258c70e895b219e80f19bee8525d998cd67d..f7360355ea1d542dc42952b33bbc4938c3c48516 100644
--- a/tools/dom/scripts/generate_blink_file.py
+++ b/tools/dom/scripts/generate_blink_file.py
@@ -59,7 +59,7 @@ _js_custom_members = Set([
'Node.nodeType',
'Node.textContent',
-
+
'HTMLCollection.length',
'HTMLCollection.item',
'Node.lastElementChild',
@@ -87,6 +87,17 @@ _js_custom_members = Set([
# tightly natively wired.
# _js_custom_members = Set([])
+
+# Expose built-in methods support by an instance that is not shown in the IDL.
+_additional_methods = {
+ # Support propertyIsEnumerable (available on all objects only needed by
+ # CSSStyleDeclaration decides if style property is supported (handling
+ # camelcase and inject hyphens between camelcase).
+ # Format of dictionary is 'operation name', arguments, returns value (True or False)
+ 'CSSStyleDeclaration': ('propertyIsEnumerable', 1, True),
+}
+
+
HEADER = """/* Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
* for details. All rights reserved. Use of this source code is governed by a
* BSD-style license that can be found in the LICENSE file.
@@ -320,7 +331,7 @@ OPERATION_0 = [' %s_Callback_0_(mthis)',
' native "Blink_Operation_0_%s_%s";\n\n'
]
-# getter, setter, deleter and propertyQuery code
+# getter, setter, deleter, propertyQuery code, and propertyIsEnumerable
OPERATION_1 = [' $%s_Callback_1_(mthis, __arg_0)',
' => Blink_JsNative_DomException.callMethod(mthis /* %s */, "%s", [__arg_0]);\n\n',
' native "Blink_Operation_1_%s_%s";\n\n'
@@ -440,12 +451,14 @@ def Generate_Blink(output_dir, database, type_registry):
blink_file.write(Select_Stub(CONSTRUCTOR_0, _Is_Native(name, 'constructor')) % rename_constructor(name))
_Process_Attributes(blink_file, interface, interface.attributes)
- _Process_Operations(blink_file, interface, interface.operations)
+ _Process_Operations(blink_file, interface, interface.operations, True)
+
+ _Emit_Extra_Operations(blink_file, name)
secondary_parents = database.TransitiveSecondaryParents(interface, False)
for secondary in secondary_parents:
_Process_Attributes(blink_file, secondary, secondary.attributes)
- _Process_Operations(blink_file, secondary, secondary.operations)
+ _Process_Operations(blink_file, secondary, secondary.operations, False)
blink_file.write(CLASS_DEFINITION_END);
@@ -453,6 +466,12 @@ def Generate_Blink(output_dir, database, type_registry):
blink_file.close()
+def _Emit_Extra_Operations(blink_file, interface_name):
+ if (interface_name in _additional_methods):
+ (name, arg_count, return_value) = _additional_methods[interface_name]
+ exposed_name = ''.join(['__get', '___', name]) if return_value else name
+ blink_file.write(Select_Stub(OPERATION_1, False) % (exposed_name, interface_name, name))
+
def _Emit_Blink_Constructors(blink_file, analyzed_constructors):
(arg_min_count, arg_max_count) = generate_parameter_entries(analyzed_constructors.param_infos)
name = analyzed_constructors.js_name
@@ -485,7 +504,7 @@ def _Process_Attributes(blink_file, interface, attributes):
blink_file.write(Select_Stub(ATTRIBUTE_GETTER, is_native) % (name, interface.id, name))
blink_file.write(Select_Stub(ATTRIBUTE_SETTER, is_native) % (name, interface.id, name))
-def _Process_Operations(blink_file, interface, operations):
+def _Process_Operations(blink_file, interface, operations, primary_interface = False):
analyzeOperations = []
for operation in sorted(operations, ConstantOutputOrder):
@@ -496,15 +515,34 @@ def _Process_Operations(blink_file, interface, operations):
# Handle overloads
analyzeOperations.append(operation)
else:
- _Emit_Blink_Operation(blink_file, interface, analyzeOperations)
+ _Emit_Blink_Operation(blink_file, interface, analyzeOperations, primary_interface)
analyzeOperations = [operation]
if len(analyzeOperations) > 0:
- _Emit_Blink_Operation(blink_file, interface, analyzeOperations)
+ _Emit_Blink_Operation(blink_file, interface, analyzeOperations, primary_interface)
+
+# List of DartName operations to not emit (e.g., For now only WebGL2RenderingContextBase
+# has readPixels in both WebGLRenderingContextBase and WebGL2RenderingContextBase.
+# Furthermore, readPixels has the exact same number of arguments - in Javascript
+# there is no typing so they're the same.
+suppressed_operations = {
+ 'WebGL2RenderingContextBase': [ 'readPixels2', 'texImage2D2' ],
+}
+
+def _Suppress_Secondary_Interface_Operation(interface, analyzed):
+ if interface.id in suppressed_operations:
+ # Should this DartName (name property) be suppressed on this interface?
+ return analyzed.name in suppressed_operations[interface.id]
+ return False
-def _Emit_Blink_Operation(blink_file, interface, analyzeOperations):
+def _Emit_Blink_Operation(blink_file, interface, analyzeOperations, primary_interface):
analyzed = AnalyzeOperation(interface, analyzeOperations)
+
+ if not(primary_interface) and _Suppress_Secondary_Interface_Operation(interface, analyzed):
+ return
+
(arg_min_count, arg_max_count) = generate_parameter_entries(analyzed.param_infos)
name = analyzed.js_name
+
is_native = _Is_Native(interface.id, name)
operation = analyzeOperations[0]

Powered by Google App Engine
This is Rietveld 408576698