[web] Expose felt flag for building CanvasKit Chromium (#39201)

diff --git a/lib/web_ui/dev/build.dart b/lib/web_ui/dev/build.dart
index 215d59a..459445e 100644
--- a/lib/web_ui/dev/build.dart
+++ b/lib/web_ui/dev/build.dart
@@ -28,6 +28,10 @@
       defaultsTo: true
     );
     argParser.addFlag(
+      'build-canvaskit-chromium',
+      help: 'Build the Chromium variant of CanvasKit. Disabled by default.',
+    );
+    argParser.addFlag(
       'host',
       help: 'Build the host build instead of the wasm build, which is '
           'currently needed for `flutter run --local-engine` to work.'
@@ -44,13 +48,19 @@
 
   bool get buildCanvasKit => boolArg('build-canvaskit');
 
+  bool get buildCanvasKitChromium => boolArg('build-canvaskit-chromium');
+
   bool get host => boolArg('host');
 
   @override
   FutureOr<bool> run() async {
     final FilePath libPath = FilePath.fromWebUi('lib');
     final List<PipelineStep> steps = <PipelineStep>[
-      GnPipelineStep(buildCanvasKit: buildCanvasKit, host: host),
+      GnPipelineStep(
+        buildCanvasKit: buildCanvasKit,
+        buildCanvasKitChromium: buildCanvasKitChromium,
+        host: host,
+      ),
       NinjaPipelineStep(target: host ? environment.hostDebugUnoptDir : environment.wasmReleaseOutDir),
     ];
     final Pipeline buildPipeline = Pipeline(steps: steps);
@@ -75,9 +85,14 @@
 /// Not safe to interrupt as it may leave the `out/` directory in a corrupted
 /// state. GN is pretty quick though, so it's OK to not support interruption.
 class GnPipelineStep extends ProcessStep {
-  GnPipelineStep({required this.buildCanvasKit, required this.host});
+  GnPipelineStep({
+    required this.buildCanvasKit,
+    required this.buildCanvasKitChromium,
+    required this.host,
+  });
 
   final bool buildCanvasKit;
+  final bool buildCanvasKitChromium;
   final bool host;
 
   @override
@@ -97,6 +112,7 @@
         '--web',
         '--runtime-mode=release',
         if (buildCanvasKit) '--build-canvaskit',
+        if (buildCanvasKitChromium) '--build-canvaskit-chromium',
       ];
     }
   }
diff --git a/tools/gn b/tools/gn
index 2a4b3b9..b680b83 100755
--- a/tools/gn
+++ b/tools/gn
@@ -662,9 +662,7 @@
   # than forced to true, once the recipes are updated.
   # https://github.com/flutter/flutter/issues/113303
   gn_args['build_canvaskit'] = True
-  # TODO(mdebbar): Read this from an input argument.
-  # https://github.com/flutter/flutter/issues/118744
-  gn_args['build_canvaskit_chromium'] = False
+  gn_args['build_canvaskit_chromium'] = args.build_canvaskit_chromium
   gn_args['flutter_build_web_sdk'] = True
 
 
@@ -886,6 +884,14 @@
   )
 
   parser.add_argument(
+      '--build-canvaskit-chromium',
+      default=False,
+      dest='build_canvaskit_chromium',
+      action='store_true',
+      help='build the Chromium variant of CanvasKit from sources'
+  )
+
+  parser.add_argument(
       '--ide',
       default='',
       type=str,