[Harmony Cast Dialog] Notify the component extension of dialog config

Notify the component extension whether WebUI or Views Cast dialog is
being used. The extension will log this info.

Move the ShouldUseViewsDialog() method from
media_router_dialog_controller_views.cc to media_router_feature.h.

b/111209425

Change-Id: I671f330088bfe959df487cd8b7947225940692d8
Reviewed-on: https://chromium-review.googlesource.com/1134186
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Derek Cheng <imcheng@chromium.org>
Commit-Queue: Takumi Fujimoto <takumif@chromium.org>
Cr-Commit-Position: refs/heads/master@{#575727}
diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browser/media/router/media_router_feature.cc
index 757f08d1..487e2f34 100644
--- a/chrome/browser/media/router/media_router_feature.cc
+++ b/chrome/browser/media/router/media_router_feature.cc
@@ -12,9 +12,11 @@
 #include "ui/base/ui_features.h"
 
 #if defined(OS_ANDROID) || BUILDFLAG(ENABLE_EXTENSIONS)
+#include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/user_prefs/user_prefs.h"
+#include "ui/base/ui_base_features.h"
 #endif  // defined(OS_ANDROID) || BUILDFLAG(ENABLE_EXTENSIONS)
 
 #if !defined(OS_ANDROID)
@@ -107,6 +109,23 @@
   return true;
 #endif
 }
+
+bool ShouldUseViewsDialog() {
+#if defined(OS_MACOSX)
+#if BUILDFLAG(MAC_VIEWS_BROWSER)
+  // Cocoa browser is disabled if kExperimentalUi is enabled.
+  return (base::FeatureList::IsEnabled(features::kViewsCastDialog) &&
+          !features::IsViewsBrowserCocoa()) ||
+         base::FeatureList::IsEnabled(features::kExperimentalUi);
+#else   // !BUILDFLAG(MAC_VIEWS_BROWSER)
+  return false;
+#endif  // BUILDFLAG(MAC_VIEWS_BROWSER)
+#else   // !defined(OS_MACOSX)
+  return base::FeatureList::IsEnabled(features::kViewsCastDialog) ||
+         base::FeatureList::IsEnabled(features::kExperimentalUi);
+#endif  // defined(OS_MACOSX)
+}
+
 #endif  // !defined(OS_ANDROID)
 
 }  // namespace media_router
diff --git a/chrome/browser/media/router/media_router_feature.h b/chrome/browser/media/router/media_router_feature.h
index 4b78665..73791ef 100644
--- a/chrome/browser/media/router/media_router_feature.h
+++ b/chrome/browser/media/router/media_router_feature.h
@@ -58,6 +58,10 @@
 // TODO(crbug.com/802332): Remove this when mac_views_browser=1 by default.
 bool PresentationReceiverWindowEnabled();
 
+// Returns true if the Views implementation of the Cast dialog should be used.
+// Returns false if the WebUI implementation should be used.
+bool ShouldUseViewsDialog();
+
 #endif  // !defined(OS_ANDROID)
 
 }  // namespace media_router
diff --git a/chrome/browser/media/router/mojo/media_router_desktop.cc b/chrome/browser/media/router/mojo/media_router_desktop.cc
index b4bb0b2..de84607 100644
--- a/chrome/browser/media/router/mojo/media_router_desktop.cc
+++ b/chrome/browser/media/router/mojo/media_router_desktop.cc
@@ -99,11 +99,10 @@
   // discovery / sink query. We are migrating discovery from the external Media
   // Route Provider to the Media Router (https://crbug.com/687383), so we need
   // to disable it in the provider.
-  config->enable_cast_discovery = !media_router::CastDiscoveryEnabled();
-  config->enable_dial_sink_query =
-      !media_router::DialMediaRouteProviderEnabled();
-  config->enable_cast_sink_query =
-      !media_router::CastMediaRouteProviderEnabled();
+  config->enable_cast_discovery = !CastDiscoveryEnabled();
+  config->enable_dial_sink_query = !DialMediaRouteProviderEnabled();
+  config->enable_cast_sink_query = !CastMediaRouteProviderEnabled();
+  config->use_views_dialog = ShouldUseViewsDialog();
   std::move(callback).Run(instance_id(), std::move(config));
 
   SyncStateToMediaRouteProvider(provider_id);
@@ -290,7 +289,7 @@
 
 #if defined(OS_WIN)
 void MediaRouterDesktop::EnsureMdnsDiscoveryEnabled() {
-  if (media_router::CastDiscoveryEnabled()) {
+  if (CastDiscoveryEnabled()) {
     media_sink_service_->StartMdnsDiscovery();
   } else {
     media_route_providers_[MediaRouteProviderId::EXTENSION]
diff --git a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
index a133ffcb..b69ff1db2 100644
--- a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
+++ b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
@@ -6,8 +6,8 @@
 
 #include <memory>
 
-#include "base/feature_list.h"
 #include "build/build_config.h"
+#include "chrome/browser/media/router/media_router_feature.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/toolbar/component_toolbar_actions_factory.h"
 #include "chrome/browser/ui/toolbar/media_router_action.h"
@@ -15,36 +15,12 @@
 #include "chrome/browser/ui/views/media_router/cast_dialog_view.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl.h"
-#include "chrome/common/chrome_features.h"
-#include "ui/base/ui_base_features.h"
 
 DEFINE_WEB_CONTENTS_USER_DATA_KEY(
     media_router::MediaRouterDialogControllerViews);
 
 namespace media_router {
 
-namespace {
-
-// Returns true if the Views implementation of the Cast dialog should be used.
-// Returns false if the WebUI implementation should be used.
-bool ShouldUseViewsDialog() {
-#if defined(OS_MACOSX)
-#if BUILDFLAG(MAC_VIEWS_BROWSER)
-  // Cocoa browser is disabled if kExperimentalUi is enabled.
-  return (base::FeatureList::IsEnabled(features::kViewsCastDialog) &&
-          !features::IsViewsBrowserCocoa()) ||
-         base::FeatureList::IsEnabled(features::kExperimentalUi);
-#else  // !BUILDFLAG(MAC_VIEWS_BROWSER)
-  return false;
-#endif
-#else  // !defined(OS_MACOSX)
-  return base::FeatureList::IsEnabled(features::kViewsCastDialog) ||
-         base::FeatureList::IsEnabled(features::kExperimentalUi);
-#endif
-}
-
-}  // namespace
-
 // static
 MediaRouterDialogControllerImplBase*
 MediaRouterDialogControllerImplBase::GetOrCreateForWebContents(
diff --git a/chrome/common/media_router/mojo/media_router.mojom b/chrome/common/media_router/mojo/media_router.mojom
index e1b4b73..563bcf0b 100644
--- a/chrome/common/media_router/mojo/media_router.mojom
+++ b/chrome/common/media_router/mojo/media_router.mojom
@@ -233,6 +233,9 @@
 
   // If the MRP should enable Cast sink query.
   bool enable_cast_sink_query;
+
+  // If the Views dialog is being used.
+  bool use_views_dialog;
 };
 
 // Modeled after the MediaRouter interface defined in
diff --git a/chrome/renderer/resources/extensions/media_router_bindings.js b/chrome/renderer/resources/extensions/media_router_bindings.js
index 0d6733c..da8a13d0 100644
--- a/chrome/renderer/resources/extensions/media_router_bindings.js
+++ b/chrome/renderer/resources/extensions/media_router_bindings.js
@@ -784,6 +784,7 @@
                 'enable_cast_discovery': response.config.enableCastDiscovery,
                 'enable_dial_sink_query': response.config.enableDialSinkQuery,
                 'enable_cast_sink_query': response.config.enableCastSinkQuery,
+                'use_views_dialog': response.config.useViewsDialog,
               }
             };
           });