diff --git a/tools/chrome_data.py b/tools/chrome_data.py
deleted file mode 100644
index 8499d72..0000000
--- a/tools/chrome_data.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright (c) 2018, the R8 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.
-
-import os
-import utils
-
-ANDROID_N_API = '24'
-BASE = os.path.join(utils.THIRD_PARTY, 'chrome')
-
-V200430_BASE = os.path.join(BASE, 'chrome_200430')
-V200520_MINIMAL_BASE = os.path.join(BASE, 'monochrome_public_minimal_apks',
-                                    'chrome_200520')
-
-VERSIONS = {
-    '200430': {
-        'deploy': {
-            'inputs': [os.path.join(V200430_BASE, 'program.jar')],
-            'pgconf': [os.path.join(V200430_BASE, 'proguard.config')],
-            'libraries': [os.path.join(V200430_BASE, 'library.jar')],
-            'min-api': ANDROID_N_API,
-        },
-    },
-    '200520-monochrome_public_minimal_apks': {
-        'deploy': {
-            'inputs': [os.path.join(V200520_MINIMAL_BASE, 'program.jar')],
-            'features': [{
-                'inputs': [os.path.join(V200520_MINIMAL_BASE, 'feature-1.jar')]
-            }, {
-                'inputs': [os.path.join(V200520_MINIMAL_BASE, 'feature-2.jar')]
-            }, {
-                'inputs': [os.path.join(V200520_MINIMAL_BASE, 'feature-3.jar')]
-            }, {
-                'inputs': [os.path.join(V200520_MINIMAL_BASE, 'feature-4.jar')]
-            }, {
-                'inputs': [os.path.join(V200520_MINIMAL_BASE, 'feature-5.jar')]
-            }, {
-                'inputs': [os.path.join(V200520_MINIMAL_BASE, 'feature-6.jar')]
-            }, {
-                'inputs': [os.path.join(V200520_MINIMAL_BASE, 'feature-7.jar')]
-            }, {
-                'inputs': [os.path.join(V200520_MINIMAL_BASE, 'feature-8.jar')]
-            }],
-            'pgconf': [
-                os.path.join(V200520_MINIMAL_BASE, 'proguard.config'),
-                utils.IGNORE_WARNINGS_RULES
-            ],
-            'libraries': [os.path.join(V200520_MINIMAL_BASE, 'library.jar')],
-            'min-api': ANDROID_N_API
-        },
-    },
-}
-
-
-def GetLatestVersion():
-    return '200520-monochrome_public_minimal_apks'
-
-
-def GetName():
-    return 'chrome'
-
-
-def GetMemoryData(version):
-    assert version == '200520-monochrome_public_minimal_apks'
-    return {
-        'find-xmx-min': 600,
-        'find-xmx-max': 700,
-        'find-xmx-range': 16,
-        'oom-threshold': 625,
-    }
diff --git a/tools/internal_test.py b/tools/internal_test.py
index 555259f..f1eb730 100755
--- a/tools/internal_test.py
+++ b/tools/internal_test.py
@@ -38,7 +38,6 @@
 import utils
 import run_on_app
 
-import chrome_data
 import youtube_data
 
 # How often the bot/tester should check state
@@ -58,7 +57,7 @@
 EXITCODE = 'exitcode'
 TIMED_OUT = 'timed_out'
 
-BENCHMARK_APPS = [chrome_data, youtube_data]
+BENCHMARK_APPS = [youtube_data]
 
 DEPENDENT_PYTHON_FILES = [gradle, utils, run_on_app]
 
@@ -81,8 +80,7 @@
 
 
 def compile_with_memory_max_command(app_data):
-    # TODO(b/152939233): Remove this special handling when fixed.
-    factor = 1.25 if app_data.GetName() == 'chrome' else 1.15
+    factor = 1.15
     record = app_data.GetMemoryData(app_data.GetLatestVersion())
     return [] if 'skip-find-xmx-max' in record else [
         'tools/run_on_app.py', '--compiler=r8', '--compiler-build=lib',
diff --git a/tools/run_on_app.py b/tools/run_on_app.py
index f106022..da6bc9f 100755
--- a/tools/run_on_app.py
+++ b/tools/run_on_app.py
@@ -22,10 +22,9 @@
 import update_prebuilds_in_android
 import utils
 import youtube_data
-import chrome_data
 
 TYPES = ['dex', 'deploy', 'proguarded']
-APPS = ['nest', 'youtube', 'chrome']
+APPS = ['nest', 'youtube']
 COMPILERS = ['d8', 'r8']
 COMPILER_BUILDS = ['full', 'lib']
 
@@ -228,7 +227,6 @@
     data_providers = {
         'nest': nest_data,
         'youtube': youtube_data,
-        'chrome': chrome_data,
     }
     # Check to ensure that we add all variants here.
     assert len(APPS) == len(data_providers)
@@ -426,9 +424,6 @@
     elif options.app == 'youtube':
         version = options.version or youtube_data.LATEST_VERSION
         data = youtube_data
-    elif options.app == 'chrome':
-        version = options.version or '180917'
-        data = chrome_data
     else:
         raise Exception("You need to specify '--app={}'".format('|'.join(APPS)))
     return version, data
