Reland: Skia gold driver test (#49905)

diff --git a/dev/devicelab/bin/tasks/flutter_driver_screenshot_test_fuchsia.dart b/dev/devicelab/bin/tasks/flutter_driver_screenshot_test_fuchsia.dart
index 8d97bb9..424bd15 100644
--- a/dev/devicelab/bin/tasks/flutter_driver_screenshot_test_fuchsia.dart
+++ b/dev/devicelab/bin/tasks/flutter_driver_screenshot_test_fuchsia.dart
@@ -10,5 +10,5 @@
 
 Future<void> main() async {
   deviceOperatingSystem = DeviceOperatingSystem.fuchsia;
-  await task(createFlutterDriverScreenshotTest());
+  await task(createFlutterDriverScreenshotTest(useFlutterGold: true));
 }
diff --git a/dev/devicelab/lib/tasks/integration_tests.dart b/dev/devicelab/lib/tasks/integration_tests.dart
index 17ce1d6..5ea6c26 100644
--- a/dev/devicelab/lib/tasks/integration_tests.dart
+++ b/dev/devicelab/lib/tasks/integration_tests.dart
@@ -107,15 +107,22 @@
   );
 }
 
-TaskFunction createFlutterDriverScreenshotTest() {
+/// Executes a driver test that takes a screenshot and compares it against a golden image.
+/// If [useFlutterGold] is true, the golden image is served by Flutter Gold
+/// (https://flutter-gold.skia.org/), otherwise the golden image is read from the disk.
+TaskFunction createFlutterDriverScreenshotTest({
+  bool useFlutterGold = false,
+}) {
   return DriverTest(
     '${flutterDirectory.path}/dev/integration_tests/flutter_driver_screenshot_test',
     'lib/main.dart',
+    extraOptions: useFlutterGold ? const <String>[
+      '--driver', 'test_driver/flutter_gold_main_test.dart'
+    ] : const <String>[]
   );
 }
 
 class DriverTest {
-
   DriverTest(
     this.testDirectory,
     this.testTarget, {
diff --git a/dev/integration_tests/flutter_driver_screenshot_test/README.md b/dev/integration_tests/flutter_driver_screenshot_test/README.md
index 071d966..110d016 100644
--- a/dev/integration_tests/flutter_driver_screenshot_test/README.md
+++ b/dev/integration_tests/flutter_driver_screenshot_test/README.md
@@ -4,7 +4,12 @@
 The main page contains a list of buttons; each button leads to a designated sub page when tapped on.
 Each sub page should displays some simple UIs to screenshot tested.
 
-The flutter driver test runs the app and opens each page to take a screenshot. Then it compares the screenshot against a golden image stored in `test_driver/goldens/<some_test_page_name>/<device_model>.png`.
+The flutter driver test runs the app and opens each page to take a screenshot.
+
+Use `test_driver/flutter_gold_main_test.dart` to test against golden files stored on Flutter Gold.
+Otherwise, use `main_test.dart` to test against golden files stored on `test_driver/goldens/<some_test_page_name>/<device_model>.png`.
+
+Note that new binaries can't be checked in the Flutter repo, so use [Flutter Gold](https://github.com/flutter/flutter/wiki/Writing-a-golden-file-test-for-package:flutter) instead.
 
 # Add a new page to test
 
@@ -16,6 +21,7 @@
 
 An example of a `Page` subclass can be found in `lib/image_page.dart`
 
-# Experiments
+# Environments
 
-The test currently only runs on device lab ["mac/ios"] which runs the app on iPhone 6s.
\ No newline at end of file
+* Device Lab which runs the app on iPhone 6s.
+* LUCI which runs the app on a Fuchsia NUC device.
diff --git a/dev/integration_tests/flutter_driver_screenshot_test/test_driver/flutter_gold_main_test.dart b/dev/integration_tests/flutter_driver_screenshot_test/test_driver/flutter_gold_main_test.dart
new file mode 100644
index 0000000..b8dd6ab
--- /dev/null
+++ b/dev/integration_tests/flutter_driver_screenshot_test/test_driver/flutter_gold_main_test.dart
@@ -0,0 +1,38 @@
+// Copyright 2014 The Flutter 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 'dart:async';
+import 'package:flutter_driver/flutter_driver.dart';
+import 'package:test/test.dart' hide TypeMatcher, isInstanceOf;
+import 'package:flutter_test/src/buffer_matcher.dart';
+
+Future<void> main() async {
+  FlutterDriver driver;
+  String deviceModel;
+
+  setUpAll(() async {
+    driver = await FlutterDriver.connect();
+    deviceModel = await driver.requestData('device_model');
+  });
+
+  tearDownAll(() => driver.close());
+
+  test('A page with an image screenshot', () async {
+    final SerializableFinder imagePageListTile =
+        find.byValueKey('image_page');
+    await driver.waitFor(imagePageListTile);
+    await driver.tap(imagePageListTile);
+    await driver.waitFor(find.byValueKey('red_square_image'));
+    await driver.waitUntilNoTransientCallbacks();
+
+    // TODO(egarciad): This is currently a no-op on LUCI.
+    // https://github.com/flutter/flutter/issues/49837
+    await expectLater(
+      driver.screenshot(),
+      bufferMatchesGoldenFile('red_square_driver_screenshot__$deviceModel.png'),
+    );
+
+    await driver.tap(find.byTooltip('Back'));
+  });
+}
diff --git a/packages/flutter_test/lib/src/_goldens_io.dart b/packages/flutter_test/lib/src/_goldens_io.dart
index eb029cd..2f729b3 100644
--- a/packages/flutter_test/lib/src/_goldens_io.dart
+++ b/packages/flutter_test/lib/src/_goldens_io.dart
@@ -4,11 +4,8 @@
 
 import 'dart:async';
 import 'dart:io';
-import 'dart:math' as math;
 import 'dart:typed_data';
-import 'dart:ui';
 
-import 'package:flutter/widgets.dart' show Element;
 import 'package:image/image.dart';
 import 'package:path/path.dart' as path;
 // ignore: deprecated_member_use
@@ -166,92 +163,3 @@
     ));
   }
 }
-
-/// Returns a [ComparisonResult] to describe the pixel differential of the
-/// [test] and [master] image bytes provided.
-ComparisonResult compareLists(List<int> test, List<int> master) {
-  if (identical(test, master))
-    return ComparisonResult(passed: true);
-
-  if (test == null || master == null || test.isEmpty || master.isEmpty) {
-    return ComparisonResult(
-      passed: false,
-      error: 'Pixel test failed, null image provided.',
-    );
-  }
-
-  final Image testImage = decodePng(test);
-  final Image masterImage = decodePng(master);
-
-  assert(testImage != null);
-  assert(masterImage != null);
-
-  final int width = testImage.width;
-  final int height = testImage.height;
-
-  if (width != masterImage.width || height != masterImage.height) {
-    return ComparisonResult(
-      passed: false,
-      error: 'Pixel test failed, image sizes do not match.\n'
-        'Master Image: ${masterImage.width} X ${masterImage.height}\n'
-        'Test Image: ${testImage.width} X ${testImage.height}',
-    );
-  }
-
-  int pixelDiffCount = 0;
-  final int totalPixels = width * height;
-  final Image invertedMaster = invert(Image.from(masterImage));
-  final Image invertedTest = invert(Image.from(testImage));
-
-  final Map<String, Image> diffs = <String, Image>{
-    'masterImage' : masterImage,
-    'testImage' : testImage,
-    'maskedDiff' : Image.from(testImage),
-    'isolatedDiff' : Image(width, height),
-  };
-
-  for (int x = 0; x < width; x++) {
-    for (int y =0; y < height; y++) {
-      final int testPixel = testImage.getPixel(x, y);
-      final int masterPixel = masterImage.getPixel(x, y);
-
-      final int diffPixel = (getRed(testPixel) - getRed(masterPixel)).abs()
-        + (getGreen(testPixel) - getGreen(masterPixel)).abs()
-        + (getBlue(testPixel) - getBlue(masterPixel)).abs()
-        + (getAlpha(testPixel) - getAlpha(masterPixel)).abs();
-
-      if (diffPixel != 0 ) {
-        final int invertedMasterPixel = invertedMaster.getPixel(x, y);
-        final int invertedTestPixel = invertedTest.getPixel(x, y);
-        final int maskPixel = math.max(invertedMasterPixel, invertedTestPixel);
-        diffs['maskedDiff'].setPixel(x, y, maskPixel);
-        diffs['isolatedDiff'].setPixel(x, y, maskPixel);
-        pixelDiffCount++;
-      }
-    }
-  }
-
-  if (pixelDiffCount > 0) {
-    return ComparisonResult(
-      passed: false,
-      error: 'Pixel test failed, '
-        '${((pixelDiffCount/totalPixels) * 100).toStringAsFixed(2)}% '
-        'diff detected.',
-      diffs: diffs,
-    );
-  }
-  return ComparisonResult(passed: true);
-}
-
-/// An unsupported [WebGoldenComparator] that exists for API compatibility.
-class DefaultWebGoldenComparator extends WebGoldenComparator {
-  @override
-  Future<bool> compare(Element element, Size size, Uri golden) {
-    throw UnsupportedError('DefaultWebGoldenComparator is only supported on the web.');
-  }
-
-  @override
-  Future<void> update(Uri golden, Element element, Size size) {
-    throw UnsupportedError('DefaultWebGoldenComparator is only supported on the web.');
-  }
-}
diff --git a/packages/flutter_test/lib/src/_goldens_web.dart b/packages/flutter_test/lib/src/_goldens_web.dart
index 055a8ff..d282cf4 100644
--- a/packages/flutter_test/lib/src/_goldens_web.dart
+++ b/packages/flutter_test/lib/src/_goldens_web.dart
@@ -9,6 +9,7 @@
 
 import 'package:flutter/rendering.dart';
 import 'package:flutter/widgets.dart';
+import 'package:path/path.dart' as path;
 // ignore: deprecated_member_use
 import 'package:test_api/test_api.dart' as test_package show TestFailure;
 
@@ -35,6 +36,115 @@
   throw UnsupportedError('Golden testing is not supported on the web.');
 }
 
+/// Compares image pixels against a golden image file.
+///
+/// Instances of this comparator will be used as the backend for
+/// [matchesGoldenFile] when tests are running on Flutter Web, and will usually
+/// implemented by deferring the screenshot taking and image comparison to a
+/// test server.
+///
+/// Instances of this comparator will be invoked by the test framework in the
+/// [TestWidgetsFlutterBinding.runAsync] zone and are thus not subject to the
+/// fake async constraints that are normally imposed on widget tests (i.e. the
+/// need or the ability to call [WidgetTester.pump] to advance the microtask
+/// queue). Prior to the invocation, the test framework will render only the
+/// [Element] to be compared on the screen.
+///
+/// See also:
+///
+///  * [GoldenFileComparator] for the comparator to be used when the test is
+///    not running in a web browser.
+///  * [DefaultWebGoldenComparator] for the default [WebGoldenComparator]
+///    implementation for `flutter test`.
+///  * [matchesGoldenFile], the function from [flutter_test] that invokes the
+///    comparator.
+abstract class WebGoldenComparator {
+  /// Compares the rendered pixels of [element] of size [size] that is being
+  /// rendered on the top left of the screen against the golden file identified
+  /// by [golden].
+  ///
+  /// The returned future completes with a boolean value that indicates whether
+  /// the pixels rendered on screen match the golden file's pixels.
+  ///
+  /// In the case of comparison mismatch, the comparator may choose to throw a
+  /// [TestFailure] if it wants to control the failure message, often in the
+  /// form of a [ComparisonResult] that provides detailed information about the
+  /// mismatch.
+  ///
+  /// The method by which [golden] is located and by which its bytes are loaded
+  /// is left up to the implementation class. For instance, some implementations
+  /// may load files from the local file system, whereas others may load files
+  /// over the network or from a remote repository.
+  Future<bool> compare(Element element, Size size, Uri golden);
+
+  /// Updates the golden file identified by [golden] with rendered pixels of
+  /// [element].
+  ///
+  /// This will be invoked in lieu of [compare] when [autoUpdateGoldenFiles]
+  /// is `true` (which gets set automatically by the test framework when the
+  /// user runs `flutter test --update-goldens --platform=chrome`).
+  ///
+  /// The method by which [golden] is located and by which its bytes are written
+  /// is left up to the implementation class.
+  Future<void> update(Uri golden, Element element, Size size);
+
+  /// Returns a new golden file [Uri] to incorporate any [version] number with
+  /// the [key].
+  ///
+  /// The [version] is an optional int that can be used to differentiate
+  /// historical golden files.
+  ///
+  /// Version numbers are used in golden file tests for package:flutter. You can
+  /// learn more about these tests [here](https://github.com/flutter/flutter/wiki/Writing-a-golden-file-test-for-package:flutter).
+  Uri getTestUri(Uri key, int version) {
+    if (version == null)
+      return key;
+    final String keyString = key.toString();
+    final String extension = path.extension(keyString);
+    return Uri.parse(
+      keyString
+        .split(extension)
+        .join() + '.' + version.toString() + extension
+    );
+  }
+}
+
+/// Compares pixels against those of a golden image file.
+///
+/// This comparator is used as the backend for [matchesGoldenFile] when tests
+/// are running in a web browser.
+///
+/// When using `flutter test --platform=chrome`, a comparator implemented by
+/// [DefaultWebGoldenComparator] is used if no other comparator is specified. It
+/// will send a request to the test server, which uses [goldenFileComparator]
+/// for golden file compatison.
+///
+/// When using `flutter test --update-goldens`, the [DefaultWebGoldenComparator]
+/// updates the files on disk to match the rendering.
+///
+/// When using `flutter run`, the default comparator
+/// ([_TrivialWebGoldenComparator]) is used. It prints a message to the console
+/// but otherwise does nothing. This allows tests to be developed visually on a
+/// web browser.
+///
+/// Callers may choose to override the default comparator by setting this to a
+/// custom comparator during test set-up (or using directory-level test
+/// configuration). For example, some projects may wish to install a comparator
+/// with tolerance levels for allowable differences.
+///
+/// See also:
+///
+///  * [flutter_test] for more information about how to configure tests at the
+///    directory-level.
+///  * [goldenFileComparator], the comparator used when tests are not running on
+///    a web browser.
+WebGoldenComparator get webGoldenComparator => _webGoldenComparator;
+WebGoldenComparator _webGoldenComparator = const _TrivialWebGoldenComparator._();
+set webGoldenComparator(WebGoldenComparator value) {
+  assert(value != null);
+  _webGoldenComparator = value;
+}
+
 /// The default [WebGoldenComparator] implementation for `flutter test`.
 ///
 /// This comparator will send a request to the test server for golden comparison
@@ -87,3 +197,23 @@
     await compare(element, size, golden);
   }
 }
+
+class _TrivialWebGoldenComparator implements WebGoldenComparator {
+  const _TrivialWebGoldenComparator._();
+
+  @override
+  Future<bool> compare(Element element, Size size, Uri golden) {
+    print('Golden comparison requested for "$golden"; skipping...');
+    return Future<bool>.value(true);
+  }
+
+  @override
+  Future<void> update(Uri golden, Element element, Size size) {
+    throw StateError('webGoldenComparator has not been initialized');
+  }
+
+  @override
+  Uri getTestUri(Uri key, int version) {
+    return key;
+  }
+}
diff --git a/packages/flutter_test/lib/src/_matchers_web.dart b/packages/flutter_test/lib/src/_matchers_web.dart
index 38d1a31..4ef3bf6 100644
--- a/packages/flutter_test/lib/src/_matchers_web.dart
+++ b/packages/flutter_test/lib/src/_matchers_web.dart
@@ -11,6 +11,7 @@
 // ignore: deprecated_member_use
 import 'package:test_api/test_api.dart' hide TypeMatcher, isInstanceOf;
 
+import '_goldens_web.dart';
 import 'binding.dart';
 import 'finders.dart';
 import 'goldens.dart';
diff --git a/packages/flutter_test/lib/src/buffer_matcher.dart b/packages/flutter_test/lib/src/buffer_matcher.dart
new file mode 100644
index 0000000..b836656
--- /dev/null
+++ b/packages/flutter_test/lib/src/buffer_matcher.dart
@@ -0,0 +1,75 @@
+// Copyright 2014 The Flutter 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 'dart:async';
+import 'dart:typed_data';
+
+import 'package:test_api/src/frontend/async_matcher.dart'; // ignore: implementation_imports
+// ignore: deprecated_member_use
+import 'package:test_api/test_api.dart' show Description, TestFailure;
+
+import 'goldens.dart';
+
+/// Matcher created by [bufferMatchesGoldenFile].
+class _BufferGoldenMatcher extends AsyncMatcher {
+  /// Creates an instance of [BufferGoldenMatcher]. Called by [bufferMatchesGoldenFile].
+  const _BufferGoldenMatcher(this.key, this.version);
+
+  /// The [key] to the golden image.
+  final Uri key;
+
+  /// The [version] of the golden image.
+  final int version;
+
+  @override
+  Future<String> matchAsync(dynamic item) async {
+    Uint8List buffer;
+    if (item is List<int>) {
+      buffer = Uint8List.fromList(item);
+    } else if (item is Future<List<int>>) {
+      buffer = Uint8List.fromList(await item);
+    } else {
+      throw 'Expected `List<int>` or `Future<List<int>>`, instead found: ${item.runtimeType}';
+    }
+    final Uri testNameUri = goldenFileComparator.getTestUri(key, version);
+    if (autoUpdateGoldenFiles) {
+      await goldenFileComparator.update(testNameUri, buffer);
+      return null;
+    }
+    try {
+      final bool success = await goldenFileComparator.compare(buffer, testNameUri);
+      return success ? null : 'does not match';
+    } on TestFailure catch (ex) {
+      return ex.message;
+    }
+  }
+
+  @override
+  Description describe(Description description) {
+    final Uri testNameUri = goldenFileComparator.getTestUri(key, version);
+    return description.add('Byte buffer matches golden image "$testNameUri"');
+  }
+}
+
+/// Asserts that a [Future<List<int>>], or [List<int] matches the
+/// golden image file identified by [key], with an optional [version] number.
+///
+/// The [key] is the [String] representation of a URL.
+///
+/// The [version] is a number that can be used to differentiate historical
+/// golden files. This parameter is optional.
+///
+/// {@tool snippet}
+/// Sample invocations of [matchesGoldenFile].
+///
+/// ```dart
+/// await expectLater(
+///   const <int>[],
+///   bufferMatchesGoldenFile('sample.png'),
+/// );
+/// ```
+/// {@end-tool}
+AsyncMatcher bufferMatchesGoldenFile(String key, {int version}) {
+   return _BufferGoldenMatcher(Uri.parse(key), version);
+}
diff --git a/packages/flutter_test/lib/src/goldens.dart b/packages/flutter_test/lib/src/goldens.dart
index d390d7d..dadd756 100644
--- a/packages/flutter_test/lib/src/goldens.dart
+++ b/packages/flutter_test/lib/src/goldens.dart
@@ -3,12 +3,12 @@
 // found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:math' as math;
 import 'dart:typed_data';
 
-import 'package:flutter/foundation.dart';
-import 'package:flutter/widgets.dart';
+import 'package:meta/meta.dart';
 import 'package:path/path.dart' as path;
-import '_goldens_io.dart' if (dart.library.html) '_goldens_web.dart' as _goldens;
+import 'package:image/image.dart';
 
 /// Compares image pixels against a golden image file.
 ///
@@ -98,7 +98,77 @@
   /// Returns a [ComparisonResult] to describe the pixel differential of the
   /// [test] and [master] image bytes provided.
   static ComparisonResult compareLists(List<int> test, List<int> master) {
-    return _goldens.compareLists(test, master);
+    if (identical(test, master))
+      return ComparisonResult(passed: true);
+
+    if (test == null || master == null || test.isEmpty || master.isEmpty) {
+      return ComparisonResult(
+        passed: false,
+        error: 'Pixel test failed, null image provided.',
+      );
+    }
+
+    final Image testImage = decodePng(test);
+    final Image masterImage = decodePng(master);
+
+    assert(testImage != null);
+    assert(masterImage != null);
+
+    final int width = testImage.width;
+    final int height = testImage.height;
+
+    if (width != masterImage.width || height != masterImage.height) {
+      return ComparisonResult(
+        passed: false,
+        error: 'Pixel test failed, image sizes do not match.\n'
+          'Master Image: ${masterImage.width} X ${masterImage.height}\n'
+          'Test Image: ${testImage.width} X ${testImage.height}',
+      );
+    }
+
+    int pixelDiffCount = 0;
+    final int totalPixels = width * height;
+    final Image invertedMaster = invert(Image.from(masterImage));
+    final Image invertedTest = invert(Image.from(testImage));
+
+    final Map<String, Image> diffs = <String, Image>{
+      'masterImage' : masterImage,
+      'testImage' : testImage,
+      'maskedDiff' : Image.from(testImage),
+      'isolatedDiff' : Image(width, height),
+    };
+
+    for (int x = 0; x < width; x++) {
+      for (int y = 0; y < height; y++) {
+        final int testPixel = testImage.getPixel(x, y);
+        final int masterPixel = masterImage.getPixel(x, y);
+
+        final int diffPixel = (getRed(testPixel) - getRed(masterPixel)).abs()
+          + (getGreen(testPixel) - getGreen(masterPixel)).abs()
+          + (getBlue(testPixel) - getBlue(masterPixel)).abs()
+          + (getAlpha(testPixel) - getAlpha(masterPixel)).abs();
+
+        if (diffPixel != 0 ) {
+          final int invertedMasterPixel = invertedMaster.getPixel(x, y);
+          final int invertedTestPixel = invertedTest.getPixel(x, y);
+          final int maskPixel = math.max(invertedMasterPixel, invertedTestPixel);
+          diffs['maskedDiff'].setPixel(x, y, maskPixel);
+          diffs['isolatedDiff'].setPixel(x, y, maskPixel);
+          pixelDiffCount++;
+        }
+      }
+    }
+
+    if (pixelDiffCount > 0) {
+      return ComparisonResult(
+        passed: false,
+        error: 'Pixel test failed, '
+          '${((pixelDiffCount/totalPixels) * 100).toStringAsFixed(2)}% '
+          'diff detected.',
+        diffs: diffs,
+      );
+    }
+    return ComparisonResult(passed: true);
   }
 }
 
@@ -135,115 +205,6 @@
   _goldenFileComparator = value;
 }
 
-/// Compares image pixels against a golden image file.
-///
-/// Instances of this comparator will be used as the backend for
-/// [matchesGoldenFile] when tests are running on Flutter Web, and will usually
-/// implemented by deferring the screenshot taking and image comparison to a
-/// test server.
-///
-/// Instances of this comparator will be invoked by the test framework in the
-/// [TestWidgetsFlutterBinding.runAsync] zone and are thus not subject to the
-/// fake async constraints that are normally imposed on widget tests (i.e. the
-/// need or the ability to call [WidgetTester.pump] to advance the microtask
-/// queue). Prior to the invocation, the test framework will render only the
-/// [Element] to be compared on the screen.
-///
-/// See also:
-///
-///  * [GoldenFileComparator] for the comparator to be used when the test is
-///    not running in a web browser.
-///  * [DefaultWebGoldenComparator] for the default [WebGoldenComparator]
-///    implementation for `flutter test`.
-///  * [matchesGoldenFile], the function from [flutter_test] that invokes the
-///    comparator.
-abstract class WebGoldenComparator {
-  /// Compares the rendered pixels of [element] of size [size] that is being
-  /// rendered on the top left of the screen against the golden file identified
-  /// by [golden].
-  ///
-  /// The returned future completes with a boolean value that indicates whether
-  /// the pixels rendered on screen match the golden file's pixels.
-  ///
-  /// In the case of comparison mismatch, the comparator may choose to throw a
-  /// [TestFailure] if it wants to control the failure message, often in the
-  /// form of a [ComparisonResult] that provides detailed information about the
-  /// mismatch.
-  ///
-  /// The method by which [golden] is located and by which its bytes are loaded
-  /// is left up to the implementation class. For instance, some implementations
-  /// may load files from the local file system, whereas others may load files
-  /// over the network or from a remote repository.
-  Future<bool> compare(Element element, Size size, Uri golden);
-
-  /// Updates the golden file identified by [golden] with rendered pixels of
-  /// [element].
-  ///
-  /// This will be invoked in lieu of [compare] when [autoUpdateGoldenFiles]
-  /// is `true` (which gets set automatically by the test framework when the
-  /// user runs `flutter test --update-goldens --platform=chrome`).
-  ///
-  /// The method by which [golden] is located and by which its bytes are written
-  /// is left up to the implementation class.
-  Future<void> update(Uri golden, Element element, Size size);
-
-  /// Returns a new golden file [Uri] to incorporate any [version] number with
-  /// the [key].
-  ///
-  /// The [version] is an optional int that can be used to differentiate
-  /// historical golden files.
-  ///
-  /// Version numbers are used in golden file tests for package:flutter. You can
-  /// learn more about these tests [here](https://github.com/flutter/flutter/wiki/Writing-a-golden-file-test-for-package:flutter).
-  Uri getTestUri(Uri key, int version) {
-    if (version == null)
-      return key;
-    final String keyString = key.toString();
-    final String extension = path.extension(keyString);
-    return Uri.parse(
-      keyString
-        .split(extension)
-        .join() + '.' + version.toString() + extension
-    );
-  }
-}
-
-/// Compares pixels against those of a golden image file.
-///
-/// This comparator is used as the backend for [matchesGoldenFile] when tests
-/// are running in a web browser.
-///
-/// When using `flutter test --platform=chrome`, a comparator implemented by
-/// [DefaultWebGoldenComparator] is used if no other comparator is specified. It
-/// will send a request to the test server, which uses [goldenFileComparator]
-/// for golden file compatison.
-///
-/// When using `flutter test --update-goldens`, the [DefaultWebGoldenComparator]
-/// updates the files on disk to match the rendering.
-///
-/// When using `flutter run`, the default comparator
-/// ([_TrivialWebGoldenComparator]) is used. It prints a message to the console
-/// but otherwise does nothing. This allows tests to be developed visually on a
-/// web browser.
-///
-/// Callers may choose to override the default comparator by setting this to a
-/// custom comparator during test set-up (or using directory-level test
-/// configuration). For example, some projects may wish to install a comparator
-/// with tolerance levels for allowable differences.
-///
-/// See also:
-///
-///  * [flutter_test] for more information about how to configure tests at the
-///    directory-level.
-///  * [goldenFileComparator], the comparator used when tests are not running on
-///    a web browser.
-WebGoldenComparator get webGoldenComparator => _webGoldenComparator;
-WebGoldenComparator _webGoldenComparator = const _TrivialWebGoldenComparator._();
-set webGoldenComparator(WebGoldenComparator value) {
-  assert(value != null);
-  _webGoldenComparator = value;
-}
-
 /// Whether golden files should be automatically updated during tests rather
 /// than compared to the image bytes recorded by the tests.
 ///
@@ -280,7 +241,7 @@
 
   @override
   Future<bool> compare(Uint8List imageBytes, Uri golden) {
-    debugPrint('Golden file comparison requested for "$golden"; skipping...');
+    print('Golden file comparison requested for "$golden"; skipping...');
     return Future<bool>.value(true);
   }
 
@@ -295,26 +256,6 @@
   }
 }
 
-class _TrivialWebGoldenComparator implements WebGoldenComparator {
-  const _TrivialWebGoldenComparator._();
-
-  @override
-  Future<bool> compare(Element element, Size size, Uri golden) {
-    debugPrint('Golden comparison requested for "$golden"; skipping...');
-    return Future<bool>.value(true);
-  }
-
-  @override
-  Future<void> update(Uri golden, Element element, Size size) {
-    throw StateError('webGoldenComparator has not been initialized');
-  }
-
-  @override
-  Uri getTestUri(Uri key, int version) {
-    return key;
-  }
-}
-
 /// The result of a pixel comparison test.
 ///
 /// The [ComparisonResult] will always indicate if a test has [passed]. The