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
