[M85 Dev][EFL] Fix errors to generate ninja files
[platform/framework/web/chromium-efl.git] / chrome / browser / chrome_browser_interface_binders.cc
1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chrome_browser_interface_binders.h"
6
7 #include <utility>
8
9 #include "base/feature_list.h"
10 #include "build/build_config.h"
11 #include "chrome/browser/accessibility/accessibility_labels_service.h"
12 #include "chrome/browser/accessibility/accessibility_labels_service_factory.h"
13 #include "chrome/browser/buildflags.h"
14 #include "chrome/browser/dom_distiller/dom_distiller_service_factory.h"
15 #include "chrome/browser/engagement/site_engagement_details.mojom.h"
16 #include "chrome/browser/language/translate_frame_binder.h"
17 #include "chrome/browser/media/history/media_history_store.mojom.h"
18 #include "chrome/browser/media/media_engagement_score_details.mojom.h"
19 #include "chrome/browser/navigation_predictor/navigation_predictor.h"
20 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
21 #include "chrome/browser/predictors/network_hints_handler_impl.h"
22 #include "chrome/browser/prerender/prerender_contents.h"
23 #include "chrome/browser/prerender/prerender_processor_impl.h"
24 #include "chrome/browser/profiles/profile.h"
25 #include "chrome/browser/ssl/insecure_sensitive_input_driver_factory.h"
26 #include "chrome/browser/ssl/security_state_tab_helper.h"
27 #include "chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals.mojom.h"
28 #include "chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.h"
29 #include "chrome/browser/ui/webui/engagement/site_engagement_ui.h"
30 #include "chrome/browser/ui/webui/internals/internals_ui.h"
31 #include "chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom.h"
32 #include "chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h"
33 #include "chrome/browser/ui/webui/media/media_engagement_ui.h"
34 #include "chrome/browser/ui/webui/media/media_history_ui.h"
35 #include "chrome/browser/ui/webui/omnibox/omnibox.mojom.h"
36 #include "chrome/browser/ui/webui/omnibox/omnibox_ui.h"
37 #include "chrome/browser/ui/webui/usb_internals/usb_internals.mojom.h"
38 #include "chrome/browser/ui/webui/usb_internals/usb_internals_ui.h"
39 #include "chrome/common/pref_names.h"
40 #include "chromeos/constants/chromeos_features.h"
41 #include "components/contextual_search/buildflags.h"
42 #include "components/dom_distiller/content/browser/distillability_driver.h"
43 #include "components/dom_distiller/content/browser/distiller_javascript_service_impl.h"
44 #include "components/dom_distiller/content/common/mojom/distillability_service.mojom.h"
45 #include "components/dom_distiller/content/common/mojom/distiller_javascript_service.mojom.h"
46 #include "components/dom_distiller/core/dom_distiller_service.h"
47 #include "components/feed/buildflags.h"
48 #include "components/performance_manager/embedder/binders.h"
49 #include "components/performance_manager/public/performance_manager.h"
50 #include "components/prefs/pref_service.h"
51 #include "components/safe_browsing/buildflags.h"
52 #include "components/security_state/content/content_utils.h"
53 #include "components/security_state/core/security_state.h"
54 #include "components/translate/content/common/translate.mojom.h"
55 #include "content/public/browser/browser_context.h"
56 #include "content/public/browser/render_process_host.h"
57 #include "content/public/common/content_features.h"
58 #include "content/public/common/url_constants.h"
59 #include "extensions/buildflags/buildflags.h"
60 #include "mojo/public/cpp/bindings/pending_receiver.h"
61 #include "services/image_annotation/public/mojom/image_annotation.mojom.h"
62 #include "third_party/blink/public/mojom/credentialmanager/credential_manager.mojom.h"
63 #include "third_party/blink/public/mojom/insecure_input/insecure_input_service.mojom.h"
64 #include "third_party/blink/public/mojom/loader/navigation_predictor.mojom.h"
65 #include "third_party/blink/public/mojom/payments/payment_request.mojom.h"
66 #include "third_party/blink/public/mojom/prerender/prerender.mojom.h"
67 #include "third_party/blink/public/public_buildflags.h"
68
69 #if BUILDFLAG(ENABLE_FEED_IN_CHROME)
70 #include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h"
71 #include "chrome/browser/ui/webui/feed_internals/feed_internals_ui.h"
72 #endif  // BUILDFLAG(ENABLE_FEED_IN_CHROME)
73
74 #if BUILDFLAG(ENABLE_UNHANDLED_TAP)
75 #include "chrome/browser/android/contextualsearch/unhandled_tap_notifier_impl.h"
76 #include "chrome/browser/android/contextualsearch/unhandled_tap_web_contents_observer.h"
77 #include "third_party/blink/public/mojom/unhandled_tap_notifier/unhandled_tap_notifier.mojom.h"
78 #endif  // BUILDFLAG(ENABLE_UNHANDLED_TAP)
79
80 #if BUILDFLAG(FULL_SAFE_BROWSING)
81 #include "chrome/browser/ui/webui/reset_password/reset_password.mojom.h"
82 #include "chrome/browser/ui/webui/reset_password/reset_password_ui.h"
83 #endif  // BUILDFLAG(FULL_SAFE_BROWSING)
84
85 #if defined(OS_ANDROID)
86 #include "chrome/browser/android/contextualsearch/contextual_search_observer.h"
87 #include "chrome/browser/android/dom_distiller/distiller_ui_handle_android.h"
88 #include "chrome/browser/offline_pages/android/offline_page_auto_fetcher.h"
89 #include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals.mojom.h"
90 #include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.h"
91 #include "chrome/browser/ui/webui/snippets_internals/snippets_internals.mojom.h"
92 #include "chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.h"
93 #include "chrome/common/offline_page_auto_fetcher.mojom.h"
94 #include "components/contextual_search/content/browser/contextual_search_js_api_service_impl.h"
95 #include "components/contextual_search/content/common/mojom/contextual_search_js_api_service.mojom.h"
96 #include "services/service_manager/public/cpp/interface_provider.h"
97 #include "third_party/blink/public/mojom/installedapp/installed_app_provider.mojom.h"
98 #include "third_party/blink/public/mojom/webshare/webshare.mojom.h"
99 #if defined(ENABLE_SPATIAL_NAVIGATION_HOST)
100 #include "third_party/blink/public/mojom/page/spatial_navigation.mojom.h"
101 #endif
102 #else
103 #include "chrome/browser/accessibility/caption_host_impl.h"
104 #include "chrome/browser/badging/badge_manager.h"
105 #include "chrome/browser/media/feeds/media_feeds_store.mojom.h"
106 #include "chrome/browser/media/kaleidoscope/kaleidoscope_ui.h"
107 #include "chrome/browser/media/kaleidoscope/mojom/kaleidoscope.mojom.h"
108 #include "chrome/browser/payments/payment_request_factory.h"
109 #include "chrome/browser/speech/speech_recognition_service.h"
110 #include "chrome/browser/speech/speech_recognition_service_factory.h"
111 #include "chrome/browser/ui/webui/downloads/downloads.mojom.h"
112 #include "chrome/browser/ui/webui/downloads/downloads_ui.h"
113 #include "chrome/browser/ui/webui/media/media_feeds_ui.h"
114 #include "chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom.h"
115 #include "chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h"
116 #include "chrome/browser/ui/webui/tab_search/tab_search.mojom.h"
117 #include "chrome/browser/ui/webui/tab_search/tab_search_ui.h"
118 #include "chrome/common/caption.mojom.h"
119 #include "media/mojo/mojom/speech_recognition_service.mojom.h"
120 #endif
121
122 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
123     defined(OS_CHROMEOS)
124 #include "chrome/browser/ui/webui/discards/discards.mojom.h"
125 #include "chrome/browser/ui/webui/discards/discards_ui.h"
126 #include "chrome/browser/ui/webui/discards/site_data.mojom.h"
127 #endif
128
129 #if defined(OS_CHROMEOS)
130 #include "chrome/browser/ui/webui/app_management/app_management.mojom.h"
131 #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision.mojom.h"
132 #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h"
133 #include "chrome/browser/ui/webui/chromeos/cellular_setup/cellular_setup_dialog.h"
134 #include "chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer.mojom.h"
135 #include "chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.h"
136 #include "chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader.mojom.h"
137 #include "chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_ui.h"
138 #include "chrome/browser/ui/webui/chromeos/internet_config_dialog.h"
139 #include "chrome/browser/ui/webui/chromeos/internet_detail_dialog.h"
140 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
141 #include "chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.mojom.h"
142 #include "chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_ui.h"
143 #include "chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h"
144 #include "chrome/browser/ui/webui/chromeos/network_ui.h"
145 #include "chrome/browser/ui/webui/internals/web_app/web_app_internals.mojom.h"
146 #include "chrome/browser/ui/webui/settings/chromeos/os_settings_ui.h"
147 #include "chrome/browser/ui/webui/settings/chromeos/search/search.mojom.h"
148 #include "chrome/browser/ui/webui/settings/chromeos/search/user_action_recorder.mojom.h"
149 #include "chromeos/components/help_app_ui/help_app_ui.h"
150 #include "chromeos/components/help_app_ui/help_app_ui.mojom.h"
151 #include "chromeos/components/media_app_ui/media_app_ui.h"
152 #include "chromeos/components/media_app_ui/media_app_ui.mojom.h"
153 #include "chromeos/components/multidevice/debug_webui/proximity_auth_ui.h"
154 #include "chromeos/components/print_management/mojom/printing_manager.mojom.h"
155 #include "chromeos/components/print_management/print_management_ui.h"
156 #include "chromeos/services/cellular_setup/public/mojom/cellular_setup.mojom.h"
157 #include "chromeos/services/multidevice_setup/multidevice_setup_service.h"
158 #include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
159 #include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"  // nogncheck
160 #include "chromeos/services/network_health/public/mojom/network_health.mojom.h"
161 #endif
162
163 #if defined(OS_CHROMEOS) && !defined(OFFICIAL_BUILD)
164 #include "chromeos/components/telemetry_extension_ui/mojom/probe_service.mojom.h"
165 #include "chromeos/components/telemetry_extension_ui/telemetry_extension_ui.h"
166 #endif
167
168 #if BUILDFLAG(ENABLE_EXTENSIONS)
169 #include "extensions/browser/api/mime_handler_private/mime_handler_private.h"
170 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
171 #include "extensions/common/api/mime_handler.mojom.h"  // nogncheck
172 #endif
173
174 namespace chrome {
175 namespace internal {
176
177 #if BUILDFLAG(ENABLE_UNHANDLED_TAP)
178 void BindUnhandledTapWebContentsObserver(
179     content::RenderFrameHost* const host,
180     mojo::PendingReceiver<blink::mojom::UnhandledTapNotifier> receiver) {
181   auto* web_contents = content::WebContents::FromRenderFrameHost(host);
182   if (!web_contents)
183     return;
184
185   auto* unhandled_tap_notifier_observer =
186       contextual_search::UnhandledTapWebContentsObserver::FromWebContents(
187           web_contents);
188   if (!unhandled_tap_notifier_observer)
189     return;
190
191   contextual_search::CreateUnhandledTapNotifierImpl(
192       unhandled_tap_notifier_observer->device_scale_factor(),
193       unhandled_tap_notifier_observer->unhandled_tap_callback(),
194       std::move(receiver));
195 }
196 #endif  // BUILDFLAG(ENABLE_UNHANDLED_TAP)
197
198 #if BUILDFLAG(BUILD_CONTEXTUAL_SEARCH)
199 void BindContextualSearchObserver(
200     content::RenderFrameHost* const host,
201     mojo::PendingReceiver<
202         contextual_search::mojom::ContextualSearchJsApiService> receiver) {
203   // Early return if the RenderFrameHost's delegate is not a WebContents.
204   auto* web_contents = content::WebContents::FromRenderFrameHost(host);
205   if (!web_contents)
206     return;
207
208   auto* contextual_search_observer =
209       contextual_search::ContextualSearchObserver::FromWebContents(
210           web_contents);
211   if (contextual_search_observer) {
212     contextual_search::CreateContextualSearchJsApiService(
213         contextual_search_observer->api_handler(), std::move(receiver));
214   }
215 }
216 #endif  // BUILDFLAG(BUILD_CONTEXTUAL_SEARCH)
217
218 // Forward image Annotator requests to the profile's AccessibilityLabelsService.
219 void BindImageAnnotator(
220     content::RenderFrameHost* frame_host,
221     mojo::PendingReceiver<image_annotation::mojom::Annotator> receiver) {
222   AccessibilityLabelsServiceFactory::GetForProfile(
223       Profile::FromBrowserContext(
224           frame_host->GetProcess()->GetBrowserContext()))
225       ->BindImageAnnotator(std::move(receiver));
226 }
227
228 void BindDistillabilityService(
229     content::RenderFrameHost* const frame_host,
230     mojo::PendingReceiver<dom_distiller::mojom::DistillabilityService>
231         receiver) {
232   auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
233   if (!web_contents)
234     return;
235
236   dom_distiller::DistillabilityDriver* driver =
237       dom_distiller::DistillabilityDriver::FromWebContents(web_contents);
238   if (!driver)
239     return;
240   driver->SetIsSecureCallback(
241       base::BindRepeating([](content::WebContents* contents) {
242         // SecurityStateTabHelper uses chrome-specific
243         // GetVisibleSecurityState to determine if a page is SECURE.
244         return SecurityStateTabHelper::FromWebContents(contents)
245                    ->GetSecurityLevel() ==
246                security_state::SecurityLevel::SECURE;
247       }));
248   driver->CreateDistillabilityService(std::move(receiver));
249 }
250
251 void BindDistillerJavaScriptService(
252     content::RenderFrameHost* const frame_host,
253     mojo::PendingReceiver<dom_distiller::mojom::DistillerJavaScriptService>
254         receiver) {
255   auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
256   if (!web_contents)
257     return;
258
259   dom_distiller::DomDistillerService* dom_distiller_service =
260       dom_distiller::DomDistillerServiceFactory::GetForBrowserContext(
261           web_contents->GetBrowserContext());
262   auto* distiller_ui_handle = dom_distiller_service->GetDistillerUIHandle();
263 #if defined(OS_ANDROID)
264   static_cast<dom_distiller::android::DistillerUIHandleAndroid*>(
265       distiller_ui_handle)
266       ->set_render_frame_host(frame_host);
267 #endif
268   auto* distilled_page_prefs = dom_distiller_service->GetDistilledPagePrefs();
269   CreateDistillerJavaScriptService(distiller_ui_handle, distilled_page_prefs,
270                                    std::move(receiver));
271 }
272
273 void BindPrerenderCanceler(
274     content::RenderFrameHost* frame_host,
275     mojo::PendingReceiver<prerender::mojom::PrerenderCanceler> receiver) {
276   auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
277   if (!web_contents)
278     return;
279
280   auto* prerender_contents =
281       prerender::PrerenderContents::FromWebContents(web_contents);
282   if (!prerender_contents)
283     return;
284   prerender_contents->AddPrerenderCancelerReceiver(std::move(receiver));
285 }
286
287 #if defined(OS_ANDROID)
288 template <typename Interface>
289 void ForwardToJavaWebContents(content::RenderFrameHost* frame_host,
290                               mojo::PendingReceiver<Interface> receiver) {
291   content::WebContents* contents =
292       content::WebContents::FromRenderFrameHost(frame_host);
293   if (contents)
294     contents->GetJavaInterfaces()->GetInterface(std::move(receiver));
295 }
296
297 template <typename Interface>
298 void ForwardToJavaFrame(content::RenderFrameHost* render_frame_host,
299                         mojo::PendingReceiver<Interface> receiver) {
300   render_frame_host->GetJavaInterfaces()->GetInterface(std::move(receiver));
301 }
302 #endif
303
304 #if BUILDFLAG(ENABLE_EXTENSIONS)
305 void BindMimeHandlerService(
306     content::RenderFrameHost* frame_host,
307     mojo::PendingReceiver<extensions::mime_handler::MimeHandlerService>
308         receiver) {
309   auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
310   if (!web_contents)
311     return;
312
313   auto* guest_view =
314       extensions::MimeHandlerViewGuest::FromWebContents(web_contents);
315   if (!guest_view)
316     return;
317   extensions::MimeHandlerServiceImpl::Create(guest_view->GetStreamWeakPtr(),
318                                              std::move(receiver));
319 }
320
321 void BindBeforeUnloadControl(
322     content::RenderFrameHost* frame_host,
323     mojo::PendingReceiver<extensions::mime_handler::BeforeUnloadControl>
324         receiver) {
325   auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
326   if (!web_contents)
327     return;
328
329   auto* guest_view =
330       extensions::MimeHandlerViewGuest::FromWebContents(web_contents);
331   if (!guest_view)
332     return;
333   guest_view->FuseBeforeUnloadControl(std::move(receiver));
334 }
335 #endif
336
337 void BindNetworkHintsHandler(
338     content::RenderFrameHost* frame_host,
339     mojo::PendingReceiver<network_hints::mojom::NetworkHintsHandler> receiver) {
340   predictors::NetworkHintsHandlerImpl::Create(frame_host, std::move(receiver));
341 }
342
343 #if !defined(OS_ANDROID)
344 void BindSpeechRecognitionContextHandler(
345     content::RenderFrameHost* frame_host,
346     mojo::PendingReceiver<media::mojom::SpeechRecognitionContext> receiver) {
347   Profile* profile = Profile::FromBrowserContext(
348       frame_host->GetProcess()->GetBrowserContext());
349   PrefService* profile_prefs = profile->GetPrefs();
350   if (profile_prefs->GetBoolean(prefs::kLiveCaptionEnabled)) {
351     SpeechRecognitionServiceFactory::GetForProfile(profile)->Create(
352         std::move(receiver));
353   }
354 }
355
356 void BindCaptionContextHandler(
357     content::RenderFrameHost* frame_host,
358     mojo::PendingReceiver<chrome::mojom::CaptionHost> receiver) {
359   Profile* profile = Profile::FromBrowserContext(
360       frame_host->GetProcess()->GetBrowserContext());
361   PrefService* profile_prefs = profile->GetPrefs();
362   if (profile_prefs->GetBoolean(prefs::kLiveCaptionEnabled)) {
363     captions::CaptionHostImpl::Create(frame_host, std::move(receiver));
364   }
365 }
366 #endif
367
368 void PopulateChromeFrameBinders(
369     mojo::BinderMapWithContext<content::RenderFrameHost*>* map) {
370   map->Add<image_annotation::mojom::Annotator>(
371       base::BindRepeating(&BindImageAnnotator));
372
373   map->Add<blink::mojom::AnchorElementMetricsHost>(
374       base::BindRepeating(&NavigationPredictor::Create));
375
376   map->Add<blink::mojom::InsecureInputService>(
377       base::BindRepeating(&InsecureSensitiveInputDriverFactory::BindDriver));
378
379   map->Add<dom_distiller::mojom::DistillabilityService>(
380       base::BindRepeating(&BindDistillabilityService));
381
382   map->Add<dom_distiller::mojom::DistillerJavaScriptService>(
383       base::BindRepeating(&BindDistillerJavaScriptService));
384
385   map->Add<prerender::mojom::PrerenderCanceler>(
386       base::BindRepeating(&BindPrerenderCanceler));
387
388   map->Add<blink::mojom::PrerenderProcessor>(
389       base::BindRepeating(&prerender::PrerenderProcessorImpl::Create));
390
391   if (performance_manager::PerformanceManager::IsAvailable()) {
392     map->Add<performance_manager::mojom::DocumentCoordinationUnit>(
393         base::BindRepeating(
394             &performance_manager::BindDocumentCoordinationUnit));
395   }
396
397   map->Add<translate::mojom::ContentTranslateDriver>(
398       base::BindRepeating(&language::BindContentTranslateDriver));
399
400   map->Add<blink::mojom::CredentialManager>(
401       base::BindRepeating(&ChromePasswordManagerClient::BindCredentialManager));
402
403 #if defined(OS_ANDROID)
404   map->Add<blink::mojom::InstalledAppProvider>(base::BindRepeating(
405       &ForwardToJavaFrame<blink::mojom::InstalledAppProvider>));
406 #if defined(BROWSER_MEDIA_CONTROLS_MENU)
407   map->Add<blink::mojom::MediaControlsMenuHost>(base::BindRepeating(
408       &ForwardToJavaFrame<blink::mojom::MediaControlsMenuHost>));
409 #endif
410   map->Add<chrome::mojom::OfflinePageAutoFetcher>(
411       base::BindRepeating(&offline_pages::OfflinePageAutoFetcher::Create));
412   if (base::FeatureList::IsEnabled(features::kWebPayments)) {
413     map->Add<payments::mojom::PaymentRequest>(base::BindRepeating(
414         &ForwardToJavaFrame<payments::mojom::PaymentRequest>));
415   }
416   map->Add<blink::mojom::ShareService>(base::BindRepeating(
417       &ForwardToJavaWebContents<blink::mojom::ShareService>));
418
419 #if BUILDFLAG(BUILD_CONTEXTUAL_SEARCH)
420   map->Add<contextual_search::mojom::ContextualSearchJsApiService>(
421       base::BindRepeating(&BindContextualSearchObserver));
422
423 #if BUILDFLAG(ENABLE_UNHANDLED_TAP)
424   map->Add<blink::mojom::UnhandledTapNotifier>(
425       base::BindRepeating(&BindUnhandledTapWebContentsObserver));
426 #endif  // BUILDFLAG(ENABLE_UNHANDLED_TAP)
427 #endif  // BUILDFLAG(BUILD_CONTEXTUAL_SEARCH)
428
429 #if defined(ENABLE_SPATIAL_NAVIGATION_HOST)
430   map->Add<blink::mojom::SpatialNavigationHost>(base::BindRepeating(
431       &ForwardToJavaWebContents<blink::mojom::SpatialNavigationHost>));
432 #endif
433 #else
434   map->Add<blink::mojom::BadgeService>(
435       base::BindRepeating(&badging::BadgeManager::BindFrameReceiver));
436   if (base::FeatureList::IsEnabled(features::kWebPayments)) {
437     map->Add<payments::mojom::PaymentRequest>(
438         base::BindRepeating(&payments::CreatePaymentRequest));
439   }
440 #endif
441
442 #if BUILDFLAG(ENABLE_EXTENSIONS)
443   map->Add<extensions::mime_handler::MimeHandlerService>(
444       base::BindRepeating(&BindMimeHandlerService));
445   map->Add<extensions::mime_handler::BeforeUnloadControl>(
446       base::BindRepeating(&BindBeforeUnloadControl));
447 #endif
448
449   map->Add<network_hints::mojom::NetworkHintsHandler>(
450       base::BindRepeating(&BindNetworkHintsHandler));
451
452 #if !defined(OS_ANDROID)
453   map->Add<media::mojom::SpeechRecognitionContext>(
454       base::BindRepeating(&BindSpeechRecognitionContextHandler));
455   map->Add<chrome::mojom::CaptionHost>(
456       base::BindRepeating(&BindCaptionContextHandler));
457 #endif
458 }
459
460 void PopulateChromeWebUIFrameBinders(
461     mojo::BinderMapWithContext<content::RenderFrameHost*>* map) {
462   RegisterWebUIControllerInterfaceBinder<::mojom::BluetoothInternalsHandler,
463                                          BluetoothInternalsUI>(map);
464
465   RegisterWebUIControllerInterfaceBinder<
466       ::mojom::InterventionsInternalsPageHandler, InterventionsInternalsUI>(
467       map);
468
469   RegisterWebUIControllerInterfaceBinder<
470       media::mojom::MediaEngagementScoreDetailsProvider, MediaEngagementUI>(
471       map);
472
473   RegisterWebUIControllerInterfaceBinder<
474       media_history::mojom::MediaHistoryStore, MediaHistoryUI>(map);
475
476   RegisterWebUIControllerInterfaceBinder<::mojom::OmniboxPageHandler,
477                                          OmniboxUI>(map);
478
479   RegisterWebUIControllerInterfaceBinder<::mojom::SiteEngagementDetailsProvider,
480                                          SiteEngagementUI>(map);
481
482   RegisterWebUIControllerInterfaceBinder<::mojom::UsbInternalsPageHandler,
483                                          UsbInternalsUI>(map);
484
485 #if defined(OS_ANDROID)
486   RegisterWebUIControllerInterfaceBinder<
487       explore_sites_internals::mojom::PageHandler,
488       explore_sites::ExploreSitesInternalsUI>(map);
489
490   RegisterWebUIControllerInterfaceBinder<
491       snippets_internals::mojom::PageHandlerFactory, SnippetsInternalsUI>(map);
492 #else
493   RegisterWebUIControllerInterfaceBinder<downloads::mojom::PageHandlerFactory,
494                                          DownloadsUI>(map);
495
496   RegisterWebUIControllerInterfaceBinder<
497       new_tab_page::mojom::PageHandlerFactory, NewTabPageUI>(map);
498
499   RegisterWebUIControllerInterfaceBinder<media_feeds::mojom::MediaFeedsStore,
500                                          MediaFeedsUI>(map);
501
502   RegisterWebUIControllerInterfaceBinder<tab_search::mojom::PageHandlerFactory,
503                                          TabSearchUI>(map);
504
505   RegisterWebUIControllerInterfaceBinder<
506       ::mojom::web_app_internals::WebAppInternalsPageHandler, InternalsUI>(map);
507 #endif
508
509 #if defined(OS_CHROMEOS)
510   RegisterWebUIControllerInterfaceBinder<
511       add_supervision::mojom::AddSupervisionHandler,
512       chromeos::AddSupervisionUI>(map);
513
514   RegisterWebUIControllerInterfaceBinder<
515       app_management::mojom::PageHandlerFactory,
516       chromeos::settings::OSSettingsUI>(map);
517
518   RegisterWebUIControllerInterfaceBinder<
519       chromeos::settings::mojom::UserActionRecorder,
520       chromeos::settings::OSSettingsUI>(map);
521
522   RegisterWebUIControllerInterfaceBinder<
523       chromeos::settings::mojom::SearchHandler,
524       chromeos::settings::OSSettingsUI>(map);
525
526   RegisterWebUIControllerInterfaceBinder<
527       chromeos::cellular_setup::mojom::CellularSetup,
528       chromeos::cellular_setup::CellularSetupDialogUI>(map);
529
530   RegisterWebUIControllerInterfaceBinder<
531       chromeos::crostini_installer::mojom::PageHandlerFactory,
532       chromeos::CrostiniInstallerUI>(map);
533
534   RegisterWebUIControllerInterfaceBinder<
535       chromeos::crostini_upgrader::mojom::PageHandlerFactory,
536       chromeos::CrostiniUpgraderUI>(map);
537
538   RegisterWebUIControllerInterfaceBinder<
539       chromeos::machine_learning::mojom::PageHandler,
540       chromeos::machine_learning::MachineLearningInternalsUI>(map);
541
542   RegisterWebUIControllerInterfaceBinder<
543       chromeos::multidevice_setup::mojom::MultiDeviceSetup, chromeos::OobeUI,
544       chromeos::multidevice::ProximityAuthUI,
545       chromeos::multidevice_setup::MultiDeviceSetupDialogUI>(map);
546
547   RegisterWebUIControllerInterfaceBinder<
548       chromeos::multidevice_setup::mojom::PrivilegedHostDeviceSetter,
549       chromeos::OobeUI>(map);
550
551   RegisterWebUIControllerInterfaceBinder<
552       chromeos::network_config::mojom::CrosNetworkConfig,
553       chromeos::InternetConfigDialogUI, chromeos::InternetDetailDialogUI,
554       chromeos::NetworkUI, chromeos::OobeUI, chromeos::settings::OSSettingsUI>(
555       map);
556
557   RegisterWebUIControllerInterfaceBinder<
558       chromeos::printing::printing_manager::mojom::PrintingMetadataProvider,
559       chromeos::printing::printing_manager::PrintManagementUI>(map);
560
561   RegisterWebUIControllerInterfaceBinder<help_app_ui::mojom::PageHandlerFactory,
562                                          chromeos::HelpAppUI>(map);
563
564   RegisterWebUIControllerInterfaceBinder<
565       media_app_ui::mojom::PageHandlerFactory, chromeos::MediaAppUI>(map);
566
567   RegisterWebUIControllerInterfaceBinder<
568       chromeos::network_health::mojom::NetworkHealthService,
569       chromeos::NetworkUI>(map);
570 #endif  // defined(OS_CHROMEOS)
571
572 #if defined(OS_CHROMEOS) && !defined(OFFICIAL_BUILD)
573   if (base::FeatureList::IsEnabled(chromeos::features::kTelemetryExtension)) {
574     RegisterWebUIControllerInterfaceBinder<
575         chromeos::health::mojom::ProbeService, chromeos::TelemetryExtensionUI>(
576         map);
577   }
578 #endif
579
580 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
581     defined(OS_CHROMEOS)
582   RegisterWebUIControllerInterfaceBinder<discards::mojom::DetailsProvider,
583                                          DiscardsUI>(map);
584
585   RegisterWebUIControllerInterfaceBinder<discards::mojom::GraphDump,
586                                          DiscardsUI>(map);
587
588   RegisterWebUIControllerInterfaceBinder<discards::mojom::SiteDataProvider,
589                                          DiscardsUI>(map);
590 #endif
591
592 #if BUILDFLAG(ENABLE_FEED_IN_CHROME)
593   RegisterWebUIControllerInterfaceBinder<feed_internals::mojom::PageHandler,
594                                          FeedInternalsUI>(map);
595 #endif
596
597 #if BUILDFLAG(FULL_SAFE_BROWSING)
598   RegisterWebUIControllerInterfaceBinder<::mojom::ResetPasswordHandler,
599                                          ResetPasswordUI>(map);
600 #endif
601
602 #if !defined(OS_ANDROID)
603   RegisterWebUIControllerInterfaceBinder<media::mojom::KaleidoscopeDataProvider,
604                                          KaleidoscopeUI>(map);
605 #endif  // !defined(OS_ANDROID)
606 }
607
608 }  // namespace internal
609 }  // namespace chrome