Fix cache output location of Firefox and remove web_util module.

It had the same functionality as flutter_deps, only less efficient
because it didn't cache.

Change-Id: I04740fda01c3bfefe48cbdbcba456b919237fdd9
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/36460
Reviewed-by: Godofredo Contreras <godofredoc@google.com>
Commit-Queue: Harry Terkelsen <het@google.com>
diff --git a/recipe_modules/flutter_deps/api.py b/recipe_modules/flutter_deps/api.py
index 2b63238..3ff78ac 100644
--- a/recipe_modules/flutter_deps/api.py
+++ b/recipe_modules/flutter_deps/api.py
@@ -196,9 +196,9 @@
       pkgs.add_package('flutter_internal/browsers/firefox/${platform}', version)
       self.m.cipd.ensure(firefox_path, pkgs)
       paths = env_prefixes.get('PATH', [])
-      paths.append(firefox_path.join('firefox'))
+      paths.append(firefox_path)
       env_prefixes['PATH'] = paths
-      env['FIREFOX_EXECUTABLE'] = firefox_path.join('firefox', 'firefox')
+      env['FIREFOX_EXECUTABLE'] = firefox_path.join('firefox')
 
   def gh_cli(self, env, env_prefixes, version):
     """Installs GitHub CLI."""
diff --git a/recipe_modules/flutter_deps/examples/full.expected/basic.json b/recipe_modules/flutter_deps/examples/full.expected/basic.json
index ac2eb89..239f109 100644
--- a/recipe_modules/flutter_deps/examples/full.expected/basic.json
+++ b/recipe_modules/flutter_deps/examples/full.expected/basic.json
@@ -255,14 +255,14 @@
     "env": {
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GOPATH": "[CLEANUP]/go_path"
     },
     "env_prefixes": {
       "PATH": [
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
@@ -692,7 +692,7 @@
       "ANDROID_SDK_ROOT": "[CACHE]/android",
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "FLUTTER_XCODE_CODE_SIGN_STYLE": "Manual",
       "FLUTTER_XCODE_DEVELOPMENT_TEAM": "S8QB4VV633",
       "FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER": "match Development *",
@@ -706,7 +706,7 @@
         "[CACHE]/dart_sdk",
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
diff --git a/recipe_modules/flutter_deps/examples/full.expected/flutter_engine.json b/recipe_modules/flutter_deps/examples/full.expected/flutter_engine.json
index 33a48a3..f6e4c01 100644
--- a/recipe_modules/flutter_deps/examples/full.expected/flutter_engine.json
+++ b/recipe_modules/flutter_deps/examples/full.expected/flutter_engine.json
@@ -255,14 +255,14 @@
     "env": {
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GOPATH": "[CLEANUP]/go_path"
     },
     "env_prefixes": {
       "PATH": [
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
@@ -776,7 +776,7 @@
       "ANDROID_SDK_ROOT": "[CACHE]/android",
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "FLUTTER_XCODE_CODE_SIGN_STYLE": "Manual",
       "FLUTTER_XCODE_DEVELOPMENT_TEAM": "S8QB4VV633",
       "FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER": "match Development *",
@@ -792,7 +792,7 @@
         "[CLEANUP]/builder/src/out/host_debug_unopt/dart-sdk/bin",
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
diff --git a/recipe_modules/flutter_deps/examples/full.expected/goldTryjob.json b/recipe_modules/flutter_deps/examples/full.expected/goldTryjob.json
index ac2eb89..239f109 100644
--- a/recipe_modules/flutter_deps/examples/full.expected/goldTryjob.json
+++ b/recipe_modules/flutter_deps/examples/full.expected/goldTryjob.json
@@ -255,14 +255,14 @@
     "env": {
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GOPATH": "[CLEANUP]/go_path"
     },
     "env_prefixes": {
       "PATH": [
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
@@ -692,7 +692,7 @@
       "ANDROID_SDK_ROOT": "[CACHE]/android",
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "FLUTTER_XCODE_CODE_SIGN_STYLE": "Manual",
       "FLUTTER_XCODE_DEVELOPMENT_TEAM": "S8QB4VV633",
       "FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER": "match Development *",
@@ -706,7 +706,7 @@
         "[CACHE]/dart_sdk",
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
diff --git a/recipe_modules/flutter_deps/examples/full.expected/linux.json b/recipe_modules/flutter_deps/examples/full.expected/linux.json
index ac2eb89..239f109 100644
--- a/recipe_modules/flutter_deps/examples/full.expected/linux.json
+++ b/recipe_modules/flutter_deps/examples/full.expected/linux.json
@@ -255,14 +255,14 @@
     "env": {
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GOPATH": "[CLEANUP]/go_path"
     },
     "env_prefixes": {
       "PATH": [
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
@@ -692,7 +692,7 @@
       "ANDROID_SDK_ROOT": "[CACHE]/android",
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "FLUTTER_XCODE_CODE_SIGN_STYLE": "Manual",
       "FLUTTER_XCODE_DEVELOPMENT_TEAM": "S8QB4VV633",
       "FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER": "match Development *",
@@ -706,7 +706,7 @@
         "[CACHE]/dart_sdk",
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
diff --git a/recipe_modules/flutter_deps/examples/full.expected/local_engine_cas.json b/recipe_modules/flutter_deps/examples/full.expected/local_engine_cas.json
index f1e5492..0962d23 100644
--- a/recipe_modules/flutter_deps/examples/full.expected/local_engine_cas.json
+++ b/recipe_modules/flutter_deps/examples/full.expected/local_engine_cas.json
@@ -255,14 +255,14 @@
     "env": {
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GOPATH": "[CLEANUP]/go_path"
     },
     "env_prefixes": {
       "PATH": [
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
@@ -776,7 +776,7 @@
       "ANDROID_SDK_ROOT": "[CACHE]/android",
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "FLUTTER_XCODE_CODE_SIGN_STYLE": "Manual",
       "FLUTTER_XCODE_DEVELOPMENT_TEAM": "S8QB4VV633",
       "FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER": "match Development *",
@@ -792,7 +792,7 @@
         "[CLEANUP]/builder/src/out/host-release/dart-sdk/bin",
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
diff --git a/recipe_modules/flutter_deps/examples/full.expected/mac.json b/recipe_modules/flutter_deps/examples/full.expected/mac.json
index 07fd2ec..ad09499 100644
--- a/recipe_modules/flutter_deps/examples/full.expected/mac.json
+++ b/recipe_modules/flutter_deps/examples/full.expected/mac.json
@@ -255,14 +255,14 @@
     "env": {
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome-mac/Chromium.app/Contents/MacOS/Chromium",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GOPATH": "[CLEANUP]/go_path"
     },
     "env_prefixes": {
       "PATH": [
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
diff --git a/recipe_modules/flutter_deps/examples/full.expected/windows.json b/recipe_modules/flutter_deps/examples/full.expected/windows.json
index 20df5a0..2f224fc 100644
--- a/recipe_modules/flutter_deps/examples/full.expected/windows.json
+++ b/recipe_modules/flutter_deps/examples/full.expected/windows.json
@@ -255,14 +255,14 @@
     "env": {
       "CHROME_EXECUTABLE": "[CACHE]\\chrome\\chrome\\chrome.exe",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]\\firefox\\firefox\\firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]\\firefox\\firefox",
       "GOPATH": "[CLEANUP]\\go_path"
     },
     "env_prefixes": {
       "PATH": [
         "[CACHE]\\chrome\\chrome",
         "[CACHE]\\chrome\\drivers",
-        "[CACHE]\\firefox\\firefox",
+        "[CACHE]\\firefox",
         "[CACHE]\\go\\bin",
         "[CLEANUP]\\go_path\\bin",
         "[CACHE]\\go\\bin",
@@ -657,7 +657,7 @@
       "ANDROID_SDK_ROOT": "[CACHE]\\android",
       "CHROME_EXECUTABLE": "[CACHE]\\chrome\\chrome\\chrome.exe",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]\\firefox\\firefox\\firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]\\firefox\\firefox",
       "FLUTTER_XCODE_CODE_SIGN_STYLE": "Manual",
       "FLUTTER_XCODE_DEVELOPMENT_TEAM": "S8QB4VV633",
       "FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER": "match Development *",
@@ -671,7 +671,7 @@
         "[CACHE]\\dart_sdk",
         "[CACHE]\\chrome\\chrome",
         "[CACHE]\\chrome\\drivers",
-        "[CACHE]\\firefox\\firefox",
+        "[CACHE]\\firefox",
         "[CACHE]\\go\\bin",
         "[CLEANUP]\\go_path\\bin",
         "[CACHE]\\go\\bin",
@@ -732,7 +732,7 @@
       "ANDROID_SDK_ROOT": "[CACHE]\\android",
       "CHROME_EXECUTABLE": "[CACHE]\\chrome\\chrome\\chrome.exe",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]\\firefox\\firefox\\firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]\\firefox\\firefox",
       "FLUTTER_XCODE_CODE_SIGN_STYLE": "Manual",
       "FLUTTER_XCODE_DEVELOPMENT_TEAM": "S8QB4VV633",
       "FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER": "match Development *",
@@ -747,7 +747,7 @@
         "[CACHE]\\dart_sdk",
         "[CACHE]\\chrome\\chrome",
         "[CACHE]\\chrome\\drivers",
-        "[CACHE]\\firefox\\firefox",
+        "[CACHE]\\firefox",
         "[CACHE]\\go\\bin",
         "[CLEANUP]\\go_path\\bin",
         "[CACHE]\\go\\bin",
diff --git a/recipe_modules/flutter_deps/examples/full.expected/with-arm64ruby.json b/recipe_modules/flutter_deps/examples/full.expected/with-arm64ruby.json
index 9028f1b..838b451 100644
--- a/recipe_modules/flutter_deps/examples/full.expected/with-arm64ruby.json
+++ b/recipe_modules/flutter_deps/examples/full.expected/with-arm64ruby.json
@@ -255,14 +255,14 @@
     "env": {
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GOPATH": "[CLEANUP]/go_path"
     },
     "env_prefixes": {
       "PATH": [
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
@@ -692,7 +692,7 @@
       "ANDROID_SDK_ROOT": "[CACHE]/android",
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "FLUTTER_XCODE_CODE_SIGN_STYLE": "Manual",
       "FLUTTER_XCODE_DEVELOPMENT_TEAM": "S8QB4VV633",
       "FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER": "match Development *",
@@ -706,7 +706,7 @@
         "[CACHE]/dart_sdk",
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
diff --git a/recipe_modules/flutter_deps/examples/full.expected/with-gems.json b/recipe_modules/flutter_deps/examples/full.expected/with-gems.json
index b7e6d04..010ffeb 100644
--- a/recipe_modules/flutter_deps/examples/full.expected/with-gems.json
+++ b/recipe_modules/flutter_deps/examples/full.expected/with-gems.json
@@ -255,14 +255,14 @@
     "env": {
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GOPATH": "[CLEANUP]/go_path"
     },
     "env_prefixes": {
       "PATH": [
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
@@ -692,7 +692,7 @@
       "ANDROID_SDK_ROOT": "[CACHE]/android",
       "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
       "CHROME_NO_SANDBOX": "true",
-      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox/firefox",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "FLUTTER_XCODE_CODE_SIGN_STYLE": "Manual",
       "FLUTTER_XCODE_DEVELOPMENT_TEAM": "S8QB4VV633",
       "FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER": "match Development *",
@@ -706,7 +706,7 @@
         "[CACHE]/dart_sdk",
         "[CACHE]/chrome/chrome",
         "[CACHE]/chrome/drivers",
-        "[CACHE]/firefox/firefox",
+        "[CACHE]/firefox",
         "[CACHE]/go/bin",
         "[CLEANUP]/go_path/bin",
         "[CACHE]/go/bin",
diff --git a/recipe_modules/flutter_deps/examples/full.py b/recipe_modules/flutter_deps/examples/full.py
index 1e2942a..bfbe5dc 100644
--- a/recipe_modules/flutter_deps/examples/full.py
+++ b/recipe_modules/flutter_deps/examples/full.py
@@ -33,7 +33,7 @@
       env_prefixes.get('PATH'), [
           api.path['cache'].join('chrome', 'chrome'),
           api.path['cache'].join('chrome', 'drivers'),
-          api.path['cache'].join('firefox', 'firefox')
+          api.path['cache'].join('firefox')
       ]
   )
   api.flutter_deps.go_sdk(env, env_prefixes, 'v4')
diff --git a/recipe_modules/web_util/__init__.py b/recipe_modules/web_util/__init__.py
deleted file mode 100644
index 39ee669..0000000
--- a/recipe_modules/web_util/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-DEPS = [
-    'depot_tools/git',
-    'depot_tools/gsutil',
-    'flutter/yaml',
-    'recipe_engine/buildbucket',
-    'recipe_engine/cipd',
-    'recipe_engine/context',
-    'recipe_engine/file',
-    'recipe_engine/json',
-    'recipe_engine/path',
-    'recipe_engine/platform',
-    'recipe_engine/properties',
-    'recipe_engine/runtime',
-    'recipe_engine/step',
-]
diff --git a/recipe_modules/web_util/api.py b/recipe_modules/web_util/api.py
deleted file mode 100644
index d7408dd..0000000
--- a/recipe_modules/web_util/api.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# Copyright 2020 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import copy
-from recipe_engine import recipe_api
-
-
-class WebUtilsApi(recipe_api.RecipeApi):
-  """Utilities to use when running flutter web engine tests."""
-
-  def chrome(self, checkout):
-    """Downloads Chrome from CIPD.
-
-    The chrome version to be used will be read from a file on the repo side.
-    """
-    browser_lock_yaml_file = checkout.join('flutter', 'lib', 'web_ui', 'dev',
-                                           'browser_lock.yaml')
-    with self.m.context(cwd=checkout):
-      result = self.m.yaml.read(
-          'read browser lock yaml',
-          browser_lock_yaml_file,
-          self.m.json.output(),
-      )
-      browser_lock_content = result.json.output
-      platform = self.m.platform.name.capitalize()
-      binary = browser_lock_content['chrome'][platform]
-      chrome_path = checkout.join('flutter', 'lib', 'web_ui', '.dart_tool',
-                                  'chrome', '%s' % binary)
-    # Using the binary number since the repos side file uses binary names.
-    # See: flutter/engine/blob/master/lib/web_ui/dev/browser_lock.yaml
-    # Chrome also uses these binary numbers for archiving different versions.
-    chrome_pkg = self.m.cipd.EnsureFile()
-    chrome_pkg.add_package('flutter_internal/browsers/chrome/${platform}',
-                           binary)
-    self.m.cipd.ensure(chrome_path, chrome_pkg)
-
-  def chrome_driver(self, checkout):
-    """Downloads Chrome web driver from CIPD.
-
-    The driver version to be used will be read from a file on the repo side.
-    """
-    # Get driver version from the engine repo.
-    # See: flutter/engine/blob/master/lib/web_ui/dev/browser_lock.yaml
-    browser_lock_yaml_file = checkout.join('flutter', 'lib', 'web_ui', 'dev',
-                                           'browser_lock.yaml')
-    with self.m.context(cwd=checkout):
-      result = self.m.yaml.read(
-          'read browser lock yaml',
-          browser_lock_yaml_file,
-          self.m.json.output(),
-      )
-      browser_lock_content = result.json.output
-      version = browser_lock_content['required_driver_version']['chrome']
-    chrome_driver_path = checkout.join('flutter', 'lib', 'web_ui', '.dart_tool',
-                                       'drivers', 'chrome', '%s' % version)
-    chrome_pkgdriver = self.m.cipd.EnsureFile()
-    chrome_pkgdriver.add_package(
-        'flutter_internal/browser-drivers/chrome/${platform}',
-        'latest-%s' % version)
-    self.m.cipd.ensure(chrome_driver_path, chrome_pkgdriver)
-
-  def get_web_dependencies(self):
-    return self.m.properties.get('web_dependencies', [])
-
-  def prepare_web_dependencies(self, checkout, properties=None):
-    """Install all the required web_dependencies for a given felt test."""
-    available_deps = {
-        'chrome': self.chrome,
-        'chrome_driver': self.chrome_driver,
-    }
-    properties = properties or self.get_web_dependencies()
-    for dep in properties:
-      dep_funct = available_deps.get(dep)
-      if not dep_funct:
-        raise ValueError('Web Dependency %s not available.' % dep)
-      dep_funct(checkout)
diff --git a/recipe_modules/web_util/examples/full.expected/chrome.json b/recipe_modules/web_util/examples/full.expected/chrome.json
deleted file mode 100644
index 7c5babc..0000000
--- a/recipe_modules/web_util/examples/full.expected/chrome.json
+++ /dev/null
@@ -1,87 +0,0 @@
-[
-  {
-    "cmd": [],
-    "name": "read browser lock yaml",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@yaml@@@@",
-      "@@@STEP_LOG_END@yaml@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
-      "/path/to/tmp/"
-    ],
-    "cwd": "[CACHE]/builder/src",
-    "infra_step": true,
-    "name": "read browser lock yaml.read",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_END@browser_lock.yaml@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
-      "--yaml_file",
-      "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
-      "--json_file",
-      "/path/to/tmp/json"
-    ],
-    "cwd": "[CACHE]/builder/src",
-    "infra_step": true,
-    "name": "read browser lock yaml.parse",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"chrome\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Linux\": \"768968\", @@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Mac\": \"768985\", @@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Win\": \"768975\"@@@",
-      "@@@STEP_LOG_LINE@json.output@  }, @@@",
-      "@@@STEP_LOG_LINE@json.output@  \"required_driver_version\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"chrome\": 84@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd",
-      "ensure",
-      "-root",
-      "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/chrome/768968",
-      "-ensure-file",
-      "flutter_internal/browsers/chrome/${platform} 768968",
-      "-max-threads",
-      "0",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "name": "ensure_installed",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-768968----------\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"package\": \"flutter_internal/browsers/chrome/resolved-platform\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ]@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/recipe_modules/web_util/examples/full.expected/chrome_driver.json b/recipe_modules/web_util/examples/full.expected/chrome_driver.json
deleted file mode 100644
index 1a0ff95..0000000
--- a/recipe_modules/web_util/examples/full.expected/chrome_driver.json
+++ /dev/null
@@ -1,87 +0,0 @@
-[
-  {
-    "cmd": [],
-    "name": "read browser lock yaml",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@yaml@@@@",
-      "@@@STEP_LOG_END@yaml@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
-      "/path/to/tmp/"
-    ],
-    "cwd": "[CACHE]/builder/src",
-    "infra_step": true,
-    "name": "read browser lock yaml.read",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_END@browser_lock.yaml@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
-      "--yaml_file",
-      "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
-      "--json_file",
-      "/path/to/tmp/json"
-    ],
-    "cwd": "[CACHE]/builder/src",
-    "infra_step": true,
-    "name": "read browser lock yaml.parse",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"chrome\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Linux\": \"768968\", @@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Mac\": \"768985\", @@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Win\": \"768975\"@@@",
-      "@@@STEP_LOG_LINE@json.output@  }, @@@",
-      "@@@STEP_LOG_LINE@json.output@  \"required_driver_version\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"chrome\": 84@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd",
-      "ensure",
-      "-root",
-      "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/drivers/chrome/84",
-      "-ensure-file",
-      "flutter_internal/browser-drivers/chrome/${platform} latest-84",
-      "-max-threads",
-      "0",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "name": "ensure_installed",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest-84-------\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"package\": \"flutter_internal/browser-drivers/chrome/resolved-platform\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ]@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/recipe_modules/web_util/examples/full.expected/fail_case.json b/recipe_modules/web_util/examples/full.expected/fail_case.json
deleted file mode 100644
index b70ebdf..0000000
--- a/recipe_modules/web_util/examples/full.expected/fail_case.json
+++ /dev/null
@@ -1,23 +0,0 @@
-[
-  {
-    "cmd": [],
-    "name": "RECIPE CRASH (Uncaught exception)",
-    "~followup_annotations": [
-      "@@@STEP_EXCEPTION@@@",
-      "The recipe has crashed at point 'Uncaught exception'!",
-      "",
-      "Traceback (most recent call last):",
-      "  File \"RECIPE_REPO[flutter]/recipe_modules/web_util/examples/full.py\", line 19, in RunSteps",
-      "    api.web_util.prepare_web_dependencies(engine_checkout_path)",
-      "  File \"RECIPE_REPO[flutter]/recipe_modules/web_util/api.py\", line 76, in prepare_web_dependencies",
-      "    raise ValueError('Web Dependency %s not available.' % dep)",
-      "ValueError('Web Dependency invalid_dependency not available.')"
-    ]
-  },
-  {
-    "failure": {
-      "humanReason": "Uncaught Exception: ValueError('Web Dependency invalid_dependency not available.')"
-    },
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/recipe_modules/web_util/examples/full.expected/mac-post-submit.json b/recipe_modules/web_util/examples/full.expected/mac-post-submit.json
deleted file mode 100644
index b6042b6..0000000
--- a/recipe_modules/web_util/examples/full.expected/mac-post-submit.json
+++ /dev/null
@@ -1,5 +0,0 @@
-[
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/recipe_modules/web_util/examples/full.py b/recipe_modules/web_util/examples/full.py
deleted file mode 100644
index c9d025a..0000000
--- a/recipe_modules/web_util/examples/full.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Copyright 2020 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from recipe_engine.post_process import DoesNotRun, Filter, StatusFailure
-
-DEPS = [
-    'flutter/web_util',
-    'recipe_engine/json',
-    'recipe_engine/path',
-    'recipe_engine/platform',
-    'recipe_engine/properties',
-    'recipe_engine/runtime',
-]
-
-
-def RunSteps(api):
-  engine_checkout_path = api.path['cache'].join('builder', 'src')
-  api.web_util.prepare_web_dependencies(engine_checkout_path)
-
-def GenTests(api):
-  browser_yaml_file = {
-      'required_driver_version': {
-          'chrome': 84
-      },
-      'chrome': {
-          'Linux': '768968',
-          'Mac': '768985',
-          'Win': '768975'
-      },
-  }
-  yield api.test(
-      'fail_case',
-      api.expect_exception('ValueError'),
-      api.properties(
-          web_dependencies=['invalid_dependency'],), api.platform(
-              'linux', 64)) + api.platform.name('linux')
-  yield api.test(
-      'chrome_driver',
-      api.step_data('read browser lock yaml.parse',
-                    api.json.output(browser_yaml_file)),
-      api.properties(
-          web_dependencies=['chrome_driver'],), api.platform(
-              'linux', 64)) + api.platform.name('linux')
-  yield api.test(
-      'chrome',
-      api.step_data('read browser lock yaml.parse',
-                    api.json.output(browser_yaml_file)),
-      api.properties(
-          web_dependencies=['chrome'],), api.platform(
-              'linux', 64)) + api.platform.name('linux')
-  yield api.test(
-      'mac-post-submit',
-      api.properties(
-          goma_jobs='200',
-          web_dependencies=[],
-          command_args=['test', '--browser=ios-safari'],
-          command_name='ios-safari-unit-tests'), api.platform(
-              'mac', 64)) + api.runtime(is_experimental=False)
diff --git a/recipes/engine/web_engine.expected/basic.json b/recipes/engine/web_engine.expected/basic.json
index be1872c..9d23ae0 100644
--- a/recipes/engine/web_engine.expected/basic.json
+++ b/recipes/engine/web_engine.expected/basic.json
@@ -1972,7 +1972,7 @@
       }
     },
     "name": "launch builds.schedule",
-    "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"try\", \"builder\": \"Linux Engine Drone\", \"project\": \"proj\"}, \"exe\": {\"cipdVersion\": \"refs/heads/main\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gerritChanges\": [{\"change\": \"123456\", \"host\": \"flutter-review.googlesource.com\", \"patchset\": \"7\", \"project\": \"mirrors/engine\"}], \"gitilesCommit\": {\"host\": \"flutter.googlesource.com\", \"id\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\", \"project\": \"mirrors/engine\", \"ref\": \"refs/heads/main\"}, \"priority\": 25, \"properties\": {\"build\": {\"command_args\": [\"test\", \"--browser=chrome\", \"--require-skia-gold\"], \"command_name\": \"chrome-unit-linux\", \"inherited_dependencies\": [], \"local_engine_cas_hash\": \"\", \"name\": \"chrome-unit-linux\", \"wasm_release_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", \"web_dependencies\": [\"chrome\"]}, \"clobber\": true, \"recipe\": \"engine/web_engine_drone\"}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"cq_experimental\", \"value\": \"false\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}, {\"scheduleBuild\": {\"builder\": {\"bucket\": \"try\", \"builder\": \"Linux Engine Drone\", \"project\": \"proj\"}, \"exe\": {\"cipdVersion\": \"refs/heads/main\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gerritChanges\": [{\"change\": \"123456\", \"host\": \"flutter-review.googlesource.com\", \"patchset\": \"7\", \"project\": \"mirrors/engine\"}], \"gitilesCommit\": {\"host\": \"flutter.googlesource.com\", \"id\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\", \"project\": \"mirrors/engine\", \"ref\": \"refs/heads/main\"}, \"priority\": 25, \"properties\": {\"build\": {\"command_args\": [\"test\", \"--browser=chrome\", \"--require-skia-gold\", \"--use-local-canvaskit\"], \"command_name\": \"chrome-unit-linux-canvaskit\", \"inherited_dependencies\": [], \"local_engine_cas_hash\": \"\", \"name\": \"chrome-unit-linux-canvaskit\", \"wasm_release_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", \"web_dependencies\": [\"chrome\"]}, \"clobber\": true, \"recipe\": \"engine/web_engine_drone\"}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-00000000133a\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"cq_experimental\", \"value\": \"false\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}, {\"scheduleBuild\": {\"builder\": {\"bucket\": \"try\", \"builder\": \"Linux Engine Drone\", \"project\": \"proj\"}, \"exe\": {\"cipdVersion\": \"refs/heads/main\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gerritChanges\": [{\"change\": \"123456\", \"host\": \"flutter-review.googlesource.com\", \"patchset\": \"7\", \"project\": \"mirrors/engine\"}], \"gitilesCommit\": {\"host\": \"flutter.googlesource.com\", \"id\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\", \"project\": \"mirrors/engine\", \"ref\": \"refs/heads/main\"}, \"priority\": 25, \"properties\": {\"build\": {\"command_args\": [\"test\", \"--browser=firefox\"], \"command_name\": \"firefox-unit-linux\", \"inherited_dependencies\": [], \"local_engine_cas_hash\": \"\", \"name\": \"firefox-unit-linux\", \"wasm_release_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", \"web_dependencies\": []}, \"clobber\": true, \"recipe\": \"engine/web_engine_drone\"}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-00000000133d\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"cq_experimental\", \"value\": \"false\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+    "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"try\", \"builder\": \"Linux Engine Drone\", \"project\": \"proj\"}, \"exe\": {\"cipdVersion\": \"refs/heads/main\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gerritChanges\": [{\"change\": \"123456\", \"host\": \"flutter-review.googlesource.com\", \"patchset\": \"7\", \"project\": \"mirrors/engine\"}], \"gitilesCommit\": {\"host\": \"flutter.googlesource.com\", \"id\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\", \"project\": \"mirrors/engine\", \"ref\": \"refs/heads/main\"}, \"priority\": 25, \"properties\": {\"build\": {\"command_args\": [\"test\", \"--browser=chrome\", \"--require-skia-gold\"], \"command_name\": \"chrome-unit-linux\", \"inherited_dependencies\": [], \"local_engine_cas_hash\": \"\", \"name\": \"chrome-unit-linux\", \"wasm_release_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\"}, \"clobber\": true, \"recipe\": \"engine/web_engine_drone\"}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"cq_experimental\", \"value\": \"false\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}, {\"scheduleBuild\": {\"builder\": {\"bucket\": \"try\", \"builder\": \"Linux Engine Drone\", \"project\": \"proj\"}, \"exe\": {\"cipdVersion\": \"refs/heads/main\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gerritChanges\": [{\"change\": \"123456\", \"host\": \"flutter-review.googlesource.com\", \"patchset\": \"7\", \"project\": \"mirrors/engine\"}], \"gitilesCommit\": {\"host\": \"flutter.googlesource.com\", \"id\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\", \"project\": \"mirrors/engine\", \"ref\": \"refs/heads/main\"}, \"priority\": 25, \"properties\": {\"build\": {\"command_args\": [\"test\", \"--browser=chrome\", \"--require-skia-gold\", \"--use-local-canvaskit\"], \"command_name\": \"chrome-unit-linux-canvaskit\", \"inherited_dependencies\": [], \"local_engine_cas_hash\": \"\", \"name\": \"chrome-unit-linux-canvaskit\", \"wasm_release_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\"}, \"clobber\": true, \"recipe\": \"engine/web_engine_drone\"}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-00000000133a\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"cq_experimental\", \"value\": \"false\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}, {\"scheduleBuild\": {\"builder\": {\"bucket\": \"try\", \"builder\": \"Linux Engine Drone\", \"project\": \"proj\"}, \"exe\": {\"cipdVersion\": \"refs/heads/main\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gerritChanges\": [{\"change\": \"123456\", \"host\": \"flutter-review.googlesource.com\", \"patchset\": \"7\", \"project\": \"mirrors/engine\"}], \"gitilesCommit\": {\"host\": \"flutter.googlesource.com\", \"id\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\", \"project\": \"mirrors/engine\", \"ref\": \"refs/heads/main\"}, \"priority\": 25, \"properties\": {\"build\": {\"command_args\": [\"test\", \"--browser=firefox\"], \"command_name\": \"firefox-unit-linux\", \"inherited_dependencies\": [], \"local_engine_cas_hash\": \"\", \"name\": \"firefox-unit-linux\", \"wasm_release_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\"}, \"clobber\": true, \"recipe\": \"engine/web_engine_drone\"}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-00000000133d\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"cq_experimental\", \"value\": \"false\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -2053,10 +2053,7 @@
       "@@@STEP_LOG_LINE@request@            \"inherited_dependencies\": [], @@@",
       "@@@STEP_LOG_LINE@request@            \"local_engine_cas_hash\": \"\", @@@",
       "@@@STEP_LOG_LINE@request@            \"name\": \"chrome-unit-linux\", @@@",
-      "@@@STEP_LOG_LINE@request@            \"wasm_release_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", @@@",
-      "@@@STEP_LOG_LINE@request@            \"web_dependencies\": [@@@",
-      "@@@STEP_LOG_LINE@request@              \"chrome\"@@@",
-      "@@@STEP_LOG_LINE@request@            ]@@@",
+      "@@@STEP_LOG_LINE@request@            \"wasm_release_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\"@@@",
       "@@@STEP_LOG_LINE@request@          }, @@@",
       "@@@STEP_LOG_LINE@request@          \"clobber\": true, @@@",
       "@@@STEP_LOG_LINE@request@          \"recipe\": \"engine/web_engine_drone\"@@@",
@@ -2123,10 +2120,7 @@
       "@@@STEP_LOG_LINE@request@            \"inherited_dependencies\": [], @@@",
       "@@@STEP_LOG_LINE@request@            \"local_engine_cas_hash\": \"\", @@@",
       "@@@STEP_LOG_LINE@request@            \"name\": \"chrome-unit-linux-canvaskit\", @@@",
-      "@@@STEP_LOG_LINE@request@            \"wasm_release_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", @@@",
-      "@@@STEP_LOG_LINE@request@            \"web_dependencies\": [@@@",
-      "@@@STEP_LOG_LINE@request@              \"chrome\"@@@",
-      "@@@STEP_LOG_LINE@request@            ]@@@",
+      "@@@STEP_LOG_LINE@request@            \"wasm_release_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\"@@@",
       "@@@STEP_LOG_LINE@request@          }, @@@",
       "@@@STEP_LOG_LINE@request@          \"clobber\": true, @@@",
       "@@@STEP_LOG_LINE@request@          \"recipe\": \"engine/web_engine_drone\"@@@",
@@ -2191,8 +2185,7 @@
       "@@@STEP_LOG_LINE@request@            \"inherited_dependencies\": [], @@@",
       "@@@STEP_LOG_LINE@request@            \"local_engine_cas_hash\": \"\", @@@",
       "@@@STEP_LOG_LINE@request@            \"name\": \"firefox-unit-linux\", @@@",
-      "@@@STEP_LOG_LINE@request@            \"wasm_release_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", @@@",
-      "@@@STEP_LOG_LINE@request@            \"web_dependencies\": []@@@",
+      "@@@STEP_LOG_LINE@request@            \"wasm_release_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\"@@@",
       "@@@STEP_LOG_LINE@request@          }, @@@",
       "@@@STEP_LOG_LINE@request@          \"clobber\": true, @@@",
       "@@@STEP_LOG_LINE@request@          \"recipe\": \"engine/web_engine_drone\"@@@",
diff --git a/recipes/engine/web_engine.expected/windows-post-submit.json b/recipes/engine/web_engine.expected/windows-post-submit.json
index d93c6cf..5dd7289 100644
--- a/recipes/engine/web_engine.expected/windows-post-submit.json
+++ b/recipes/engine/web_engine.expected/windows-post-submit.json
@@ -375,206 +375,6 @@
     "name": "felt licenses"
   },
   {
-    "cmd": [],
-    "name": "read browser lock yaml",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@yaml@@@@",
-      "@@@STEP_LOG_END@yaml@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]\\builder\\src\\flutter\\lib\\web_ui\\dev\\browser_lock.yaml",
-      "/path/to/tmp/"
-    ],
-    "cwd": "[CACHE]\\builder\\src",
-    "env": {
-      "ANDROID_HOME": "[CACHE]\\builder\\src\\third_party\\android_tools\\sdk",
-      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
-      "ENGINE_CHECKOUT_PATH": "[CACHE]\\builder",
-      "ENGINE_PATH": "[CACHE]\\builder",
-      "GIT_BRANCH": "",
-      "LUCI_BRANCH": "",
-      "LUCI_CI": "True",
-      "LUCI_PR": "",
-      "LUCI_WORKDIR": "[START_DIR]",
-      "OS": "win",
-      "REVISION": "2d72510e447ab60a9728aeea2362d8be2cbd7789"
-    },
-    "env_prefixes": {
-      "PATH": [
-        "[CACHE]\\certs",
-        "[CACHE]\\builder\\src\\third_party\\dart\\tools\\sdks\\dart-sdk\\bin"
-      ]
-    },
-    "env_suffixes": {
-      "DEPOT_TOOLS_UPDATE": [
-        "0"
-      ],
-      "PATH": [
-        "RECIPE_REPO[depot_tools]"
-      ]
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "flutter:prod"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "read browser lock yaml.read",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_END@browser_lock.yaml@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "RECIPE_MODULE[flutter::yaml]\\resources\\parse_yaml.py",
-      "--yaml_file",
-      "[CACHE]\\builder\\src\\flutter\\lib\\web_ui\\dev\\browser_lock.yaml",
-      "--json_file",
-      "/path/to/tmp/json"
-    ],
-    "cwd": "[CACHE]\\builder\\src",
-    "env": {
-      "ANDROID_HOME": "[CACHE]\\builder\\src\\third_party\\android_tools\\sdk",
-      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
-      "ENGINE_CHECKOUT_PATH": "[CACHE]\\builder",
-      "ENGINE_PATH": "[CACHE]\\builder",
-      "GIT_BRANCH": "",
-      "LUCI_BRANCH": "",
-      "LUCI_CI": "True",
-      "LUCI_PR": "",
-      "LUCI_WORKDIR": "[START_DIR]",
-      "OS": "win",
-      "REVISION": "2d72510e447ab60a9728aeea2362d8be2cbd7789"
-    },
-    "env_prefixes": {
-      "PATH": [
-        "[CACHE]\\certs",
-        "[CACHE]\\builder\\src\\third_party\\dart\\tools\\sdks\\dart-sdk\\bin"
-      ]
-    },
-    "env_suffixes": {
-      "DEPOT_TOOLS_UPDATE": [
-        "0"
-      ],
-      "PATH": [
-        "RECIPE_REPO[depot_tools]"
-      ]
-    },
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "flutter:prod"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "read browser lock yaml.parse",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"chrome\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Linux\": \"768968\", @@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Mac\": \"768985\", @@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Win\": \"768975\"@@@",
-      "@@@STEP_LOG_LINE@json.output@  }, @@@",
-      "@@@STEP_LOG_LINE@json.output@  \"required_driver_version\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"chrome\": 84@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd.bat",
-      "ensure",
-      "-root",
-      "[CACHE]\\builder\\src\\flutter\\lib\\web_ui\\.dart_tool\\chrome\\768975",
-      "-ensure-file",
-      "flutter_internal/browsers/chrome/${platform} 768975",
-      "-max-threads",
-      "0",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "cwd": "[CACHE]\\builder",
-    "env": {
-      "ANDROID_HOME": "[CACHE]\\builder\\src\\third_party\\android_tools\\sdk",
-      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
-      "ENGINE_CHECKOUT_PATH": "[CACHE]\\builder",
-      "ENGINE_PATH": "[CACHE]\\builder",
-      "GIT_BRANCH": "",
-      "LUCI_BRANCH": "",
-      "LUCI_CI": "True",
-      "LUCI_PR": "",
-      "LUCI_WORKDIR": "[START_DIR]",
-      "OS": "win",
-      "REVISION": "2d72510e447ab60a9728aeea2362d8be2cbd7789"
-    },
-    "env_prefixes": {
-      "PATH": [
-        "[CACHE]\\certs",
-        "[CACHE]\\builder\\src\\third_party\\dart\\tools\\sdks\\dart-sdk\\bin"
-      ]
-    },
-    "env_suffixes": {
-      "DEPOT_TOOLS_UPDATE": [
-        "0"
-      ],
-      "PATH": [
-        "RECIPE_REPO[depot_tools]"
-      ]
-    },
-    "luci_context": {
-      "realm": {
-        "name": "flutter:prod"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "ensure_installed",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-768975----------\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"package\": \"flutter_internal/browsers/chrome/resolved-platform\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ]@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
     "cmd": [
       "[CACHE]\\builder\\src\\flutter\\lib\\web_ui\\dev\\felt.bat",
       "test"
diff --git a/recipes/engine/web_engine.py b/recipes/engine/web_engine.py
index e0c5322..34d7a03 100644
--- a/recipes/engine/web_engine.py
+++ b/recipes/engine/web_engine.py
@@ -22,7 +22,6 @@
     'flutter/repo_util',
     'flutter/shard_util_v2',
     'flutter/test_utils',
-    'flutter/web_util',
     'fuchsia/cas_util',
     'recipe_engine/buildbucket',
     'recipe_engine/context',
@@ -123,7 +122,6 @@
         )
         CleanUpProcesses(api)
     else:
-      api.web_util.chrome(checkout)
       felt_test = copy.deepcopy(felt_cmd)
       felt_test.append('test')
       api.step(api.test_utils.test_step_name('felt test chrome'), felt_test)
@@ -148,7 +146,6 @@
   properties = copy.deepcopy(drone_props)
   properties['command_name'] = 'chrome-unit-linux'
   properties['name'] = properties['command_name']
-  properties['web_dependencies'] = ['chrome']
   # These are the felt commands which will be used.
   properties['command_args'] = ['test', '--browser=chrome', '--require-skia-gold']
   targets.append(properties)
@@ -157,7 +154,6 @@
   properties = copy.deepcopy(drone_props)
   properties['command_name'] = 'chrome-unit-linux-canvaskit'
   properties['name'] = properties['command_name']
-  properties['web_dependencies'] = ['chrome']
   # These are the felt commands which will be used.
   properties['command_args'] = [
       'test', '--browser=chrome', '--require-skia-gold',
@@ -169,7 +165,6 @@
   properties = copy.deepcopy(drone_props)
   properties['command_name'] = 'firefox-unit-linux'
   properties['name'] = properties['command_name']
-  properties['web_dependencies'] = []
   # These are the felt commands which will be used.
   properties['command_args'] = ['test', '--browser=firefox']
   targets.append(properties)
@@ -177,10 +172,6 @@
 
 
 def GenTests(api):
-  browser_yaml_file = {
-      'required_driver_version': {'chrome': 84},
-      'chrome': {'Linux': '768968', 'Mac': '768985', 'Win': '768975'}
-  }
   yield api.test(
      'basic',
      api.properties(clobber=True),
@@ -209,9 +200,6 @@
   )
   yield api.test(
      'windows-post-submit',
-      api.step_data(
-        'read browser lock yaml.parse', api.json.output(browser_yaml_file)
-     ),
      api.properties(
         gclient_variables={'download_emsdk': True}
      ),
diff --git a/recipes/engine/web_engine_drone.expected/basic.json b/recipes/engine/web_engine_drone.expected/basic.json
index c798caf..3bebbc9 100644
--- a/recipes/engine/web_engine_drone.expected/basic.json
+++ b/recipes/engine/web_engine_drone.expected/basic.json
@@ -251,6 +251,101 @@
   },
   {
     "cmd": [],
+    "name": "Chrome and driver dependency"
+  },
+  {
+    "cmd": [
+      "cipd",
+      "ensure",
+      "-root",
+      "[CACHE]/chrome/chrome",
+      "-ensure-file",
+      "flutter_internal/browsers/chrome/${platform} latest",
+      "-max-threads",
+      "0",
+      "-json-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "Chrome and driver dependency.ensure_installed",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"flutter_internal/browsers/chrome/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "cipd",
+      "ensure",
+      "-root",
+      "[CACHE]/chrome/drivers",
+      "-ensure-file",
+      "flutter_internal/browser-drivers/chrome/${platform} latest",
+      "-max-threads",
+      "0",
+      "-json-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "Chrome and driver dependency.ensure_installed (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"flutter_internal/browser-drivers/chrome/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "Firefox dependency"
+  },
+  {
+    "cmd": [
+      "cipd",
+      "ensure",
+      "-root",
+      "[CACHE]/firefox",
+      "-ensure-file",
+      "flutter_internal/browsers/firefox/${platform} latest",
+      "-max-threads",
+      "0",
+      "-json-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "Firefox dependency.ensure_installed",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"flutter_internal/browsers/firefox/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
     "name": "Download goldctl"
   },
   {
@@ -329,8 +424,11 @@
     "cwd": "[CACHE]/builder",
     "env": {
       "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+      "CHROME_NO_SANDBOX": "true",
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
       "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GIT_BRANCH": "",
       "GOLDCTL": "[CACHE]/gold/goldctl",
       "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
@@ -346,6 +444,9 @@
     "env_prefixes": {
       "PATH": [
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin"
       ]
     },
@@ -383,8 +484,11 @@
     "cwd": "[CACHE]/builder",
     "env": {
       "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+      "CHROME_NO_SANDBOX": "true",
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
       "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GIT_BRANCH": "",
       "GOLDCTL": "[CACHE]/gold/goldctl",
       "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
@@ -400,6 +504,9 @@
     "env_prefixes": {
       "PATH": [
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin"
       ]
     },
@@ -433,8 +540,11 @@
     "cwd": "[CACHE]/builder",
     "env": {
       "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+      "CHROME_NO_SANDBOX": "true",
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
       "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GIT_BRANCH": "",
       "GOLDCTL": "[CACHE]/gold/goldctl",
       "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
@@ -450,6 +560,9 @@
     "env_prefixes": {
       "PATH": [
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin"
       ]
     },
@@ -492,8 +605,11 @@
     "cwd": "[CACHE]/builder",
     "env": {
       "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+      "CHROME_NO_SANDBOX": "true",
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
       "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GIT_BRANCH": "",
       "GOLDCTL": "[CACHE]/gold/goldctl",
       "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
@@ -509,6 +625,9 @@
     "env_prefixes": {
       "PATH": [
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin"
       ]
     },
@@ -524,191 +643,6 @@
     "name": "Download CanvasKit build from CAS"
   },
   {
-    "cmd": [],
-    "name": "read browser lock yaml",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@yaml@@@@",
-      "@@@STEP_LOG_END@yaml@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython3",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
-      "/path/to/tmp/"
-    ],
-    "cwd": "[CACHE]/builder/src",
-    "env": {
-      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
-      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
-      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
-      "GIT_BRANCH": "",
-      "GOLDCTL": "[CACHE]/gold/goldctl",
-      "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
-      "GRADLE_USER_HOME": "[CACHE]/gradle",
-      "JAVA_HOME": "[CACHE]/java",
-      "LUCI_BRANCH": "",
-      "LUCI_CI": "True",
-      "LUCI_PR": "",
-      "LUCI_WORKDIR": "[START_DIR]",
-      "OS": "linux",
-      "REVISION": ""
-    },
-    "env_prefixes": {
-      "PATH": [
-        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
-        "[CACHE]/java/bin",
-        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
-        "[CACHE]/java/bin"
-      ]
-    },
-    "env_suffixes": {
-      "DEPOT_TOOLS_UPDATE": [
-        "0",
-        "0"
-      ],
-      "PATH": [
-        "RECIPE_REPO[depot_tools]",
-        "RECIPE_REPO[depot_tools]"
-      ]
-    },
-    "infra_step": true,
-    "name": "read browser lock yaml.read",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_END@browser_lock.yaml@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
-      "--yaml_file",
-      "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
-      "--json_file",
-      "/path/to/tmp/json"
-    ],
-    "cwd": "[CACHE]/builder/src",
-    "env": {
-      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
-      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
-      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
-      "GIT_BRANCH": "",
-      "GOLDCTL": "[CACHE]/gold/goldctl",
-      "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
-      "GRADLE_USER_HOME": "[CACHE]/gradle",
-      "JAVA_HOME": "[CACHE]/java",
-      "LUCI_BRANCH": "",
-      "LUCI_CI": "True",
-      "LUCI_PR": "",
-      "LUCI_WORKDIR": "[START_DIR]",
-      "OS": "linux",
-      "REVISION": ""
-    },
-    "env_prefixes": {
-      "PATH": [
-        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
-        "[CACHE]/java/bin",
-        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
-        "[CACHE]/java/bin"
-      ]
-    },
-    "env_suffixes": {
-      "DEPOT_TOOLS_UPDATE": [
-        "0",
-        "0"
-      ],
-      "PATH": [
-        "RECIPE_REPO[depot_tools]",
-        "RECIPE_REPO[depot_tools]"
-      ]
-    },
-    "infra_step": true,
-    "name": "read browser lock yaml.parse",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"chrome\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Linux\": \"768968\", @@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Mac\": \"768985\", @@@",
-      "@@@STEP_LOG_LINE@json.output@    \"Win\": \"768975\"@@@",
-      "@@@STEP_LOG_LINE@json.output@  }, @@@",
-      "@@@STEP_LOG_LINE@json.output@  \"required_driver_version\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"chrome\": 84@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "cipd",
-      "ensure",
-      "-root",
-      "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/chrome/768968",
-      "-ensure-file",
-      "flutter_internal/browsers/chrome/${platform} 768968",
-      "-max-threads",
-      "0",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "cwd": "[CACHE]/builder",
-    "env": {
-      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
-      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
-      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
-      "GIT_BRANCH": "",
-      "GOLDCTL": "[CACHE]/gold/goldctl",
-      "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
-      "GRADLE_USER_HOME": "[CACHE]/gradle",
-      "JAVA_HOME": "[CACHE]/java",
-      "LUCI_BRANCH": "",
-      "LUCI_CI": "True",
-      "LUCI_PR": "",
-      "LUCI_WORKDIR": "[START_DIR]",
-      "OS": "linux",
-      "REVISION": ""
-    },
-    "env_prefixes": {
-      "PATH": [
-        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
-        "[CACHE]/java/bin",
-        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
-        "[CACHE]/java/bin"
-      ]
-    },
-    "env_suffixes": {
-      "DEPOT_TOOLS_UPDATE": [
-        "0",
-        "0"
-      ],
-      "PATH": [
-        "RECIPE_REPO[depot_tools]",
-        "RECIPE_REPO[depot_tools]"
-      ]
-    },
-    "name": "ensure_installed",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-768968----------\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"package\": \"flutter_internal/browsers/chrome/resolved-platform\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ]@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
     "cmd": [
       "[CACHE]/builder/src/flutter/lib/web_ui/dev/felt",
       "test",
@@ -718,8 +652,11 @@
     "cwd": "[CACHE]/builder",
     "env": {
       "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+      "CHROME_NO_SANDBOX": "true",
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
       "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GIT_BRANCH": "",
       "GOLDCTL": "[CACHE]/gold/goldctl",
       "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
@@ -735,8 +672,14 @@
     "env_prefixes": {
       "PATH": [
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin",
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin"
       ]
     },
@@ -764,8 +707,11 @@
     "cwd": "[CACHE]/builder",
     "env": {
       "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+      "CHROME_NO_SANDBOX": "true",
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
       "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GIT_BRANCH": "",
       "GOLDCTL": "[CACHE]/gold/goldctl",
       "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
@@ -781,8 +727,14 @@
     "env_prefixes": {
       "PATH": [
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin",
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin"
       ]
     },
@@ -810,8 +762,11 @@
     "cwd": "[CACHE]/builder",
     "env": {
       "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+      "CHROME_NO_SANDBOX": "true",
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
       "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GIT_BRANCH": "",
       "GOLDCTL": "[CACHE]/gold/goldctl",
       "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
@@ -827,8 +782,14 @@
     "env_prefixes": {
       "PATH": [
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin",
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin"
       ]
     },
@@ -856,8 +817,11 @@
     "cwd": "[CACHE]/builder",
     "env": {
       "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+      "CHROME_NO_SANDBOX": "true",
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
       "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GIT_BRANCH": "",
       "GOLDCTL": "[CACHE]/gold/goldctl",
       "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
@@ -873,8 +837,14 @@
     "env_prefixes": {
       "PATH": [
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin",
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin"
       ]
     },
@@ -902,8 +872,11 @@
     "cwd": "[CACHE]/builder",
     "env": {
       "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+      "CHROME_NO_SANDBOX": "true",
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
       "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GIT_BRANCH": "",
       "GOLDCTL": "[CACHE]/gold/goldctl",
       "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
@@ -919,8 +892,14 @@
     "env_prefixes": {
       "PATH": [
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin",
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin"
       ]
     },
@@ -948,8 +927,11 @@
     "cwd": "[CACHE]/builder",
     "env": {
       "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+      "CHROME_NO_SANDBOX": "true",
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
       "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GIT_BRANCH": "",
       "GOLDCTL": "[CACHE]/gold/goldctl",
       "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
@@ -965,8 +947,14 @@
     "env_prefixes": {
       "PATH": [
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin",
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin"
       ]
     },
@@ -998,8 +986,11 @@
     "cwd": "[CACHE]/builder",
     "env": {
       "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+      "CHROME_NO_SANDBOX": "true",
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
       "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "FIREFOX_EXECUTABLE": "[CACHE]/firefox/firefox",
       "GIT_BRANCH": "",
       "GOLDCTL": "[CACHE]/gold/goldctl",
       "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
@@ -1015,8 +1006,14 @@
     "env_prefixes": {
       "PATH": [
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin",
         "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin",
+        "[CACHE]/chrome/chrome",
+        "[CACHE]/chrome/drivers",
+        "[CACHE]/firefox",
         "[CACHE]/java/bin"
       ]
     },
diff --git a/recipes/engine/web_engine_drone.py b/recipes/engine/web_engine_drone.py
index d431dd3..a521227 100644
--- a/recipes/engine/web_engine_drone.py
+++ b/recipes/engine/web_engine_drone.py
@@ -24,7 +24,6 @@
     'flutter/flutter_deps',
     'flutter/os_utils',
     'flutter/repo_util',
-    'flutter/web_util',
     'recipe_engine/cas',
     'recipe_engine/context',
     'recipe_engine/file',
@@ -91,7 +90,6 @@
 
     with api.context(cwd=cache_root, env=env,
                      env_prefixes=env_prefixes), api.depot_tools.on_path():
-      web_dependencies = api.web_util.prepare_web_dependencies(checkout, build.get('web_dependencies'))
       with recipe_api.defer_results():
         api.step('felt test: %s' % command_name, felt_cmd)
         # This is to clean up leaked processes.
@@ -106,6 +104,8 @@
       'command_name': 'chrome-unit-linux',
       'git_ref': 'refs/heads/master',
       'inherited_dependencies': [
+          {'dependency': 'chrome_and_driver'},
+          {'dependency': 'firefox'},
           {'dependency': 'goldctl'},
           {'dependency': 'open_jdk'},
           {'dependency': 'gradle_cache'}
@@ -114,14 +114,7 @@
       'wasm_release_cas_hash': '7a4348cb77de16aac05401c635950c2a75566e3f268fd60e7113b0c70cd4fbcb/87',
       'web_dependencies': ['chrome']
   }
-  browser_yaml_file = {
-      'required_driver_version': {'chrome': 84},
-      'chrome': {'Linux': '768968', 'Mac': '768985', 'Win': '768975'}
-  }
   yield api.test(
       'basic',
       api.properties(build=build, clobber=True),
-      api.step_data(
-          'read browser lock yaml.parse', api.json.output(browser_yaml_file)
-      ),
   )