Run 2to3 on WebCore

https://docs.python.org/3/library/2to3.html

Result of automated tool to migrate the WebCore repo to python 3.
diff --git a/bindings/scripts/aggregate_generated_bindings.py b/bindings/scripts/aggregate_generated_bindings.py
index 5619f48..30177c4 100755
--- a/bindings/scripts/aggregate_generated_bindings.py
+++ b/bindings/scripts/aggregate_generated_bindings.py
@@ -52,9 +52,9 @@
 import os
 import re
 import sys
-from utilities import idl_filename_to_basename
-from utilities import read_idl_files_list_from_file
-from utilities import to_snake_case
+from .utilities import idl_filename_to_basename
+from .utilities import read_idl_files_list_from_file
+from .utilities import to_snake_case
 
 COPYRIGHT_TEMPLATE = """/*
  * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT.
@@ -119,7 +119,7 @@
 def write_content(content, output_file_name):
     parent_path, file_name = os.path.split(output_file_name)
     if not os.path.exists(parent_path):
-        print 'Creating directory: %s' % parent_path
+        print('Creating directory: %s' % parent_path)
         os.makedirs(parent_path)
     with open(output_file_name, 'w') as f:
         f.write(content)
diff --git a/bindings/scripts/blink_idl_lexer.py b/bindings/scripts/blink_idl_lexer.py
index c14b145..8437cb6 100644
--- a/bindings/scripts/blink_idl_lexer.py
+++ b/bindings/scripts/blink_idl_lexer.py
@@ -117,7 +117,7 @@
     try:
         outputdir = argv[1]
     except IndexError as err:
-        print 'Usage: %s OUTPUT_DIR' % argv[0]
+        print('Usage: %s OUTPUT_DIR' % argv[0])
         return 1
     # Important: rewrite_tables=True causes the cache file to be deleted if it
     # exists, thus making sure that PLY doesn't load it instead of regenerating
diff --git a/bindings/scripts/blink_idl_parser.py b/bindings/scripts/blink_idl_parser.py
index be8030c..d519349 100644
--- a/bindings/scripts/blink_idl_parser.py
+++ b/bindings/scripts/blink_idl_parser.py
@@ -71,8 +71,8 @@
 from idl_parser.idl_parser import IDLParser  # pylint: disable=import-error
 from idl_parser.idl_parser import ParseFile as parse_file
 
-from blink_idl_lexer import BlinkIDLLexer
-import blink_idl_lexer
+from .blink_idl_lexer import BlinkIDLLexer
+from . import blink_idl_lexer
 
 
 class BlinkIDLParser(IDLParser):
@@ -137,7 +137,7 @@
     try:
         outputdir = argv[1]
     except IndexError as err:
-        print 'Usage: %s OUTPUT_DIR' % argv[0]
+        print('Usage: %s OUTPUT_DIR' % argv[0])
         return 1
     blink_idl_lexer.main(argv)
     # Important: rewrite_tables=True causes the cache file to be deleted if it
diff --git a/bindings/scripts/blink_idl_parser_test.py b/bindings/scripts/blink_idl_parser_test.py
index 309b463..df06412 100644
--- a/bindings/scripts/blink_idl_parser_test.py
+++ b/bindings/scripts/blink_idl_parser_test.py
@@ -8,7 +8,7 @@
 
 import unittest
 
-from blink_idl_parser import BlinkIDLParser
+from .blink_idl_parser import BlinkIDLParser
 
 
 class BlinkIDLParserTest(unittest.TestCase):
diff --git a/bindings/scripts/code_generator.py b/bindings/scripts/code_generator.py
index 66838f8..e8d6edb 100644
--- a/bindings/scripts/code_generator.py
+++ b/bindings/scripts/code_generator.py
@@ -11,14 +11,14 @@
 import re
 import sys
 
-from idl_types import set_ancestors, IdlType
-from v8_globals import includes
-from v8_interface import constant_filters
-from v8_types import set_component_dirs
-from v8_methods import method_filters
-import v8_utilities
-from v8_utilities import capitalize
-from utilities import (idl_filename_to_component, is_valid_component_dependency,
+from .idl_types import set_ancestors, IdlType
+from .v8_globals import includes
+from .v8_interface import constant_filters
+from .v8_types import set_component_dirs
+from .v8_methods import method_filters
+from . import v8_utilities
+from .v8_utilities import capitalize
+from .utilities import (idl_filename_to_component, is_valid_component_dependency,
                        format_remove_duplicates, format_blink_cpp_source_code,
                        to_snake_case)
 
@@ -179,7 +179,7 @@
         cache_dir = argv[1]
         dummy_filename = argv[2]
     except IndexError:
-        print 'Usage: %s CACHE_DIR DUMMY_FILENAME' % argv[0]
+        print('Usage: %s CACHE_DIR DUMMY_FILENAME' % argv[0])
         return 1
 
     # Cache templates
diff --git a/bindings/scripts/code_generator_v8.py b/bindings/scripts/code_generator_v8.py
index c971aa9..b455c1e 100644
--- a/bindings/scripts/code_generator_v8.py
+++ b/bindings/scripts/code_generator_v8.py
@@ -48,18 +48,18 @@
 import os
 import posixpath
 
-from code_generator import CodeGeneratorBase, render_template, normalize_and_sort_includes
-from idl_definitions import Visitor
-from idl_types import IdlType
-import v8_callback_function
-import v8_callback_interface
-import v8_dictionary
-from v8_globals import includes
-import v8_interface
-import v8_types
-import v8_union
-from v8_utilities import build_basename, cpp_name
-from utilities import idl_filename_to_component, is_testing_target, shorten_union_name, to_snake_case
+from .code_generator import CodeGeneratorBase, render_template, normalize_and_sort_includes
+from .idl_definitions import Visitor
+from .idl_types import IdlType
+from . import v8_callback_function
+from . import v8_callback_interface
+from . import v8_dictionary
+from .v8_globals import includes
+from . import v8_interface
+from . import v8_types
+from . import v8_union
+from .v8_utilities import build_basename, cpp_name
+from .utilities import idl_filename_to_component, is_testing_target, shorten_union_name, to_snake_case
 
 
 # Make sure extension is .py, not .pyc or .pyo, so doesn't depend on caching
@@ -94,7 +94,7 @@
     def resolve(self, definitions, definition_name):
         """Traverse definitions and resolves typedefs with the actual types."""
         self.typedefs = {}
-        for name, typedef in self.info_provider.typedefs.iteritems():
+        for name, typedef in self.info_provider.typedefs.items():
             self.typedefs[name] = typedef.idl_type
         self.additional_header_includes = set()
         definitions.accept(self)
@@ -312,7 +312,7 @@
         # idl_definitions.py. What we do instead is to resolve typedefs in
         # _generate_container_code() whenever a new union file is generated.
         self.typedefs = {}
-        for name, typedef in self.info_provider.typedefs.iteritems():
+        for name, typedef in self.info_provider.typedefs.items():
             self.typedefs[name] = typedef.idl_type
 
     def _generate_container_code(self, union_type):
@@ -404,7 +404,7 @@
         if not callback_functions:
             return ()
         outputs = set()
-        for callback_function_dict in callback_functions.itervalues():
+        for callback_function_dict in callback_functions.values():
             if callback_function_dict['component_dir'] != self.target_component:
                 continue
             callback_function = callback_function_dict['callback_function']
diff --git a/bindings/scripts/code_generator_web_agent_api.py b/bindings/scripts/code_generator_web_agent_api.py
index 69d4aff..60b165a 100644
--- a/bindings/scripts/code_generator_web_agent_api.py
+++ b/bindings/scripts/code_generator_web_agent_api.py
@@ -23,9 +23,9 @@
 import posixpath
 import sys
 
-from code_generator import CodeGeneratorBase, render_template
+from .code_generator import CodeGeneratorBase, render_template
 # TODO(dglazkov): Move TypedefResolver to code_generator.py
-from code_generator_v8 import TypedefResolver
+from .code_generator_v8 import TypedefResolver
 
 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..',
                              'third_party', 'blink', 'tools'))
diff --git a/bindings/scripts/code_generator_web_agent_api_test.py b/bindings/scripts/code_generator_web_agent_api_test.py
index 7f7b96e..d366924 100644
--- a/bindings/scripts/code_generator_web_agent_api_test.py
+++ b/bindings/scripts/code_generator_web_agent_api_test.py
@@ -8,18 +8,18 @@
 
 import unittest
 
-from code_generator_web_agent_api import InterfaceContextBuilder
-from code_generator_web_agent_api import MethodOverloadSplitter
-from code_generator_web_agent_api import STRING_INCLUDE_PATH
-from code_generator_web_agent_api import TypeResolver
-from idl_definitions import IdlArgument
-from idl_definitions import IdlAttribute
-from idl_definitions import IdlOperation
-from idl_types import IdlType
-from idl_types import IdlNullableType
-from idl_types import IdlUnionType
-from idl_types import PRIMITIVE_TYPES
-from idl_types import STRING_TYPES
+from .code_generator_web_agent_api import InterfaceContextBuilder
+from .code_generator_web_agent_api import MethodOverloadSplitter
+from .code_generator_web_agent_api import STRING_INCLUDE_PATH
+from .code_generator_web_agent_api import TypeResolver
+from .idl_definitions import IdlArgument
+from .idl_definitions import IdlAttribute
+from .idl_definitions import IdlOperation
+from .idl_types import IdlType
+from .idl_types import IdlNullableType
+from .idl_types import IdlUnionType
+from .idl_types import PRIMITIVE_TYPES
+from .idl_types import STRING_TYPES
 
 
 # TODO(dglazkov): Convert to use actual objects, not stubs.
@@ -52,7 +52,7 @@
 
     def make_stub_interfaces_info(self, classes_to_paths):
         result = {}
-        for class_name, path in classes_to_paths.iteritems():
+        for class_name, path in classes_to_paths.items():
             result[class_name] = {'include_path': path}
         return result
 
diff --git a/bindings/scripts/compute_global_objects.py b/bindings/scripts/compute_global_objects.py
index ececf61..460be4a 100755
--- a/bindings/scripts/compute_global_objects.py
+++ b/bindings/scripts/compute_global_objects.py
@@ -18,12 +18,12 @@
 import os
 import sys
 
-from utilities import get_file_contents
-from utilities import get_interface_extended_attributes_from_idl
-from utilities import get_first_interface_name_from_idl
-from utilities import read_file_to_list
-from utilities import read_pickle_files
-from utilities import write_pickle_file
+from .utilities import get_file_contents
+from .utilities import get_interface_extended_attributes_from_idl
+from .utilities import get_first_interface_name_from_idl
+from .utilities import read_file_to_list
+from .utilities import read_pickle_files
+from .utilities import write_pickle_file
 
 GLOBAL_EXTENDED_ATTRIBUTES = frozenset([
     'Global',
@@ -51,7 +51,7 @@
 
 
 def dict_union(dicts):
-    return dict((k, v) for d in dicts for k, v in d.iteritems())
+    return dict((k, v) for d in dicts for k, v in d.items())
 
 
 def idl_file_to_global_names(idl_filename):
@@ -68,7 +68,7 @@
     interface_name = get_first_interface_name_from_idl(idl_file_contents)
 
     global_keys = GLOBAL_EXTENDED_ATTRIBUTES.intersection(
-        extended_attributes.iterkeys())
+        iter(extended_attributes.keys()))
     if not global_keys:
         return
     if len(global_keys) > 1:
diff --git a/bindings/scripts/compute_interfaces_info_individual.py b/bindings/scripts/compute_interfaces_info_individual.py
index 98fee87..0850401 100755
--- a/bindings/scripts/compute_interfaces_info_individual.py
+++ b/bindings/scripts/compute_interfaces_info_individual.py
@@ -47,15 +47,15 @@
 import posixpath
 import sys
 
-from idl_definitions import Visitor
-from idl_reader import IdlReader
-from utilities import idl_filename_to_component
-from utilities import idl_filename_to_basename
-from utilities import merge_dict_recursively
-from utilities import read_idl_files_list_from_file
-from utilities import shorten_union_name
-from utilities import to_snake_case
-from utilities import write_pickle_file
+from .idl_definitions import Visitor
+from .idl_reader import IdlReader
+from .utilities import idl_filename_to_component
+from .utilities import idl_filename_to_basename
+from .utilities import merge_dict_recursively
+from .utilities import read_idl_files_list_from_file
+from .utilities import shorten_union_name
+from .utilities import to_snake_case
+from .utilities import write_pickle_file
 
 
 module_path = os.path.dirname(__file__)
@@ -227,7 +227,7 @@
         this_union_types = collect_union_types_from_definitions(definitions)
         self.union_types.update(this_union_types)
         self.typedefs.update(definitions.typedefs)
-        for callback_function_name, callback_function in definitions.callback_functions.iteritems():
+        for callback_function_name, callback_function in definitions.callback_functions.items():
             # Set 'component_dir' to specify a directory that callback function files belong to
             self.callback_functions[callback_function_name] = {
                 'callback_function': callback_function,
@@ -235,14 +235,14 @@
                 'full_path': os.path.realpath(idl_filename),
             }
         # Check enum duplication.
-        for enum in definitions.enumerations.values():
+        for enum in list(definitions.enumerations.values()):
             if not self.check_enum_consistency(enum):
                 raise Exception('Enumeration "%s" is defined more than once '
                                 'with different valid values' % enum.name)
         self.enumerations.update(definitions.enumerations)
 
         if definitions.interfaces:
-            definition = next(definitions.interfaces.itervalues())
+            definition = next(iter(definitions.interfaces.values()))
             interface_info = {
                 'is_callback_interface': definition.is_callback,
                 'is_dictionary': False,
@@ -256,7 +256,7 @@
                 'referenced_interfaces': get_put_forward_interfaces_from_definition(definition),
             }
         elif definitions.dictionaries:
-            definition = next(definitions.dictionaries.itervalues())
+            definition = next(iter(definitions.dictionaries.values()))
             interface_info = {
                 'is_callback_interface': False,
                 'is_dictionary': True,
@@ -337,7 +337,7 @@
         return {
             'callback_functions': self.callback_functions,
             'enumerations': dict((enum.name, enum.values)
-                                 for enum in self.enumerations.values()),
+                                 for enum in list(self.enumerations.values())),
             'typedefs': self.typedefs,
             'union_types': self.union_types,
         }
diff --git a/bindings/scripts/compute_interfaces_info_overall.py b/bindings/scripts/compute_interfaces_info_overall.py
index 2791a9a..6690fed 100755
--- a/bindings/scripts/compute_interfaces_info_overall.py
+++ b/bindings/scripts/compute_interfaces_info_overall.py
@@ -87,11 +87,11 @@
 import sys
 
 from collections import defaultdict
-from utilities import idl_filename_to_component
-from utilities import merge_dict_recursively
-from utilities import read_pickle_files
-from utilities import shorten_union_name
-from utilities import write_pickle_file
+from .utilities import idl_filename_to_component
+from .utilities import merge_dict_recursively
+from .utilities import read_pickle_files
+from .utilities import shorten_union_name
+from .utilities import write_pickle_file
 
 INHERITED_EXTENDED_ATTRIBUTES = set([
     'ActiveScriptWrappable',
@@ -128,12 +128,12 @@
 
     Needed for merging partial_interface_files across components.
     """
-    for key, value in other.iteritems():
+    for key, value in other.items():
         if key not in existing:
             existing[key] = value
             continue
         existing_value = existing[key]
-        for inner_key, inner_value in value.iteritems():
+        for inner_key, inner_value in value.items():
             existing_value[inner_key].extend(inner_value)
 
 
@@ -171,7 +171,7 @@
     garbage_collected_interfaces = set()
     callback_interfaces = set()
 
-    for interface_name, interface_info in interfaces_info.iteritems():
+    for interface_name, interface_info in interfaces_info.items():
         component_dirs[interface_name] = idl_filename_to_component(interface_info['full_path'])
 
         if interface_info['ancestors']:
@@ -209,11 +209,11 @@
                 partial_interface_files, info['partial_interface_files'])
 
     # Record inheritance information individually
-    for interface_name, interface_info in interfaces_info.iteritems():
+    for interface_name, interface_info in interfaces_info.items():
         extended_attributes = interface_info['extended_attributes']
         inherited_extended_attributes_by_interface[interface_name] = dict(
                 (key, value)
-                for key, value in extended_attributes.iteritems()
+                for key, value in extended_attributes.items()
                 if key in INHERITED_EXTENDED_ATTRIBUTES)
         parent = interface_info['parent']
         if parent:
@@ -231,14 +231,14 @@
     # to implement*ing* interface (lhs of 'implements').
     # Note that moving an 'implements' statement between implementing and
     # implemented files does not change the info (or hence cause a rebuild)!
-    for right_interface_name, interface_info in interfaces_info.iteritems():
+    for right_interface_name, interface_info in interfaces_info.items():
         for left_interface_name in interface_info['implemented_by_interfaces']:
             interfaces_info[left_interface_name]['implements_interfaces'].append(right_interface_name)
         del interface_info['implemented_by_interfaces']
 
     # An IDL file's dependencies are partial interface files that extend it,
     # and files for other interfaces that this interfaces implements.
-    for interface_name, interface_info in interfaces_info.iteritems():
+    for interface_name, interface_info in interfaces_info.items():
         partial_interface_paths = partial_interface_files[interface_name]
         partial_interfaces_full_paths = partial_interface_paths['full_paths']
         # Partial interface definitions each need an include, as they are
@@ -296,7 +296,7 @@
         })
 
     # Clean up temporary private information
-    for interface_info in interfaces_info.itervalues():
+    for interface_info in interfaces_info.values():
         del interface_info['extended_attributes']
         del interface_info['union_types']
         del interface_info['is_legacy_treat_as_partial_interface']
diff --git a/bindings/scripts/generate_conditional_features.py b/bindings/scripts/generate_conditional_features.py
index 0028e8a..ea1a475 100644
--- a/bindings/scripts/generate_conditional_features.py
+++ b/bindings/scripts/generate_conditional_features.py
@@ -14,12 +14,12 @@
 import sys
 from collections import defaultdict, namedtuple
 
-from code_generator import (initialize_jinja_env, normalize_and_sort_includes,
+from .code_generator import (initialize_jinja_env, normalize_and_sort_includes,
                             render_template)
-from idl_reader import IdlReader
-from utilities import (create_component_info_provider, write_file,
+from .idl_reader import IdlReader
+from .utilities import (create_component_info_provider, write_file,
                        idl_filename_to_component)
-from v8_utilities import (binding_header_basename, v8_class_name,
+from .v8_utilities import (binding_header_basename, v8_class_name,
                           v8_class_name_or_partial, uncapitalize)
 
 # Make sure extension is .py, not .pyc or .pyo, so doesn't depend on caching
@@ -71,7 +71,7 @@
     implements = definitions.implements
     # There should only be a single interface defined in an IDL file. Return it.
     assert len(interfaces) == 1
-    return (interfaces.values()[0], implements)
+    return (list(interfaces.values())[0], implements)
 
 
 def interface_is_global(interface):
@@ -169,7 +169,7 @@
          'is_global': interface_info.is_global,
          'v8_class': interface_info.v8_class,
          'installers': get_install_functions([interface_info], feature_names)}
-        for interface_info, feature_names in features_for_type.items()]
+        for interface_info, feature_names in list(features_for_type.items())]
     context['installers_by_interface'].sort(key=lambda x: x['name'])
 
     # For each conditional feature, collect a list of bindings installation
@@ -178,7 +178,7 @@
         {'name': feature_name,
          'name_constant': 'OriginTrials::k%sTrialName' % feature_name,
          'installers': get_install_functions(interfaces, [feature_name])}
-        for feature_name, interfaces in types_for_feature.items()]
+        for feature_name, interfaces in list(types_for_feature.items())]
     context['installers_by_feature'].sort(key=lambda x: x['name'])
 
     return context
@@ -240,7 +240,7 @@
 
     info_provider = create_component_info_provider(
         os.path.normpath(options.info_dir), options.target_component.lower())
-    idl_filenames = map(str.strip, open(options.idl_files_list))
+    idl_filenames = list(map(str.strip, open(options.idl_files_list)))
 
     generate_conditional_features(info_provider, options, idl_filenames)
     return 0
diff --git a/bindings/scripts/generate_event_interfaces.py b/bindings/scripts/generate_event_interfaces.py
index 5cc29ae..2e17db8 100755
--- a/bindings/scripts/generate_event_interfaces.py
+++ b/bindings/scripts/generate_event_interfaces.py
@@ -45,7 +45,7 @@
 import posixpath
 import sys
 
-from utilities import (get_file_contents, get_first_interface_name_from_idl,
+from .utilities import (get_file_contents, get_first_interface_name_from_idl,
                        read_file_to_list, write_file,
                        get_interface_extended_attributes_from_idl)
 
diff --git a/bindings/scripts/generate_global_constructors.py b/bindings/scripts/generate_global_constructors.py
index c068fbd..fe374f5 100755
--- a/bindings/scripts/generate_global_constructors.py
+++ b/bindings/scripts/generate_global_constructors.py
@@ -26,16 +26,16 @@
 import sys
 
 from collections import defaultdict
-from utilities import get_file_contents
-from utilities import get_first_interface_name_from_idl
-from utilities import get_interface_exposed_arguments
-from utilities import get_interface_extended_attributes_from_idl
-from utilities import is_non_legacy_callback_interface_from_idl
-from utilities import read_file_to_list
-from utilities import read_pickle_file
-from utilities import should_generate_impl_file_from_idl
-from utilities import write_file
-from v8_utilities import EXPOSED_EXECUTION_CONTEXT_METHOD
+from .utilities import get_file_contents
+from .utilities import get_first_interface_name_from_idl
+from .utilities import get_interface_exposed_arguments
+from .utilities import get_interface_extended_attributes_from_idl
+from .utilities import is_non_legacy_callback_interface_from_idl
+from .utilities import read_file_to_list
+from .utilities import read_pickle_file
+from .utilities import should_generate_impl_file_from_idl
+from .utilities import write_file
+from .v8_utilities import EXPOSED_EXECUTION_CONTEXT_METHOD
 
 interface_name_to_global_names = {}
 global_name_to_constructors = defaultdict(list)
@@ -106,7 +106,7 @@
 def generate_global_constructors_list(interface_name, extended_attributes):
     extended_attributes_list = [
         name + (('=' + extended_attributes[name]) if extended_attributes[name] else '')
-        for name in 'RuntimeEnabled', 'OriginTrialEnabled', 'ContextEnabled', 'SecureContext'
+        for name in ('RuntimeEnabled', 'OriginTrialEnabled', 'ContextEnabled', 'SecureContext')
         if name in extended_attributes]
     if extended_attributes_list:
         extended_string = '[%s] ' % ', '.join(extended_attributes_list)
@@ -170,7 +170,7 @@
         record_global_constructors(idl_filename)
 
     # Check for [Exposed] / [Global] mismatch.
-    known_global_names = EXPOSED_EXECUTION_CONTEXT_METHOD.keys()
+    known_global_names = list(EXPOSED_EXECUTION_CONTEXT_METHOD.keys())
     exposed_global_names = frozenset(global_name_to_constructors)
     if not exposed_global_names.issubset(known_global_names):
         unknown_global_names = exposed_global_names.difference(known_global_names)
diff --git a/bindings/scripts/generate_init_partial_interfaces.py b/bindings/scripts/generate_init_partial_interfaces.py
index 63b782e..8ebd162 100755
--- a/bindings/scripts/generate_init_partial_interfaces.py
+++ b/bindings/scripts/generate_init_partial_interfaces.py
@@ -12,12 +12,12 @@
 import posixpath
 import sys
 
-from utilities import get_file_contents
-from utilities import get_first_interface_name_from_idl
-from utilities import read_idl_files_list_from_file
-from utilities import should_generate_impl_file_from_idl
-from utilities import write_file
-from v8_utilities import build_basename
+from .utilities import get_file_contents
+from .utilities import get_first_interface_name_from_idl
+from .utilities import read_idl_files_list_from_file
+from .utilities import should_generate_impl_file_from_idl
+from .utilities import write_file
+from .v8_utilities import build_basename
 
 
 _COPYRIGHT = """// Copyright 2014 The Chromium Authors. All rights reserved.
@@ -65,10 +65,10 @@
 
     for file_path in file_paths:
         if not file_path.endswith('.idl'):
-            print 'WARNING: non-IDL file passed: "%s"' % file_path
+            print('WARNING: non-IDL file passed: "%s"' % file_path)
             continue
         if not os.path.exists(file_path):
-            print 'WARNING: file not found: "%s"' % file_path
+            print('WARNING: file not found: "%s"' % file_path)
             continue
 
         idl_file_contents = get_file_contents(file_path)
diff --git a/bindings/scripts/generate_v8_context_snapshot_external_references.py b/bindings/scripts/generate_v8_context_snapshot_external_references.py
index 1fa3fae..57a40de 100644
--- a/bindings/scripts/generate_v8_context_snapshot_external_references.py
+++ b/bindings/scripts/generate_v8_context_snapshot_external_references.py
@@ -8,14 +8,14 @@
 import os
 import posixpath
 
-from code_generator import initialize_jinja_env
-from idl_reader import IdlReader
-from utilities import create_component_info_provider, write_file
-import utilities
-import v8_attributes
-import v8_interface
-import v8_types
-import v8_utilities
+from .code_generator import initialize_jinja_env
+from .idl_reader import IdlReader
+from .utilities import create_component_info_provider, write_file
+from . import utilities
+from . import v8_attributes
+from . import v8_interface
+from . import v8_types
+from . import v8_utilities
 
 
 INCLUDES = frozenset([
@@ -160,7 +160,7 @@
             target_definitions = definitions[component]
             interfaces = target_definitions.interfaces
             first_name = target_definitions.first_name
-            if first_name in interfaces.keys():
+            if first_name in list(interfaces.keys()):
                 interface = interfaces[first_name]
                 self._process_interface(interface, component, interfaces)
 
diff --git a/bindings/scripts/idl_compiler.py b/bindings/scripts/idl_compiler.py
index d876a0c..ce275af 100755
--- a/bindings/scripts/idl_compiler.py
+++ b/bindings/scripts/idl_compiler.py
@@ -37,14 +37,14 @@
 import os
 import sys
 
-from code_generator_v8 import CodeGeneratorDictionaryImpl
-from code_generator_v8 import CodeGeneratorV8
-from code_generator_v8 import CodeGeneratorUnionType
-from code_generator_v8 import CodeGeneratorCallbackFunction
-from idl_reader import IdlReader
-from utilities import create_component_info_provider
-from utilities import read_idl_files_list_from_file
-from utilities import write_file
+from .code_generator_v8 import CodeGeneratorDictionaryImpl
+from .code_generator_v8 import CodeGeneratorV8
+from .code_generator_v8 import CodeGeneratorUnionType
+from .code_generator_v8 import CodeGeneratorCallbackFunction
+from .idl_reader import IdlReader
+from .utilities import create_component_info_provider
+from .utilities import read_idl_files_list_from_file
+from .utilities import write_file
 
 
 def parse_options():
@@ -80,11 +80,10 @@
     return options, idl_filename
 
 
-class IdlCompiler(object):
+class IdlCompiler(object, metaclass=abc.ABCMeta):
     """The IDL Compiler.
 
     """
-    __metaclass__ = abc.ABCMeta
 
     def __init__(self, output_directory, cache_directory=None,
                  code_generator_class=None, snake_case_generated_files=False,
diff --git a/bindings/scripts/idl_definitions.py b/bindings/scripts/idl_definitions.py
index f2f0e54..d4e8bdd 100644
--- a/bindings/scripts/idl_definitions.py
+++ b/bindings/scripts/idl_definitions.py
@@ -64,12 +64,12 @@
 
 import abc
 
-from idl_types import IdlFrozenArrayType
-from idl_types import IdlNullableType
-from idl_types import IdlRecordType
-from idl_types import IdlSequenceType
-from idl_types import IdlType
-from idl_types import IdlUnionType
+from .idl_types import IdlFrozenArrayType
+from .idl_types import IdlNullableType
+from .idl_types import IdlRecordType
+from .idl_types import IdlSequenceType
+from .idl_types import IdlType
+from .idl_types import IdlUnionType
 
 SPECIAL_KEYWORD_LIST = ['LEGACYCALLER', 'GETTER', 'SETTER', 'DELETER']
 
@@ -78,13 +78,12 @@
 # TypedObject
 ################################################################################
 
-class TypedObject(object):
+class TypedObject(object, metaclass=abc.ABCMeta):
     """Object with a type, such as an Attribute or Operation (return value).
 
     The type can be an actual type, or can be a typedef, which must be resolved
     by the TypedefResolver before passing data to the code generator.
     """
-    __metaclass__ = abc.ABCMeta
     idl_type_attributes = ('idl_type',)
 
 
@@ -136,22 +135,22 @@
 
     def accept(self, visitor):
         visitor.visit_definitions(self)
-        for interface in self.interfaces.itervalues():
+        for interface in self.interfaces.values():
             interface.accept(visitor)
-        for callback_function in self.callback_functions.itervalues():
+        for callback_function in self.callback_functions.values():
             callback_function.accept(visitor)
-        for dictionary in self.dictionaries.itervalues():
+        for dictionary in self.dictionaries.values():
             dictionary.accept(visitor)
-        for enumeration in self.enumerations.itervalues():
+        for enumeration in self.enumerations.values():
             enumeration.accept(visitor)
         for implement in self.implements:
             implement.accept(visitor)
-        for typedef in self.typedefs.itervalues():
+        for typedef in self.typedefs.values():
             typedef.accept(visitor)
 
     def update(self, other):
         """Update with additional IdlDefinitions."""
-        for interface_name, new_interface in other.interfaces.iteritems():
+        for interface_name, new_interface in other.interfaces.items():
             if not new_interface.is_partial:
                 # Add as new interface
                 self.interfaces[interface_name] = new_interface
@@ -364,7 +363,7 @@
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
-        if len(filter(None, [self.iterable, self.maplike, self.setlike])) > 1:
+        if len([_f for _f in [self.iterable, self.maplike, self.setlike] if _f]) > 1:
             raise ValueError('Interface can only have one of iterable<>, maplike<> and setlike<>.')
 
         # TODO(rakuco): This validation logic should be in v8_interface according to bashi@.
diff --git a/bindings/scripts/idl_definitions_test.py b/bindings/scripts/idl_definitions_test.py
index 78dd732..0b66144 100644
--- a/bindings/scripts/idl_definitions_test.py
+++ b/bindings/scripts/idl_definitions_test.py
@@ -8,7 +8,7 @@
 
 import unittest
 
-from idl_definitions import IdlAttribute
+from .idl_definitions import IdlAttribute
 
 
 class IdlAttributeTest(unittest.TestCase):
diff --git a/bindings/scripts/idl_reader.py b/bindings/scripts/idl_reader.py
index 2bd219d..3e0dafc 100644
--- a/bindings/scripts/idl_reader.py
+++ b/bindings/scripts/idl_reader.py
@@ -34,13 +34,13 @@
 
 import os
 
-import blink_idl_parser
-from blink_idl_parser import BlinkIDLParser
-from idl_definitions import IdlDefinitions
-from idl_validator import EXTENDED_ATTRIBUTES_RELATIVE_PATH, IDLInvalidExtendedAttributeError, IDLExtendedAttributeValidator
-from interface_dependency_resolver import InterfaceDependencyResolver
-from utilities import idl_filename_to_component
-from utilities import to_snake_case
+from . import blink_idl_parser
+from .blink_idl_parser import BlinkIDLParser
+from .idl_definitions import IdlDefinitions
+from .idl_validator import EXTENDED_ATTRIBUTES_RELATIVE_PATH, IDLInvalidExtendedAttributeError, IDLExtendedAttributeValidator
+from .interface_dependency_resolver import InterfaceDependencyResolver
+from .utilities import idl_filename_to_component
+from .utilities import to_snake_case
 
 
 def validate_blink_idl_definitions(idl_filename, idl_file_basename,
@@ -56,8 +56,8 @@
          definitions. There is no filename convention in this case.
        - Otherwise, an IDL file is invalid.
     """
-    targets = (definitions.interfaces.values() +
-               definitions.dictionaries.values())
+    targets = (list(definitions.interfaces.values()) +
+               list(definitions.dictionaries.values()))
     number_of_targets = len(targets)
     if number_of_targets > 1:
         raise Exception(
@@ -127,7 +127,7 @@
             validate_blink_idl_definitions(idl_filename, idl_file_basename, definitions)
         else:
             if len(definitions.interfaces) > 1:
-                print '----- Supplemental interfaces %s' % len(definitions.interfaces)
+                print('----- Supplemental interfaces %s' % len(definitions.interfaces))
 
         # Validate extended attributes
         if not self.extended_attribute_validator:
diff --git a/bindings/scripts/idl_types.py b/bindings/scripts/idl_types.py
index 05298fe..d788508 100644
--- a/bindings/scripts/idl_types.py
+++ b/bindings/scripts/idl_types.py
@@ -348,7 +348,7 @@
         return True
 
     def single_matching_member_type(self, predicate):
-        matching_types = filter(predicate, self.flattened_member_types)
+        matching_types = list(filter(predicate, self.flattened_member_types))
         if len(matching_types) > 1:
             raise ValueError('%s is ambiguous.' % self.name)
         return matching_types[0] if matching_types else None
diff --git a/bindings/scripts/idl_types_test.py b/bindings/scripts/idl_types_test.py
index e360d5a..1abc109 100644
--- a/bindings/scripts/idl_types_test.py
+++ b/bindings/scripts/idl_types_test.py
@@ -8,11 +8,11 @@
 
 import unittest
 
-from idl_types import IdlNullableType
-from idl_types import IdlRecordType
-from idl_types import IdlSequenceType
-from idl_types import IdlType
-from idl_types import IdlUnionType
+from .idl_types import IdlNullableType
+from .idl_types import IdlRecordType
+from .idl_types import IdlSequenceType
+from .idl_types import IdlType
+from .idl_types import IdlUnionType
 
 
 class IdlTypeTest(unittest.TestCase):
diff --git a/bindings/scripts/idl_validator.py b/bindings/scripts/idl_validator.py
index e75099e..5b6914c 100644
--- a/bindings/scripts/idl_validator.py
+++ b/bindings/scripts/idl_validator.py
@@ -52,7 +52,7 @@
 
     def validate_extended_attributes(self, definitions):
         # FIXME: this should be done when parsing the file, rather than after.
-        for interface in definitions.interfaces.itervalues():
+        for interface in definitions.interfaces.values():
             self.validate_extended_attributes_node(interface)
             for attribute in interface.attributes:
                 self.validate_extended_attributes_node(attribute)
@@ -62,7 +62,7 @@
                     self.validate_extended_attributes_node(argument)
 
     def validate_extended_attributes_node(self, node):
-        for name, values_string in node.extended_attributes.iteritems():
+        for name, values_string in node.extended_attributes.items():
             self.validate_name_values_string(name, values_string)
 
     def validate_name_values_string(self, name, values_string):
@@ -96,7 +96,7 @@
                 line = line.strip()
                 if not line or line.startswith('#'):
                     continue
-                name, _, values_string = map(str.strip, line.partition('='))
+                name, _, values_string = list(map(str.strip, line.partition('=')))
                 value_list = [value.strip() for value in values_string.split('|')]
                 yield name, value_list
 
diff --git a/bindings/scripts/interface_dependency_resolver.py b/bindings/scripts/interface_dependency_resolver.py
index 239f11e..a7e8cca 100644
--- a/bindings/scripts/interface_dependency_resolver.py
+++ b/bindings/scripts/interface_dependency_resolver.py
@@ -37,7 +37,7 @@
 """
 
 import os.path
-from utilities import idl_filename_to_component, is_valid_component_dependency, merge_dict_recursively
+from .utilities import idl_filename_to_component, is_valid_component_dependency, merge_dict_recursively
 
 # The following extended attributes can be applied to a dependency interface,
 # and are then applied to the individual members when merging.
@@ -103,7 +103,7 @@
                             'this definition: %s, because this should '
                             'have a dictionary.' % definitions.idl_name)
 
-        target_interface = next(definitions.interfaces.itervalues())
+        target_interface = next(iter(definitions.interfaces.values()))
         interface_name = target_interface.name
         interface_info = self.interfaces_info[interface_name]
 
@@ -161,7 +161,7 @@
         dependency_definitions = reader.read_idl_file(dependency_idl_filename)
         dependency_component = idl_filename_to_component(dependency_idl_filename)
 
-        dependency_interface = next(dependency_definitions.interfaces.itervalues())
+        dependency_interface = next(iter(dependency_definitions.interfaces.values()))
 
         transfer_extended_attributes(dependency_interface,
                                      dependency_idl_filename)
@@ -307,7 +307,7 @@
                 'ImplementedAs', dependency_interface.name))
 
     def update_attributes(attributes, extras):
-        for key, value in extras.items():
+        for key, value in list(extras.items()):
             if key not in attributes:
                 attributes[key] = value
 
@@ -342,8 +342,8 @@
         cpp_includes.update(interface.get('cpp_includes', {}).get(component, {}))
         return unforgeable_attributes, referenced_interfaces, cpp_includes
 
-    for component, definitions in resolved_definitions.iteritems():
-        for interface_name, interface in definitions.interfaces.iteritems():
+    for component, definitions in resolved_definitions.items():
+        for interface_name, interface in definitions.interfaces.items():
             interface_info = interfaces_info[interface_name]
             inherited_unforgeable_attributes, referenced_interfaces, cpp_includes = collect_unforgeable_attributes_in_ancestors(interface_info.get('parent'), component)
             # This loop may process the same interface many times, so it's
diff --git a/bindings/scripts/overload_set_algorithm.py b/bindings/scripts/overload_set_algorithm.py
index 6425a84..a2505a9 100644
--- a/bindings/scripts/overload_set_algorithm.py
+++ b/bindings/scripts/overload_set_algorithm.py
@@ -121,7 +121,7 @@
     # Filter to only methods that are actually overloaded
     method_counts = Counter(method['name'] for method in methods)
     overloaded_method_names = set(name
-                                  for name, count in method_counts.iteritems()
+                                  for name, count in method_counts.items()
                                   if count > 1)
     overloaded_methods = [method for method in methods
                           if method['name'] in overloaded_method_names]
diff --git a/bindings/scripts/overload_set_algorithm_test.py b/bindings/scripts/overload_set_algorithm_test.py
index 389a9ed..dacf861 100644
--- a/bindings/scripts/overload_set_algorithm_test.py
+++ b/bindings/scripts/overload_set_algorithm_test.py
@@ -7,7 +7,7 @@
 """Unit tests for overload_set_algorithm.py."""
 
 import unittest
-from overload_set_algorithm import effective_overload_set
+from .overload_set_algorithm import effective_overload_set
 
 
 class EffectiveOverloadSetTest(unittest.TestCase):
diff --git a/bindings/scripts/utilities.py b/bindings/scripts/utilities.py
index 421cd65..3656c95 100644
--- a/bindings/scripts/utilities.py
+++ b/bindings/scripts/utilities.py
@@ -8,7 +8,7 @@
 """
 
 import os
-import cPickle as pickle
+import pickle as pickle
 import re
 import shlex
 import string
@@ -190,8 +190,8 @@
 
     @property
     def callback_functions(self):
-        return dict(self._component_info_core['callback_functions'].items() +
-                    self._component_info_modules['callback_functions'].items())
+        return dict(list(self._component_info_core['callback_functions'].items()) +
+                    list(self._component_info_modules['callback_functions'].items()))
 
     @property
     def specifier_for_export(self):
@@ -212,7 +212,7 @@
     |target| will be updated with |diff|.  Part of |diff| may be re-used in
     |target|.
     """
-    for key, value in diff.iteritems():
+    for key, value in diff.items():
         if key not in target:
             target[key] = value
         elif type(value) == dict:
@@ -398,7 +398,7 @@
              # Discard empty parts, which may exist due to trailing comma
              if extended_attribute.strip()]
     for part in parts:
-        name, _, value = map(string.strip, part.partition('='))
+        name, _, value = list(map(string.strip, part.partition('=')))
         extended_attributes[name] = value
     return extended_attributes
 
diff --git a/bindings/scripts/v8_attributes.py b/bindings/scripts/v8_attributes.py
index fad2784..abf8ae4 100644
--- a/bindings/scripts/v8_attributes.py
+++ b/bindings/scripts/v8_attributes.py
@@ -35,12 +35,12 @@
 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
 """
 
-import idl_types
-from idl_types import inherits_interface
-from v8_globals import includes
-import v8_types
-import v8_utilities
-from v8_utilities import (cpp_name_or_partial, capitalize, cpp_name, has_extended_attribute,
+from . import idl_types
+from .idl_types import inherits_interface
+from .v8_globals import includes
+from . import v8_types
+from . import v8_utilities
+from .v8_utilities import (cpp_name_or_partial, capitalize, cpp_name, has_extended_attribute,
                           has_extended_attribute_value, scoped_name, strip_suffix,
                           uncapitalize, extended_attribute_value_as_list, is_unforgeable,
                           is_legacy_interface_type_checking)
diff --git a/bindings/scripts/v8_callback_function.py b/bindings/scripts/v8_callback_function.py
index 4f51dd2..b5a20b9 100644
--- a/bindings/scripts/v8_callback_function.py
+++ b/bindings/scripts/v8_callback_function.py
@@ -7,8 +7,8 @@
 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
 """
 
-from utilities import to_snake_case
-from v8_globals import includes
+from .utilities import to_snake_case
+from .v8_globals import includes
 
 CALLBACK_FUNCTION_H_INCLUDES = frozenset([
     'bindings/core/v8/NativeValueTraits.h',
diff --git a/bindings/scripts/v8_callback_interface.py b/bindings/scripts/v8_callback_interface.py
index c034dd3..b40e1fa 100644
--- a/bindings/scripts/v8_callback_interface.py
+++ b/bindings/scripts/v8_callback_interface.py
@@ -33,11 +33,11 @@
 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
 """
 
-from idl_types import IdlTypeBase
-from v8_globals import includes
-from v8_interface import constant_context
-import v8_types
-import v8_utilities
+from .idl_types import IdlTypeBase
+from .v8_globals import includes
+from .v8_interface import constant_context
+from . import v8_types
+from . import v8_utilities
 
 CALLBACK_INTERFACE_H_INCLUDES = frozenset([
     'platform/bindings/DOMWrapperWorld.h',
diff --git a/bindings/scripts/v8_dictionary.py b/bindings/scripts/v8_dictionary.py
index 0909d11..882a4f4 100644
--- a/bindings/scripts/v8_dictionary.py
+++ b/bindings/scripts/v8_dictionary.py
@@ -7,12 +7,12 @@
 """
 
 import operator
-from idl_types import IdlType
-from utilities import to_snake_case
-from v8_globals import includes
-import v8_types
-import v8_utilities
-from v8_utilities import has_extended_attribute_value
+from .idl_types import IdlType
+from .utilities import to_snake_case
+from .v8_globals import includes
+from . import v8_types
+from . import v8_utilities
+from .v8_utilities import has_extended_attribute_value
 
 
 DICTIONARY_H_INCLUDES = frozenset([
@@ -167,7 +167,7 @@
             if duplicated_member and duplicated_member != member:
                 raise Exception('Member name conflict: %s' % cpp_name)
             members_dict[cpp_name] = member
-        return sorted(members_dict.values(), key=lambda member: member['cpp_name'])
+        return sorted(list(members_dict.values()), key=lambda member: member['cpp_name'])
 
     includes.clear()
     header_forward_decls = set()
diff --git a/bindings/scripts/v8_interface.py b/bindings/scripts/v8_interface.py
index c8b3245..b3956bd 100644
--- a/bindings/scripts/v8_interface.py
+++ b/bindings/scripts/v8_interface.py
@@ -35,17 +35,17 @@
 """
 from operator import or_
 
-from idl_definitions import IdlAttribute, IdlOperation, IdlArgument
-from idl_types import IdlType, inherits_interface
-from overload_set_algorithm import effective_overload_set_by_length
-from overload_set_algorithm import method_overloads_by_name
+from .idl_definitions import IdlAttribute, IdlOperation, IdlArgument
+from .idl_types import IdlType, inherits_interface
+from .overload_set_algorithm import effective_overload_set_by_length
+from .overload_set_algorithm import method_overloads_by_name
 
-import v8_attributes
-from v8_globals import includes
-import v8_methods
-import v8_types
-import v8_utilities
-from v8_utilities import (context_enabled_feature_name, cpp_name_or_partial, cpp_name,
+from . import v8_attributes
+from .v8_globals import includes
+from . import v8_methods
+from . import v8_types
+from . import v8_utilities
+from .v8_utilities import (context_enabled_feature_name, cpp_name_or_partial, cpp_name,
                           has_extended_attribute_value, runtime_enabled_feature_name,
                           is_legacy_interface_type_checking)
 
@@ -1134,9 +1134,9 @@
 
     # Extract argument and IDL type to simplify accessing these in each loop.
     arguments = [method['arguments'][index] for method in methods]
-    arguments_methods = zip(arguments, methods)
+    arguments_methods = list(zip(arguments, methods))
     idl_types = [argument['idl_type_object'] for argument in arguments]
-    idl_types_methods = zip(idl_types, methods)
+    idl_types_methods = list(zip(idl_types, methods))
 
     # We can’t do a single loop through all methods or simply sort them, because
     # a method may be listed in multiple steps of the resolution algorithm, and
diff --git a/bindings/scripts/v8_methods.py b/bindings/scripts/v8_methods.py
index b199947..44f37a0 100644
--- a/bindings/scripts/v8_methods.py
+++ b/bindings/scripts/v8_methods.py
@@ -34,12 +34,12 @@
 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
 """
 
-from idl_definitions import IdlArgument, IdlOperation
-from idl_types import IdlTypeBase, IdlUnionType, inherits_interface
-from v8_globals import includes
-import v8_types
-import v8_utilities
-from v8_utilities import (has_extended_attribute_value, is_unforgeable,
+from .idl_definitions import IdlArgument, IdlOperation
+from .idl_types import IdlTypeBase, IdlUnionType, inherits_interface
+from .v8_globals import includes
+from . import v8_types
+from . import v8_utilities
+from .v8_utilities import (has_extended_attribute_value, is_unforgeable,
                           is_legacy_interface_type_checking)
 
 
@@ -477,7 +477,7 @@
                                 % idl_type.name)
             # Union container objects are "null" initially.
             return '/* null default value */'
-        if isinstance(default_value.value, basestring):
+        if isinstance(default_value.value, str):
             member_type = idl_type.string_member_type
         elif isinstance(default_value.value, (int, float)):
             member_type = idl_type.numeric_member_type
diff --git a/bindings/scripts/v8_types.py b/bindings/scripts/v8_types.py
index b59f393..2c0b868 100644
--- a/bindings/scripts/v8_types.py
+++ b/bindings/scripts/v8_types.py
@@ -41,16 +41,16 @@
 
 import posixpath
 
-from idl_types import IdlArrayOrSequenceType
-from idl_types import IdlNullableType
-from idl_types import IdlRecordType
-from idl_types import IdlType
-from idl_types import IdlTypeBase
-from idl_types import IdlUnionType
-from utilities import to_snake_case
-import v8_attributes  # for IdlType.constructor_type_name
-from v8_globals import includes
-from v8_utilities import extended_attribute_value_contains
+from .idl_types import IdlArrayOrSequenceType
+from .idl_types import IdlNullableType
+from .idl_types import IdlRecordType
+from .idl_types import IdlType
+from .idl_types import IdlTypeBase
+from .idl_types import IdlUnionType
+from .utilities import to_snake_case
+from . import v8_attributes  # for IdlType.constructor_type_name
+from .v8_globals import includes
+from .v8_utilities import extended_attribute_value_contains
 
 
 ################################################################################
diff --git a/bindings/scripts/v8_union.py b/bindings/scripts/v8_union.py
index 7778c88..8d1e4ad 100644
--- a/bindings/scripts/v8_union.py
+++ b/bindings/scripts/v8_union.py
@@ -2,9 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-from utilities import to_snake_case
-import v8_types
-import v8_utilities
+from .utilities import to_snake_case
+from . import v8_types
+from . import v8_utilities
 
 
 UNION_CPP_INCLUDES = frozenset([
diff --git a/bindings/scripts/v8_utilities.py b/bindings/scripts/v8_utilities.py
index 08c4fe8..9cd6ad0 100644
--- a/bindings/scripts/v8_utilities.py
+++ b/bindings/scripts/v8_utilities.py
@@ -35,11 +35,11 @@
 import re
 import sys
 
-from idl_types import IdlTypeBase
-import idl_types
-from idl_definitions import Exposure, IdlInterface, IdlAttribute
-from utilities import to_snake_case
-from v8_globals import includes
+from .idl_types import IdlTypeBase
+from . import idl_types
+from .idl_definitions import Exposure, IdlInterface, IdlAttribute
+from .utilities import to_snake_case
+from .v8_globals import includes
 
 ACRONYMS = [
     'CSSOM',  # must come *before* CSS to match full acronym