Refactor cast_mojo gn args so that the cast renderer can be enabled with ENABLE_CAST_RENDERER

Bug: b/126906251
Test: Verified that mojo_media args did not change.
Change-Id: I167fde3c1cea718c87d03d3dc2c3b61964e77988
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1512677
Reviewed-by: Chrome Cunningham <chcunningham@chromium.org>
Reviewed-by: John Rummell <jrummell@chromium.org>
Reviewed-by: Kenneth MacKay <kmackay@chromium.org>
Reviewed-by: Luke Halliwell <halliwell@chromium.org>
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Commit-Queue: Alex Leung <alexleung@google.com>
Cr-Commit-Position: refs/heads/master@{#641363}
diff --git a/build/config/chromecast_build.gni b/build/config/chromecast_build.gni
index 61870e4..13d4b43 100644
--- a/build/config/chromecast_build.gni
+++ b/build/config/chromecast_build.gni
@@ -16,6 +16,10 @@
 
   # Set this true for an audio-only Chromecast build.
   is_cast_audio_only = false
+
+  # If true, use cast CMA backend instead of default chromium media pipeline.
+  # TODO(sanfin): Remove this flag when all builds enable CMA.
+  is_cast_using_cma_backend = true
 }
 
 # Note(slan): This arg depends on the value of is_chromecast, and thus must be
@@ -31,6 +35,36 @@
                           (target_cpu == "x86" || target_cpu == "x64")
 }
 
+declare_args() {
+  # True to enable the cast renderer.  It is enabled by default for non-android
+  # builds.
+  enable_cast_renderer =
+      is_chromecast && is_cast_using_cma_backend && !is_android
+}
+
+# Configures media options for cast.  See media/media_options.gni
+cast_mojo_media_services = []
+cast_mojo_media_host = "none"
+
+if (enable_cast_renderer) {
+  cast_mojo_media_services = [
+    "cdm",
+    "renderer",
+  ]
+  cast_mojo_media_host = "browser"
+} else if (is_android) {
+  cast_mojo_media_services = [
+    "cdm",
+    "audio_decoder",
+  ]
+  if (is_cast_audio_only) {
+    cast_mojo_media_host = "browser"
+  } else {
+    cast_mojo_media_services += [ "video_decoder" ]
+    cast_mojo_media_host = "gpu"
+  }
+}
+
 # Assert that Chromecast is being built for a supported platform.
 assert(is_linux || is_android || is_fuchsia || !is_chromecast,
        "Chromecast builds are not supported on $target_os")
diff --git a/chromecast/browser/BUILD.gn b/chromecast/browser/BUILD.gn
index 4ffe6a7..4fffe1c 100644
--- a/chromecast/browser/BUILD.gn
+++ b/chromecast/browser/BUILD.gn
@@ -15,7 +15,10 @@
 
 buildflag_header("browser_buildflags") {
   header = "browser_buildflags.h"
-  flags = [ "ENABLE_CAST_AUDIO_MANAGER_MIXER=$enable_cast_audio_manager_mixer" ]
+  flags = [
+    "ENABLE_CAST_AUDIO_MANAGER_MIXER=$enable_cast_audio_manager_mixer",
+    "ENABLE_CAST_RENDERER=$enable_cast_renderer",
+  ]
 }
 
 cast_source_set("prefs") {
diff --git a/chromecast/browser/cast_content_browser_client.cc b/chromecast/browser/cast_content_browser_client.cc
index 44f283e..a1efdca 100644
--- a/chromecast/browser/cast_content_browser_client.cc
+++ b/chromecast/browser/cast_content_browser_client.cc
@@ -150,10 +150,7 @@
 static void CreateMediaService(CastContentBrowserClient* browser_client,
                                service_manager::mojom::ServiceRequest request) {
   std::unique_ptr<::media::MediaService> service;
-#if defined(OS_ANDROID)
-  service = std::make_unique<::media::MediaService>(
-      std::make_unique<::media::AndroidMojoMediaClient>(), std::move(request));
-#else
+#if BUILDFLAG(ENABLE_CAST_RENDERER)
   auto mojo_media_client = std::make_unique<media::CastMojoMediaClient>(
       browser_client->GetCmaBackendFactory(),
       base::Bind(&CastContentBrowserClient::CreateCdmFactory,
@@ -163,8 +160,12 @@
       browser_client->media_resource_tracker());
   service = std::make_unique<::media::MediaService>(
       std::move(mojo_media_client), std::move(request));
-#endif  // defined(OS_ANDROID)
-
+#elif defined(OS_ANDROID)
+  service = std::make_unique<::media::MediaService>(
+      std::make_unique<::media::AndroidMojoMediaClient>(), std::move(request));
+#else
+#error "Unsupported configuration."
+#endif  // defined(ENABLE_CAST_RENDERER)
   service_manager::Service::RunAsyncUntilTermination(std::move(service));
 }
 #endif  // BUILDFLAG(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS)
diff --git a/media/media_options.gni b/media/media_options.gni
index 179bd32..d5902db 100644
--- a/media/media_options.gni
+++ b/media/media_options.gni
@@ -84,10 +84,6 @@
   # are combined and we could override more logging than expected.
   enable_logging_override = !use_jumbo_build && is_chromecast
 
-  # If true, use cast CMA backend instead of default chromium media pipeline.
-  # TODO(sanfin): Remove this flag when all builds enable CMA.
-  is_cast_using_cma_backend = true
-
   # Dav1d is only enabled when av1 decoding is enabled.
   if (is_win && target_cpu == "arm64") {
     # TODO: Enable dav1d for Windows ARM64. https://crbug.com/941022
@@ -198,28 +194,16 @@
 # Can be overridden by gn build arguments from the --args command line flag
 # for local testing.
 if (enable_mojo_media) {
-  if (is_chromecast && is_cast_using_cma_backend && !is_android) {
+  if (is_chromecast) {
+    _default_mojo_media_services = cast_mojo_media_services
+    _default_mojo_media_host = cast_mojo_media_host
+  } else if (is_android) {
     _default_mojo_media_services = [
       "cdm",
-      "renderer",
+      "audio_decoder",
+      "video_decoder",
     ]
-    _default_mojo_media_host = "browser"
-  } else if (is_android) {
-    # Both chrome for Android and cast for Android belongs to this case
-    if (is_cast_audio_only) {
-      _default_mojo_media_services = [
-        "cdm",
-        "audio_decoder",
-      ]
-      _default_mojo_media_host = "browser"
-    } else {
-      _default_mojo_media_services = [
-        "cdm",
-        "audio_decoder",
-        "video_decoder",
-      ]
-      _default_mojo_media_host = "gpu"
-    }
+    _default_mojo_media_host = "gpu"
   } else if (is_chromeos || is_mac || is_win ||
              (is_desktop_linux && use_vaapi)) {
     _default_mojo_media_services = [ "video_decoder" ]