diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index ec4e5d2..6662d2e 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
@@ -10,11 +11,14 @@
 import imp
 import os
 import os.path
+from typing import Callable
 import scm
 import subprocess
-import tempfile
 import platform
 
+USE_PYTHON3 = True
+
+
 def is_cpp_file(path):
     return path.endswith('.cc') or path.endswith('.h')
 
@@ -68,7 +72,7 @@
                  identification,
                  extension,
                  windows,
-                 hasFormatErrors,
+                 hasFormatErrors: Callable[[str, str], bool],
                  should_skip=lambda path: False):
     local_root = input_api.change.RepositoryRoot()
     upstream = input_api.change._upstream
@@ -105,7 +109,6 @@
 
 def _CheckDartFormat(input_api, output_api):
     local_root = input_api.change.RepositoryRoot()
-    upstream = input_api.change._upstream
     utils = imp.load_source('utils',
                             os.path.join(local_root, 'tools', 'utils.py'))
 
@@ -119,7 +122,7 @@
         print('WARNING: dart not found: %s' % (dart))
         return []
 
-    def HasFormatErrors(filename=None, contents=None):
+    def HasFormatErrors(filename: str = None, contents: str = None):
         # Don't look for formatting errors in multitests. Since those are very
         # sensitive to whitespace, many cannot be formatted with dartfmt without
         # breaking them.
@@ -135,11 +138,12 @@
             '--set-exit-if-changed',
             '--output=none',
             '--summary=none',
-            filename,
         ]
-
-        process = subprocess.Popen(
-            args, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
+        if contents:
+            process = subprocess.run(args, input=contents, text=True)
+        else:
+            args.append(filename)
+            process = subprocess.run(args)
 
         # Check for exit code 1 explicitly to distinguish it from a syntax error
         # in the file (exit code 65). The repo contains many Dart files that are
@@ -158,8 +162,8 @@
             output_api.PresubmitError(
                 'File output does not match dartfmt.\n'
                 'Fix these issues with:\n'
-                '%s -w%s%s' % (prebuilt_dartfmt, lineSep,
-                               lineSep.join(unformatted_files)))
+                '%s format %s%s' %
+                (dart, lineSep, lineSep.join(unformatted_files)))
         ]
 
     return []
@@ -167,7 +171,6 @@
 
 def _CheckStatusFiles(input_api, output_api):
     local_root = input_api.change.RepositoryRoot()
-    upstream = input_api.change._upstream
     utils = imp.load_source('utils',
                             os.path.join(local_root, 'tools', 'utils.py'))
 
@@ -188,9 +191,7 @@
 
     def HasFormatErrors(filename=None, contents=None):
         args = [dart, lint] + (['-t'] if contents else [filename])
-        process = subprocess.Popen(
-            args, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
-        process.communicate(input=contents)
+        process = subprocess.run(args, input=contents, text=True)
         return process.returncode != 0
 
     def should_skip(path):
@@ -230,12 +231,8 @@
     dart = utils.CheckedInSdkExecutable()
     generate = os.path.join(local_root, 'tools', 'generate_package_config.dart')
     cmd = [dart, generate, '--check']
-    pipe = subprocess.Popen(cmd,
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE,
-                            shell=utils.IsWindows())
-    output = pipe.communicate()
-    if pipe.returncode != 0:
+    result = subprocess.run(cmd, shell=utils.IsWindows())
+    if result.returncode != 0:
         return [
             output_api.PresubmitError(
                 'File .dart_tool/package_config.json is out of date.\n'
@@ -255,7 +252,7 @@
     try:
         input_api.subprocess.check_output(['gclient', 'verify'])
         return []
-    except input_api.subprocess.CalledProcessError, error:
+    except input_api.subprocess.CalledProcessError as error:
         return [
             output_api.PresubmitError(
                 'DEPS file must have only dependencies from allowed hosts.',
diff --git a/pkg/_fe_analyzer_shared/PRESUBMIT.py b/pkg/_fe_analyzer_shared/PRESUBMIT.py
index 1a4331d..7059280 100644
--- a/pkg/_fe_analyzer_shared/PRESUBMIT.py
+++ b/pkg/_fe_analyzer_shared/PRESUBMIT.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
@@ -11,6 +12,8 @@
 import os.path
 import subprocess
 
+USE_PYTHON3 = True
+
 
 def runSmokeTest(input_api, output_api):
     hasChangedFiles = False
diff --git a/pkg/front_end/PRESUBMIT.py b/pkg/front_end/PRESUBMIT.py
index 8f25cd2..0a04904 100644
--- a/pkg/front_end/PRESUBMIT.py
+++ b/pkg/front_end/PRESUBMIT.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
@@ -11,6 +12,8 @@
 import os.path
 import subprocess
 
+USE_PYTHON3 = True
+
 
 def runSmokeTest(input_api, output_api):
     hasChangedFiles = False
diff --git a/pkg/kernel/PRESUBMIT.py b/pkg/kernel/PRESUBMIT.py
index ee42fc8..8630f20 100644
--- a/pkg/kernel/PRESUBMIT.py
+++ b/pkg/kernel/PRESUBMIT.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
@@ -11,6 +12,8 @@
 import os.path
 import subprocess
 
+USE_PYTHON3 = True
+
 
 def runSmokeTest(input_api, output_api):
     hasChangedFiles = False
diff --git a/runtime/PRESUBMIT.py b/runtime/PRESUBMIT.py
index 210b951..2077f5a 100644
--- a/runtime/PRESUBMIT.py
+++ b/runtime/PRESUBMIT.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
@@ -5,8 +6,8 @@
 import os
 import cpplint
 import re
-import StringIO
 
+USE_PYTHON3 = True
 
 # memcpy does not handle overlapping memory regions. Even though this
 # is well documented it seems to be used in error quite often. To avoid
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 0097562..b16c875 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -59,22 +59,24 @@
 LibTest/io/*: SkipByDesign # dart:io not supported.
 LibTest/isolate/*: SkipByDesign # dart:isolate not supported.
 LibTest/mirrors/*: SkipByDesign # dart:mirrors is not supported
-LibTest/typed_data/ByteBuffer/*: SkipByDesign # not supported on the web
-LibTest/typed_data/ByteData/getInt64_A01_t01: SkipByDesign # uses integer literal not representable as JavaScript number
-LibTest/typed_data/ByteData/getInt64_A02_t01: SkipByDesign # Int64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/getInt64_A02_t02: SkipByDesign # Int64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/getUint64_A01_t01: SkipByDesign # uses integer literal not representable as JavaScript number
-LibTest/typed_data/ByteData/getUint64_A02_t01: SkipByDesign # Int64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/getUint64_A02_t02: SkipByDesign # Int64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/setInt64_A01_t01: SkipByDesign # uses integer literal not representable as JavaScript number
-LibTest/typed_data/ByteData/setInt64_A02_t01: SkipByDesign # Int64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/setInt64_A02_t02: SkipByDesign # Int64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/setUint64_A01_t01: SkipByDesign # uses integer literal not representable as JavaScript number
-LibTest/typed_data/ByteData/setUint64_A02_t01: SkipByDesign # Uint64 accessor not supported by dart2js
-LibTest/typed_data/ByteData/setUint64_A02_t02: SkipByDesign # Uint64 accessor not supported by dart2js
-LibTest/typed_data/Int32x4/operator_OR_A01_t01: SkipByDesign # Bitwise operations in JS are unsigned.
-LibTest/typed_data/Int32x4List/join_A01_t01: SkipByDesign # Different string represrntation on VM and in JS
-LibTest/typed_data/Int32x4List/join_A01_t02: SkipByDesign # Different string represrntation on VM and in JS
+LibTest/typed_data/ByteBuffer/asInt64List_A01_t01: SkipByDesign # Int64List not supported on the web
+LibTest/typed_data/ByteBuffer/asInt64List_A02_t01: SkipByDesign # Int64List not supported on the web
+LibTest/typed_data/ByteBuffer/asInt64List_A03_t01: SkipByDesign # Int64List not supported on the web
+LibTest/typed_data/ByteBuffer/asUint64List_A01_t01: SkipByDesign # UInt64List not supported on the web
+LibTest/typed_data/ByteBuffer/asUint64List_A02_t01: SkipByDesign # UInt64List not supported on the web
+LibTest/typed_data/ByteBuffer/asUint64List_A03_t01: SkipByDesign # UInt64List not supported on the web
+LibTest/typed_data/ByteData/getInt64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getInt64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getInt64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getUint64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getUint64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getUint64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setInt64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setInt64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setInt64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setUint64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setUint64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setUint64_A02_t02: SkipByDesign # 64-bit int not supported on the web
 LibTest/typed_data/Int64List/*: SkipByDesign # Int64List not supported on the web
 LibTest/typed_data/Uint64List/*: SkipByDesign # Uint64List not supported on the web
 
diff --git a/tests/co19_2/co19_2-dart2js.status b/tests/co19_2/co19_2-dart2js.status
index 5c38055..177ae2a 100644
--- a/tests/co19_2/co19_2-dart2js.status
+++ b/tests/co19_2/co19_2-dart2js.status
@@ -14,6 +14,26 @@
 Language/Metadata/before*: SkipByDesign # dart:mirrors not supported https://github.com/dart-lang/co19/issues/523.
 LibTest/io/*: SkipByDesign # dart:io not supported.
 LibTest/isolate/*: SkipByDesign # dart:isolate not supported.
+LibTest/typed_data/ByteBuffer/asInt64List_A01_t01: SkipByDesign # Int64List not supported on the web
+LibTest/typed_data/ByteBuffer/asInt64List_A02_t01: SkipByDesign # Int64List not supported on the web
+LibTest/typed_data/ByteBuffer/asInt64List_A03_t01: SkipByDesign # Int64List not supported on the web
+LibTest/typed_data/ByteBuffer/asUint64List_A01_t01: SkipByDesign # UInt64List not supported on the web
+LibTest/typed_data/ByteBuffer/asUint64List_A02_t01: SkipByDesign # UInt64List not supported on the web
+LibTest/typed_data/ByteBuffer/asUint64List_A03_t01: SkipByDesign # UInt64List not supported on the web
+LibTest/typed_data/ByteData/getInt64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getInt64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getInt64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getUint64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getUint64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/getUint64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setInt64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setInt64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setInt64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setUint64_A01_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setUint64_A02_t01: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/ByteData/setUint64_A02_t02: SkipByDesign # 64-bit int not supported on the web
+LibTest/typed_data/Int64List/*: SkipByDesign # Int64List not supported on the web
+LibTest/typed_data/Uint64List/*: SkipByDesign # Uint64List not supported on the web
 
 [ $compiler == dart2js && $runtime == d8 ]
 LibTest/html/*: SkipByDesign # d8 is not a browser
diff --git a/tools/VERSION b/tools/VERSION
index 0aeed3a..f7e936c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 17
+PRERELEASE 18
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/dom/PRESUBMIT.py b/tools/dom/PRESUBMIT.py
deleted file mode 100644
index f6a6439..0000000
--- a/tools/dom/PRESUBMIT.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-"""
-Presubmit tests for dom tools.
-
-This file is run by git_cl or gcl when an upload or submit happens with
-any files at this level or lower are in the change list.
-
-See: http://www.chromium.org/developers/how-tos/depottools/presubmit-scripts
-"""
-
-import os
-
-
-def _AnySdkFiles(input_api):
-    """ Returns true if any of the changed files are in the sdk, meaning we should
-  check that docs.dart was run.
-  """
-    for f in input_api.change.AffectedFiles():
-        if f.LocalPath().find('sdk') > -1:
-            return True
-    return False
-
-
-def CheckChangeOnUpload(input_api, output_api):
-    results = []
-    # TODO(amouravski): uncomment this check once docs.dart is faster.
-    #  if _AnySdkFiles(input_api):
-    #    results.extend(CheckDocs(input_api, output_api))
-    return results
-
-
-def CheckChangeOnCommit(input_api, output_api):
-    results = []
-    if _AnySdkFiles(input_api):
-        results.extend(CheckDocs(input_api, output_api))
-    return results
-
-
-def CheckDocs(input_api, output_api):
-    """Ensure that documentation has been generated if it needs to be generated.
-
-  Prompts with a warning if documentation needs to be generated.
-  """
-    results = []
-
-    cmd = [os.path.join(input_api.PresubmitLocalPath(), 'dom.py'), 'test_docs']
-
-    try:
-        input_api.subprocess.check_output(
-            cmd, stderr=input_api.subprocess.STDOUT)
-    except (OSError, input_api.subprocess.CalledProcessError), e:
-        results.append(
-            output_api.PresubmitPromptWarning(
-                ('Docs test failed!%s\nYou should run `dom.py docs`' %
-                 (e if input_api.verbose else ''))))
-
-    return results
