[web] Remove usage of flutter/goldens (#30116)

diff --git a/lib/web_ui/README.md b/lib/web_ui/README.md
index 786482f..af67701 100644
--- a/lib/web_ui/README.md
+++ b/lib/web_ui/README.md
@@ -184,12 +184,6 @@
 web. Versions are not automatically updated whenever a new release is available.
 Instead, we update this file manually once in a while.
 
-`goldens_lock.yaml` refers to a revision in the https://github.com/flutter/goldens
-repo. Screenshot tests are compared with the golden files at that revision.
-When making engine changes that affect screenshots, first submit a PR to
-flutter/goldens updating the screenshots. Then update this file pointing to
-the new revision.
-
 `canvaskit_lock.yaml` locks the version of CanvasKit for tests and production
 use.
 
diff --git a/lib/web_ui/dev/environment.dart b/lib/web_ui/dev/environment.dart
index 8bba0f5..792ea23 100644
--- a/lib/web_ui/dev/environment.dart
+++ b/lib/web_ui/dev/environment.dart
@@ -149,12 +149,6 @@
         'lib',
       ));
 
-  /// Path to the clone of the flutter/goldens repository.
-  io.Directory get webUiGoldensRepositoryDirectory => io.Directory(pathlib.join(
-        webUiBuildDir.path,
-        'goldens',
-      ));
-
   /// Path to the base directory to be used by Skia Gold.
   io.Directory get webUiSkiaGoldDirectory => io.Directory(pathlib.join(
         webUiDartToolDir.path,
diff --git a/lib/web_ui/dev/goldens_lock.yaml b/lib/web_ui/dev/goldens_lock.yaml
deleted file mode 100644
index 75c3c34..0000000
--- a/lib/web_ui/dev/goldens_lock.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-repository: https://github.com/flutter/goldens.git
-revision: 0e62a287b5109053bc3e59dd8fc832f488d904c9
diff --git a/lib/web_ui/dev/steps/compile_tests_step.dart b/lib/web_ui/dev/steps/compile_tests_step.dart
index 86088aa..dcca072 100644
--- a/lib/web_ui/dev/steps/compile_tests_step.dart
+++ b/lib/web_ui/dev/steps/compile_tests_step.dart
@@ -7,7 +7,6 @@
 
 import 'package:path/path.dart' as pathlib;
 import 'package:pool/pool.dart';
-import 'package:web_test_utils/goldens.dart';
 
 import '../environment.dart';
 import '../exceptions.dart';
@@ -20,17 +19,12 @@
 ///
 ///  * canvaskit/   - CanvasKit artifacts
 ///  * assets/      - test fonts
-///  * goldens/     - the goldens fetched from flutter/goldens
 ///  * host/        - compiled test host page and static artifacts
 ///  * test/        - compiled test code
 ///  * test_images/ - test images copied from Skis sources.
 class CompileTestsStep implements PipelineStep {
-  CompileTestsStep({
-    this.skipGoldensRepoFetch = false,
-    this.testFiles,
-  });
+  CompileTestsStep({this.testFiles});
 
-  final bool skipGoldensRepoFetch;
   final List<FilePath>? testFiles;
 
   @override
@@ -47,9 +41,6 @@
   @override
   Future<void> run() async {
     await environment.webUiBuildDir.create();
-    if (!skipGoldensRepoFetch) {
-      await fetchGoldensRepo();
-    }
     await copyCanvasKitFiles();
     await buildHostPage();
     await copyTestFonts();
@@ -357,11 +348,3 @@
   // Record the timestamp to avoid rebuilding unless the file changes.
   timestampFile.writeAsStringSync(timestamp);
 }
-
-Future<void> fetchGoldensRepo() async {
-  print('INFO: Fetching goldens repo');
-  final GoldensRepoFetcher goldensRepoFetcher = GoldensRepoFetcher(
-      environment.webUiGoldensRepositoryDirectory,
-      pathlib.join(environment.webUiDevDir.path, 'goldens_lock.yaml'));
-  await goldensRepoFetcher.fetch();
-}
diff --git a/lib/web_ui/dev/steps/run_tests_step.dart b/lib/web_ui/dev/steps/run_tests_step.dart
index d5601c2..c5c5518 100644
--- a/lib/web_ui/dev/steps/run_tests_step.dart
+++ b/lib/web_ui/dev/steps/run_tests_step.dart
@@ -86,9 +86,6 @@
     // Separate screenshot tests from unit-tests. Screenshot tests must run
     // one at a time. Otherwise, they will end up screenshotting each other.
     // This is not an issue for unit-tests.
-    final FilePath failureSmokeTestPath = FilePath.fromWebUi(
-      'test/golden_tests/golden_failure_smoke_test.dart',
-    );
     final List<FilePath> screenshotTestFiles = <FilePath>[];
     final List<FilePath> unitTestFiles = <FilePath>[];
 
@@ -97,39 +94,18 @@
         // Not a test file at all. Skip.
         continue;
       }
-      if (testFilePath == failureSmokeTestPath) {
-        // A smoke test that fails on purpose. Skip.
-        continue;
-      }
 
-      // All files under test/golden_tests are considered golden tests.
-      final bool isUnderGoldenTestsDirectory =
-          pathlib.split(testFilePath.relativeToWebUi).contains('golden_tests');
       // Any file whose name ends with "_golden_test.dart" is run as a golden test.
       final bool isGoldenTestFile = pathlib
           .basename(testFilePath.relativeToWebUi)
           .endsWith('_golden_test.dart');
-      if (isUnderGoldenTestsDirectory || isGoldenTestFile) {
+      if (isGoldenTestFile) {
         screenshotTestFiles.add(testFilePath);
       } else {
         unitTestFiles.add(testFilePath);
       }
     }
 
-    // This test returns a non-zero exit code on purpose. Run it separately.
-    if (testFiles.contains(failureSmokeTestPath)) {
-      await _runTestBatch(
-        testFiles: <FilePath>[failureSmokeTestPath],
-        browserEnvironment: _browserEnvironment,
-        concurrency: 1,
-        expectFailure: true,
-        isDebug: isDebug,
-        doUpdateScreenshotGoldens: doUpdateScreenshotGoldens,
-        skiaClient: skiaClient,
-        overridePathToCanvasKit: overridePathToCanvasKit,
-      );
-    }
-
     // Run non-screenshot tests with high concurrency.
     if (unitTestFiles.isNotEmpty) {
       await _runTestBatch(
diff --git a/lib/web_ui/dev/test_platform.dart b/lib/web_ui/dev/test_platform.dart
index cc2dd88..834787c 100644
--- a/lib/web_ui/dev/test_platform.dart
+++ b/lib/web_ui/dev/test_platform.dart
@@ -357,22 +357,6 @@
       write = true;
     }
 
-    String goldensDirectory;
-    if (filename.startsWith('__local__')) {
-      filename = filename.substring('__local__/'.length);
-      goldensDirectory = p.join(
-        env.environment.webUiRootDir.path,
-        'test',
-        'golden_files',
-      );
-    } else {
-      goldensDirectory = p.join(
-        env.environment.webUiGoldensRepositoryDirectory.path,
-        'engine',
-        'web',
-      );
-    }
-
     final Rectangle<num> regionAsRectange = Rectangle<num>(
       region['x'] as num,
       region['y'] as num,
@@ -391,9 +375,6 @@
       maxDiffRateFailure,
       skiaClient,
       isCanvaskitTest: isCanvaskitTest,
-      goldensDirectory: goldensDirectory,
-      filenameSuffix: _screenshotManager!.filenameSuffix,
-      write: write,
     );
   }
 
diff --git a/lib/web_ui/dev/test_runner.dart b/lib/web_ui/dev/test_runner.dart
index 9868b88..fbee2b9 100644
--- a/lib/web_ui/dev/test_runner.dart
+++ b/lib/web_ui/dev/test_runner.dart
@@ -60,13 +60,6 @@
             '.dart_tool/goldens. Use this option to bulk-update all screenshots, '
             'for example, when a new browser version affects pixels.',
       )
-      ..addFlag(
-        'skip-goldens-repo-fetch',
-        defaultsTo: false,
-        help: 'If set reuses the existig flutter/goldens repo clone. Use this '
-            'to avoid overwriting local changes when iterating on golden '
-            'tests. This is off by default.',
-      )
       ..addOption(
         'browser',
         defaultsTo: 'chrome',
@@ -126,9 +119,6 @@
   /// ".dart_tool/goldens".
   bool get doUpdateScreenshotGoldens => boolArg('update-screenshot-goldens');
 
-  /// Whether to fetch the goldens repo prior to running tests.
-  bool get skipGoldensRepoFetch => boolArg('skip-goldens-repo-fetch');
-
   /// Path to a CanvasKit build. Overrides the default CanvasKit.
   String? get overridePathToCanvasKit => argResults!['canvaskit-path'] as String?;
 
@@ -140,10 +130,7 @@
 
     final Pipeline testPipeline = Pipeline(steps: <PipelineStep>[
       if (isWatchMode) ClearTerminalScreenStep(),
-      CompileTestsStep(
-        skipGoldensRepoFetch: skipGoldensRepoFetch,
-        testFiles: testFiles,
-      ),
+      CompileTestsStep(testFiles: testFiles),
       RunTestsStep(
         browserName: browserName,
         testFiles: testFiles,
diff --git a/lib/web_ui/test/golden_files/smoke_test.iOS_Safari.png b/lib/web_ui/test/golden_files/smoke_test.iOS_Safari.png
deleted file mode 100644
index 7f2995f..0000000
--- a/lib/web_ui/test/golden_files/smoke_test.iOS_Safari.png
+++ /dev/null
Binary files differ
diff --git a/lib/web_ui/test/golden_files/smoke_test.png b/lib/web_ui/test/golden_files/smoke_test.png
deleted file mode 100644
index f1b4a7f..0000000
--- a/lib/web_ui/test/golden_files/smoke_test.png
+++ /dev/null
Binary files differ
diff --git a/lib/web_ui/test/golden_tests/golden_failure_smoke_test.dart b/lib/web_ui/test/golden_tests/golden_failure_smoke_test.dart
deleted file mode 100644
index 85297e5..0000000
--- a/lib/web_ui/test/golden_tests/golden_failure_smoke_test.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2013 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:html' as html;
-
-import 'package:test/bootstrap/browser.dart';
-import 'package:test/test.dart';
-import 'package:ui/ui.dart';
-import 'package:web_engine_tester/golden_tester.dart';
-
-void main() {
-  internalBootstrapBrowserTest(() => testMain);
-}
-
-void testMain() {
-  test('screenshot test reports failure', () async {
-    html.document.body!.innerHtml = 'Text that does not appear on the screenshot!';
-    await matchGoldenFile('__local__/smoke_test.png', region: const Rect.fromLTWH(0, 0, 320, 200));
-  });
-}
diff --git a/lib/web_ui/test/golden_tests/golden_success_smoke_test.dart b/lib/web_ui/test/golden_tests/golden_success_smoke_test.dart
deleted file mode 100644
index b6ce8db..0000000
--- a/lib/web_ui/test/golden_tests/golden_success_smoke_test.dart
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2013 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:html' as html;
-
-import 'package:test/bootstrap/browser.dart';
-import 'package:test/test.dart';
-import 'package:ui/src/engine.dart';
-import 'package:ui/ui.dart';
-import 'package:web_engine_tester/golden_tester.dart';
-
-void main() {
-  internalBootstrapBrowserTest(() => testMain);
-}
-
-Future<void> testMain() async {
-  debugEmulateFlutterTesterEnvironment = true;
-  await webOnlyInitializePlatform(assetManager: WebOnlyMockAssetManager());
-
-  test('screenshot test reports success', () async {
-    html.document.body!.style.fontFamily = 'Roboto';
-    html.document.body!.innerHtml = 'Hello world!';
-    // TODO(yjbanov): https://github.com/flutter/flutter/issues/74702 , reduce webkit percentage.
-    await matchGoldenFile('__local__/smoke_test.png', region: const Rect.fromLTWH(0, 0, 320, 200),
-      maxDiffRatePercent: browserEngine == BrowserEngine.webkit ? 3.0 : 0.28);
-  });
-}
diff --git a/web_sdk/web_test_utils/lib/environment.dart b/web_sdk/web_test_utils/lib/environment.dart
index 3b0772c..81466b4 100644
--- a/web_sdk/web_test_utils/lib/environment.dart
+++ b/web_sdk/web_test_utils/lib/environment.dart
@@ -170,12 +170,6 @@
         'lib',
       ));
 
-  /// Path to the clone of the flutter/goldens repository.
-  io.Directory get webUiGoldensRepositoryDirectory => io.Directory(pathlib.join(
-        webUiDartToolDir.path,
-        'goldens',
-      ));
-
   /// Path to the base directory to be used by Skia Gold.
   io.Directory get webUiSkiaGoldDirectory => io.Directory(pathlib.join(
         webUiDartToolDir.path,
diff --git a/web_sdk/web_test_utils/lib/goldens.dart b/web_sdk/web_test_utils/lib/goldens.dart
index 47f9f6c..2f3f199 100644
--- a/web_sdk/web_test_utils/lib/goldens.dart
+++ b/web_sdk/web_test_utils/lib/goldens.dart
@@ -4,9 +4,6 @@
 
 import 'dart:io' as io;
 import 'package:image/image.dart';
-import 'package:path/path.dart' as path;
-
-import 'package:yaml/yaml.dart';
 
 /// How to compares pixels within the image.
 ///
@@ -189,89 +186,3 @@
 String getPrintableDiffFilesInfo(double diffRate, double maxRate) =>
     '(${(diffRate * 100).toStringAsFixed(4)}% of pixels were different. '
     'Maximum allowed rate is: ${(maxRate * 100).toStringAsFixed(4)}%).';
-
-/// Downloads the repository that stores the golden files.
-///
-/// Reads the url of the repo and `commit no` to sync to, from
-/// `goldens_lock.yaml`.
-class GoldensRepoFetcher {
-  final io.Directory _webUiGoldensRepositoryDirectory;
-  final String _lockFilePath;
-
-  /// Constructor that takes directory to download the repository and
-  /// file with goldens repo information.
-  GoldensRepoFetcher(this._webUiGoldensRepositoryDirectory, this._lockFilePath);
-
-  /// Fetches golden files from github.com/flutter/goldens, cloning the
-  /// repository if necessary.
-  ///
-  /// The repository is cloned into web_ui/.dart_tool.
-  Future<void> fetch() async {
-    final io.File lockFile = io.File(path.join(_lockFilePath));
-    final YamlMap lock = loadYaml(lockFile.readAsStringSync()) as YamlMap;
-    final String repository = lock['repository'] as String;
-    final String revision = lock['revision'] as String;
-
-    final String? localRevision = await _getLocalRevision();
-    if (localRevision == revision) {
-      return;
-    }
-
-    print('Fetching $repository@$revision');
-
-    if (!_webUiGoldensRepositoryDirectory.existsSync()) {
-      _webUiGoldensRepositoryDirectory.createSync(recursive: true);
-      await _runGit(
-        <String>['init'],
-        _webUiGoldensRepositoryDirectory.path,
-      );
-
-      await _runGit(
-        <String>['remote', 'add', 'origin', repository],
-        _webUiGoldensRepositoryDirectory.path,
-      );
-    }
-
-    await _runGit(
-      <String>['fetch', 'origin', 'main'],
-      _webUiGoldensRepositoryDirectory.path,
-    );
-    await _runGit(
-      <String>['checkout', revision],
-      _webUiGoldensRepositoryDirectory.path,
-    );
-  }
-
-  Future<String?> _getLocalRevision() async {
-    final io.File head = io.File(
-        path.join(_webUiGoldensRepositoryDirectory.path, '.git', 'HEAD'));
-
-    if (!head.existsSync()) {
-      return null;
-    }
-
-    return head.readAsStringSync().trim();
-  }
-
-  /// Runs `git` with given arguments.
-  Future<void> _runGit(
-    List<String> arguments,
-    String workingDirectory,
-  ) async {
-    final io.Process process = await io.Process.start(
-      'git',
-      arguments,
-      workingDirectory: workingDirectory,
-      // Running the process in a system shell for Windows. Otherwise
-      // the process is not able to get Dart from path.
-      runInShell: io.Platform.isWindows,
-      mode: io.ProcessStartMode.inheritStdio,
-    );
-    final int exitCode = await process.exitCode;
-    if (exitCode != 0) {
-      throw Exception('Git command failed with arguments $arguments on '
-          'workingDirectory: $workingDirectory resulting with exitCode: '
-          '$exitCode');
-    }
-  }
-}
diff --git a/web_sdk/web_test_utils/lib/image_compare.dart b/web_sdk/web_test_utils/lib/image_compare.dart
index 4a3bef9..7f20f79 100644
--- a/web_sdk/web_test_utils/lib/image_compare.dart
+++ b/web_sdk/web_test_utils/lib/image_compare.dart
@@ -33,56 +33,36 @@
   double maxDiffRateFailure,
   SkiaGoldClient? skiaClient, {
   required bool isCanvaskitTest,
-  // TODO(mdebbar): Remove these args with goldens repo.
-  String goldensDirectory = '',
-  String filenameSuffix = '',
-  bool write = false,
 }) async {
-  if (_isLuci && skiaClient != null) {
+  if (skiaClient == null) {
+    return 'OK';
+  }
+
+  final String screenshotPath = _getFullScreenshotPath(filename);
+  final File screenshotFile = File(screenshotPath);
+  await screenshotFile.writeAsBytes(encodePng(screenshot), flush: true);
+
+  if (_isLuci) {
     // This is temporary to get started by uploading existing screenshots to
     // Skia Gold. The next step would be to actually use Skia Gold for
     // comparison.
-
-    // TODO(mdebbar): Use Skia Gold for comparison, not only for uploading.
-    await _uploadToSkiaGold(skiaClient, screenshot, filename, isCanvaskitTest);
+    final int screenshotSize = screenshot.width * screenshot.height;
+    await _uploadToSkiaGold(skiaClient, screenshotFile, screenshotSize, filename, isCanvaskitTest);
+    return 'OK';
   }
 
-  filename = filename.replaceAll('.png', '$filenameSuffix.png');
+  final Image? golden = await _getGolden(filename);
 
-  final Environment environment = Environment();
-  if (goldensDirectory.isEmpty) {
-    goldensDirectory = p.join(
-      environment.webUiGoldensRepositoryDirectory.path,
-      'engine',
-      'web',
-    );
-  }
-  // Bail out fast if golden doesn't exist, and user doesn't want to create it.
-  final File file = File(p.join(
-    goldensDirectory,
-    filename,
-  ));
-  if (!file.existsSync() && !write) {
-    return '''
-Golden file $filename does not exist.
-
-To automatically create this file call matchGoldenFile('$filename', write: true).
-''';
-  }
-  if (write) {
-    // Don't even bother with the comparison, just write and return
-    print('Updating screenshot golden: $file');
-    file.writeAsBytesSync(encodePng(screenshot), flush: true);
-    if (doUpdateScreenshotGoldens) {
-      // Do not fail tests when bulk-updating screenshot goldens.
-      return 'OK';
-    } else {
-      return 'Golden file $filename was updated. You can remove "write: true" '
-          'in the call to matchGoldenFile.';
-    }
+  if (doUpdateScreenshotGoldens) {
+    return 'OK';
   }
 
-  final Image golden = decodeNamedImage(file.readAsBytesSync(), filename)!;
+  if (golden == null) {
+    // This is a new screenshot that doesn't have an existing golden.
+    return 'No golden was found for "$filename". If this is a new screenshot'
+        'test, please take a look at the generated screenshot:\n\n'
+        '* file://$screenshotPath\n';
+  }
 
   // Compare screenshots.
   final ImageDiff diff = ImageDiff(
@@ -94,7 +74,7 @@
   if (diff.rate > 0) {
     final String testResultsPath = environment.webUiTestResultsDirectory.path;
     Directory(testResultsPath).createSync(recursive: true);
-    final String basename = p.basenameWithoutExtension(file.path);
+    final String basename = p.basenameWithoutExtension(filename);
 
     final File actualFile =
         File(p.join(testResultsPath, '$basename.actual.png'));
@@ -105,7 +85,7 @@
 
     final File expectedFile =
         File(p.join(testResultsPath, '$basename.expected.png'));
-    file.copySync(expectedFile.path);
+    screenshotFile.copySync(expectedFile.path);
 
     final File reportFile =
         File(p.join(testResultsPath, '$basename.report.html'));
@@ -140,10 +120,6 @@
 
     final String localReportPath = '$testResultsPath/$basename.report.html';
     message.writeln(localReportPath);
-
-    message.writeln(
-        'To update the golden file call matchGoldenFile(\'$filename\', write: '
-        'true).');
     message.writeln('Golden file: ${expectedFile.path}');
     message.writeln('Actual file: ${actualFile.path}');
 
@@ -160,48 +136,51 @@
   return 'OK';
 }
 
+Future<Image?> _getGolden(String filename) {
+  // TODO(mdebbar): Fetch the golden from Skia Gold.
+  return Future<Image?>.value(null);
+}
+
+String _getFullScreenshotPath(String filename) {
+  return p.join(environment.webUiSkiaGoldDirectory.path, filename);
+}
+
 Future<void> _uploadToSkiaGold(
   SkiaGoldClient skiaClient,
-  Image screenshot,
+  File screenshotFile,
+  int screenshotSize,
   String filename,
   bool isCanvaskitTest,
 ) async {
   // Can't upload to Gold Skia unless running in LUCI.
   assert(_isLuci);
 
-  // Write the screenshot to the file system so it can be consumed by the
-  // `goldctl` tool.
-  final File goldenFile = File(p.join(environment.webUiSkiaGoldDirectory.path, filename));
-  await goldenFile.writeAsBytes(encodePng(screenshot), flush: true);
-
-  final int screenshotSize = screenshot.width * screenshot.height;
-
   if (_isPreSubmit) {
-    return _uploadInPreSubmit(skiaClient, filename, goldenFile, screenshotSize, isCanvaskitTest);
+    return _uploadInPreSubmit(skiaClient, filename, screenshotFile, screenshotSize, isCanvaskitTest);
   }
   if (_isPostSubmit) {
-    return _uploadInPostSubmit(skiaClient, filename, goldenFile, screenshotSize, isCanvaskitTest);
+    return _uploadInPostSubmit(skiaClient, filename, screenshotFile, screenshotSize, isCanvaskitTest);
   }
 }
 
 Future<void> _uploadInPreSubmit(
   SkiaGoldClient skiaClient,
   String filename,
-  File goldenFile,
+  File screenshotFile,
   int screenshotSize,
   bool isCanvaskitTest,
 ) {
   assert(_isPreSubmit);
-  return skiaClient.tryjobAdd(filename, goldenFile, screenshotSize, isCanvaskitTest);
+  return skiaClient.tryjobAdd(filename, screenshotFile, screenshotSize, isCanvaskitTest);
 }
 
 Future<void> _uploadInPostSubmit(
   SkiaGoldClient skiaClient,
   String filename,
-  File goldenFile,
+  File screenshotFile,
   int screenshotSize,
   bool isCanvaskitTest,
 ) {
   assert(_isPostSubmit);
-  return skiaClient.imgtestAdd(filename, goldenFile, screenshotSize, isCanvaskitTest);
+  return skiaClient.imgtestAdd(filename, screenshotFile, screenshotSize, isCanvaskitTest);
 }