1From bf94b834e9beb4e7bc25dbc4c61f5e2db39e7cdc Mon Sep 17 00:00:00 2001 2From: James Hilliard <james.hilliard1@gmail.com> 3Date: Fri, 4 Feb 2022 15:43:35 -0700 4Subject: [PATCH] Add python3 build support 5 6Adapted from: 7https://github.com/archlinux/svntogit-packages/blob/6edf5f1aaea952d046aff89a2e0175258fe77361/trunk/qt5-webengine-chromium-python3.patch 8 9Signed-off-by: James Hilliard <james.hilliard1@gmail.com> 10--- 11 .../protobufs/binary_proto_generator.py | 8 +- 12 .../tracing/generate_trace_viewer_grd.py | 2 +- 13 chromium/mojo/public/tools/bindings/BUILD.gn | 2 + 14 .../tools/bindings/gen_data_files_list.py | 8 +- 15 .../generators/mojom_java_generator.py | 4 + 16 .../tools/mojom/mojom/generate/generator.py | 14 ++-- 17 .../tools/mojom/mojom/generate/module.py | 3 +- 18 .../mojom/mojom/generate/template_expander.py | 12 +-- 19 .../scripts/bind_gen/blink_v8_bridge.py | 6 +- 20 .../scripts/bind_gen/callback_interface.py | 2 +- 21 .../bindings/scripts/bind_gen/code_node.py | 10 +-- 22 .../bindings/scripts/bind_gen/codegen_expr.py | 15 ++-- 23 .../scripts/bind_gen/codegen_format.py | 2 +- 24 .../scripts/bind_gen/codegen_utils.py | 2 +- 25 .../bindings/scripts/bind_gen/dictionary.py | 2 +- 26 .../bindings/scripts/bind_gen/interface.py | 82 +++++++++++-------- 27 .../scripts/bind_gen/mako_renderer.py | 2 +- 28 .../bindings/scripts/bind_gen/style_format.py | 9 +- 29 .../bindings/scripts/bind_gen/task_queue.py | 5 +- 30 .../bindings/scripts/code_generator.py | 10 +++ 31 .../scripts/generate_origin_trial_features.py | 4 +- 32 .../bindings/scripts/idl_definitions.py | 8 +- 33 .../renderer/bindings/scripts/idl_reader.py | 4 +- 34 .../renderer/bindings/scripts/idl_types.py | 2 +- 35 .../renderer/bindings/scripts/utilities.py | 28 +++---- 36 .../renderer/bindings/scripts/v8_interface.py | 9 +- 37 .../renderer/bindings/scripts/v8_methods.py | 4 + 38 .../renderer/bindings/scripts/v8_utilities.py | 2 +- 39 .../scripts/web_idl/callback_interface.py | 12 +-- 40 .../bindings/scripts/web_idl/database.py | 2 +- 41 .../bindings/scripts/web_idl/exposure.py | 5 +- 42 .../bindings/scripts/web_idl/function_like.py | 28 +++---- 43 .../bindings/scripts/web_idl/idl_compiler.py | 21 ++--- 44 .../bindings/scripts/web_idl/interface.py | 45 +++++----- 45 .../bindings/scripts/web_idl/ir_builder.py | 29 ++++--- 46 .../bindings/scripts/web_idl/make_copy.py | 7 ++ 47 .../bindings/scripts/web_idl/namespace.py | 12 +-- 48 .../bindings/templates/dictionary_v8.cc.tmpl | 8 +- 49 .../scripts/core/css/make_style_shorthands.py | 23 +++--- 50 .../properties/make_css_property_instances.py | 4 +- 51 .../blink/renderer/build/scripts/gperf.py | 2 +- 52 .../blink/renderer/build/scripts/in_file.py | 2 +- 53 .../renderer/build/scripts/in_generator.py | 5 ++ 54 .../build/scripts/make_runtime_features.py | 2 +- 55 .../scripts/templates/element_factory.cc.tmpl | 4 +- 56 .../templates/element_type_helpers.cc.tmpl | 4 +- 57 .../templates/element_type_helpers.h.tmpl | 2 +- 58 .../build/scripts/templates/macros.tmpl | 4 +- 59 .../templates/make_qualified_names.h.tmpl | 4 +- 60 .../dawn/generator/generator_lib.py | 4 + 61 .../devtools-frontend/src/BUILD.gn | 2 + 62 .../scripts/build/build_inspector_overlay.py | 3 +- 63 .../build/build_release_applications.py | 9 +- 64 .../scripts/build/generate_devtools_grd.py | 4 +- 65 .../src/scripts/build/modular_build.py | 6 +- 66 chromium/third_party/jinja2/tests.py | 2 +- 67 chromium/tools/metrics/ukm/gen_builders.py | 5 +- 68 .../ui/ozone/generate_constructor_list.py | 13 ++- 69 .../ui/ozone/generate_ozone_platform_list.py | 26 ++++-- 70 59 files changed, 331 insertions(+), 229 deletions(-) 71 72diff --git a/chromium/components/resources/protobufs/binary_proto_generator.py b/chromium/components/resources/protobufs/binary_proto_generator.py 73index 7422ead9697..16365515f26 100755 74--- a/chromium/components/resources/protobufs/binary_proto_generator.py 75+++ b/chromium/components/resources/protobufs/binary_proto_generator.py 76@@ -7,7 +7,7 @@ 77 Converts a given ASCII proto into a binary resource. 78 79 """ 80- 81+from __future__ import print_function 82 import abc 83 import imp 84 import optparse 85@@ -196,12 +196,12 @@ class BinaryProtoGenerator: 86 self._ImportProtoModules(opts.path) 87 88 if not self.VerifyArgs(opts): 89- print "Wrong arguments" 90+ print("Wrong arguments") 91 return 1 92 93 try: 94 self._GenerateBinaryProtos(opts) 95 except Exception as e: 96- print "ERROR: Failed to render binary version of %s:\n %s\n%s" % ( 97- opts.infile, str(e), traceback.format_exc()) 98+ print("ERROR: Failed to render binary version of %s:\n %s\n%s" % 99+ (opts.infile, str(e), traceback.format_exc())) 100 return 1 101diff --git a/chromium/content/browser/tracing/generate_trace_viewer_grd.py b/chromium/content/browser/tracing/generate_trace_viewer_grd.py 102index 037f9497dc2..be393d21f90 100755 103--- a/chromium/content/browser/tracing/generate_trace_viewer_grd.py 104+++ b/chromium/content/browser/tracing/generate_trace_viewer_grd.py 105@@ -74,7 +74,7 @@ def main(argv): 106 for filename in parsed_args.source_files: 107 add_file_to_grd(doc, os.path.basename(filename)) 108 109- with open(parsed_args.output_filename, 'w') as output_file: 110+ with open(parsed_args.output_filename, 'wb') as output_file: 111 output_file.write(doc.toxml(encoding='UTF-8')) 112 113 114diff --git a/chromium/mojo/public/tools/bindings/BUILD.gn b/chromium/mojo/public/tools/bindings/BUILD.gn 115index fc04b5dd0b1..708958e438b 100644 116--- a/chromium/mojo/public/tools/bindings/BUILD.gn 117+++ b/chromium/mojo/public/tools/bindings/BUILD.gn 118@@ -2,9 +2,11 @@ 119 # Use of this source code is governed by a BSD-style license that can be 120 # found in the LICENSE file. 121 122+import("//build/config/python.gni") 123 import("//mojo/public/tools/bindings/mojom.gni") 124 import("//third_party/jinja2/jinja2.gni") 125 126+# TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. 127 action("precompile_templates") { 128 sources = mojom_generator_sources 129 sources += [ 130diff --git a/chromium/mojo/public/tools/bindings/gen_data_files_list.py b/chromium/mojo/public/tools/bindings/gen_data_files_list.py 131index 79c9e50efce..8b78d092418 100644 132--- a/chromium/mojo/public/tools/bindings/gen_data_files_list.py 133+++ b/chromium/mojo/public/tools/bindings/gen_data_files_list.py 134@@ -18,7 +18,6 @@ import os 135 import re 136 import sys 137 138-from cStringIO import StringIO 139 from optparse import OptionParser 140 141 sys.path.insert( 142@@ -41,12 +40,9 @@ def main(): 143 pattern = re.compile(options.pattern) 144 files = [f for f in os.listdir(options.directory) if pattern.match(f)] 145 146- stream = StringIO() 147- for f in files: 148- print(f, file=stream) 149+ contents = '\n'.join(f for f in files) + '\n' 150+ WriteFile(contents, options.output) 151 152- WriteFile(stream.getvalue(), options.output) 153- stream.close() 154 155 if __name__ == '__main__': 156 sys.exit(main()) 157diff --git a/chromium/mojo/public/tools/bindings/generators/mojom_java_generator.py b/chromium/mojo/public/tools/bindings/generators/mojom_java_generator.py 158index 96b2fdfae0c..00b9dccd00c 100644 159--- a/chromium/mojo/public/tools/bindings/generators/mojom_java_generator.py 160+++ b/chromium/mojo/public/tools/bindings/generators/mojom_java_generator.py 161@@ -25,6 +25,10 @@ sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, 162 'build', 'android', 'gyp')) 163 from util import build_utils 164 165+# TODO(crbug.com/1174969): Remove this once Python2 is obsoleted. 166+if sys.version_info.major != 2: 167+ basestring = str 168+ long = int 169 170 GENERATOR_PREFIX = 'java' 171 172diff --git a/chromium/mojo/public/tools/mojom/mojom/generate/generator.py b/chromium/mojo/public/tools/mojom/mojom/generate/generator.py 173index de62260a5c9..4a1c73fcf82 100644 174--- a/chromium/mojo/public/tools/mojom/mojom/generate/generator.py 175+++ b/chromium/mojo/public/tools/mojom/mojom/generate/generator.py 176@@ -136,9 +136,14 @@ class Stylizer(object): 177 178 def WriteFile(contents, full_path): 179 # If |contents| is same with the file content, we skip updating. 180+ if not isinstance(contents, bytes): 181+ data = contents.encode('utf8') 182+ else: 183+ data = contents 184+ 185 if os.path.isfile(full_path): 186 with open(full_path, 'rb') as destination_file: 187- if destination_file.read() == contents: 188+ if destination_file.read() == data: 189 return 190 191 # Make sure the containing directory exists. 192@@ -146,11 +151,8 @@ def WriteFile(contents, full_path): 193 fileutil.EnsureDirectoryExists(full_dir) 194 195 # Dump the data to disk. 196- with open(full_path, "wb") as f: 197- if not isinstance(contents, bytes): 198- f.write(contents.encode('utf-8')) 199- else: 200- f.write(contents) 201+ with open(full_path, 'wb') as f: 202+ f.write(data) 203 204 205 def AddComputedData(module): 206diff --git a/chromium/mojo/public/tools/mojom/mojom/generate/module.py b/chromium/mojo/public/tools/mojom/mojom/generate/module.py 207index ebbc9b322ea..3d026429bbc 100644 208--- a/chromium/mojo/public/tools/mojom/mojom/generate/module.py 209+++ b/chromium/mojo/public/tools/mojom/mojom/generate/module.py 210@@ -398,7 +398,8 @@ class Field(object): 211 212 213 class StructField(Field): 214- pass 215+ def __hash__(self): 216+ return super(Field, self).__hash__() 217 218 219 class UnionField(Field): 220diff --git a/chromium/mojo/public/tools/mojom/mojom/generate/template_expander.py b/chromium/mojo/public/tools/mojom/mojom/generate/template_expander.py 221index 7a300560246..8d9e26fb7f6 100644 222--- a/chromium/mojo/public/tools/mojom/mojom/generate/template_expander.py 223+++ b/chromium/mojo/public/tools/mojom/mojom/generate/template_expander.py 224@@ -75,9 +75,9 @@ def PrecompileTemplates(generator_modules, output_dir): 225 os.path.dirname(module.__file__), generator.GetTemplatePrefix()) 226 ])) 227 jinja_env.filters.update(generator.GetFilters()) 228- jinja_env.compile_templates( 229- os.path.join(output_dir, "%s.zip" % generator.GetTemplatePrefix()), 230- extensions=["tmpl"], 231- zip="stored", 232- py_compile=True, 233- ignore_errors=False) 234+ jinja_env.compile_templates(os.path.join( 235+ output_dir, "%s.zip" % generator.GetTemplatePrefix()), 236+ extensions=["tmpl"], 237+ zip="stored", 238+ py_compile=sys.version_info.major < 3, 239+ ignore_errors=False) 240diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py 241index 3225ecca6e4..fc078d31b55 100644 242--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py 243+++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py 244@@ -344,7 +344,7 @@ def make_default_value_expr(idl_type, default_value): 245 """ 246 assert default_value.is_type_compatible_with(idl_type) 247 248- class DefaultValueExpr: 249+ class DefaultValueExpr(object): 250 _ALLOWED_SYMBOLS_IN_DEPS = ("isolate") 251 252 def __init__(self, initializer_expr, initializer_deps, 253@@ -502,7 +502,7 @@ def make_v8_to_blink_value(blink_var_name, 254 assert isinstance(blink_var_name, str) 255 assert isinstance(v8_value_expr, str) 256 assert isinstance(idl_type, web_idl.IdlType) 257- assert (argument_index is None or isinstance(argument_index, (int, long))) 258+ assert (argument_index is None or isinstance(argument_index, int)) 259 assert (default_value is None 260 or isinstance(default_value, web_idl.LiteralConstant)) 261 262@@ -622,7 +622,7 @@ def make_v8_to_blink_value_variadic(blink_var_name, v8_array, 263 """ 264 assert isinstance(blink_var_name, str) 265 assert isinstance(v8_array, str) 266- assert isinstance(v8_array_start_index, (int, long)) 267+ assert isinstance(v8_array_start_index, int) 268 assert isinstance(idl_type, web_idl.IdlType) 269 270 pattern = ("auto&& ${{{_1}}} = " 271diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/callback_interface.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/callback_interface.py 272index 4a6df513068..8b51f23a409 100644 273--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/callback_interface.py 274+++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/callback_interface.py 275@@ -177,7 +177,7 @@ def generate_callback_interface(callback_interface_identifier): 276 prop_install_mode=PropInstallMode.UNCONDITIONAL, 277 trampoline_var_name=None, 278 attribute_entries=[], 279- constant_entries=filter(is_unconditional, constant_entries), 280+ constant_entries=list(filter(is_unconditional, constant_entries)), 281 exposed_construct_entries=[], 282 operation_entries=[]) 283 (install_interface_template_decl, install_interface_template_def, 284diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/code_node.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/code_node.py 285index 52972fefe20..e5ae9d9629e 100644 286--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/code_node.py 287+++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/code_node.py 288@@ -503,13 +503,13 @@ class CompositeNode(CodeNode): 289 gensym_kwargs = {} 290 template_vars = {} 291 for arg in args: 292- assert isinstance(arg, (CodeNode, int, long, str)) 293+ assert isinstance(arg, (CodeNode, int, str)) 294 gensym = CodeNode.gensym() 295 gensym_args.append("${{{}}}".format(gensym)) 296 template_vars[gensym] = arg 297 for key, value in kwargs.items(): 298- assert isinstance(key, (int, long, str)) 299- assert isinstance(value, (CodeNode, int, long, str)) 300+ assert isinstance(key, (int, str)) 301+ assert isinstance(value, (CodeNode, int, str)) 302 gensym = CodeNode.gensym() 303 gensym_kwargs[key] = "${{{}}}".format(gensym) 304 template_vars[gensym] = value 305@@ -602,7 +602,7 @@ class ListNode(CodeNode): 306 def insert(self, index, node): 307 if node is None: 308 return 309- assert isinstance(index, (int, long)) 310+ assert isinstance(index, int) 311 assert isinstance(node, CodeNode) 312 assert node.outer is None and node.prev is None 313 314@@ -721,7 +721,7 @@ class SymbolScopeNode(SequenceNode): 315 if not scope_chains: 316 return counts 317 318- self_index = iter(scope_chains).next().index(self) 319+ self_index = next(iter(scope_chains)).index(self) 320 scope_chains = map( 321 lambda scope_chain: scope_chain[self_index + 1:], scope_chains) 322 scope_to_likeliness = {} 323diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_expr.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_expr.py 324index a229a6c71c9..5fa288dabf2 100644 325--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_expr.py 326+++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_expr.py 327@@ -109,7 +109,7 @@ def expr_and(terms): 328 329 if any(term.is_always_false for term in terms): 330 return _Expr(False) 331- terms = filter(lambda x: not x.is_always_true, terms) 332+ terms = list(filter(lambda x: not x.is_always_true, terms)) 333 if not terms: 334 return _Expr(True) 335 if len(terms) == 1: 336@@ -124,7 +124,7 @@ def expr_or(terms): 337 338 if any(term.is_always_true for term in terms): 339 return _Expr(True) 340- terms = filter(lambda x: not x.is_always_false, terms) 341+ terms = list(filter(lambda x: not x.is_always_false, terms)) 342 if not terms: 343 return _Expr(False) 344 if len(terms) == 1: 345@@ -222,7 +222,7 @@ def expr_from_exposure(exposure, 346 elif exposure.only_in_secure_contexts is False: 347 secure_context_term = _Expr(True) 348 else: 349- terms = map(ref_enabled, exposure.only_in_secure_contexts) 350+ terms = list(map(ref_enabled, exposure.only_in_secure_contexts)) 351 secure_context_term = expr_or( 352 [_Expr("${is_in_secure_context}"), 353 expr_not(expr_and(terms))]) 354@@ -275,10 +275,11 @@ def expr_from_exposure(exposure, 355 356 # [ContextEnabled] 357 if exposure.context_enabled_features: 358- terms = map( 359- lambda feature: _Expr( 360- "${{context_feature_settings}}->is{}Enabled()".format( 361- feature)), exposure.context_enabled_features) 362+ terms = list( 363+ map( 364+ lambda feature: _Expr( 365+ "${{context_feature_settings}}->is{}Enabled()".format( 366+ feature)), exposure.context_enabled_features)) 367 context_enabled_terms.append( 368 expr_and([_Expr("${context_feature_settings}"), 369 expr_or(terms)])) 370diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_format.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_format.py 371index 87d26eec3ca..f3e9d38247e 100644 372--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_format.py 373+++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_format.py 374@@ -23,7 +23,7 @@ class _TemplateFormatter(string.Formatter): 375 self._template_formatter_indexing_count_ = 0 376 377 def get_value(self, key, args, kwargs): 378- if isinstance(key, (int, long)): 379+ if isinstance(key, int): 380 return args[key] 381 assert isinstance(key, str) 382 if not key: 383diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py 384index 2bcc4fed49a..e72282aa696 100644 385--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py 386+++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py 387@@ -116,4 +116,4 @@ def write_code_node_to_file(code_node, filepath): 388 # stderr=format_result.error_message)) 389 # 390 # web_idl.file_io.write_to_file_if_changed(filepath, format_result.contents) 391- web_idl.file_io.write_to_file_if_changed(filepath, rendered_text) 392+ web_idl.file_io.write_to_file_if_changed(filepath, rendered_text.encode('utf-8')) 393diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/dictionary.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/dictionary.py 394index b39f0100410..4d68202296b 100644 395--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/dictionary.py 396+++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/dictionary.py 397@@ -993,7 +993,7 @@ def make_dict_trace_func(cg_context): 398 _2 = _blink_member_name(member).value_var 399 return TextNode(_format(pattern, _1=_1, _2=_2)) 400 401- body.extend(map(make_trace_member_node, own_members)) 402+ body.extend(list(map(make_trace_member_node, own_members))) 403 body.append(TextNode("BaseClass::Trace(visitor);")) 404 405 return func_decl, func_def 406diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py 407index 10ff30656ad..bfdf7128aac 100644 408--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py 409+++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py 410@@ -582,7 +582,7 @@ def _make_blink_api_call(code_node, 411 overriding_args=None): 412 assert isinstance(code_node, SymbolScopeNode) 413 assert isinstance(cg_context, CodeGenContext) 414- assert num_of_args is None or isinstance(num_of_args, (int, long)) 415+ assert num_of_args is None or isinstance(num_of_args, int) 416 assert (overriding_args is None 417 or (isinstance(overriding_args, (list, tuple)) 418 and all(isinstance(arg, str) for arg in overriding_args))) 419@@ -1196,8 +1196,10 @@ def make_overload_dispatcher(cg_context): 420 did_use_break = did_use_break or can_fail 421 422 conditional = expr_or( 423- map(lambda item: expr_from_exposure(item.function_like.exposure), 424- items)) 425+ list( 426+ map( 427+ lambda item: expr_from_exposure(item.function_like.exposure 428+ ), items))) 429 if not conditional.is_always_true: 430 node = CxxUnlikelyIfNode(cond=conditional, body=node) 431 432@@ -4642,7 +4644,7 @@ class _PropEntryConstructorGroup(_PropEntryBase): 433 def __init__(self, is_context_dependent, exposure_conditional, world, 434 constructor_group, ctor_callback_name, ctor_func_length): 435 assert isinstance(ctor_callback_name, str) 436- assert isinstance(ctor_func_length, (int, long)) 437+ assert isinstance(ctor_func_length, int) 438 439 _PropEntryBase.__init__(self, is_context_dependent, 440 exposure_conditional, world, constructor_group) 441@@ -4670,7 +4672,7 @@ class _PropEntryOperationGroup(_PropEntryBase): 442 op_func_length, 443 no_alloc_direct_callback_name=None): 444 assert isinstance(op_callback_name, str) 445- assert isinstance(op_func_length, (int, long)) 446+ assert isinstance(op_func_length, int) 447 448 _PropEntryBase.__init__(self, is_context_dependent, 449 exposure_conditional, world, operation_group) 450@@ -5175,9 +5177,9 @@ def make_install_interface_template(cg_context, function_name, class_name, api_c 451 ]) 452 453 if class_like.identifier == "CSSStyleDeclaration": 454- css_properties = filter( 455- lambda attr: "CSSProperty" in attr.extended_attributes, 456- class_like.attributes) 457+ css_properties = list( 458+ filter(lambda attr: "CSSProperty" in attr.extended_attributes, 459+ class_like.attributes)) 460 if css_properties: 461 prop_name_list = "".join( 462 map(lambda attr: "\"{}\", ".format(attr.identifier), 463@@ -5567,8 +5569,8 @@ ${instance_object} = ${v8_context}->Global()->GetPrototype().As<v8::Object>();\ 464 "V8DOMConfiguration::InstallConstants(${isolate}, " 465 "${interface_template}, ${prototype_template}, " 466 "kConstantCallbackTable, base::size(kConstantCallbackTable));") 467- constant_callback_entries = filter(lambda entry: entry.const_callback_name, 468- constant_entries) 469+ constant_callback_entries = list(filter(lambda entry: entry.const_callback_name, 470+ constant_entries)) 471 install_properties(table_name, constant_callback_entries, 472 _make_constant_callback_registration_table, 473 installer_call_text) 474@@ -5584,8 +5586,8 @@ ${instance_object} = ${v8_context}->Global()->GetPrototype().As<v8::Object>();\ 475 "V8DOMConfiguration::InstallConstants(${isolate}, " 476 "${interface_template}, ${prototype_template}, " 477 "kConstantValueTable, base::size(kConstantValueTable));") 478- constant_value_entries = filter( 479- lambda entry: not entry.const_callback_name, constant_entries) 480+ constant_value_entries = list(filter( 481+ lambda entry: not entry.const_callback_name, constant_entries)) 482 install_properties(table_name, constant_value_entries, 483 _make_constant_value_registration_table, 484 installer_call_text) 485@@ -6336,8 +6338,8 @@ def make_v8_context_snapshot_api(cg_context, component, attribute_entries, 486 assert isinstance(component, web_idl.Component) 487 488 derived_interfaces = cg_context.interface.deriveds 489- derived_names = map(lambda interface: interface.identifier, 490- derived_interfaces) 491+ derived_names = list( 492+ map(lambda interface: interface.identifier, derived_interfaces)) 493 derived_names.append(cg_context.interface.identifier) 494 if not ("Window" in derived_names or "HTMLDocument" in derived_names): 495 return None, None 496@@ -6411,9 +6413,11 @@ def _make_v8_context_snapshot_get_reference_table_function( 497 collect_callbacks(named_properties_object_callback_defs) 498 collect_callbacks(cross_origin_property_callback_defs) 499 500- entry_nodes = map( 501- lambda name: TextNode("reinterpret_cast<intptr_t>({}),".format(name)), 502- filter(None, callback_names)) 503+ entry_nodes = list( 504+ map( 505+ lambda name: TextNode("reinterpret_cast<intptr_t>({}),".format(name 506+ )), 507+ filter(None, callback_names))) 508 table_node = ListNode([ 509 TextNode("using namespace ${class_name}Callbacks;"), 510 TextNode("static const intptr_t kReferenceTable[] = {"), 511@@ -6451,10 +6455,11 @@ def _make_v8_context_snapshot_install_props_per_context_function( 512 class_name=None, 513 prop_install_mode=PropInstallMode.V8_CONTEXT_SNAPSHOT, 514 trampoline_var_name=None, 515- attribute_entries=filter(selector, attribute_entries), 516- constant_entries=filter(selector, constant_entries), 517- exposed_construct_entries=filter(selector, exposed_construct_entries), 518- operation_entries=filter(selector, operation_entries)) 519+ attribute_entries=list(filter(selector, attribute_entries)), 520+ constant_entries=list(filter(selector, constant_entries)), 521+ exposed_construct_entries=list( 522+ filter(selector, exposed_construct_entries)), 523+ operation_entries=list(filter(selector, operation_entries))) 524 525 return func_decl, func_def 526 527@@ -6810,11 +6815,11 @@ def generate_interface(interface_identifier): 528 class_name=impl_class_name, 529 prop_install_mode=PropInstallMode.UNCONDITIONAL, 530 trampoline_var_name=tp_install_unconditional_props, 531- attribute_entries=filter(is_unconditional, attribute_entries), 532- constant_entries=filter(is_unconditional, constant_entries), 533- exposed_construct_entries=filter(is_unconditional, 534- exposed_construct_entries), 535- operation_entries=filter(is_unconditional, operation_entries)) 536+ attribute_entries=list(filter(is_unconditional, attribute_entries)), 537+ constant_entries=list(filter(is_unconditional, constant_entries)), 538+ exposed_construct_entries=list( 539+ filter(is_unconditional, exposed_construct_entries)), 540+ operation_entries=list(filter(is_unconditional, operation_entries))) 541 (install_context_independent_props_decl, 542 install_context_independent_props_def, 543 install_context_independent_props_trampoline) = make_install_properties( 544@@ -6823,11 +6828,14 @@ def generate_interface(interface_identifier): 545 class_name=impl_class_name, 546 prop_install_mode=PropInstallMode.CONTEXT_INDEPENDENT, 547 trampoline_var_name=tp_install_context_independent_props, 548- attribute_entries=filter(is_context_independent, attribute_entries), 549- constant_entries=filter(is_context_independent, constant_entries), 550- exposed_construct_entries=filter(is_context_independent, 551- exposed_construct_entries), 552- operation_entries=filter(is_context_independent, operation_entries)) 553+ attribute_entries=list( 554+ filter(is_context_independent, attribute_entries)), 555+ constant_entries=list(filter(is_context_independent, 556+ constant_entries)), 557+ exposed_construct_entries=list( 558+ filter(is_context_independent, exposed_construct_entries)), 559+ operation_entries=list( 560+ filter(is_context_independent, operation_entries))) 561 (install_context_dependent_props_decl, install_context_dependent_props_def, 562 install_context_dependent_props_trampoline) = make_install_properties( 563 cg_context, 564@@ -6835,11 +6843,13 @@ def generate_interface(interface_identifier): 565 class_name=impl_class_name, 566 prop_install_mode=PropInstallMode.CONTEXT_DEPENDENT, 567 trampoline_var_name=tp_install_context_dependent_props, 568- attribute_entries=filter(is_context_dependent, attribute_entries), 569- constant_entries=filter(is_context_dependent, constant_entries), 570- exposed_construct_entries=filter(is_context_dependent, 571- exposed_construct_entries), 572- operation_entries=filter(is_context_dependent, operation_entries)) 573+ attribute_entries=list(filter(is_context_dependent, 574+ attribute_entries)), 575+ constant_entries=list(filter(is_context_dependent, constant_entries)), 576+ exposed_construct_entries=list( 577+ filter(is_context_dependent, exposed_construct_entries)), 578+ operation_entries=list(filter(is_context_dependent, 579+ operation_entries))) 580 (install_interface_template_decl, install_interface_template_def, 581 install_interface_template_trampoline) = make_install_interface_template( 582 cg_context, 583diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/mako_renderer.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/mako_renderer.py 584index b4c70553863..f3a2fcd772d 100644 585--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/mako_renderer.py 586+++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/mako_renderer.py 587@@ -105,7 +105,7 @@ class MakoRenderer(object): 588 on_error = self._caller_stack_on_error 589 if (len(current) <= len(on_error) 590 and all(current[i] == on_error[i] 591- for i in xrange(len(current)))): 592+ for i in range(len(current)))): 593 pass # Error happened in a deeper caller. 594 else: 595 self._caller_stack_on_error = list(self._caller_stack) 596diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/style_format.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/style_format.py 597index dc3493cc394..017d3d47bb3 100644 598--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/style_format.py 599+++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/style_format.py 600@@ -70,8 +70,13 @@ def gn_format(contents, filename=None): 601 602 603 def _invoke_format_command(command_line, filename, contents): 604- proc = subprocess.Popen( 605- command_line, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 606+ kwargs = {} 607+ if sys.version_info.major != 2: 608+ kwargs['encoding'] = 'utf-8' 609+ proc = subprocess.Popen(command_line, 610+ stdin=subprocess.PIPE, 611+ stdout=subprocess.PIPE, 612+ **kwargs) 613 stdout_output, stderr_output = proc.communicate(input=contents) 614 exit_code = proc.wait() 615 616diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/task_queue.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/task_queue.py 617index 0d8f4c0f303..e666a9b668e 100644 618--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/task_queue.py 619+++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/task_queue.py 620@@ -2,6 +2,7 @@ 621 # Use of this source code is governed by a BSD-style license that can be 622 # found in the LICENSE file. 623 624+import functools 625 import multiprocessing 626 627 from .package_initializer import package_initializer 628@@ -76,7 +77,7 @@ class TaskQueue(object): 629 if not report_progress: 630 return 631 632- done_count = reduce( 633+ done_count = functools.reduce( 634 lambda count, worker_task: count + bool(worker_task.ready()), 635 self._worker_tasks, 0) 636 report_progress(len(self._worker_tasks), done_count) 637@@ -85,4 +86,4 @@ class TaskQueue(object): 638 def _task_queue_run_tasks(tasks): 639 for task in tasks: 640 func, args, kwargs = task 641- apply(func, args, kwargs) 642+ func(*args, **kwargs) 643diff --git a/chromium/third_party/blink/renderer/bindings/scripts/code_generator.py b/chromium/third_party/blink/renderer/bindings/scripts/code_generator.py 644index e8280be7213..e49e6eb965e 100644 645--- a/chromium/third_party/blink/renderer/bindings/scripts/code_generator.py 646+++ b/chromium/third_party/blink/renderer/bindings/scripts/code_generator.py 647@@ -13,6 +13,7 @@ import re 648 import sys 649 650 from idl_types import set_ancestors, IdlType 651+from itertools import groupby 652 from v8_globals import includes 653 from v8_interface import constant_filters 654 from v8_types import set_component_dirs 655@@ -43,6 +44,7 @@ TEMPLATES_DIR = os.path.normpath( 656 # after path[0] == invoking script dir 657 sys.path.insert(1, THIRD_PARTY_DIR) 658 import jinja2 659+from jinja2.filters import make_attrgetter, environmentfilter 660 661 662 def generate_indented_conditional(code, conditional): 663@@ -88,6 +90,13 @@ def runtime_enabled_if(code, name): 664 return generate_indented_conditional(code, function) 665 666 667+@environmentfilter 668+def do_stringify_key_group_by(environment, value, attribute): 669+ expr = make_attrgetter(environment, attribute) 670+ key = lambda item: '' if expr(item) is None else str(expr(item)) 671+ return groupby(sorted(value, key=key), expr) 672+ 673+ 674 def initialize_jinja_env(cache_dir): 675 jinja_env = jinja2.Environment( 676 loader=jinja2.FileSystemLoader(TEMPLATES_DIR), 677@@ -117,6 +126,7 @@ def initialize_jinja_env(cache_dir): 678 }) 679 jinja_env.filters.update(constant_filters()) 680 jinja_env.filters.update(method_filters()) 681+ jinja_env.filters["stringifykeygroupby"] = do_stringify_key_group_by 682 return jinja_env 683 684 685diff --git a/chromium/third_party/blink/renderer/bindings/scripts/generate_origin_trial_features.py b/chromium/third_party/blink/renderer/bindings/scripts/generate_origin_trial_features.py 686index 130004eae83..04c0fabcef2 100755 687--- a/chromium/third_party/blink/renderer/bindings/scripts/generate_origin_trial_features.py 688+++ b/chromium/third_party/blink/renderer/bindings/scripts/generate_origin_trial_features.py 689@@ -80,7 +80,7 @@ def read_idl_file(reader, idl_filename): 690 assert len(interfaces) == 1, ( 691 "Expected one interface in file %r, found %d" % 692 (idl_filename, len(interfaces))) 693- return (interfaces.values()[0], includes) 694+ return (list(interfaces.values())[0], includes) 695 696 697 def interface_is_global(interface): 698@@ -281,7 +281,7 @@ def main(): 699 700 info_provider = create_component_info_provider( 701 os.path.normpath(options.info_dir), options.target_component) 702- idl_filenames = map(str.strip, open(options.idl_files_list)) 703+ idl_filenames = list(map(str.strip, open(options.idl_files_list))) 704 705 generate_origin_trial_features(info_provider, options, idl_filenames) 706 return 0 707diff --git a/chromium/third_party/blink/renderer/bindings/scripts/idl_definitions.py b/chromium/third_party/blink/renderer/bindings/scripts/idl_definitions.py 708index 14e6e9d3f87..b027818aef2 100644 709--- a/chromium/third_party/blink/renderer/bindings/scripts/idl_definitions.py 710+++ b/chromium/third_party/blink/renderer/bindings/scripts/idl_definitions.py 711@@ -394,7 +394,8 @@ class IdlInterface(object): 712 else: 713 raise ValueError('Unrecognized node class: %s' % child_class) 714 715- if len(filter(None, [self.iterable, self.maplike, self.setlike])) > 1: 716+ if len(list(filter(None, 717+ [self.iterable, self.maplike, self.setlike]))) > 1: 718 raise ValueError( 719 'Interface can only have one of iterable<>, maplike<> and setlike<>.' 720 ) 721@@ -512,6 +513,9 @@ class IdlAttribute(TypedObject): 722 def accept(self, visitor): 723 visitor.visit_attribute(self) 724 725+ def __lt__(self, other): 726+ return self.name < other.name 727+ 728 729 ################################################################################ 730 # Constants 731@@ -852,7 +856,7 @@ class IdlIncludes(object): 732 ################################################################################ 733 734 735-class Exposure: 736+class Exposure(object): 737 """An Exposure holds one Exposed or RuntimeEnabled condition. 738 Each exposure has two properties: exposed and runtime_enabled. 739 Exposure(e, r) corresponds to [Exposed(e r)]. Exposure(e) corresponds to 740diff --git a/chromium/third_party/blink/renderer/bindings/scripts/idl_reader.py b/chromium/third_party/blink/renderer/bindings/scripts/idl_reader.py 741index 8d72865a6ca..b80eebdcd61 100644 742--- a/chromium/third_party/blink/renderer/bindings/scripts/idl_reader.py 743+++ b/chromium/third_party/blink/renderer/bindings/scripts/idl_reader.py 744@@ -55,8 +55,8 @@ def validate_blink_idl_definitions(idl_filename, idl_file_basename, 745 definitions. There is no filename convention in this case. 746 - Otherwise, an IDL file is invalid. 747 """ 748- targets = ( 749- definitions.interfaces.values() + definitions.dictionaries.values()) 750+ targets = (list(definitions.interfaces.values()) + 751+ list(definitions.dictionaries.values())) 752 number_of_targets = len(targets) 753 if number_of_targets > 1: 754 raise Exception( 755diff --git a/chromium/third_party/blink/renderer/bindings/scripts/idl_types.py b/chromium/third_party/blink/renderer/bindings/scripts/idl_types.py 756index cd4f0c3513b..ab95e9c0b08 100644 757--- a/chromium/third_party/blink/renderer/bindings/scripts/idl_types.py 758+++ b/chromium/third_party/blink/renderer/bindings/scripts/idl_types.py 759@@ -349,7 +349,7 @@ class IdlUnionType(IdlTypeBase): 760 return True 761 762 def single_matching_member_type(self, predicate): 763- matching_types = filter(predicate, self.flattened_member_types) 764+ matching_types = list(filter(predicate, self.flattened_member_types)) 765 if len(matching_types) > 1: 766 raise ValueError('%s is ambiguous.' % self.name) 767 return matching_types[0] if matching_types else None 768diff --git a/chromium/third_party/blink/renderer/bindings/scripts/utilities.py b/chromium/third_party/blink/renderer/bindings/scripts/utilities.py 769index e1677ee7bd6..3c5006f064f 100644 770--- a/chromium/third_party/blink/renderer/bindings/scripts/utilities.py 771+++ b/chromium/third_party/blink/renderer/bindings/scripts/utilities.py 772@@ -196,8 +196,9 @@ class ComponentInfoProviderModules(ComponentInfoProvider): 773 774 @property 775 def callback_functions(self): 776- return dict(self._component_info_core['callback_functions'].items() + 777- self._component_info_modules['callback_functions'].items()) 778+ return dict( 779+ list(self._component_info_core['callback_functions'].items()) + 780+ list(self._component_info_modules['callback_functions'].items())) 781 782 @property 783 def specifier_for_export(self): 784@@ -209,8 +210,8 @@ class ComponentInfoProviderModules(ComponentInfoProvider): 785 786 787 def load_interfaces_info_overall_pickle(info_dir): 788- with open(os.path.join(info_dir, 789- 'interfaces_info.pickle')) as interface_info_file: 790+ with open(os.path.join(info_dir, 'interfaces_info.pickle'), 791+ mode='rb') as interface_info_file: 792 return pickle.load(interface_info_file) 793 794 795@@ -236,23 +237,20 @@ def merge_dict_recursively(target, diff): 796 797 def create_component_info_provider_core(info_dir): 798 interfaces_info = load_interfaces_info_overall_pickle(info_dir) 799- with open( 800- os.path.join(info_dir, 'core', 801- 'component_info_core.pickle')) as component_info_file: 802+ with open(os.path.join(info_dir, 'core', 'component_info_core.pickle'), 803+ mode='rb') as component_info_file: 804 component_info = pickle.load(component_info_file) 805 return ComponentInfoProviderCore(interfaces_info, component_info) 806 807 808 def create_component_info_provider_modules(info_dir): 809 interfaces_info = load_interfaces_info_overall_pickle(info_dir) 810- with open( 811- os.path.join(info_dir, 'core', 812- 'component_info_core.pickle')) as component_info_file: 813+ with open(os.path.join(info_dir, 'core', 'component_info_core.pickle'), 814+ mode='rb') as component_info_file: 815 component_info_core = pickle.load(component_info_file) 816- with open( 817- os.path.join( 818- info_dir, 'modules', 819- 'component_info_modules.pickle')) as component_info_file: 820+ with open(os.path.join(info_dir, 'modules', 821+ 'component_info_modules.pickle'), 822+ mode='rb') as component_info_file: 823 component_info_modules = pickle.load(component_info_file) 824 return ComponentInfoProviderModules(interfaces_info, component_info_core, 825 component_info_modules) 826@@ -356,7 +354,7 @@ def write_pickle_file(pickle_filename, data): 827 pickle_filename = abs(pickle_filename) 828 # If |data| is same with the file content, we skip updating. 829 if os.path.isfile(pickle_filename): 830- with open(pickle_filename) as pickle_file: 831+ with open(pickle_filename, 'rb') as pickle_file: 832 try: 833 if pickle.load(pickle_file) == data: 834 return 835diff --git a/chromium/third_party/blink/renderer/bindings/scripts/v8_interface.py b/chromium/third_party/blink/renderer/bindings/scripts/v8_interface.py 836index a43260414db..a85b03abe75 100644 837--- a/chromium/third_party/blink/renderer/bindings/scripts/v8_interface.py 838+++ b/chromium/third_party/blink/renderer/bindings/scripts/v8_interface.py 839@@ -189,7 +189,7 @@ def context_enabled_features(attributes): 840 return sorted([ 841 member for member in members 842 if member.get(KEY) and not member.get('exposed_test') 843- ]) 844+ ], key=lambda item: item['name']) 845 846 def member_filter_by_name(members, name): 847 return [member for member in members if member[KEY] == name] 848@@ -612,7 +612,8 @@ def interface_context(interface, interfaces, component_info): 849 sorted( 850 origin_trial_features(interface, context['constants'], 851 context['attributes'], context['methods']) + 852- context_enabled_features(context['attributes'])), 853+ context_enabled_features(context['attributes']), 854+ key=lambda item: item['name']), 855 }) 856 if context['optional_features']: 857 includes.add('platform/bindings/v8_per_context_data.h') 858@@ -1356,9 +1357,9 @@ def resolution_tests_methods(effective_overloads): 859 860 # Extract argument and IDL type to simplify accessing these in each loop. 861 arguments = [method['arguments'][index] for method in methods] 862- arguments_methods = zip(arguments, methods) 863+ arguments_methods = list(zip(arguments, methods)) 864 idl_types = [argument['idl_type_object'] for argument in arguments] 865- idl_types_methods = zip(idl_types, methods) 866+ idl_types_methods = list(zip(idl_types, methods)) 867 868 # We can’t do a single loop through all methods or simply sort them, because 869 # a method may be listed in multiple steps of the resolution algorithm, and 870diff --git a/chromium/third_party/blink/renderer/bindings/scripts/v8_methods.py b/chromium/third_party/blink/renderer/bindings/scripts/v8_methods.py 871index 5f1f89a3def..6ee8a407798 100644 872--- a/chromium/third_party/blink/renderer/bindings/scripts/v8_methods.py 873+++ b/chromium/third_party/blink/renderer/bindings/scripts/v8_methods.py 874@@ -46,6 +46,10 @@ import v8_types 875 import v8_utilities 876 from v8_utilities import (has_extended_attribute_value, is_unforgeable) 877 878+# TODO: Remove this once Python2 is obsoleted. 879+if sys.version_info.major != 2: 880+ basestring = str 881+ 882 883 def method_is_visible(method, interface_is_partial): 884 if 'overloads' in method: 885diff --git a/chromium/third_party/blink/renderer/bindings/scripts/v8_utilities.py b/chromium/third_party/blink/renderer/bindings/scripts/v8_utilities.py 886index 2ecd6923320..fcfc48371b1 100644 887--- a/chromium/third_party/blink/renderer/bindings/scripts/v8_utilities.py 888+++ b/chromium/third_party/blink/renderer/bindings/scripts/v8_utilities.py 889@@ -271,7 +271,7 @@ EXPOSED_WORKERS = set([ 890 ]) 891 892 893-class ExposureSet: 894+class ExposureSet(object): 895 """An ExposureSet is a collection of Exposure instructions.""" 896 897 def __init__(self, exposures=None): 898diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/callback_interface.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/callback_interface.py 899index 13fb7c7068d..b73b7710687 100644 900--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/callback_interface.py 901+++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/callback_interface.py 902@@ -91,11 +91,13 @@ class CallbackInterface(UserDefinedType, WithExtendedAttributes, 903 for operation_ir in ir.operations 904 ]) 905 self._operation_groups = tuple([ 906- OperationGroup( 907- operation_group_ir, 908- filter(lambda x: x.identifier == operation_group_ir.identifier, 909- self._operations), 910- owner=self) for operation_group_ir in ir.operation_groups 911+ OperationGroup(operation_group_ir, 912+ list( 913+ filter( 914+ lambda x: x.identifier == operation_group_ir 915+ .identifier, self._operations)), 916+ owner=self) 917+ for operation_group_ir in ir.operation_groups 918 ]) 919 920 @property 921diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/database.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/database.py 922index c92cf48eb2a..f5d59129449 100644 923--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/database.py 924+++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/database.py 925@@ -156,4 +156,4 @@ class Database(object): 926 return self._view_by_kind(Database._Kind.UNION) 927 928 def _view_by_kind(self, kind): 929- return self._impl.find_by_kind(kind).values() 930+ return list(self._impl.find_by_kind(kind).values()) 931diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/exposure.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/exposure.py 932index abaeef39c30..e36cf7439ae 100644 933--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/exposure.py 934+++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/exposure.py 935@@ -8,8 +8,11 @@ from .runtime_enabled_features import RuntimeEnabledFeatures 936 class _Feature(str): 937 """Represents a runtime-enabled feature.""" 938 939+ def __new__(cls, value): 940+ return str.__new__(cls, value) 941+ 942 def __init__(self, value): 943- str.__init__(self, value) 944+ str.__init__(self) 945 self._is_context_dependent = ( 946 RuntimeEnabledFeatures.is_context_dependent(self)) 947 948diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/function_like.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/function_like.py 949index 648c70d803d..1712f19c672 100644 950--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/function_like.py 951+++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/function_like.py 952@@ -71,8 +71,9 @@ class FunctionLike(WithIdentifier): 953 def num_of_required_arguments(self): 954 """Returns the number of required arguments.""" 955 return len( 956- filter(lambda arg: not (arg.is_optional or arg.is_variadic), 957- self.arguments)) 958+ list( 959+ filter(lambda arg: not (arg.is_optional or arg.is_variadic), 960+ self.arguments))) 961 962 963 class OverloadGroup(WithIdentifier): 964@@ -171,8 +172,7 @@ class OverloadGroup(WithIdentifier): 965 Returns the effective overload set. 966 https://heycam.github.io/webidl/#compute-the-effective-overload-set 967 """ 968- assert argument_count is None or isinstance(argument_count, 969- (int, long)) 970+ assert argument_count is None or isinstance(argument_count, int) 971 972 N = argument_count 973 S = [] 974@@ -188,21 +188,21 @@ class OverloadGroup(WithIdentifier): 975 976 S.append( 977 OverloadGroup.EffectiveOverloadItem( 978- X, map(lambda arg: arg.idl_type, X.arguments), 979- map(lambda arg: arg.optionality, X.arguments))) 980+ X, list(map(lambda arg: arg.idl_type, X.arguments)), 981+ list(map(lambda arg: arg.optionality, X.arguments)))) 982 983 if X.is_variadic: 984- for i in xrange(n, max(maxarg, N)): 985- t = map(lambda arg: arg.idl_type, X.arguments) 986- o = map(lambda arg: arg.optionality, X.arguments) 987- for _ in xrange(n, i + 1): 988+ for i in range(n, max(maxarg, N)): 989+ t = list(map(lambda arg: arg.idl_type, X.arguments)) 990+ o = list(map(lambda arg: arg.optionality, X.arguments)) 991+ for _ in range(n, i + 1): 992 t.append(X.arguments[-1].idl_type) 993 o.append(X.arguments[-1].optionality) 994 S.append(OverloadGroup.EffectiveOverloadItem(X, t, o)) 995 996- t = map(lambda arg: arg.idl_type, X.arguments) 997- o = map(lambda arg: arg.optionality, X.arguments) 998- for i in xrange(n - 1, -1, -1): 999+ t = list(map(lambda arg: arg.idl_type, X.arguments)) 1000+ o = list(map(lambda arg: arg.optionality, X.arguments)) 1001+ for i in range(n - 1, -1, -1): 1002 if X.arguments[i].optionality == IdlType.Optionality.REQUIRED: 1003 break 1004 S.append(OverloadGroup.EffectiveOverloadItem(X, t[:i], o[:i])) 1005@@ -222,7 +222,7 @@ class OverloadGroup(WithIdentifier): 1006 for item in items) 1007 assert len(items) > 1 1008 1009- for index in xrange(len(items[0].type_list)): 1010+ for index in range(len(items[0].type_list)): 1011 # Assume that the given items are valid, and we only need to test 1012 # the two types. 1013 if OverloadGroup.are_distinguishable_types( 1014diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py 1015index c5ee2bd8a3d..58315072480 100644 1016--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py 1017+++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py 1018@@ -149,8 +149,8 @@ class IdlCompiler(object): 1019 for old_ir in old_irs: 1020 new_ir = make_copy(old_ir) 1021 self._ir_map.add(new_ir) 1022- new_ir.attributes = filter(not_disabled, new_ir.attributes) 1023- new_ir.operations = filter(not_disabled, new_ir.operations) 1024+ new_ir.attributes = list(filter(not_disabled, new_ir.attributes)) 1025+ new_ir.operations = list(filter(not_disabled, new_ir.operations)) 1026 1027 def _record_defined_in_partial_and_mixin(self): 1028 old_irs = self._ir_map.irs_of_kinds( 1029@@ -231,7 +231,7 @@ class IdlCompiler(object): 1030 only_to_members_of_partial_or_mixin=False) 1031 propagate_to_exposure(propagate) 1032 1033- map(process_member_like, ir.iter_all_members()) 1034+ list(map(process_member_like, ir.iter_all_members())) 1035 1036 def process_member_like(ir): 1037 propagate = functools.partial(propagate_extattr, ir=ir) 1038@@ -257,7 +257,7 @@ class IdlCompiler(object): 1039 1040 self._ir_map.move_to_new_phase() 1041 1042- map(process_interface_like, old_irs) 1043+ list(map(process_interface_like, old_irs)) 1044 1045 def _determine_blink_headers(self): 1046 irs = self._ir_map.irs_of_kinds( 1047@@ -422,9 +422,9 @@ class IdlCompiler(object): 1048 assert not new_interface.deriveds 1049 derived_set = identifier_to_derived_set.get( 1050 new_interface.identifier, set()) 1051- new_interface.deriveds = map( 1052- lambda id_: self._ref_to_idl_def_factory.create(id_), 1053- sorted(derived_set)) 1054+ new_interface.deriveds = list( 1055+ map(lambda id_: self._ref_to_idl_def_factory.create(id_), 1056+ sorted(derived_set))) 1057 1058 def _supplement_missing_html_constructor_operation(self): 1059 # Temporary mitigation of misuse of [HTMLConstructor] 1060@@ -553,7 +553,8 @@ class IdlCompiler(object): 1061 self._ir_map.add(new_ir) 1062 1063 for group in new_ir.iter_all_overload_groups(): 1064- exposures = map(lambda overload: overload.exposure, group) 1065+ exposures = list(map(lambda overload: overload.exposure, 1066+ group)) 1067 1068 # [Exposed] 1069 if any(not exposure.global_names_and_features 1070@@ -653,8 +654,8 @@ class IdlCompiler(object): 1071 constructs = set() 1072 for global_name in global_names: 1073 constructs.update(exposed_map.get(global_name, [])) 1074- new_ir.exposed_constructs = map( 1075- self._ref_to_idl_def_factory.create, sorted(constructs)) 1076+ new_ir.exposed_constructs = list( 1077+ map(self._ref_to_idl_def_factory.create, sorted(constructs))) 1078 1079 assert not new_ir.legacy_window_aliases 1080 if new_ir.identifier != 'Window': 1081diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/interface.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/interface.py 1082index 65d24e529d1..067ef2eb0b2 100644 1083--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/interface.py 1084+++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/interface.py 1085@@ -180,8 +180,9 @@ class Interface(UserDefinedType, WithExtendedAttributes, WithCodeGeneratorInfo, 1086 self._constructor_groups = tuple([ 1087 ConstructorGroup( 1088 group_ir, 1089- filter(lambda x: x.identifier == group_ir.identifier, 1090- self._constructors), 1091+ list( 1092+ filter(lambda x: x.identifier == group_ir.identifier, 1093+ self._constructors)), 1094 owner=self) for group_ir in ir.constructor_groups 1095 ]) 1096 assert len(self._constructor_groups) <= 1 1097@@ -192,8 +193,9 @@ class Interface(UserDefinedType, WithExtendedAttributes, WithCodeGeneratorInfo, 1098 self._named_constructor_groups = tuple([ 1099 ConstructorGroup( 1100 group_ir, 1101- filter(lambda x: x.identifier == group_ir.identifier, 1102- self._named_constructors), 1103+ list( 1104+ filter(lambda x: x.identifier == group_ir.identifier, 1105+ self._named_constructors)), 1106 owner=self) for group_ir in ir.named_constructor_groups 1107 ]) 1108 self._operations = tuple([ 1109@@ -203,22 +205,23 @@ class Interface(UserDefinedType, WithExtendedAttributes, WithCodeGeneratorInfo, 1110 self._operation_groups = tuple([ 1111 OperationGroup( 1112 group_ir, 1113- filter(lambda x: x.identifier == group_ir.identifier, 1114- self._operations), 1115+ list( 1116+ filter(lambda x: x.identifier == group_ir.identifier, 1117+ self._operations)), 1118 owner=self) for group_ir in ir.operation_groups 1119 ]) 1120 self._exposed_constructs = tuple(ir.exposed_constructs) 1121 self._legacy_window_aliases = tuple(ir.legacy_window_aliases) 1122 self._indexed_and_named_properties = None 1123- indexed_and_named_property_operations = filter( 1124- lambda x: x.is_indexed_or_named_property_operation, 1125- self._operations) 1126+ indexed_and_named_property_operations = list( 1127+ filter(lambda x: x.is_indexed_or_named_property_operation, 1128+ self._operations)) 1129 if indexed_and_named_property_operations: 1130 self._indexed_and_named_properties = IndexedAndNamedProperties( 1131 indexed_and_named_property_operations, owner=self) 1132 self._stringifier = None 1133- stringifier_operation_irs = filter(lambda x: x.is_stringifier, 1134- ir.operations) 1135+ stringifier_operation_irs = list( 1136+ filter(lambda x: x.is_stringifier, ir.operations)) 1137 if stringifier_operation_irs: 1138 assert len(stringifier_operation_irs) == 1 1139 op_ir = make_copy(stringifier_operation_irs[0]) 1140@@ -231,8 +234,9 @@ class Interface(UserDefinedType, WithExtendedAttributes, WithCodeGeneratorInfo, 1141 attribute = None 1142 if operation.stringifier_attribute: 1143 attr_id = operation.stringifier_attribute 1144- attributes = filter(lambda x: x.identifier == attr_id, 1145- self._attributes) 1146+ attributes = list( 1147+ filter(lambda x: x.identifier == attr_id, 1148+ self._attributes)) 1149 assert len(attributes) == 1 1150 attribute = attributes[0] 1151 self._stringifier = Stringifier(operation, attribute, owner=self) 1152@@ -578,8 +582,9 @@ class Iterable(WithDebugInfo): 1153 self._operation_groups = tuple([ 1154 OperationGroup( 1155 group_ir, 1156- filter(lambda x: x.identifier == group_ir.identifier, 1157- self._operations), 1158+ list( 1159+ filter(lambda x: x.identifier == group_ir.identifier, 1160+ self._operations)), 1161 owner=owner) for group_ir in ir.operation_groups 1162 ]) 1163 1164@@ -666,8 +671,9 @@ class Maplike(WithDebugInfo): 1165 self._operation_groups = tuple([ 1166 OperationGroup( 1167 group_ir, 1168- filter(lambda x: x.identifier == group_ir.identifier, 1169- self._operations), 1170+ list( 1171+ filter(lambda x: x.identifier == group_ir.identifier, 1172+ self._operations)), 1173 owner=owner) for group_ir in ir.operation_groups 1174 ]) 1175 1176@@ -755,8 +761,9 @@ class Setlike(WithDebugInfo): 1177 self._operation_groups = tuple([ 1178 OperationGroup( 1179 group_ir, 1180- filter(lambda x: x.identifier == group_ir.identifier, 1181- self._operations), 1182+ list( 1183+ filter(lambda x: x.identifier == group_ir.identifier, 1184+ self._operations)), 1185 owner=owner) for group_ir in ir.operation_groups 1186 ]) 1187 1188diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/ir_builder.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/ir_builder.py 1189index e9aeff4ab82..d80554d603e 100644 1190--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/ir_builder.py 1191+++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/ir_builder.py 1192@@ -2,6 +2,8 @@ 1193 # Use of this source code is governed by a BSD-style license that can be 1194 # found in the LICENSE file. 1195 1196+import sys 1197+ 1198 from .argument import Argument 1199 from .ast_group import AstGroup 1200 from .attribute import Attribute 1201@@ -30,6 +32,11 @@ from .operation import Operation 1202 from .typedef import Typedef 1203 1204 1205+# TODO: Remove this once Python2 is obsoleted. 1206+if sys.version_info.major != 2: 1207+ long = int 1208+ 1209+ 1210 def load_and_register_idl_definitions(filepaths, register_ir, 1211 create_ref_to_idl_def, idl_type_factory): 1212 """ 1213@@ -160,7 +167,7 @@ class _IRBuilder(object): 1214 child_nodes = list(node.GetChildren()) 1215 extended_attributes = self._take_extended_attributes(child_nodes) 1216 1217- members = map(self._build_interface_member, child_nodes) 1218+ members = list(map(self._build_interface_member, child_nodes)) 1219 attributes = [] 1220 constants = [] 1221 operations = [] 1222@@ -302,7 +309,7 @@ class _IRBuilder(object): 1223 child_nodes = list(node.GetChildren()) 1224 inherited = self._take_inheritance(child_nodes) 1225 extended_attributes = self._take_extended_attributes(child_nodes) 1226- own_members = map(self._build_dictionary_member, child_nodes) 1227+ own_members = list(map(self._build_dictionary_member, child_nodes)) 1228 1229 return Dictionary.IR( 1230 identifier=Identifier(node.GetName()), 1231@@ -336,7 +343,7 @@ class _IRBuilder(object): 1232 1233 child_nodes = list(node.GetChildren()) 1234 extended_attributes = self._take_extended_attributes(child_nodes) 1235- members = map(self._build_interface_member, child_nodes) 1236+ members = list(map(self._build_interface_member, child_nodes)) 1237 constants = [] 1238 operations = [] 1239 for member in members: 1240@@ -456,8 +463,8 @@ class _IRBuilder(object): 1241 assert len(child_nodes) == 1 1242 child = child_nodes[0] 1243 if child.GetClass() == 'Arguments': 1244- arguments = map(build_extattr_argument, 1245- child.GetChildren()) 1246+ arguments = list( 1247+ map(build_extattr_argument, child.GetChildren())) 1248 elif child.GetClass() == 'Call': 1249 assert len(child.GetChildren()) == 1 1250 grand_child = child.GetChildren()[0] 1251@@ -486,7 +493,9 @@ class _IRBuilder(object): 1252 1253 assert node.GetClass() == 'ExtAttributes' 1254 return ExtendedAttributes( 1255- filter(None, map(build_extended_attribute, node.GetChildren()))) 1256+ list( 1257+ filter(None, map(build_extended_attribute, 1258+ node.GetChildren())))) 1259 1260 def _build_inheritance(self, node): 1261 assert node.GetClass() == 'Inherit' 1262@@ -506,7 +515,7 @@ class _IRBuilder(object): 1263 1264 def _build_iterable(self, node): 1265 assert node.GetClass() == 'Iterable' 1266- types = map(self._build_type, node.GetChildren()) 1267+ types = list(map(self._build_type, node.GetChildren())) 1268 assert len(types) == 1 or len(types) == 2 1269 if len(types) == 1: # value iterator 1270 key_type, value_type = (None, types[0]) 1271@@ -584,7 +593,7 @@ class _IRBuilder(object): 1272 def _build_maplike(self, node, interface_identifier): 1273 assert node.GetClass() == 'Maplike' 1274 assert isinstance(interface_identifier, Identifier) 1275- types = map(self._build_type, node.GetChildren()) 1276+ types = list(map(self._build_type, node.GetChildren())) 1277 assert len(types) == 2 1278 key_type, value_type = types 1279 is_readonly = bool(node.GetProperty('READONLY')) 1280@@ -676,7 +685,7 @@ class _IRBuilder(object): 1281 def _build_setlike(self, node, interface_identifier): 1282 assert node.GetClass() == 'Setlike' 1283 assert isinstance(interface_identifier, Identifier) 1284- types = map(self._build_type, node.GetChildren()) 1285+ types = list(map(self._build_type, node.GetChildren())) 1286 assert len(types) == 1 1287 value_type = types[0] 1288 is_readonly = bool(node.GetProperty('READONLY')) 1289@@ -838,7 +847,7 @@ class _IRBuilder(object): 1290 1291 def build_union_type(node, extended_attributes): 1292 return self._idl_type_factory.union_type( 1293- member_types=map(self._build_type, node.GetChildren()), 1294+ member_types=list(map(self._build_type, node.GetChildren())), 1295 is_optional=is_optional, 1296 extended_attributes=extended_attributes, 1297 debug_info=self._build_debug_info(node)) 1298diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/make_copy.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/make_copy.py 1299index a7a2b11f3f0..2f6b61300ff 100644 1300--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/make_copy.py 1301+++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/make_copy.py 1302@@ -3,6 +3,13 @@ 1303 # found in the LICENSE file. 1304 1305 1306+import sys 1307+ 1308+# TODO: Remove this once Python2 is obsoleted. 1309+if sys.version_info.major != 2: 1310+ long = int 1311+ basestring = str 1312+ 1313 def make_copy(obj, memo=None): 1314 """ 1315 Creates a copy of the given object, which should be an IR or part of IR. 1316diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/namespace.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/namespace.py 1317index eeabef97cbe..bd7e98907f3 100644 1318--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/namespace.py 1319+++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/namespace.py 1320@@ -107,11 +107,13 @@ class Namespace(UserDefinedType, WithExtendedAttributes, WithCodeGeneratorInfo, 1321 for operation_ir in ir.operations 1322 ]) 1323 self._operation_groups = tuple([ 1324- OperationGroup( 1325- operation_group_ir, 1326- filter(lambda x: x.identifier == operation_group_ir.identifier, 1327- self._operations), 1328- owner=self) for operation_group_ir in ir.operation_groups 1329+ OperationGroup(operation_group_ir, 1330+ list( 1331+ filter( 1332+ lambda x: x.identifier == operation_group_ir 1333+ .identifier, self._operations)), 1334+ owner=self) 1335+ for operation_group_ir in ir.operation_groups 1336 ]) 1337 1338 @property 1339diff --git a/chromium/third_party/blink/renderer/bindings/templates/dictionary_v8.cc.tmpl b/chromium/third_party/blink/renderer/bindings/templates/dictionary_v8.cc.tmpl 1340index 0add9c45a38..dc910f6d227 100644 1341--- a/chromium/third_party/blink/renderer/bindings/templates/dictionary_v8.cc.tmpl 1342+++ b/chromium/third_party/blink/renderer/bindings/templates/dictionary_v8.cc.tmpl 1343@@ -59,9 +59,9 @@ void {{v8_class}}::ToImpl(v8::Isolate* isolate, v8::Local<v8::Value> v8_value, { 1344 DCHECK(executionContext); 1345 {% endif %}{# has_origin_trial_members #} 1346 {% endif %}{# members #} 1347- {% for origin_trial_test, origin_trial_member_list in members | groupby('origin_trial_feature_name') %} 1348+ {% for origin_trial_test, origin_trial_member_list in members | stringifykeygroupby('origin_trial_feature_name') %} 1349 {% filter origin_trial_enabled(origin_trial_test, "executionContext") %} 1350- {% for feature_name, member_list in origin_trial_member_list | groupby('runtime_enabled_feature_name') %} 1351+ {% for feature_name, member_list in origin_trial_member_list | stringifykeygroupby('runtime_enabled_feature_name') %} 1352 {% filter runtime_enabled(feature_name) %} 1353 {% for member in member_list %} 1354 v8::Local<v8::Value> {{member.v8_value}}; 1355@@ -147,9 +147,9 @@ bool toV8{{cpp_class}}(const {{cpp_class}}* impl, v8::Local<v8::Object> dictiona 1356 DCHECK(executionContext); 1357 {% endif %}{# has_origin_trial_members #} 1358 {% endif %}{# members #} 1359- {% for origin_trial_test, origin_trial_member_list in members | groupby('origin_trial_feature_name') %} 1360+ {% for origin_trial_test, origin_trial_member_list in members | stringifykeygroupby('origin_trial_feature_name') %} 1361 {% filter origin_trial_enabled(origin_trial_test, "executionContext") %} 1362- {% for feature_name, member_list in origin_trial_member_list | groupby('runtime_enabled_feature_name') %} 1363+ {% for feature_name, member_list in origin_trial_member_list | stringifykeygroupby('runtime_enabled_feature_name') %} 1364 {% filter runtime_enabled(feature_name) %} 1365 {% for member in member_list %} 1366 v8::Local<v8::Value> {{member.v8_value}}; 1367diff --git a/chromium/third_party/blink/renderer/build/scripts/core/css/make_style_shorthands.py b/chromium/third_party/blink/renderer/build/scripts/core/css/make_style_shorthands.py 1368index 1799cd5a153..5f43ffabc26 100755 1369--- a/chromium/third_party/blink/renderer/build/scripts/core/css/make_style_shorthands.py 1370+++ b/chromium/third_party/blink/renderer/build/scripts/core/css/make_style_shorthands.py 1371@@ -71,7 +71,7 @@ class Expansion(object): 1372 def enabled_longhands(self): 1373 include = lambda longhand: not longhand[ 1374 'runtime_flag'] or self.is_enabled(longhand['runtime_flag']) 1375- return filter(include, self._longhands) 1376+ return list(filter(include, self._longhands)) 1377 1378 @property 1379 def index(self): 1380@@ -87,8 +87,9 @@ class Expansion(object): 1381 1382 def create_expansions(longhands): 1383 flags = collect_runtime_flags(longhands) 1384- expansions = map(lambda mask: Expansion(longhands, flags, mask), 1385- range(1 << len(flags))) 1386+ expansions = list( 1387+ map(lambda mask: Expansion(longhands, flags, mask), 1388+ range(1 << len(flags)))) 1389 assert len(expansions) > 0 1390 # We generate 2^N expansions for N flags, so enforce some limit. 1391 assert len(flags) <= 4, 'Too many runtime flags for a single shorthand' 1392@@ -114,14 +115,14 @@ class StylePropertyShorthandWriter(json5_generator.Writer): 1393 1394 self._longhand_dictionary = defaultdict(list) 1395 for property_ in json5_properties.shorthands: 1396- property_['longhand_enum_keys'] = map(enum_key_for_css_property, 1397- property_['longhands']) 1398- property_['longhand_property_ids'] = map(id_for_css_property, 1399- property_['longhands']) 1400- 1401- longhands = map( 1402- lambda name: json5_properties.properties_by_name[name], 1403- property_['longhands']) 1404+ property_['longhand_enum_keys'] = list( 1405+ map(enum_key_for_css_property, property_['longhands'])) 1406+ property_['longhand_property_ids'] = list( 1407+ map(id_for_css_property, property_['longhands'])) 1408+ 1409+ longhands = list( 1410+ map(lambda name: json5_properties.properties_by_name[name], 1411+ property_['longhands'])) 1412 property_['expansions'] = create_expansions(longhands) 1413 for longhand_enum_key in property_['longhand_enum_keys']: 1414 self._longhand_dictionary[longhand_enum_key].append(property_) 1415diff --git a/chromium/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_instances.py b/chromium/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_instances.py 1416index 75030ac577e..f72aadee17d 100755 1417--- a/chromium/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_instances.py 1418+++ b/chromium/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_instances.py 1419@@ -42,8 +42,8 @@ class CSSPropertyInstancesWriter(json5_generator.Writer): 1420 aliases = self._css_properties.aliases 1421 1422 # Lists of PropertyClassData. 1423- self._property_classes_by_id = map(self.get_class, properties) 1424- self._alias_classes_by_id = map(self.get_class, aliases) 1425+ self._property_classes_by_id = list(map(self.get_class, properties)) 1426+ self._alias_classes_by_id = list(map(self.get_class, aliases)) 1427 1428 # Sort by enum value. 1429 self._property_classes_by_id.sort(key=lambda t: t.enum_value) 1430diff --git a/chromium/third_party/blink/renderer/build/scripts/gperf.py b/chromium/third_party/blink/renderer/build/scripts/gperf.py 1431index 5ee49056be4..db72660d471 100644 1432--- a/chromium/third_party/blink/renderer/build/scripts/gperf.py 1433+++ b/chromium/third_party/blink/renderer/build/scripts/gperf.py 1434@@ -95,7 +95,7 @@ def main(): 1435 1436 open(args.output_file, 'wb').write( 1437 generate_gperf(gperf_path, 1438- open(infile).read(), gperf_args)) 1439+ open(infile).read(), gperf_args).encode('utf-8')) 1440 1441 1442 if __name__ == '__main__': 1443diff --git a/chromium/third_party/blink/renderer/build/scripts/in_file.py b/chromium/third_party/blink/renderer/build/scripts/in_file.py 1444index 28adc050f1e..58113483e57 100644 1445--- a/chromium/third_party/blink/renderer/build/scripts/in_file.py 1446+++ b/chromium/third_party/blink/renderer/build/scripts/in_file.py 1447@@ -66,7 +66,7 @@ class InFile(object): 1448 self._defaults = defaults 1449 self._valid_values = copy.deepcopy( 1450 valid_values if valid_values else {}) 1451- self._parse(map(str.strip, lines)) 1452+ self._parse(list(map(str.strip, lines))) 1453 1454 @classmethod 1455 def load_from_files(self, file_paths, defaults, valid_values, 1456diff --git a/chromium/third_party/blink/renderer/build/scripts/in_generator.py b/chromium/third_party/blink/renderer/build/scripts/in_generator.py 1457index e46740a2e85..ab1981ad1e3 100644 1458--- a/chromium/third_party/blink/renderer/build/scripts/in_generator.py 1459+++ b/chromium/third_party/blink/renderer/build/scripts/in_generator.py 1460@@ -32,10 +32,15 @@ import os 1461 import os.path 1462 import shlex 1463 import shutil 1464+import sys 1465 import optparse 1466 1467 from in_file import InFile 1468 1469+# TODO: Remove this once Python2 is obsoleted. 1470+if sys.version_info.major != 2: 1471+ basestring = str 1472+ 1473 1474 ######################################################### 1475 # This is now deprecated - use json5_generator.py instead 1476diff --git a/chromium/third_party/blink/renderer/build/scripts/make_runtime_features.py b/chromium/third_party/blink/renderer/build/scripts/make_runtime_features.py 1477index cafe8d94a8e..6925a4fa580 100755 1478--- a/chromium/third_party/blink/renderer/build/scripts/make_runtime_features.py 1479+++ b/chromium/third_party/blink/renderer/build/scripts/make_runtime_features.py 1480@@ -138,7 +138,7 @@ class RuntimeFeatureWriter(BaseRuntimeFeatureWriter): 1481 except Exception: 1482 # If trouble unpickling, overwrite 1483 pass 1484- with open(os.path.abspath(file_name), 'w') as pickle_file: 1485+ with open(os.path.abspath(file_name), 'wb') as pickle_file: 1486 pickle.dump(features_map, pickle_file) 1487 1488 def _template_inputs(self): 1489diff --git a/chromium/third_party/blink/renderer/build/scripts/templates/element_factory.cc.tmpl b/chromium/third_party/blink/renderer/build/scripts/templates/element_factory.cc.tmpl 1490index dc3f44c5b10..3eefcf9f0ee 100644 1491--- a/chromium/third_party/blink/renderer/build/scripts/templates/element_factory.cc.tmpl 1492+++ b/chromium/third_party/blink/renderer/build/scripts/templates/element_factory.cc.tmpl 1493@@ -26,7 +26,7 @@ using {{namespace}}FunctionMap = HashMap<AtomicString, {{namespace}}ConstructorF 1494 1495 static {{namespace}}FunctionMap* g_{{namespace|lower}}_constructors = nullptr; 1496 1497-{% for tag in tags|sort if not tag.noConstructor %} 1498+{% for tag in tags|sort(attribute='name') if not tag.noConstructor %} 1499 static {{namespace}}Element* {{namespace}}{{tag.name.to_upper_camel_case()}}Constructor( 1500 Document& document, const CreateElementFlags flags) { 1501 {% if tag.runtimeEnabled %} 1502@@ -52,7 +52,7 @@ static void Create{{namespace}}FunctionMap() { 1503 // Empty array initializer lists are illegal [dcl.init.aggr] and will not 1504 // compile in MSVC. If tags list is empty, add check to skip this. 1505 static const Create{{namespace}}FunctionMapData data[] = { 1506- {% for tag in tags|sort if not tag.noConstructor %} 1507+ {% for tag in tags|sort(attribute='name') if not tag.noConstructor %} 1508 { {{cpp_namespace}}::{{tag|symbol}}Tag, {{namespace}}{{tag.name.to_upper_camel_case()}}Constructor }, 1509 {% endfor %} 1510 }; 1511diff --git a/chromium/third_party/blink/renderer/build/scripts/templates/element_type_helpers.cc.tmpl b/chromium/third_party/blink/renderer/build/scripts/templates/element_type_helpers.cc.tmpl 1512index 9bfc489e048..5f86184e879 100644 1513--- a/chromium/third_party/blink/renderer/build/scripts/templates/element_type_helpers.cc.tmpl 1514+++ b/chromium/third_party/blink/renderer/build/scripts/templates/element_type_helpers.cc.tmpl 1515@@ -22,7 +22,7 @@ HTMLTypeMap CreateHTMLTypeMap() { 1516 const char* name; 1517 HTMLElementType type; 1518 } kTags[] = { 1519- {% for tag in tags|sort %} 1520+ {% for tag in tags|sort(attribute='name') %} 1521 { "{{tag.name}}", HTMLElementType::k{{tag.js_interface}} }, 1522 {% endfor %} 1523 }; 1524@@ -42,7 +42,7 @@ HTMLElementType htmlElementTypeForTag(const AtomicString& tagName, const Documen 1525 if (it == html_type_map.end()) 1526 return HTMLElementType::kHTMLUnknownElement; 1527 1528- {% for tag in tags|sort %} 1529+ {% for tag in tags|sort(attribute='name') %} 1530 {% if tag.runtimeEnabled %} 1531 if (tagName == "{{tag.name}}") { 1532 if (!RuntimeEnabledFeatures::{{tag.runtimeEnabled}}Enabled(document->GetExecutionContext())) { 1533diff --git a/chromium/third_party/blink/renderer/build/scripts/templates/element_type_helpers.h.tmpl b/chromium/third_party/blink/renderer/build/scripts/templates/element_type_helpers.h.tmpl 1534index 1b5297d52dc..edecc81d9d4 100644 1535--- a/chromium/third_party/blink/renderer/build/scripts/templates/element_type_helpers.h.tmpl 1536+++ b/chromium/third_party/blink/renderer/build/scripts/templates/element_type_helpers.h.tmpl 1537@@ -15,7 +15,7 @@ namespace blink { 1538 class Document; 1539 1540 // Type checking. 1541-{% for tag in tags|sort if not tag.multipleTagNames and not tag.noTypeHelpers %} 1542+{% for tag in tags|sort(attribute='name') if not tag.multipleTagNames and not tag.noTypeHelpers %} 1543 class {{tag.interface}}; 1544 template <> 1545 inline bool IsElementOfType<const {{tag.interface}}>(const Node& node) { 1546diff --git a/chromium/third_party/blink/renderer/build/scripts/templates/macros.tmpl b/chromium/third_party/blink/renderer/build/scripts/templates/macros.tmpl 1547index 0244433af2e..dcdbb02a56c 100644 1548--- a/chromium/third_party/blink/renderer/build/scripts/templates/macros.tmpl 1549+++ b/chromium/third_party/blink/renderer/build/scripts/templates/macros.tmpl 1550@@ -25,7 +25,7 @@ 1551 1552 1553 {% macro trie_leaf(index, object, return_macro, lowercase_data) %} 1554-{% set name, value = object.items()[0] %} 1555+{% set name, value = (object.items()|list)[0] %} 1556 {% if name|length %} 1557 if ( 1558 {%- for c in name -%} 1559@@ -45,7 +45,7 @@ return {{ return_macro(value) }}; 1560 1561 1562 {% macro trie_switch(trie, index, return_macro, lowercase_data) %} 1563-{% if trie|length == 1 and trie.values()[0] is string %} 1564+{% if trie|length == 1 and (trie.values()|list)[0] is string %} 1565 {{ trie_leaf(index, trie, return_macro, lowercase_data) -}} 1566 {% else %} 1567 {% if lowercase_data %} 1568diff --git a/chromium/third_party/blink/renderer/build/scripts/templates/make_qualified_names.h.tmpl b/chromium/third_party/blink/renderer/build/scripts/templates/make_qualified_names.h.tmpl 1569index cb05c6c4315..bd5566b03e7 100644 1570--- a/chromium/third_party/blink/renderer/build/scripts/templates/make_qualified_names.h.tmpl 1571+++ b/chromium/third_party/blink/renderer/build/scripts/templates/make_qualified_names.h.tmpl 1572@@ -24,12 +24,12 @@ namespace {{cpp_namespace}} { 1573 {{symbol_export}}extern const WTF::AtomicString& {{namespace_prefix}}NamespaceURI; 1574 1575 // Tags 1576-{% for tag in tags|sort %} 1577+{% for tag in tags|sort(attribute='name') %} 1578 {{symbol_export}}extern const blink::{{namespace}}QualifiedName& {{tag|symbol}}Tag; 1579 {% endfor %} 1580 1581 // Attributes 1582-{% for attr in attrs|sort %} 1583+{% for attr in attrs|sort(attribute='name') %} 1584 {{symbol_export}}extern const blink::QualifiedName& {{attr|symbol}}Attr; 1585 {% endfor %} 1586 1587diff --git a/chromium/third_party/dawn/generator/generator_lib.py b/chromium/third_party/dawn/generator/generator_lib.py 1588index 5e3734d7833..e3d46bd194f 100644 1589--- a/chromium/third_party/dawn/generator/generator_lib.py 1590+++ b/chromium/third_party/dawn/generator/generator_lib.py 1591@@ -201,6 +201,10 @@ def _compute_python_dependencies(root_dir=None): 1592 1593 paths = set() 1594 for path in module_paths: 1595+ # Builtin/namespaced modules may return None for the file path. 1596+ if not path: 1597+ continue 1598+ 1599 path = os.path.abspath(path) 1600 1601 if not path.startswith(root_dir): 1602diff --git a/chromium/third_party/devtools-frontend/src/BUILD.gn b/chromium/third_party/devtools-frontend/src/BUILD.gn 1603index cd488e88b60..ea1dc3d9a79 100644 1604--- a/chromium/third_party/devtools-frontend/src/BUILD.gn 1605+++ b/chromium/third_party/devtools-frontend/src/BUILD.gn 1606@@ -2,6 +2,8 @@ 1607 # Use of this source code is governed by a BSD-style license that can be 1608 # found in the LICENSE file. 1609 1610+import("//build/config/python.gni") 1611+ 1612 import("//third_party/blink/public/public_features.gni") 1613 import("./all_devtools_files.gni") 1614 import("./all_devtools_modules.gni") 1615diff --git a/chromium/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py b/chromium/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py 1616index d6666e8b74f..0f7a661e632 100644 1617--- a/chromium/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py 1618+++ b/chromium/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py 1619@@ -45,7 +45,8 @@ def rollup(input_path, output_path, filename, max_size, rollup_plugin): 1620 ['--format', 'iife', '-n', 'InspectorOverlay'] + ['--input', target] + 1621 ['--plugin', rollup_plugin], 1622 stdout=subprocess.PIPE, 1623- stderr=subprocess.PIPE) 1624+ stderr=subprocess.PIPE, 1625+ text=True) 1626 out, error = rollup_process.communicate() 1627 if not out: 1628 raise Exception("rollup failed: " + error) 1629diff --git a/chromium/third_party/devtools-frontend/src/scripts/build/build_release_applications.py b/chromium/third_party/devtools-frontend/src/scripts/build/build_release_applications.py 1630index fa8e73d34af..7d0b84b2171 100644 1631--- a/chromium/third_party/devtools-frontend/src/scripts/build/build_release_applications.py 1632+++ b/chromium/third_party/devtools-frontend/src/scripts/build/build_release_applications.py 1633@@ -10,7 +10,7 @@ Builds applications in release mode: 1634 and the application loader into a single script. 1635 """ 1636 1637-from cStringIO import StringIO 1638+from io import StringIO 1639 from os import path 1640 from os.path import join 1641 import copy 1642@@ -145,8 +145,7 @@ class ReleaseBuilder(object): 1643 resource_content = read_file(path.join(self.application_dir, resource_name)) 1644 if not (resource_name.endswith('.html') 1645 or resource_name.endswith('md')): 1646- resource_content += resource_source_url(resource_name).encode( 1647- 'utf-8') 1648+ resource_content += resource_source_url(resource_name) 1649 resource_content = resource_content.replace('\\', '\\\\') 1650 resource_content = resource_content.replace('\n', '\\n') 1651 resource_content = resource_content.replace('"', '\\"') 1652@@ -173,7 +172,9 @@ class ReleaseBuilder(object): 1653 def _concatenate_application_script(self, output): 1654 output.write('Root.allDescriptors.push(...%s);' % self._release_module_descriptors()) 1655 if self.descriptors.extends: 1656- output.write('Root.applicationDescriptor.modules.push(...%s);' % json.dumps(self.descriptors.application.values())) 1657+ output.write( 1658+ 'Root.applicationDescriptor.modules.push(...%s);' % 1659+ json.dumps(list(self.descriptors.application.values()))) 1660 else: 1661 output.write('Root.applicationDescriptor = %s;' % self.descriptors.application_json()) 1662 1663diff --git a/chromium/third_party/devtools-frontend/src/scripts/build/generate_devtools_grd.py b/chromium/third_party/devtools-frontend/src/scripts/build/generate_devtools_grd.py 1664index be510c48d76..c6a59c90298 100644 1665--- a/chromium/third_party/devtools-frontend/src/scripts/build/generate_devtools_grd.py 1666+++ b/chromium/third_party/devtools-frontend/src/scripts/build/generate_devtools_grd.py 1667@@ -123,7 +123,7 @@ def main(argv): 1668 1669 try: 1670 os.makedirs(path.join(output_directory, 'Images')) 1671- except OSError, e: 1672+ except OSError as e: 1673 if e.errno != errno.EEXIST: 1674 raise e 1675 1676@@ -147,7 +147,7 @@ def main(argv): 1677 shutil.copy(path.join(dirname, filename), path.join(output_directory, 'Images')) 1678 add_file_to_grd(doc, path.join('Images', filename)) 1679 1680- with open(parsed_args.output_filename, 'w') as output_file: 1681+ with open(parsed_args.output_filename, 'wb') as output_file: 1682 output_file.write(doc.toxml(encoding='UTF-8')) 1683 1684 1685diff --git a/chromium/third_party/devtools-frontend/src/scripts/build/modular_build.py b/chromium/third_party/devtools-frontend/src/scripts/build/modular_build.py 1686index 0ba695d3810..bb1da2f9f8d 100644 1687--- a/chromium/third_party/devtools-frontend/src/scripts/build/modular_build.py 1688+++ b/chromium/third_party/devtools-frontend/src/scripts/build/modular_build.py 1689@@ -7,6 +7,8 @@ 1690 Utilities for the modular DevTools build. 1691 """ 1692 1693+from __future__ import print_function 1694+ 1695 import collections 1696 from os import path 1697 import os 1698@@ -40,7 +42,7 @@ def load_and_parse_json(filename): 1699 try: 1700 return json.loads(read_file(filename)) 1701 except: 1702- print 'ERROR: Failed to parse %s' % filename 1703+ print('ERROR: Failed to parse %s' % filename) 1704 raise 1705 1706 class Descriptors: 1707@@ -57,7 +59,7 @@ class Descriptors: 1708 1709 def application_json(self): 1710 result = dict() 1711- result['modules'] = self.application.values() 1712+ result['modules'] = list(self.application.values()) 1713 return json.dumps(result) 1714 1715 def all_compiled_files(self): 1716diff --git a/chromium/third_party/jinja2/tests.py b/chromium/third_party/jinja2/tests.py 1717index 0adc3d4dbcb..b14f85ff148 100644 1718--- a/chromium/third_party/jinja2/tests.py 1719+++ b/chromium/third_party/jinja2/tests.py 1720@@ -10,7 +10,7 @@ 1721 """ 1722 import operator 1723 import re 1724-from collections import Mapping 1725+from collections.abc import Mapping 1726 from jinja2.runtime import Undefined 1727 from jinja2._compat import text_type, string_types, integer_types 1728 import decimal 1729diff --git a/chromium/tools/metrics/ukm/gen_builders.py b/chromium/tools/metrics/ukm/gen_builders.py 1730index f9f61d90a56..44e46fae8cc 100755 1731--- a/chromium/tools/metrics/ukm/gen_builders.py 1732+++ b/chromium/tools/metrics/ukm/gen_builders.py 1733@@ -48,9 +48,10 @@ def ReadFilteredData(path): 1734 data = ukm_model.UKM_XML_TYPE.Parse(ukm_file.read()) 1735 event_tag = ukm_model._EVENT_TYPE.tag 1736 metric_tag = ukm_model._METRIC_TYPE.tag 1737- data[event_tag] = filter(ukm_model.IsNotObsolete, data[event_tag]) 1738+ data[event_tag] = list(filter(ukm_model.IsNotObsolete, data[event_tag])) 1739 for event in data[event_tag]: 1740- event[metric_tag] = filter(ukm_model.IsNotObsolete, event[metric_tag]) 1741+ event[metric_tag] = list( 1742+ filter(ukm_model.IsNotObsolete, event[metric_tag])) 1743 return data 1744 1745 1746diff --git a/chromium/ui/ozone/generate_constructor_list.py b/chromium/ui/ozone/generate_constructor_list.py 1747index 8d800636c97..04fa18e93df 100755 1748--- a/chromium/ui/ozone/generate_constructor_list.py 1749+++ b/chromium/ui/ozone/generate_constructor_list.py 1750@@ -45,12 +45,15 @@ Example Output: ./ui/ozone/generate_constructor_list.py \ 1751 } // namespace ui 1752 """ 1753 1754+try: 1755+ from StringIO import StringIO # for Python 2 1756+except ImportError: 1757+ from io import StringIO # for Python 3 1758 import optparse 1759 import os 1760 import collections 1761 import re 1762 import sys 1763-import string 1764 1765 1766 def GetTypedefName(typename): 1767@@ -68,7 +71,7 @@ def GetConstructorName(typename, platform): 1768 This is just "Create" + typename + platform. 1769 """ 1770 1771- return 'Create' + typename + string.capitalize(platform) 1772+ return 'Create' + typename + platform.capitalize() 1773 1774 1775 def GenerateConstructorList(out, namespace, export, typenames, platforms, 1776@@ -163,12 +166,14 @@ def main(argv): 1777 sys.exit(1) 1778 1779 # Write to standard output or file specified by --output_cc. 1780- out_cc = sys.stdout 1781+ out_cc = getattr(sys.stdout, 'buffer', sys.stdout) 1782 if options.output_cc: 1783 out_cc = open(options.output_cc, 'wb') 1784 1785- GenerateConstructorList(out_cc, options.namespace, options.export, 1786+ out_cc_str = StringIO() 1787+ GenerateConstructorList(out_cc_str, options.namespace, options.export, 1788 typenames, platforms, includes, usings) 1789+ out_cc.write(out_cc_str.getvalue().encode('utf-8')) 1790 1791 if options.output_cc: 1792 out_cc.close() 1793diff --git a/chromium/ui/ozone/generate_ozone_platform_list.py b/chromium/ui/ozone/generate_ozone_platform_list.py 1794index d47c398259b..2702b68b9bd 100755 1795--- a/chromium/ui/ozone/generate_ozone_platform_list.py 1796+++ b/chromium/ui/ozone/generate_ozone_platform_list.py 1797@@ -49,12 +49,15 @@ Example Output: ./generate_ozone_platform_list.py --default wayland dri wayland 1798 1799 """ 1800 1801+try: 1802+ from StringIO import StringIO # for Python 2 1803+except ImportError: 1804+ from io import StringIO # for Python 3 1805 import optparse 1806 import os 1807 import collections 1808 import re 1809 import sys 1810-import string 1811 1812 1813 def GetConstantName(name): 1814@@ -63,7 +66,7 @@ def GetConstantName(name): 1815 We just capitalize the platform name and prepend "CreateOzonePlatform". 1816 """ 1817 1818- return 'kPlatform' + string.capitalize(name) 1819+ return 'kPlatform' + name.capitalize() 1820 1821 1822 def GeneratePlatformListText(out, platforms): 1823@@ -149,9 +152,9 @@ def main(argv): 1824 platforms.insert(0, options.default) 1825 1826 # Write to standard output or file specified by --output_{cc,h}. 1827- out_cc = sys.stdout 1828- out_h = sys.stdout 1829- out_txt = sys.stdout 1830+ out_cc = getattr(sys.stdout, 'buffer', sys.stdout) 1831+ out_h = getattr(sys.stdout, 'buffer', sys.stdout) 1832+ out_txt = getattr(sys.stdout, 'buffer', sys.stdout) 1833 if options.output_cc: 1834 out_cc = open(options.output_cc, 'wb') 1835 if options.output_h: 1836@@ -159,9 +162,16 @@ def main(argv): 1837 if options.output_txt: 1838 out_txt = open(options.output_txt, 'wb') 1839 1840- GeneratePlatformListText(out_txt, platforms) 1841- GeneratePlatformListHeader(out_h, platforms) 1842- GeneratePlatformListSource(out_cc, platforms) 1843+ out_txt_str = StringIO() 1844+ out_h_str = StringIO() 1845+ out_cc_str = StringIO() 1846+ 1847+ GeneratePlatformListText(out_txt_str, platforms) 1848+ out_txt.write(out_txt_str.getvalue().encode('utf-8')) 1849+ GeneratePlatformListHeader(out_h_str, platforms) 1850+ out_h.write(out_h_str.getvalue().encode('utf-8')) 1851+ GeneratePlatformListSource(out_cc_str, platforms) 1852+ out_cc.write(out_cc_str.getvalue().encode('utf-8')) 1853 1854 if options.output_cc: 1855 out_cc.close() 1856-- 18572.25.1 1858 1859