blob: 0f32339552067bf0f31acabaf05448e631b00712 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/chrome_browser_interface_binders.h"
#include <utility>
#include "ash/constants/ash_features.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/accessibility/accessibility_labels_service.h"
#include "chrome/browser/accessibility/accessibility_labels_service_factory.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/buildflags.h"
#include "chrome/browser/dom_distiller/dom_distiller_service_factory.h"
#include "chrome/browser/language/translate_frame_binder.h"
#include "chrome/browser/media/history/media_history_store.mojom.h"
#include "chrome/browser/media/media_engagement_score_details.mojom.h"
#include "chrome/browser/navigation_predictor/navigation_predictor.h"
#include "chrome/browser/password_manager/chrome_password_manager_client.h"
#include "chrome/browser/predictors/network_hints_handler_impl.h"
#include "chrome/browser/prefetch/no_state_prefetch/chrome_no_state_prefetch_contents_delegate.h"
#include "chrome/browser/prefetch/no_state_prefetch/chrome_no_state_prefetch_processor_impl_delegate.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/signin/identity_manager_factory.h"
#include "chrome/browser/ssl/insecure_sensitive_input_driver_factory.h"
#include "chrome/browser/ssl/security_state_tab_helper.h"
#include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/ui/web_applications/draggable_region_host_impl.h"
#include "chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals.mojom.h"
#include "chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.h"
#include "chrome/browser/ui/webui/engagement/site_engagement_ui.h"
#include "chrome/browser/ui/webui/internals/internals_ui.h"
#include "chrome/browser/ui/webui/media/media_engagement_ui.h"
#include "chrome/browser/ui/webui/media/media_history_ui.h"
#include "chrome/browser/ui/webui/omnibox/omnibox.mojom.h"
#include "chrome/browser/ui/webui/omnibox/omnibox_ui.h"
#include "chrome/browser/ui/webui/usb_internals/usb_internals.mojom.h"
#include "chrome/browser/ui/webui/usb_internals/usb_internals_ui.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/pref_names.h"
#include "components/contextual_search/buildflags.h"
#include "components/dom_distiller/content/browser/distillability_driver.h"
#include "components/dom_distiller/content/browser/distiller_javascript_service_impl.h"
#include "components/dom_distiller/content/common/mojom/distillability_service.mojom.h"
#include "components/dom_distiller/content/common/mojom/distiller_javascript_service.mojom.h"
#include "components/dom_distiller/core/dom_distiller_service.h"
#include "components/feed/buildflags.h"
#include "components/live_caption/pref_names.h"
#include "components/no_state_prefetch/browser/no_state_prefetch_contents.h"
#include "components/no_state_prefetch/browser/no_state_prefetch_processor_impl.h"
#include "components/performance_manager/embedder/binders.h"
#include "components/performance_manager/public/performance_manager.h"
#include "components/prefs/pref_service.h"
#include "components/reading_list/features/reading_list_switches.h"
#include "components/safe_browsing/buildflags.h"
#include "components/security_state/content/content_utils.h"
#include "components/security_state/core/security_state.h"
#include "components/signin/public/identity_manager/identity_manager.h"
#include "components/site_engagement/core/mojom/site_engagement_details.mojom.h"
#include "components/translate/content/common/translate.mojom.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/common/content_features.h"
#include "content/public/common/url_constants.h"
#include "extensions/buildflags/buildflags.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "services/image_annotation/public/mojom/image_annotation.mojom.h"
#include "third_party/blink/public/mojom/credentialmanager/credential_manager.mojom.h"
#include "third_party/blink/public/mojom/insecure_input/insecure_input_service.mojom.h"
#include "third_party/blink/public/mojom/loader/navigation_predictor.mojom.h"
#include "third_party/blink/public/mojom/payments/payment_credential.mojom.h"
#include "third_party/blink/public/mojom/payments/payment_request.mojom.h"
#include "third_party/blink/public/mojom/prerender/prerender.mojom.h"
#include "third_party/blink/public/public_buildflags.h"
#include "ui/webui/resources/cr_components/customize_themes/customize_themes.mojom.h"
#if BUILDFLAG(ENABLE_UNHANDLED_TAP)
#include "chrome/browser/android/contextualsearch/unhandled_tap_notifier_impl.h"
#include "chrome/browser/android/contextualsearch/unhandled_tap_web_contents_observer.h"
#include "third_party/blink/public/mojom/unhandled_tap_notifier/unhandled_tap_notifier.mojom.h"
#endif // BUILDFLAG(ENABLE_UNHANDLED_TAP)
#if BUILDFLAG(FULL_SAFE_BROWSING)
#include "chrome/browser/ui/webui/reset_password/reset_password.mojom.h"
#include "chrome/browser/ui/webui/reset_password/reset_password_ui.h"
#endif // BUILDFLAG(FULL_SAFE_BROWSING)
#if defined(OS_ANDROID)
#include "chrome/browser/android/contextualsearch/contextual_search_observer.h"
#include "chrome/browser/android/dom_distiller/distiller_ui_handle_android.h"
#include "chrome/browser/offline_pages/android/offline_page_auto_fetcher.h"
#include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals.mojom.h"
#include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.h"
#include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h"
#include "chrome/browser/ui/webui/feed_internals/feed_internals_ui.h"
#include "chrome/common/offline_page_auto_fetcher.mojom.h"
#include "components/contextual_search/content/browser/contextual_search_js_api_service_impl.h"
#include "components/contextual_search/content/common/mojom/contextual_search_js_api_service.mojom.h"
#include "services/service_manager/public/cpp/interface_provider.h"
#include "third_party/blink/public/mojom/digital_goods/digital_goods.mojom.h"
#include "third_party/blink/public/mojom/installedapp/installed_app_provider.mojom.h"
#else
#include "chrome/browser/accessibility/live_caption_speech_recognition_host.h"
#include "chrome/browser/badging/badge_manager.h"
#include "chrome/browser/cart/chrome_cart.mojom.h"
#include "chrome/browser/cart/commerce_hint_service.h"
#include "chrome/browser/payments/payment_credential_factory.h"
#include "chrome/browser/payments/payment_request_factory.h"
#include "chrome/browser/promo_browser_command/promo_browser_command.mojom.h"
#include "chrome/browser/search/drive/drive.mojom.h"
#include "chrome/browser/search/task_module/task_module.mojom.h"
#include "chrome/browser/speech/speech_recognition_client_browser_interface.h"
#include "chrome/browser/speech/speech_recognition_client_browser_interface_factory.h"
#include "chrome/browser/speech/speech_recognition_service.h"
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "chrome/browser/speech/cros_speech_recognition_service_factory.h"
#else
#include "chrome/browser/speech/speech_recognition_service_factory.h"
#endif
#include "chrome/browser/ui/webui/downloads/downloads.mojom.h"
#include "chrome/browser/ui/webui/downloads/downloads_ui.h"
#include "chrome/browser/ui/webui/realbox/realbox.mojom.h"
#if !defined(OFFICIAL_BUILD)
#include "chrome/browser/ui/webui/new_tab_page/foo/foo.mojom.h" // nogncheck crbug.com/1125897
#endif
#include "chrome/browser/ui/webui/download_shelf/download_shelf.mojom.h"
#include "chrome/browser/ui/webui/download_shelf/download_shelf_ui.h"
#include "chrome/browser/ui/webui/internals/user_education/user_education_internals.mojom.h"
#include "chrome/browser/ui/webui/memories/memories.mojom.h"
#include "chrome/browser/ui/webui/memories/memories_ui.h"
#include "chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom.h"
#include "chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h"
#include "chrome/browser/ui/webui/new_tab_page_third_party/new_tab_page_third_party_ui.h"
#include "chrome/browser/ui/webui/read_later/read_later.mojom.h"
#include "chrome/browser/ui/webui/read_later/read_later_ui.h"
#include "chrome/browser/ui/webui/settings/settings_ui.h"
#include "chrome/browser/ui/webui/tab_search/tab_search.mojom.h"
#include "chrome/browser/ui/webui/tab_search/tab_search_ui.h"
#include "chrome/common/webui_url_constants.h"
#include "components/search/ntp_features.h"
#include "media/base/media_switches.h"
#include "media/mojo/mojom/speech_recognition_service.mojom.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#endif // defined(OS_ANDROID)
#if defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) || \
defined(OS_CHROMEOS)
#include "chrome/browser/ui/webui/discards/discards.mojom.h"
#include "chrome/browser/ui/webui/discards/discards_ui.h"
#include "chrome/browser/ui/webui/discards/site_data.mojom.h"
#endif
#if !BUILDFLAG(IS_CHROMEOS_ASH) && !defined(OS_ANDROID)
#include "chrome/browser/ui/webui/signin/profile_customization_ui.h"
#include "chrome/browser/ui/webui/signin/profile_picker_ui.h"
#include "ui/webui/resources/cr_components/customize_themes/customize_themes.mojom.h"
#endif // !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH)
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "ash/content/scanning/mojom/scanning.mojom.h"
#include "ash/content/scanning/scanning_ui.h"
#include "chrome/browser/apps/digital_goods/digital_goods_factory_impl.h"
#include "chrome/browser/nearby_sharing/common/nearby_share_features.h"
#include "chrome/browser/ui/webui/app_management/app_management.mojom.h"
#include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision.mojom.h"
#include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h"
#include "chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer.mojom.h"
#include "chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.h"
#include "chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader.mojom.h"
#include "chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_ui.h"
#include "chrome/browser/ui/webui/chromeos/emoji/emoji_picker.mojom.h"
#include "chrome/browser/ui/webui/chromeos/emoji/emoji_ui.h"
#include "chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_network_ui.h"
#include "chrome/browser/ui/webui/chromeos/internet_config_dialog.h"
#include "chrome/browser/ui/webui/chromeos/internet_detail_dialog.h"
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h"
#include "chrome/browser/ui/webui/chromeos/network_ui.h"
#include "chrome/browser/ui/webui/chromeos/vm/vm.mojom.h"
#include "chrome/browser/ui/webui/chromeos/vm/vm_ui.h"
#include "chrome/browser/ui/webui/internals/web_app/web_app_internals.mojom.h"
#include "chrome/browser/ui/webui/nearby_share/nearby_share.mojom.h"
#include "chrome/browser/ui/webui/nearby_share/nearby_share_dialog_ui.h"
#include "chrome/browser/ui/webui/nearby_share/public/mojom/nearby_share_settings.mojom.h" // nogncheck crbug.com/1125897
#include "chrome/browser/ui/webui/settings/chromeos/os_settings_ui.h"
#include "chrome/browser/ui/webui/settings/chromeos/search/search.mojom.h"
#include "chrome/browser/ui/webui/settings/chromeos/search/user_action_recorder.mojom.h"
#include "chromeos/components/camera_app_ui/camera_app_helper.mojom.h"
#include "chromeos/components/camera_app_ui/camera_app_ui.h"
#include "chromeos/components/connectivity_diagnostics/connectivity_diagnostics_ui.h"
#include "chromeos/components/diagnostics_ui/diagnostics_ui.h"
#include "chromeos/components/diagnostics_ui/mojom/system_data_provider.mojom.h"
#include "chromeos/components/diagnostics_ui/mojom/system_routine_controller.mojom.h"
#include "chromeos/components/eche_app_ui/eche_app_ui.h"
#include "chromeos/components/eche_app_ui/mojom/eche_app.mojom.h"
#include "chromeos/components/help_app_ui/help_app_ui.h"
#include "chromeos/components/help_app_ui/help_app_ui.mojom.h"
#include "chromeos/components/help_app_ui/search/search.mojom.h"
#include "chromeos/components/local_search_service/public/mojom/index.mojom.h"
#include "chromeos/components/media_app_ui/media_app_ui.h"
#include "chromeos/components/media_app_ui/media_app_ui.mojom.h"
#include "chromeos/components/multidevice/debug_webui/proximity_auth_ui.h"
#include "chromeos/components/personalization_app/mojom/personalization_app.mojom.h"
#include "chromeos/components/personalization_app/personalization_app_ui.h"
#include "chromeos/components/print_management/mojom/printing_manager.mojom.h"
#include "chromeos/components/print_management/print_management_ui.h"
#include "chromeos/services/cellular_setup/public/mojom/cellular_setup.mojom.h"
#include "chromeos/services/cellular_setup/public/mojom/esim_manager.mojom.h"
#include "chromeos/services/multidevice_setup/multidevice_setup_service.h"
#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h" // nogncheck
#include "chromeos/services/network_health/public/mojom/network_diagnostics.mojom.h"
#include "chromeos/services/network_health/public/mojom/network_health.mojom.h"
#include "media/capture/video/chromeos/mojom/camera_app.mojom.h"
#include "third_party/blink/public/mojom/digital_goods/digital_goods.mojom.h"
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if defined(OS_WIN) || BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC) || \
defined(OS_ANDROID)
#if defined(OS_WIN) || BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC)
#include "chrome/browser/webshare/share_service_impl.h"
#endif
#include "third_party/blink/public/mojom/webshare/webshare.mojom.h"
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH) && !defined(OFFICIAL_BUILD)
#include "chromeos/components/file_manager/file_manager_ui.h"
#include "chromeos/components/file_manager/mojom/file_manager.mojom.h"
#include "chromeos/components/telemetry_extension_ui/mojom/diagnostics_service.mojom.h" // nogncheck crbug.com/1125897
#include "chromeos/components/telemetry_extension_ui/mojom/probe_service.mojom.h" // nogncheck crbug.com/1125897
#include "chromeos/components/telemetry_extension_ui/mojom/system_events_service.mojom.h" // nogncheck crbug.com/1125897
#include "chromeos/components/telemetry_extension_ui/telemetry_extension_ui.h"
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "extensions/browser/api/mime_handler_private/mime_handler_private.h"
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
#include "extensions/common/api/mime_handler.mojom.h" // nogncheck
#endif
namespace chrome {
namespace internal {
#if BUILDFLAG(ENABLE_UNHANDLED_TAP)
void BindUnhandledTapWebContentsObserver(
content::RenderFrameHost* const host,
mojo::PendingReceiver<blink::mojom::UnhandledTapNotifier> receiver) {
auto* web_contents = content::WebContents::FromRenderFrameHost(host);
if (!web_contents)
return;
auto* unhandled_tap_notifier_observer =
contextual_search::UnhandledTapWebContentsObserver::FromWebContents(
web_contents);
if (!unhandled_tap_notifier_observer)
return;
contextual_search::CreateUnhandledTapNotifierImpl(
unhandled_tap_notifier_observer->device_scale_factor(),
unhandled_tap_notifier_observer->unhandled_tap_callback(),
std::move(receiver));
}
#endif // BUILDFLAG(ENABLE_UNHANDLED_TAP)
#if BUILDFLAG(BUILD_CONTEXTUAL_SEARCH)
void BindContextualSearchObserver(
content::RenderFrameHost* const host,
mojo::PendingReceiver<
contextual_search::mojom::ContextualSearchJsApiService> receiver) {
// Early return if the RenderFrameHost's delegate is not a WebContents.
auto* web_contents = content::WebContents::FromRenderFrameHost(host);
if (!web_contents)
return;
auto* contextual_search_observer =
contextual_search::ContextualSearchObserver::FromWebContents(
web_contents);
if (contextual_search_observer) {
contextual_search::CreateContextualSearchJsApiService(
contextual_search_observer->api_handler(), std::move(receiver));
}
}
#endif // BUILDFLAG(BUILD_CONTEXTUAL_SEARCH)
// Forward image Annotator requests to the profile's AccessibilityLabelsService.
void BindImageAnnotator(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<image_annotation::mojom::Annotator> receiver) {
AccessibilityLabelsServiceFactory::GetForProfile(
Profile::FromBrowserContext(
frame_host->GetProcess()->GetBrowserContext()))
->BindImageAnnotator(std::move(receiver));
}
#if !defined(OS_ANDROID)
void BindCommerceHintObserver(
content::RenderFrameHost* const frame_host,
mojo::PendingReceiver<cart::mojom::CommerceHintObserver> receiver) {
// Cart is not available for non-signin single-profile users.
Profile* profile = Profile::FromBrowserContext(
frame_host->GetProcess()->GetBrowserContext());
auto* identity_manager = IdentityManagerFactory::GetForProfile(profile);
ProfileManager* profile_manager = g_browser_process->profile_manager();
if (!identity_manager || !profile_manager)
return;
if (!identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin) &&
profile_manager->GetNumberOfProfiles() <= 1)
return;
auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
if (!web_contents)
return;
content::BrowserContext* browser_context = web_contents->GetBrowserContext();
if (!browser_context)
return;
if (browser_context->IsOffTheRecord())
return;
cart::CommerceHintService::CreateForWebContents(web_contents);
cart::CommerceHintService* service =
cart::CommerceHintService::FromWebContents(web_contents);
if (!service)
return;
service->BindCommerceHintObserver(frame_host, std::move(receiver));
}
#endif
void BindDistillabilityService(
content::RenderFrameHost* const frame_host,
mojo::PendingReceiver<dom_distiller::mojom::DistillabilityService>
receiver) {
auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
if (!web_contents)
return;
dom_distiller::DistillabilityDriver* driver =
dom_distiller::DistillabilityDriver::FromWebContents(web_contents);
if (!driver)
return;
driver->SetIsSecureCallback(
base::BindRepeating([](content::WebContents* contents) {
// SecurityStateTabHelper uses chrome-specific
// GetVisibleSecurityState to determine if a page is SECURE.
return SecurityStateTabHelper::FromWebContents(contents)
->GetSecurityLevel() ==
security_state::SecurityLevel::SECURE;
}));
driver->CreateDistillabilityService(std::move(receiver));
}
void BindDistillerJavaScriptService(
content::RenderFrameHost* const frame_host,
mojo::PendingReceiver<dom_distiller::mojom::DistillerJavaScriptService>
receiver) {
auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
if (!web_contents)
return;
dom_distiller::DomDistillerService* dom_distiller_service =
dom_distiller::DomDistillerServiceFactory::GetForBrowserContext(
web_contents->GetBrowserContext());
auto* distiller_ui_handle = dom_distiller_service->GetDistillerUIHandle();
#if defined(OS_ANDROID)
static_cast<dom_distiller::android::DistillerUIHandleAndroid*>(
distiller_ui_handle)
->set_render_frame_host(frame_host);
#endif
auto* distilled_page_prefs = dom_distiller_service->GetDistilledPagePrefs();
CreateDistillerJavaScriptService(distiller_ui_handle, distilled_page_prefs,
std::move(receiver));
}
void BindPrerenderCanceler(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<prerender::mojom::PrerenderCanceler> receiver) {
auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
if (!web_contents)
return;
auto* no_state_prefetch_contents =
prerender::ChromeNoStatePrefetchContentsDelegate::FromWebContents(
web_contents);
if (!no_state_prefetch_contents)
return;
no_state_prefetch_contents->AddPrerenderCancelerReceiver(std::move(receiver));
}
void BindNoStatePrefetchProcessor(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<blink::mojom::NoStatePrefetchProcessor> receiver) {
prerender::NoStatePrefetchProcessorImpl::Create(
frame_host, std::move(receiver),
std::make_unique<
prerender::ChromeNoStatePrefetchProcessorImplDelegate>());
}
#if defined(OS_ANDROID)
template <typename Interface>
void ForwardToJavaWebContents(content::RenderFrameHost* frame_host,
mojo::PendingReceiver<Interface> receiver) {
content::WebContents* contents =
content::WebContents::FromRenderFrameHost(frame_host);
if (contents)
contents->GetJavaInterfaces()->GetInterface(std::move(receiver));
}
template <typename Interface>
void ForwardToJavaFrame(content::RenderFrameHost* render_frame_host,
mojo::PendingReceiver<Interface> receiver) {
render_frame_host->GetJavaInterfaces()->GetInterface(std::move(receiver));
}
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
void BindMimeHandlerService(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<extensions::mime_handler::MimeHandlerService>
receiver) {
auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
if (!web_contents)
return;
auto* guest_view =
extensions::MimeHandlerViewGuest::FromWebContents(web_contents);
if (!guest_view)
return;
extensions::MimeHandlerServiceImpl::Create(guest_view->GetStreamWeakPtr(),
std::move(receiver));
}
void BindBeforeUnloadControl(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<extensions::mime_handler::BeforeUnloadControl>
receiver) {
auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
if (!web_contents)
return;
auto* guest_view =
extensions::MimeHandlerViewGuest::FromWebContents(web_contents);
if (!guest_view)
return;
guest_view->FuseBeforeUnloadControl(std::move(receiver));
}
#endif
void BindNetworkHintsHandler(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<network_hints::mojom::NetworkHintsHandler> receiver) {
predictors::NetworkHintsHandlerImpl::Create(frame_host, std::move(receiver));
}
#if !defined(OS_ANDROID)
void BindSpeechRecognitionContextHandler(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<media::mojom::SpeechRecognitionContext> receiver) {
Profile* profile = Profile::FromBrowserContext(
frame_host->GetProcess()->GetBrowserContext());
if (media::IsLiveCaptionFeatureEnabled()) {
#if BUILDFLAG(IS_CHROMEOS_ASH)
CrosSpeechRecognitionServiceFactory::GetForProfile(profile)->Create(
std::move(receiver));
#else
SpeechRecognitionServiceFactory::GetForProfile(profile)->Create(
std::move(receiver));
#endif
}
}
void BindSpeechRecognitionClientBrowserInterfaceHandler(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<media::mojom::SpeechRecognitionClientBrowserInterface>
receiver) {
if (media::IsLiveCaptionFeatureEnabled()) {
Profile* profile = Profile::FromBrowserContext(
frame_host->GetProcess()->GetBrowserContext());
SpeechRecognitionClientBrowserInterfaceFactory::GetForProfile(profile)
->BindReceiver(std::move(receiver));
}
}
void BindSpeechRecognitionRecognizerClientHandler(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<media::mojom::SpeechRecognitionRecognizerClient>
receiver) {
Profile* profile = Profile::FromBrowserContext(
frame_host->GetProcess()->GetBrowserContext());
PrefService* profile_prefs = profile->GetPrefs();
if (profile_prefs->GetBoolean(prefs::kLiveCaptionEnabled) &&
media::IsLiveCaptionFeatureEnabled()) {
captions::LiveCaptionSpeechRecognitionHost::Create(frame_host,
std::move(receiver));
}
}
#endif
void PopulateChromeFrameBinders(
mojo::BinderMapWithContext<content::RenderFrameHost*>* map,
content::RenderFrameHost* render_frame_host) {
map->Add<image_annotation::mojom::Annotator>(
base::BindRepeating(&BindImageAnnotator));
#if !defined(OS_ANDROID)
if (base::FeatureList::IsEnabled(ntp_features::kNtpChromeCartModule) &&
!render_frame_host->GetParent()) {
map->Add<cart::mojom::CommerceHintObserver>(
base::BindRepeating(&BindCommerceHintObserver));
}
#endif
map->Add<blink::mojom::AnchorElementMetricsHost>(
base::BindRepeating(&NavigationPredictor::Create));
map->Add<blink::mojom::InsecureInputService>(
base::BindRepeating(&InsecureSensitiveInputDriverFactory::BindDriver));
map->Add<dom_distiller::mojom::DistillabilityService>(
base::BindRepeating(&BindDistillabilityService));
map->Add<dom_distiller::mojom::DistillerJavaScriptService>(
base::BindRepeating(&BindDistillerJavaScriptService));
map->Add<prerender::mojom::PrerenderCanceler>(
base::BindRepeating(&BindPrerenderCanceler));
map->Add<blink::mojom::NoStatePrefetchProcessor>(
base::BindRepeating(&BindNoStatePrefetchProcessor));
if (performance_manager::PerformanceManager::IsAvailable()) {
map->Add<performance_manager::mojom::DocumentCoordinationUnit>(
base::BindRepeating(
&performance_manager::BindDocumentCoordinationUnit));
}
map->Add<translate::mojom::ContentTranslateDriver>(
base::BindRepeating(&language::BindContentTranslateDriver));
map->Add<blink::mojom::CredentialManager>(
base::BindRepeating(&ChromePasswordManagerClient::BindCredentialManager));
#if defined(OS_ANDROID)
map->Add<blink::mojom::InstalledAppProvider>(base::BindRepeating(
&ForwardToJavaFrame<blink::mojom::InstalledAppProvider>));
map->Add<payments::mojom::DigitalGoodsFactory>(base::BindRepeating(
&ForwardToJavaFrame<payments::mojom::DigitalGoodsFactory>));
#if defined(BROWSER_MEDIA_CONTROLS_MENU)
map->Add<blink::mojom::MediaControlsMenuHost>(base::BindRepeating(
&ForwardToJavaFrame<blink::mojom::MediaControlsMenuHost>));
#endif
map->Add<chrome::mojom::OfflinePageAutoFetcher>(
base::BindRepeating(&offline_pages::OfflinePageAutoFetcher::Create));
if (base::FeatureList::IsEnabled(features::kWebPayments)) {
map->Add<payments::mojom::PaymentRequest>(base::BindRepeating(
&ForwardToJavaFrame<payments::mojom::PaymentRequest>));
}
map->Add<blink::mojom::ShareService>(base::BindRepeating(
&ForwardToJavaWebContents<blink::mojom::ShareService>));
#if BUILDFLAG(BUILD_CONTEXTUAL_SEARCH)
map->Add<contextual_search::mojom::ContextualSearchJsApiService>(
base::BindRepeating(&BindContextualSearchObserver));
#if BUILDFLAG(ENABLE_UNHANDLED_TAP)
map->Add<blink::mojom::UnhandledTapNotifier>(
base::BindRepeating(&BindUnhandledTapWebContentsObserver));
#endif // BUILDFLAG(ENABLE_UNHANDLED_TAP)
#endif // BUILDFLAG(BUILD_CONTEXTUAL_SEARCH)
#else
map->Add<blink::mojom::BadgeService>(
base::BindRepeating(&badging::BadgeManager::BindFrameReceiver));
if (base::FeatureList::IsEnabled(features::kWebPayments)) {
map->Add<payments::mojom::PaymentRequest>(
base::BindRepeating(&payments::CreatePaymentRequest));
}
map->Add<payments::mojom::PaymentCredential>(
base::BindRepeating(&payments::CreatePaymentCredential));
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
map->Add<payments::mojom::DigitalGoodsFactory>(base::BindRepeating(
&apps::DigitalGoodsFactoryImpl::BindDigitalGoodsFactory));
#endif
#if defined(OS_WIN) || BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC)
if (base::FeatureList::IsEnabled(features::kWebShare)) {
map->Add<blink::mojom::ShareService>(
base::BindRepeating(&ShareServiceImpl::Create));
}
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
map->Add<extensions::mime_handler::MimeHandlerService>(
base::BindRepeating(&BindMimeHandlerService));
map->Add<extensions::mime_handler::BeforeUnloadControl>(
base::BindRepeating(&BindBeforeUnloadControl));
#endif
map->Add<network_hints::mojom::NetworkHintsHandler>(
base::BindRepeating(&BindNetworkHintsHandler));
#if !defined(OS_ANDROID)
map->Add<media::mojom::SpeechRecognitionContext>(
base::BindRepeating(&BindSpeechRecognitionContextHandler));
map->Add<media::mojom::SpeechRecognitionClientBrowserInterface>(
base::BindRepeating(&BindSpeechRecognitionClientBrowserInterfaceHandler));
map->Add<media::mojom::SpeechRecognitionRecognizerClient>(
base::BindRepeating(&BindSpeechRecognitionRecognizerClientHandler));
#endif
#if defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX)
if (base::FeatureList::IsEnabled(features::kWebAppWindowControlsOverlay) &&
!render_frame_host->GetParent()) {
map->Add<chrome::mojom::DraggableRegions>(
base::BindRepeating(&DraggableRegionsHostImpl::CreateIfAllowed));
}
#endif
}
void PopulateChromeWebUIFrameBinders(
mojo::BinderMapWithContext<content::RenderFrameHost*>* map) {
RegisterWebUIControllerInterfaceBinder<::mojom::BluetoothInternalsHandler,
BluetoothInternalsUI>(map);
RegisterWebUIControllerInterfaceBinder<
media::mojom::MediaEngagementScoreDetailsProvider, MediaEngagementUI>(
map);
RegisterWebUIControllerInterfaceBinder<
media_history::mojom::MediaHistoryStore, MediaHistoryUI>(map);
RegisterWebUIControllerInterfaceBinder<::mojom::OmniboxPageHandler,
OmniboxUI>(map);
RegisterWebUIControllerInterfaceBinder<
site_engagement::mojom::SiteEngagementDetailsProvider, SiteEngagementUI>(
map);
RegisterWebUIControllerInterfaceBinder<::mojom::UsbInternalsPageHandler,
UsbInternalsUI>(map);
#if defined(OS_ANDROID)
RegisterWebUIControllerInterfaceBinder<
explore_sites_internals::mojom::PageHandler,
explore_sites::ExploreSitesInternalsUI>(map);
#else
RegisterWebUIControllerInterfaceBinder<downloads::mojom::PageHandlerFactory,
DownloadsUI>(map);
RegisterWebUIControllerInterfaceBinder<
new_tab_page_third_party::mojom::PageHandlerFactory,
NewTabPageThirdPartyUI>(map);
RegisterWebUIControllerInterfaceBinder<
new_tab_page::mojom::PageHandlerFactory, NewTabPageUI>(map);
RegisterWebUIControllerInterfaceBinder<history_clusters::mojom::PageHandler,
MemoriesUI>(map);
RegisterWebUIControllerInterfaceBinder<
promo_browser_command::mojom::CommandHandler, NewTabPageUI>(map);
RegisterWebUIControllerInterfaceBinder<realbox::mojom::PageHandler,
NewTabPageUI>(map);
RegisterWebUIControllerInterfaceBinder<
customize_themes::mojom::CustomizeThemesHandlerFactory, NewTabPageUI
#if !BUILDFLAG(IS_CHROMEOS_ASH)
,
ProfileCustomizationUI, ProfilePickerUI, settings::SettingsUI
#endif // !BUILDFLAG(IS_CHROMEOS_ASH)
>(map);
#if !defined(OFFICIAL_BUILD)
RegisterWebUIControllerInterfaceBinder<foo::mojom::FooHandler, NewTabPageUI>(
map);
#endif // !defined(OFFICIAL_BUILD)
if (base::FeatureList::IsEnabled(ntp_features::kNtpChromeCartModule)) {
RegisterWebUIControllerInterfaceBinder<chrome_cart::mojom::CartHandler,
NewTabPageUI>(map);
}
if (base::FeatureList::IsEnabled(ntp_features::kNtpDriveModule)) {
RegisterWebUIControllerInterfaceBinder<drive::mojom::DriveHandler,
NewTabPageUI>(map);
}
if (base::FeatureList::IsEnabled(ntp_features::kNtpRecipeTasksModule) ||
base::FeatureList::IsEnabled(ntp_features::kNtpShoppingTasksModule)) {
RegisterWebUIControllerInterfaceBinder<
task_module::mojom::TaskModuleHandler, NewTabPageUI>(map);
}
if (base::FeatureList::IsEnabled(reading_list::switches::kReadLater)) {
RegisterWebUIControllerInterfaceBinder<
read_later::mojom::PageHandlerFactory, ReadLaterUI>(map);
}
RegisterWebUIControllerInterfaceBinder<tab_search::mojom::PageHandlerFactory,
TabSearchUI>(map);
RegisterWebUIControllerInterfaceBinder<
::mojom::web_app_internals::WebAppInternalsPageHandler, InternalsUI>(map);
RegisterWebUIControllerInterfaceBinder<
download_shelf::mojom::PageHandlerFactory, DownloadShelfUI>(map);
RegisterWebUIControllerInterfaceBinder<
::mojom::user_education_internals::UserEducationInternalsPageHandler,
InternalsUI>(map);
#endif // defined(OS_ANDROID)
#if BUILDFLAG(IS_CHROMEOS_ASH)
RegisterWebUIControllerInterfaceBinder<
add_supervision::mojom::AddSupervisionHandler,
chromeos::AddSupervisionUI>(map);
RegisterWebUIControllerInterfaceBinder<
app_management::mojom::PageHandlerFactory,
chromeos::settings::OSSettingsUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::settings::mojom::UserActionRecorder,
chromeos::settings::OSSettingsUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::settings::mojom::SearchHandler,
chromeos::settings::OSSettingsUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::cellular_setup::mojom::CellularSetup,
chromeos::settings::OSSettingsUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::cellular_setup::mojom::ESimManager,
chromeos::settings::OSSettingsUI, chromeos::NetworkUI, chromeos::OobeUI>(
map);
RegisterWebUIControllerInterfaceBinder<
chromeos::crostini_installer::mojom::PageHandlerFactory,
chromeos::CrostiniInstallerUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::crostini_upgrader::mojom::PageHandlerFactory,
chromeos::CrostiniUpgraderUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::multidevice_setup::mojom::MultiDeviceSetup, chromeos::OobeUI,
chromeos::multidevice::ProximityAuthUI,
chromeos::multidevice_setup::MultiDeviceSetupDialogUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::multidevice_setup::mojom::PrivilegedHostDeviceSetter,
chromeos::OobeUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::network_config::mojom::CrosNetworkConfig,
chromeos::InternetConfigDialogUI, chromeos::InternetDetailDialogUI,
chromeos::NetworkUI, chromeos::OobeUI, chromeos::settings::OSSettingsUI,
chromeos::LockScreenNetworkUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::printing::printing_manager::mojom::PrintingMetadataProvider,
chromeos::printing::printing_manager::PrintManagementUI>(map);
RegisterWebUIControllerInterfaceBinder<cros::mojom::CameraAppDeviceProvider,
chromeos::CameraAppUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos_camera::mojom::CameraAppHelper, chromeos::CameraAppUI>(map);
RegisterWebUIControllerInterfaceBinder<help_app_ui::mojom::PageHandlerFactory,
chromeos::HelpAppUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::local_search_service::mojom::Index, chromeos::HelpAppUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::help_app::mojom::SearchHandler, chromeos::HelpAppUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::eche_app::mojom::SignalingMessageExchanger,
chromeos::eche_app::EcheAppUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::eche_app::mojom::SystemInfoProvider,
chromeos::eche_app::EcheAppUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::eche_app::mojom::UidGenerator, chromeos::eche_app::EcheAppUI>(
map);
RegisterWebUIControllerInterfaceBinder<
media_app_ui::mojom::PageHandlerFactory, chromeos::MediaAppUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::network_health::mojom::NetworkHealthService,
chromeos::NetworkUI, chromeos::ConnectivityDiagnosticsUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::network_diagnostics::mojom::NetworkDiagnosticsRoutines,
chromeos::NetworkUI, chromeos::ConnectivityDiagnosticsUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::diagnostics::mojom::SystemDataProvider,
chromeos::DiagnosticsDialogUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::diagnostics::mojom::SystemRoutineController,
chromeos::DiagnosticsDialogUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::vm::mojom::VmDiagnosticsProvider, chromeos::VmUI>(map);
RegisterWebUIControllerInterfaceBinder<ash::scanning::mojom::ScanService,
ash::ScanningUI>(map);
if (base::FeatureList::IsEnabled(chromeos::features::kImeSystemEmojiPicker)) {
RegisterWebUIControllerInterfaceBinder<
emoji_picker::mojom::PageHandlerFactory, chromeos::EmojiUI>(map);
}
if (chromeos::features::IsWallpaperWebUIEnabled()) {
RegisterWebUIControllerInterfaceBinder<
chromeos::personalization_app::mojom::WallpaperProvider,
chromeos::PersonalizationAppUI>(map);
}
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if BUILDFLAG(IS_CHROMEOS_ASH) && !defined(OFFICIAL_BUILD)
RegisterWebUIControllerInterfaceBinder<
chromeos::file_manager::mojom::PageHandlerFactory,
chromeos::file_manager::FileManagerUI>(map);
if (base::FeatureList::IsEnabled(chromeos::features::kTelemetryExtension)) {
RegisterWebUIControllerInterfaceBinder<
chromeos::health::mojom::DiagnosticsService,
chromeos::TelemetryExtensionUI>(map);
RegisterWebUIControllerInterfaceBinder<
chromeos::health::mojom::ProbeService, chromeos::TelemetryExtensionUI>(
map);
RegisterWebUIControllerInterfaceBinder<
chromeos::health::mojom::SystemEventsService,
chromeos::TelemetryExtensionUI>(map);
}
#endif
#if defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) || \
defined(OS_CHROMEOS)
RegisterWebUIControllerInterfaceBinder<discards::mojom::DetailsProvider,
DiscardsUI>(map);
RegisterWebUIControllerInterfaceBinder<discards::mojom::GraphDump,
DiscardsUI>(map);
RegisterWebUIControllerInterfaceBinder<discards::mojom::SiteDataProvider,
DiscardsUI>(map);
#endif
#if BUILDFLAG(ENABLE_FEED_V2)
RegisterWebUIControllerInterfaceBinder<feed_internals::mojom::PageHandler,
FeedInternalsUI>(map);
#endif
#if BUILDFLAG(FULL_SAFE_BROWSING)
RegisterWebUIControllerInterfaceBinder<::mojom::ResetPasswordHandler,
ResetPasswordUI>(map);
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Because Nearby Share is only currently supported for the primary profile,
// we should only register binders in that scenario. However, we don't want to
// plumb the profile through to this function, so we 1) ensure that
// NearbyShareDialogUI will not be created for non-primary profiles, and 2)
// rely on the BindInterface implementation of OSSettingsUI to ensure that no
// Nearby Share receivers are bound.
if (base::FeatureList::IsEnabled(features::kNearbySharing)) {
RegisterWebUIControllerInterfaceBinder<
nearby_share::mojom::NearbyShareSettings,
chromeos::settings::OSSettingsUI, nearby_share::NearbyShareDialogUI>(
map);
RegisterWebUIControllerInterfaceBinder<nearby_share::mojom::ContactManager,
chromeos::settings::OSSettingsUI,
nearby_share::NearbyShareDialogUI>(
map);
RegisterWebUIControllerInterfaceBinder<
nearby_share::mojom::DiscoveryManager,
nearby_share::NearbyShareDialogUI>(map);
RegisterWebUIControllerInterfaceBinder<nearby_share::mojom::ReceiveManager,
chromeos::settings::OSSettingsUI>(
map);
}
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
}
} // namespace internal
} // namespace chrome