Add android_browsertests to the set of all builds and run it on the bots

This adds it as a 100% experimental target so that it does not block CLs
and only adds it to the android-kitkat-arm-rel as a first step. Other
bots will be removed from exclusions as it proves okay.

R=sky@chromium.org

Bug: 961849
Change-Id: I652b7ae3a76ec511ca6fc8881f7708c7d0802105
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1680513
Commit-Queue: danakj <danakj@chromium.org>
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#673402}
diff --git a/BUILD.gn b/BUILD.gn
index a5227be..9b8f60b 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -301,11 +301,11 @@
       "//base/android/jni_generator:jni_generator_tests",
       "//base/android/linker:chromium_android_linker",
       "//build/android/gyp/test:hello_world",
-      "//build/android/gyp/test:hello_world",
       "//build/android/stacktrace:java_deobfuscate",
       "//chrome/android/webapk/shell_apk:maps_go_webapk",
       "//chrome/android/webapk/shell_apk:webapk",
       "//chrome/android/webapk/shell_apk/prepare_upload_dir:prepare_webapk_shell_upload_dir",
+      "//chrome/test:android_browsertests",
       "//chrome/test/vr/perf:motopho_latency_test",
       "//components/invalidation/impl:components_invalidation_impl_junit_tests",
       "//components/journey:journey_info_fetcher",
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index b4b9d99..833d317 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -20147,6 +20147,51 @@
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices"
         ],
+        "experiment_percentage": 100,
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "android_browsertests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
+              "location": "bin",
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "device_os": "KTU84P",
+              "device_os_type": "userdebug",
+              "device_type": "hammerhead",
+              "os": "Android"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "android_browsertests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices"
+        ],
         "merge": {
           "args": [
             "--bucket",
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl
index 25cdb29..0b60cf97 100644
--- a/testing/buildbot/gn_isolate_map.pyl
+++ b/testing/buildbot/gn_isolate_map.pyl
@@ -89,6 +89,10 @@
     "label": "//third_party/webrtc/test/fuzzers:agc_fuzzer",
     "type": "fuzzer",
   },
+  "android_browsertests": {
+    "label": "//chrome/test:android_browsertests",
+    "type": "windowed_test_launcher",
+  },
   "android_crazy_linker_zip_fuzzer": {
     "label": "//third_party/android_crazy_linker:android_crazy_linker_zip_fuzzer",
     "type": "fuzzer",
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 0fc96da..068053b 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -16,6 +16,27 @@
 # The goal is to drive the number of exceptions to zero, to make all
 # the bots behave similarly.
 {
+  'android_browsertests': {
+    'remove_from': [
+      # TODO(crbug.com/961849): Remove these exceptions as the suite proves stable.
+      # chromium.android.json
+      'KitKat Phone Tester (dbg)',
+      'KitKat Tablet Tester',
+      'Lollipop Phone Tester',
+      'Lollipop Tablet Tester',
+      'Marshmallow 64 bit Tester',
+      'Marshmallow Tablet Tester',
+      'android-marshmallow-arm64-rel',
+      # chromium.clang.json
+      'ToTAndroid',
+      'ToTAndroidCFI',
+      # chromium.fyi.json
+      'android-code-coverage',
+      # chromium.memory.json
+      'Android CFI',
+      'android-asan',
+    ],
+  },
   'android_webview_unittests': {
     'remove_from': [
       # On chromium.android, these do not need to run prior to M.
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index b5e14fc..39cf9aca 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -96,6 +96,12 @@
     },
 
     'android_specific_chromium_gtests': {
+      'android_browsertests': {
+        'swarming': {
+          'shards': 1,
+        },
+        'experiment_percentage': 100,
+      },
       'android_webview_unittests': {},
       'breakpad_unittests': {},
       'content_shell_test_apk': {
@@ -4205,7 +4211,7 @@
       'accessibility_unittests': {},
       'app_shell_unittests': {},
       'blink_fuzzer_unittests': {},
-      'browser_tests': {  # https://crbug.com/611756
+      'browser_tests': {
         'swarming': {
           'shards': 10,
         },