blob: 85fbceb807547d2fcf64bafd8c3ddb00203be367 [file] [log] [blame]
Avi Drissman4e1b7bc32022-09-15 14:03:501// Copyright 2019 The Chromium Authors
Oksana Zhuravlovafee097c2019-07-26 17:01:302// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/browser/browser_interface_binders.h"
Matt Falkenhagenfc796d62019-08-22 09:01:266
Mingyu Lei0ece2ab2022-10-28 11:58:547#include "base/check_op.h"
Miyoung Shin56d47322019-12-03 13:01:168#include "base/command_line.h"
Miyoung Shinb5630d72019-09-26 13:11:459#include "base/feature_list.h"
Mingyu Leieca89f22024-01-15 04:44:5110#include "base/functional/bind.h"
Avi Drissmanadac21992023-01-11 23:46:3911#include "base/functional/callback.h"
12#include "base/functional/callback_helpers.h"
David Sandersde533fce2021-12-15 14:59:4313#include "base/no_destructor.h"
Mingyu Leif6f9bc1c2024-08-15 05:23:2114#include "base/supports_user_data.h"
Gabriel Charette99f5df32021-03-19 19:55:5515#include "base/task/thread_pool.h"
Azeem Arshad8282d3d2020-12-03 17:45:4816#include "build/branding_buildflags.h"
Miyoung Shin282efa12019-09-24 09:34:2117#include "build/build_config.h"
Miyoung Shin56d47322019-12-03 13:01:1618#include "cc/base/switches.h"
Fergal Dalyb65f07b2024-12-09 07:52:3819#include "components/language_detection/content/common/language_detection.mojom.h"
Steven Holtedefae36d2025-04-21 21:11:4120#include "components/optimization_guide/public/mojom/model_broker.mojom.h"
Austin Sullivan38614b4e2024-09-17 18:02:4421#include "components/viz/host/gpu_client.h"
Andrew Paseltinere265e3062021-10-12 19:28:0322#include "content/browser/attribution_reporting/attribution_internals.mojom.h"
23#include "content/browser/attribution_reporting/attribution_internals_ui.h"
Oksana Zhuravlovad4bbeec2019-08-13 21:43:5724#include "content/browser/background_fetch/background_fetch_service_impl.h"
Mario Sanchez Prada5509ddb2019-12-17 08:49:1125#include "content/browser/bad_message.h"
Daniel Chengd6978b062023-11-16 00:11:3826#include "content/browser/bluetooth/web_bluetooth_service_impl.h"
Johannes Kronb1209bd2022-02-15 10:32:3927#include "content/browser/browser_context_impl.h"
Miyoung Shin8d6542582019-10-08 12:30:5528#include "content/browser/browser_main_loop.h"
Yao Xiaocc379392022-03-25 21:39:0629#include "content/browser/browsing_topics/browsing_topics_document_host.h"
Dominic Farolino822b43002021-10-18 16:47:0030#include "content/browser/contacts/contacts_manager_impl.h"
Miyoung Shinf9dd1452019-09-24 12:57:4631#include "content/browser/content_index/content_index_service_impl.h"
Victor Costan2f6509e82021-08-04 14:32:4132#include "content/browser/cookie_store/cookie_store_manager.h"
Alexis Menardd99e01f2024-01-29 14:39:3733#include "content/browser/device_posture/device_posture_provider_impl.h"
Ionel Popescu9330e9a2020-03-27 03:52:5634#include "content/browser/eye_dropper_chooser_impl.h"
Honglin Yu6cdb4b32021-02-23 13:14:3335#include "content/browser/handwriting/handwriting_recognition_service_factory.h"
Mario Sanchez Pradaaa35b422019-09-24 06:50:3136#include "content/browser/image_capture/image_capture_impl.h"
Nathan Memmott6729cf52022-10-18 20:04:0737#include "content/browser/indexed_db/indexed_db_internals.mojom.h"
38#include "content/browser/indexed_db/indexed_db_internals_ui.h"
Takuto Ikuta080080152024-02-09 09:15:1939#include "content/browser/interest_group/ad_auction_service_impl.h"
Takuto Ikuta7cdebf62024-02-09 09:01:4140#include "content/browser/keyboard_lock/keyboard_lock_service_impl.h"
Hiroki Nakagawa761b9b02020-07-13 11:12:0241#include "content/browser/loader/content_security_notifier.h"
evliu5e44d85c2021-09-24 22:56:0742#include "content/browser/media/media_web_contents_observer.h"
Johanna445d5d2020-09-15 04:45:2743#include "content/browser/media/midi_host.h"
Mario Sanchez Pradaa00e56162019-09-28 05:26:5744#include "content/browser/media/session/media_session_service_impl.h"
Takashi Toyoshimabfc3b2812022-10-07 23:51:3745#include "content/browser/network/reporting_service_proxy.h"
Miyoung Shin059c0ff72019-09-26 11:13:3946#include "content/browser/picture_in_picture/picture_in_picture_service_impl.h"
Iman Saboori16071722022-11-04 14:59:4647#include "content/browser/preloading/anchor_element_interaction_host_impl.h"
Sreeja Kamishetty9deccf0f2022-07-14 18:12:1648#include "content/browser/preloading/speculation_rules/speculation_host_impl.h"
Dan McArdlec8fe5af2023-11-02 18:59:2549#include "content/browser/private_aggregation/private_aggregation_internals.mojom.h"
50#include "content/browser/private_aggregation/private_aggregation_internals_ui.h"
Miyoung Shinb14602b2019-11-19 05:25:5151#include "content/browser/process_internals/process_internals.mojom.h"
52#include "content/browser/process_internals/process_internals_ui.h"
Marijn Kruisselbrink60589022022-05-03 19:54:1853#include "content/browser/quota/quota_context.h"
Christine Smith0d90bd4e2021-12-14 03:24:5454#include "content/browser/quota/quota_internals_ui.h"
danakje94b7c842020-09-16 18:47:4355#include "content/browser/renderer_host/clipboard_host_impl.h"
Tal Pressman0c2342892020-12-11 06:37:5756#include "content/browser/renderer_host/file_utilities_host_impl.h"
Miyoung Shin8d6542582019-10-08 12:30:5557#include "content/browser/renderer_host/media/media_devices_dispatcher_host.h"
58#include "content/browser/renderer_host/media/media_stream_dispatcher_host.h"
Tom Sepez761258882022-11-23 23:47:0059#include "content/browser/renderer_host/media/media_stream_manager.h"
Tal Pressman06a62f22021-03-02 04:34:1160#include "content/browser/renderer_host/media/video_capture_host.h"
danakje94b7c842020-09-16 18:47:4361#include "content/browser/renderer_host/render_frame_host_impl.h"
Oksana Zhuravlovaceb2cef52019-08-09 01:09:5962#include "content/browser/renderer_host/render_process_host_impl.h"
David Sandersc7dd8a82025-07-02 16:59:4463#include "content/browser/service_worker/service_worker_context_core.h"
Hiroki Nakagawa593b6f52020-05-25 03:10:2564#include "content/browser/service_worker/service_worker_host.h"
dongguoz25a9fff2025-08-07 11:35:1365#include "content/browser/shape_detection/shape_detection_service_host.h"
Yao Xiao94203f52024-09-13 17:35:5766#include "content/browser/shared_storage/shared_storage_worklet_host.h"
Miyoung Shin8f0d8582019-10-02 01:12:2867#include "content/browser/speech/speech_recognition_dispatcher_host.h"
Ari Chivukulaecfaa9d2023-10-26 16:21:2168#include "content/browser/storage_access/storage_access_handle.h"
Etienne Pierre-doray6db6af4f2025-06-05 14:20:5969#include "content/browser/tracing/traces_internals/traces_internals.mojom.h"
70#include "content/browser/tracing/traces_internals/traces_internals_ui.h"
Miyoung Shin1dec3c12019-09-27 02:19:5171#include "content/browser/wake_lock/wake_lock_service_impl.h"
Avi Drissmanbd3e986442020-05-20 21:09:2072#include "content/browser/web_contents/file_chooser_impl.h"
Miyoung Shincb6475a2019-11-09 10:49:4573#include "content/browser/web_contents/web_contents_impl.h"
Sam Goto2d3ee642021-01-21 01:27:3274#include "content/browser/webid/flags.h"
Oksana Zhuravlovaceb2cef52019-08-09 01:09:5975#include "content/browser/worker_host/dedicated_worker_host.h"
Miyoung Shine6ff4b5b2019-11-27 17:36:2976#include "content/browser/worker_host/shared_worker_connector_impl.h"
Oksana Zhuravlovaceb2cef52019-08-09 01:09:5977#include "content/browser/worker_host/shared_worker_host.h"
Alexander Cooper6e5bf7c62020-04-23 00:40:0978#include "content/browser/xr/service/vr_service_impl.h"
Miyoung Shin56d47322019-12-03 13:01:1679#include "content/common/input/input_injector.mojom.h"
Oksana Zhuravlova9d0c3e32019-11-19 05:10:0780#include "content/public/browser/browser_thread.h"
Mingyu Lei682f6582024-06-14 04:26:5981#include "content/public/browser/content_browser_client.h"
Ken Rockot05499cf2019-12-12 05:22:5482#include "content/public/browser/device_service.h"
Mingyu Lei6d78af32022-11-03 14:50:0883#include "content/public/browser/global_routing_id.h"
Matt Falkenhagenfc796d62019-08-22 09:01:2684#include "content/public/browser/service_worker_context.h"
Julie Jeongeun Kime58b0f42021-04-22 05:33:2885#include "content/public/browser/service_worker_version_base_info.h"
Patrick Monette986c8c32019-09-04 05:59:5886#include "content/public/browser/shared_worker_instance.h"
Andrew Rayskiyed1d8702022-02-16 13:23:5387#include "content/public/browser/site_isolation_policy.h"
Adrienne Walker840d7172020-08-11 05:55:5788#include "content/public/browser/storage_partition.h"
Robert Sesek976c70cf2022-08-12 19:17:5789#include "content/public/browser/web_ui_controller_interface_binder.h"
Hans Wennborg5ffd1392019-10-16 11:00:0290#include "content/public/common/content_client.h"
Miyoung Shin97be5ad2019-09-27 12:40:5491#include "content/public/common/content_features.h"
Miyoung Shinb14602b2019-11-19 05:25:5192#include "content/public/common/url_constants.h"
Tal Pressman78369f62021-01-06 05:21:5393#include "device/gamepad/gamepad_haptics_manager.h"
Miyoung Shinc9f4dac2019-09-26 15:14:1094#include "device/gamepad/gamepad_monitor.h"
95#include "device/gamepad/public/mojom/gamepad.mojom.h"
Alexander Cooper6e5bf7c62020-04-23 00:40:0996#include "device/vr/buildflags/buildflags.h"
Miyoung Shin87cd4522019-10-04 05:00:0597#include "device/vr/public/mojom/vr_service.mojom.h"
Mario Sanchez Pradaaa35b422019-09-24 06:50:3198#include "media/capture/mojom/image_capture.mojom.h"
Tal Pressman06a62f22021-03-02 04:34:1199#include "media/capture/mojom/video_capture.mojom.h"
Daniel Cheng08fa43f12022-11-24 15:19:09100#include "media/midi/midi_service.h"
Lei Zhangd9e3fc52021-08-25 03:08:40101#include "media/mojo/mojom/interface_factory.mojom.h"
Feras Aldahlawid996da752024-04-04 19:27:29102#include "media/mojo/mojom/key_system_support.mojom.h"
Miyoung Shince548602019-12-03 04:05:49103#include "media/mojo/mojom/media_metrics_provider.mojom.h"
evliu5e44d85c2021-09-24 22:56:07104#include "media/mojo/mojom/media_player.mojom.h"
Hans Wennborg8ee798d2020-02-07 15:30:35105#include "media/mojo/mojom/remoting.mojom.h"
Evan Liud7252282024-05-16 20:10:32106#include "media/mojo/mojom/speech_recognizer.mojom.h"
Mario Sanchez Prada416cfd42019-09-30 15:15:29107#include "media/mojo/mojom/video_decode_perf_history.mojom.h"
Hirokazu Honda09fab5f2023-06-13 02:40:10108#include "media/mojo/mojom/video_encoder_metrics_provider.mojom.h"
Johannes Kronb1209bd2022-02-15 10:32:39109#include "media/mojo/mojom/webrtc_video_perf.mojom.h"
Hirokazu Honda2f21b0442023-08-02 04:47:01110#include "media/mojo/services/mojo_video_encoder_metrics_provider_service.h"
Johannes Kronb1209bd2022-02-15 10:32:39111#include "media/mojo/services/webrtc_video_perf_recorder.h"
François Doray869d4bf2025-06-30 21:20:11112#include "mojo/public/cpp/bindings/binder_map.h"
Wei4 Wang1dfb1de02023-01-23 17:57:44113#include "mojo/public/cpp/bindings/message.h"
Fergal Dalyb65f07b2024-12-09 07:52:38114#include "mojo/public/cpp/bindings/pending_receiver.h"
Nan Lin0aa0aa22023-09-05 20:01:25115#include "net/base/features.h"
Arnaud Mandy624afa3322024-08-09 13:33:54116#include "services/device/public/cpp/compute_pressure/buildflags.h"
Johann165093e32020-11-18 04:25:30117#include "services/device/public/mojom/battery_monitor.mojom.h"
Miyoung Shin090544a42019-09-26 03:48:16118#include "services/device/public/mojom/vibration_manager.mojom.h"
Alex Turner7ea6baaf2020-09-23 15:23:41119#include "services/metrics/public/mojom/ukm_interface.mojom.h"
Aman Verma8c1c5e612023-04-03 23:33:58120#include "services/metrics/ukm_recorder_factory_impl.h"
Sandor Majorf42e6bd62025-02-28 00:12:04121#include "services/network/public/cpp/features.h"
Wei4 Wang1dfb1de02023-01-23 17:57:44122#include "services/network/public/cpp/is_potentially_trustworthy.h"
Tal Pressman6b5c3002021-05-13 06:48:09123#include "services/network/public/mojom/p2p.mojom.h"
Sandor «Alex» Majorc41217f2025-02-14 23:33:13124#include "services/network/public/mojom/permissions_policy/permissions_policy_feature.mojom.h"
Miyoung Shin58d0b6c2019-12-03 07:38:18125#include "services/network/public/mojom/restricted_cookie_manager.mojom.h"
Mario Sanchez Pradabaa893732019-09-30 22:10:17126#include "services/shape_detection/public/mojom/barcodedetection_provider.mojom.h"
127#include "services/shape_detection/public/mojom/facedetection_provider.mojom.h"
128#include "services/shape_detection/public/mojom/shape_detection_service.mojom.h"
129#include "services/shape_detection/public/mojom/textdetection.mojom.h"
Austin Sullivand57e1572024-06-24 20:53:16130#include "services/webnn/public/mojom/features.mojom-features.h"
junweicdff0aee2024-03-26 05:40:31131#include "services/webnn/public/mojom/webnn_context_provider.mojom.h"
Christine Smith0d90bd4e2021-12-14 03:24:54132#include "storage/browser/quota/quota_internals.mojom.h"
133#include "storage/browser/quota/quota_manager.h"
134#include "storage/browser/quota/quota_manager_proxy.h"
Miyoung Shin1395210d2019-11-22 04:36:21135#include "third_party/blink/public/common/features.h"
Mingyu Leieca89f22024-01-15 04:44:51136#include "third_party/blink/public/common/features_generated.h"
Joshua Hoodbd47013d2022-01-06 19:45:04137#include "third_party/blink/public/common/storage_key/storage_key.h"
Mingyu Lei9de94c62024-05-29 07:14:42138#include "third_party/blink/public/mojom/ai/ai_manager.mojom.h"
Mario Sanchez Prada3532f442019-09-10 08:28:08139#include "third_party/blink/public/mojom/background_fetch/background_fetch.mojom.h"
Lingqi Chibcc673e2020-09-16 03:12:03140#include "third_party/blink/public/mojom/background_sync/background_sync.mojom.h"
Andrew Williams39151a72022-10-18 23:12:41141#include "third_party/blink/public/mojom/blob/blob_url_store.mojom.h"
Daniel Brinkers9004610c2023-10-23 15:27:51142#include "third_party/blink/public/mojom/blob/file_backed_blob_factory.mojom.h"
Mario Sanchez Prada19294b52019-09-24 10:57:14143#include "third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom.h"
Ayu Ishii1d05bfe92021-02-02 21:42:33144#include "third_party/blink/public/mojom/buckets/bucket_manager_host.mojom.h"
Mario Sanchez Pradac71a6302019-11-25 14:47:20145#include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom.h"
Miyoung Shincb6475a2019-11-09 10:49:45146#include "third_party/blink/public/mojom/choosers/color_chooser.mojom.h"
Lei Zhang059bf73e2021-05-19 18:29:53147#include "third_party/blink/public/mojom/contacts/contacts_manager.mojom.h"
Miyoung Shinf9dd1452019-09-24 12:57:46148#include "third_party/blink/public/mojom/content_index/content_index.mojom.h"
Victor Costan31ca3d22019-10-11 02:33:37149#include "third_party/blink/public/mojom/cookie_store/cookie_store.mojom.h"
Arthur Sonzognifc9275f2022-03-17 09:43:14150#include "third_party/blink/public/mojom/credentialmanagement/credential_manager.mojom.h"
Anatoliy Potapchuk096e4d0a2020-12-01 16:49:21151#include "third_party/blink/public/mojom/device/device.mojom.h"
Adrienne Walker80d95f02020-02-07 22:37:04152#include "third_party/blink/public/mojom/feature_observer/feature_observer.mojom.h"
Tal Pressman0c2342892020-12-11 06:37:57153#include "third_party/blink/public/mojom/file/file_utilities.mojom.h"
Austin Sullivand35c33462021-01-06 21:16:32154#include "third_party/blink/public/mojom/file_system_access/file_system_access_manager.mojom.h"
Mario Sanchez Prada3532f442019-09-10 08:28:08155#include "third_party/blink/public/mojom/filesystem/file_system.mojom.h"
Lei Zhang059bf73e2021-05-19 18:29:53156#include "third_party/blink/public/mojom/font_access/font_access.mojom.h"
Minoru Chikamunec2d363c2022-11-28 08:26:24157#include "third_party/blink/public/mojom/frame/frame.mojom.h"
Mario Sanchez Pradafa6dda8c2019-11-25 18:20:19158#include "third_party/blink/public/mojom/geolocation/geolocation_service.mojom.h"
Mario Sanchez Prada3532f442019-09-10 08:28:08159#include "third_party/blink/public/mojom/idle/idle_manager.mojom.h"
Francois Doray1be23f12019-10-01 16:37:51160#include "third_party/blink/public/mojom/indexeddb/indexeddb.mojom.h"
Oksana Zhuravlova963e24e2020-03-10 02:38:29161#include "third_party/blink/public/mojom/input/input_host.mojom.h"
Miyoung Shin8989f092019-09-26 06:13:12162#include "third_party/blink/public/mojom/keyboard_lock/keyboard_lock.mojom.h"
Kouhei Ueno94a25ff2023-06-09 06:25:04163#include "third_party/blink/public/mojom/lcp_critical_path_predictor/lcp_critical_path_predictor.mojom.h"
Mythri Afefc0c462021-05-26 08:37:26164#include "third_party/blink/public/mojom/loader/code_cache.mojom.h"
Hiroki Nakagawa761b9b02020-07-13 11:12:02165#include "third_party/blink/public/mojom/loader/content_security_notifier.mojom.h"
Oksana Zhuravlova3f3295d2020-03-06 21:43:07166#include "third_party/blink/public/mojom/loader/navigation_predictor.mojom.h"
Oksana Zhuravlova4a9804e2019-09-11 19:35:50167#include "third_party/blink/public/mojom/locks/lock_manager.mojom.h"
Guido Urdaneta3a7cd9e62020-07-21 08:31:28168#include "third_party/blink/public/mojom/media/renderer_audio_input_stream_factory.mojom.h"
Guido Urdaneta9d773b12020-07-21 08:45:45169#include "third_party/blink/public/mojom/media/renderer_audio_output_stream_factory.mojom.h"
Mario Sanchez Pradaa00e56162019-09-28 05:26:57170#include "third_party/blink/public/mojom/mediasession/media_session.mojom.h"
Miyoung Shin8d6542582019-10-08 12:30:55171#include "third_party/blink/public/mojom/mediastream/media_devices.mojom.h"
172#include "third_party/blink/public/mojom/mediastream/media_stream.mojom.h"
Miyoung Shindb479fec42019-11-22 06:29:20173#include "third_party/blink/public/mojom/notifications/notification_service.mojom.h"
Tsuyoshi Horo5f067a2a2024-12-06 12:01:44174#include "third_party/blink/public/mojom/on_device_translation/translation_manager.mojom.h"
Jason Chase1439d2fe2024-10-16 17:12:51175#include "third_party/blink/public/mojom/origin_trials/origin_trial_state_host.mojom.h"
Miyoung Shin8aa77f292019-09-27 10:46:46176#include "third_party/blink/public/mojom/payments/payment_app.mojom.h"
Stephen McGruer18ed1a062025-01-20 20:18:52177#include "third_party/blink/public/mojom/payments/secure_payment_confirmation_service.mojom.h"
Tal Pressmand7f6d6f2021-03-02 00:10:04178#include "third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom.h"
Miyoung Shine676be1f2019-09-25 00:47:02179#include "third_party/blink/public/mojom/permissions/permission.mojom.h"
Miyoung Shin059c0ff72019-09-26 11:13:39180#include "third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom.h"
Iman Saboori16071722022-11-04 14:59:46181#include "third_party/blink/public/mojom/preloading/anchor_element_interaction_host.mojom.h"
Oksana Zhuravlova3f3295d2020-03-06 21:43:07182#include "third_party/blink/public/mojom/prerender/prerender.mojom.h"
Mario Sanchez Prada3532f442019-09-10 08:28:08183#include "third_party/blink/public/mojom/presentation/presentation.mojom.h"
Hans Wennborg78b52182021-06-15 13:42:15184#include "third_party/blink/public/mojom/push_messaging/push_messaging.mojom.h"
Victor Costan52fc24b2020-03-12 23:36:59185#include "third_party/blink/public/mojom/quota/quota_manager_host.mojom.h"
Raphael Kubo da Costa739756542023-10-06 22:41:53186#include "third_party/blink/public/mojom/sensor/web_sensor_provider.mojom.h"
Garfield Tan6aba0032025-02-14 02:07:35187#include "third_party/blink/public/mojom/serial/serial.mojom.h"
Majid Valipourae11335e2020-10-14 04:09:24188#include "third_party/blink/public/mojom/sms/webotp_service.mojom.h"
Lingqi Chieed2ceb2021-05-19 11:31:46189#include "third_party/blink/public/mojom/speculation_rules/speculation_rules.mojom.h"
Darin Fishera26aa7e2019-09-02 20:22:59190#include "third_party/blink/public/mojom/speech/speech_synthesis.mojom.h"
Ari Chivukulaecfaa9d2023-10-26 16:21:21191#include "third_party/blink/public/mojom/storage_access/storage_access_handle.mojom.h"
Miyoung Shin120483842019-10-08 06:59:41192#include "third_party/blink/public/mojom/usb/web_usb_service.mojom.h"
Miyoung Shin1dec3c12019-09-27 02:19:51193#include "third_party/blink/public/mojom/wake_lock/wake_lock.mojom.h"
Oksana Zhuravlovafee097c2019-07-26 17:01:30194#include "third_party/blink/public/mojom/webaudio/audio_context_manager.mojom.h"
Oksana Zhuravlova567040b2019-09-25 20:45:22195#include "third_party/blink/public/mojom/webauthn/authenticator.mojom.h"
Peter Kotwicz3a1ff042024-02-07 20:50:39196#include "third_party/blink/public/mojom/webid/digital_identity_request.mojom.h"
Ken Buchananc47efed2020-11-05 23:07:17197#include "third_party/blink/public/mojom/webid/federated_auth_request.mojom.h"
Miyoung Shine5cb8f12019-11-27 16:40:54198#include "third_party/blink/public/mojom/websockets/websocket_connector.mojom.h"
Adam Ricee98a22322021-04-27 08:26:26199#include "third_party/blink/public/mojom/webtransport/web_transport_connector.mojom.h"
Miyoung Shin996cb652019-11-28 03:27:22200#include "third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom.h"
Miyoung Shine6ff4b5b2019-11-27 17:36:29201#include "third_party/blink/public/mojom/worker/shared_worker_connector.mojom.h"
Oksana Zhuravlova3f3295d2020-03-06 21:43:07202#include "third_party/blink/public/public_buildflags.h"
Kyra Seevers9e566022021-09-01 15:49:25203#include "url/origin.h"
Oksana Zhuravlovafee097c2019-07-26 17:01:30204
Xiaohan Wang1ecfd002022-01-19 22:33:10205#if BUILDFLAG(IS_ANDROID)
Miyoung Shin192c7802020-01-17 10:32:27206#include "content/browser/android/text_suggestion_host_android.h"
Miyoung Shin0c2012b2019-10-31 08:03:05207#include "content/browser/renderer_host/render_widget_host_view_android.h"
Dave Tapuska20433a52023-11-06 22:02:39208#include "content/common/gin_java_bridge.mojom.h"
Miyoung Shinb5630d72019-09-26 13:11:45209#include "services/device/public/mojom/nfc.mojom.h"
Miyoung Shin74a9bdcc2019-10-01 01:59:05210#include "third_party/blink/public/mojom/hid/hid.mojom.h"
Oksana Zhuravlova3f3295d2020-03-06 21:43:07211#include "third_party/blink/public/mojom/unhandled_tap_notifier/unhandled_tap_notifier.mojom.h"
Xiaohan Wang1ecfd002022-01-19 22:33:10212#else // BUILDFLAG(IS_ANDROID)
Lei Zhang0c429ef2021-07-16 23:40:16213#include "content/browser/direct_sockets/direct_sockets_service_impl.h"
Evan Liud1ebc4e0a2022-04-29 20:57:54214#include "media/mojo/mojom/renderer_extensions.mojom.h"
Andrew Moylanaad6265f2022-06-07 03:52:56215#include "media/mojo/mojom/speech_recognition.mojom.h" // nogncheck
Lei Zhang0c429ef2021-07-16 23:40:16216#include "third_party/blink/public/mojom/hid/hid.mojom.h"
217#include "third_party/blink/public/mojom/installedapp/installed_app_provider.mojom.h"
Xiaohan Wang1ecfd002022-01-19 22:33:10218#endif // BUILDFLAG(IS_ANDROID)
Miyoung Shinb5630d72019-09-26 13:11:45219
Arnaud Mandy624afa3322024-08-09 13:33:54220#if BUILDFLAG(ENABLE_COMPUTE_PRESSURE)
221#include "content/browser/compute_pressure/pressure_service_for_frame.h"
222#include "third_party/blink/public/mojom/compute_pressure/web_pressure_manager.mojom.h"
223#endif // BUILDFLAG(ENABLE_COMPUTE_PRESSURE)
224
Julie Jeongeun Kimeac2fe22023-07-18 11:55:02225#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS)
226#include "content/browser/date_time_chooser/date_time_chooser.h"
227#endif
228
Miyoung Shin09b64562019-11-28 02:49:02229#if BUILDFLAG(ENABLE_MEDIA_REMOTING)
230#include "media/mojo/mojom/remoting.mojom-forward.h"
231#endif
232
Mahmoud Ahmedc4eee9a32023-07-21 17:19:24233#if BUILDFLAG(ENABLE_VR)
234#include "content/browser/xr/webxr_internals/mojom/webxr_internals.mojom.h"
235#include "content/browser/xr/webxr_internals/webxr_internals_ui.h"
236#endif
237
Xiaohan Wang1ecfd002022-01-19 22:33:10238#if BUILDFLAG(IS_MAC)
Julie Jeongeun Kim8e157b22020-04-22 04:02:41239#include "content/browser/renderer_host/text_input_host_impl.h"
Phillis Tang42479192025-02-09 06:02:06240#include "services/webnn/public/cpp/coreml_initializer.h"
Julie Jeongeun Kim8e157b22020-04-22 04:02:41241#include "third_party/blink/public/mojom/input/text_input_host.mojom.h"
242#endif
243
Xiaohan Wang1ecfd002022-01-19 22:33:10244#if BUILDFLAG(IS_CHROMEOS)
Raymes Khourye24e0a92021-12-20 01:16:16245#include "content/browser/lock_screen/lock_screen_service_impl.h"
246#include "third_party/blink/public/mojom/lock_screen/lock_screen.mojom.h"
Daniel d'Andrada8ed516f2023-02-28 15:46:16247#include "third_party/blink/public/mojom/smart_card/smart_card.mojom.h"
Sergey Ulanovff752e4a2022-04-06 23:04:36248#endif
249
250#if BUILDFLAG(IS_FUCHSIA)
Guocheng Weib45357412022-11-28 23:39:54251#include "content/browser/renderer_host/media/fuchsia_media_cdm_provider_impl.h"
Sergey Ulanov385c5532023-02-15 07:24:10252#include "media/mojo/mojom/fuchsia_media.mojom.h"
Sergey Ulanovff752e4a2022-04-06 23:04:36253#endif
Raymes Khourye24e0a92021-12-20 01:16:16254
Kyra Seevers9e566022021-09-01 15:49:25255namespace blink {
256class StorageKey;
257} // namespace blink
258
Oksana Zhuravlovafee097c2019-07-26 17:01:30259namespace content {
260namespace internal {
261
Mario Sanchez Pradabaa893732019-09-30 22:10:17262namespace {
263
Mario Sanchez Pradabaa893732019-09-30 22:10:17264void BindBarcodeDetectionProvider(
265 mojo::PendingReceiver<shape_detection::mojom::BarcodeDetectionProvider>
266 receiver) {
267 GetShapeDetectionService()->BindBarcodeDetectionProvider(std::move(receiver));
268}
269
270void BindFaceDetectionProvider(
271 mojo::PendingReceiver<shape_detection::mojom::FaceDetectionProvider>
272 receiver) {
273 GetShapeDetectionService()->BindFaceDetectionProvider(std::move(receiver));
274}
275
276void BindTextDetection(
277 mojo::PendingReceiver<shape_detection::mojom::TextDetection> receiver) {
278 GetShapeDetectionService()->BindTextDetection(std::move(receiver));
279}
280
Enrico Galli19271ea2023-10-04 01:41:48281void BindWebNNContextProviderForRenderFrame(
Enrico Galliccbdee22023-09-08 00:26:16282 RenderFrameHost* host,
junweid4ed5a812023-04-19 03:19:26283 mojo::PendingReceiver<webnn::mojom::WebNNContextProvider> receiver) {
Enrico Galliccbdee22023-09-08 00:26:16284 auto* process_host = static_cast<RenderProcessHostImpl*>(host->GetProcess());
Phillis Tang42479192025-02-09 06:02:06285#if BUILDFLAG(IS_MAC)
286 webnn::InitializeCacheDirAndRun(base::BindOnce(
287 &viz::GpuClient::BindWebNNContextProvider,
288 process_host->GetGpuClient()->GetWeakPtr(), std::move(receiver)));
289#else
Enrico Galliccbdee22023-09-08 00:26:16290 process_host->GetGpuClient()->BindWebNNContextProvider(std::move(receiver));
Phillis Tang42479192025-02-09 06:02:06291#endif
junweid4ed5a812023-04-19 03:19:26292}
Enrico Galli19271ea2023-10-04 01:41:48293
Joshua Bellbc43ccf2025-03-05 23:21:22294template <typename WorkerHost>
295void BindWebNNContextProviderForWorker(
296 WorkerHost* host,
Enrico Galli19271ea2023-10-04 01:41:48297 mojo::PendingReceiver<webnn::mojom::WebNNContextProvider> receiver) {
298 auto* process_host =
299 static_cast<RenderProcessHostImpl*>(host->GetProcessHost());
Phillis Tang42479192025-02-09 06:02:06300#if BUILDFLAG(IS_MAC)
301 webnn::InitializeCacheDirAndRun(base::BindOnce(
302 &viz::GpuClient::BindWebNNContextProvider,
303 process_host->GetGpuClient()->GetWeakPtr(), std::move(receiver)));
304#else
Enrico Galli19271ea2023-10-04 01:41:48305 process_host->GetGpuClient()->BindWebNNContextProvider(std::move(receiver));
Phillis Tang42479192025-02-09 06:02:06306#endif
junweicdff0aee2024-03-26 05:40:31307}
junweid4ed5a812023-04-19 03:19:26308
Xiaohan Wang1ecfd002022-01-19 22:33:10309#if BUILDFLAG(IS_MAC)
Julie Jeongeun Kim8e157b22020-04-22 04:02:41310void BindTextInputHost(
311 mojo::PendingReceiver<blink::mojom::TextInputHost> receiver) {
Gabriel Charettee7cdc5cd2020-05-27 23:35:05312 GetIOThreadTaskRunner({})->PostTask(
313 FROM_HERE,
Julie Jeongeun Kim8e157b22020-04-22 04:02:41314 base::BindOnce(&TextInputHostImpl::Create, std::move(receiver)));
315}
316#endif
317
Aman Verma8c1c5e612023-04-03 23:33:58318void BindUkmRecorderFactory(
319 mojo::PendingReceiver<ukm::mojom::UkmRecorderFactory> receiver) {
320 metrics::UkmRecorderFactoryImpl::Create(ukm::UkmRecorder::Get(),
321 std::move(receiver));
Alex Turner7ea6baaf2020-09-23 15:23:41322}
323
Miyoung Shincb6475a2019-11-09 10:49:45324void BindColorChooserFactoryForFrame(
325 RenderFrameHost* host,
326 mojo::PendingReceiver<blink::mojom::ColorChooserFactory> receiver) {
327 auto* web_contents =
328 static_cast<WebContentsImpl*>(WebContents::FromRenderFrameHost(host));
329 web_contents->OnColorChooserFactoryReceiver(std::move(receiver));
330}
331
Victor Costan52fc24b2020-03-12 23:36:59332void BindQuotaManagerHost(
Marijn Kruisselbrink60589022022-05-03 19:54:18333 RenderFrameHostImpl* host,
Victor Costan52fc24b2020-03-12 23:36:59334 mojo::PendingReceiver<blink::mojom::QuotaManagerHost> receiver) {
Marijn Kruisselbrink60589022022-05-03 19:54:18335 host->GetStoragePartition()->GetQuotaContext()->BindQuotaManagerHost(
Mariam Ali8338d9fa2023-07-24 16:57:31336 host->GetStorageKey(), std::move(receiver));
Miyoung Shin0e38e912019-12-04 01:52:15337}
338
Miyoung Shine6ff4b5b2019-11-27 17:36:29339void BindSharedWorkerConnector(
340 RenderFrameHostImpl* host,
341 mojo::PendingReceiver<blink::mojom::SharedWorkerConnector> receiver) {
Alexander Timin8690530c2021-06-19 00:34:32342 SharedWorkerConnectorImpl::Create(host->GetGlobalId(), std::move(receiver));
Miyoung Shine6ff4b5b2019-11-27 17:36:29343}
344
Gyuyoung Kim3bd4ce02025-06-25 21:28:01345#if BUILDFLAG(IS_ANDROID) || (BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_IOS_TVOS))
Oksana Zhuravlova0b634332019-10-28 23:04:22346void BindDateTimeChooserForFrame(
Victor Costandbb66772021-10-27 21:00:50347 RenderFrameHost* host,
Oksana Zhuravlova0b634332019-10-28 23:04:22348 mojo::PendingReceiver<blink::mojom::DateTimeChooser> receiver) {
Julie Jeongeun Kimd6a3c1fc2023-07-15 08:37:03349 auto* date_time_chooser = DateTimeChooser::GetDateTimeChooser(
Oksana Zhuravlova0b634332019-10-28 23:04:22350 WebContents::FromRenderFrameHost(host));
351 date_time_chooser->OnDateTimeChooserReceiver(std::move(receiver));
352}
Julie Jeongeun Kimeac2fe22023-07-18 11:55:02353#endif
Miyoung Shin0c2012b2019-10-31 08:03:05354
Julie Jeongeun Kimeac2fe22023-07-18 11:55:02355#if BUILDFLAG(IS_ANDROID)
Miyoung Shin0c2012b2019-10-31 08:03:05356void BindTextSuggestionHostForFrame(
Victor Costandbb66772021-10-27 21:00:50357 RenderFrameHost* host,
Miyoung Shin0c2012b2019-10-31 08:03:05358 mojo::PendingReceiver<blink::mojom::TextSuggestionHost> receiver) {
Jinsuk Kim7a7e4822023-11-08 19:19:22359 auto* view =
360 RenderWidgetHostViewAndroid::FromRenderWidgetHostView(host->GetView());
Miyoung Shince932c76b2020-08-25 20:49:42361 if (!view || !view->text_suggestion_host())
Oksana Zhuravlovae830d582019-12-19 23:01:16362 return;
363
Miyoung Shin192c7802020-01-17 10:32:27364 view->text_suggestion_host()->BindTextSuggestionHost(std::move(receiver));
Miyoung Shin0c2012b2019-10-31 08:03:05365}
Oksana Zhuravlova0b634332019-10-28 23:04:22366#endif
367
Tal Pressmane2123a8e2021-07-21 09:11:13368// Get the service worker's worker process ID and post a task to bind the
369// receiver on a USER_VISIBLE task runner.
370// This is necessary because:
371// - Binding the host itself and checking the ID on the task's thread may cause
372// a UAF if the host has been deleted in the meantime.
373// - The process ID is not yet populated at the time `PopulateInterfaceBinders`
374// is called.
Tal Pressman0c2342892020-12-11 06:37:57375void BindFileUtilitiesHost(
Tal Pressmane2123a8e2021-07-21 09:11:13376 ServiceWorkerHost* host,
Tal Pressman0c2342892020-12-11 06:37:57377 mojo::PendingReceiver<blink::mojom::FileUtilitiesHost> receiver) {
Tal Pressmane2123a8e2021-07-21 09:11:13378 auto task_runner = base::ThreadPool::CreateSequencedTaskRunner(
379 {base::MayBlock(), base::TaskPriority::USER_VISIBLE});
380 task_runner->PostTask(
381 FROM_HERE,
382 base::BindOnce(&FileUtilitiesHostImpl::Create, host->worker_process_id(),
383 std::move(receiver)));
Tal Pressman0c2342892020-12-11 06:37:57384}
385
Andrew Williamsfc090562022-12-05 17:53:48386// The following two functions bind the RenderFrameHost ID, the storage key, and
387// the notification service creator type to the notification service creation
Mingyu Lei6d78af32022-11-03 14:50:08388// function. The RenderFrameHost ID is used instead of the pointer because the
389// WorkerHost may outlive the RenderFrameHost and thus causing UAF issue when
390// the callback runs.
Mingyu Lei0ece2ab2022-10-28 11:58:54391template <typename WorkerHost>
392base::RepeatingCallback<
Andrew Williamsfc090562022-12-05 17:53:48393 void(mojo::PendingReceiver<blink::mojom::NotificationService>)>
Mingyu Lei0ece2ab2022-10-28 11:58:54394BindNotificationService(
Mingyu Lei6d78af32022-11-03 14:50:08395 GlobalRenderFrameHostId rfh_id,
Mingyu Lei0ece2ab2022-10-28 11:58:54396 RenderProcessHost::NotificationServiceCreatorType creator_type,
397 WorkerHost* host) {
398 DCHECK_NE(creator_type,
399 RenderProcessHost::NotificationServiceCreatorType::kServiceWorker);
400 return base::BindRepeating(
Mingyu Lei6d78af32022-11-03 14:50:08401 [](WorkerHost* host, GlobalRenderFrameHostId rfh_id,
Mingyu Lei0ece2ab2022-10-28 11:58:54402 RenderProcessHost::NotificationServiceCreatorType creator_type,
Mingyu Lei0ece2ab2022-10-28 11:58:54403 mojo::PendingReceiver<blink::mojom::NotificationService> receiver) {
404 auto* process_host =
405 static_cast<RenderProcessHostImpl*>(host->GetProcessHost());
406 CHECK(process_host);
Andrew Williamsfc090562022-12-05 17:53:48407 process_host->CreateNotificationService(
408 rfh_id, creator_type, host->GetStorageKey(), std::move(receiver));
Mingyu Lei0ece2ab2022-10-28 11:58:54409 },
Mingyu Lei6d78af32022-11-03 14:50:08410 base::Unretained(host), rfh_id, creator_type);
Mingyu Lei0ece2ab2022-10-28 11:58:54411}
412
Mingyu Lei0ece2ab2022-10-28 11:58:54413base::RepeatingCallback<
414 void(const ServiceWorkerVersionBaseInfo&,
415 mojo::PendingReceiver<blink::mojom::NotificationService>)>
416BindNotificationService(ServiceWorkerHost* host) {
417 DCHECK_CURRENTLY_ON(BrowserThread::UI);
418 return base::BindRepeating(
419 [](ServiceWorkerHost* host, const ServiceWorkerVersionBaseInfo& info,
420 mojo::PendingReceiver<blink::mojom::NotificationService> receiver) {
421 DCHECK_CURRENTLY_ON(BrowserThread::UI);
Mingyu Lei0ece2ab2022-10-28 11:58:54422 auto* process_host = static_cast<RenderProcessHostImpl*>(
423 RenderProcessHost::FromID(host->worker_process_id()));
Mingyu Lei38c67be2023-01-20 07:52:55424
425 // It's possible that the callback is run between the destruction of the
426 // RenderProcessHost and the disconnection of the ServiceWorkerHost, so
427 // we should add the check here to avoid unexpected behaviour if the
428 // `process_host` is cast from a nullptr.
429 // See `ServiceWorkerHost::GetStoragePartition()`.
430 if (process_host) {
431 process_host->CreateNotificationService(
432 GlobalRenderFrameHostId(),
433 RenderProcessHost::NotificationServiceCreatorType::kServiceWorker,
434 info.storage_key, std::move(receiver));
435 }
Mingyu Lei0ece2ab2022-10-28 11:58:54436 },
437 base::Unretained(host));
438}
439
Miyoung Shin0e38e912019-12-04 01:52:15440template <typename WorkerHost, typename Interface>
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07441base::RepeatingCallback<void(mojo::PendingReceiver<Interface>)>
Miyoung Shin0e38e912019-12-04 01:52:15442BindWorkerReceiver(
Victor Costandb4002e2020-03-25 19:09:03443 void (RenderProcessHostImpl::*method)(mojo::PendingReceiver<Interface>),
Miyoung Shin0e38e912019-12-04 01:52:15444 WorkerHost* host) {
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07445 return base::BindRepeating(
Miyoung Shin0e38e912019-12-04 01:52:15446 [](WorkerHost* host,
Victor Costandb4002e2020-03-25 19:09:03447 void (RenderProcessHostImpl::*method)(
448 mojo::PendingReceiver<Interface>),
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07449 mojo::PendingReceiver<Interface> receiver) {
Victor Costandb4002e2020-03-25 19:09:03450 auto* process_host =
451 static_cast<RenderProcessHostImpl*>(host->GetProcessHost());
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07452 if (process_host)
453 (process_host->*method)(std::move(receiver));
454 },
455 base::Unretained(host), method);
456}
457
Miyoung Shin0e38e912019-12-04 01:52:15458template <typename WorkerHost, typename Interface>
459base::RepeatingCallback<void(const url::Origin&,
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07460 mojo::PendingReceiver<Interface>)>
Miyoung Shin0e38e912019-12-04 01:52:15461BindWorkerReceiverForOrigin(
Victor Costandb4002e2020-03-25 19:09:03462 void (RenderProcessHostImpl::*method)(const url::Origin&,
463 mojo::PendingReceiver<Interface>),
Miyoung Shin0e38e912019-12-04 01:52:15464 WorkerHost* host) {
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07465 return base::BindRepeating(
Miyoung Shin0e38e912019-12-04 01:52:15466 [](WorkerHost* host,
Victor Costandb4002e2020-03-25 19:09:03467 void (RenderProcessHostImpl::*method)(
468 const url::Origin&, mojo::PendingReceiver<Interface>),
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07469 const url::Origin& origin, mojo::PendingReceiver<Interface> receiver) {
Victor Costandb4002e2020-03-25 19:09:03470 auto* process_host =
471 static_cast<RenderProcessHostImpl*>(host->GetProcessHost());
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07472 if (process_host)
473 (process_host->*method)(origin, std::move(receiver));
474 },
475 base::Unretained(host), method);
476}
477
Miyoung Shin0e38e912019-12-04 01:52:15478template <typename WorkerHost, typename Interface>
Antonio Sartori12147a82021-07-13 15:40:53479base::RepeatingCallback<void(mojo::PendingReceiver<Interface>)>
480BindWorkerReceiverForStorageKey(
481 void (RenderProcessHostImpl::*method)(const blink::StorageKey&,
482 mojo::PendingReceiver<Interface>),
483 WorkerHost* host) {
484 return base::BindRepeating(
485 [](WorkerHost* host,
486 void (RenderProcessHostImpl::*method)(
487 const blink::StorageKey&, mojo::PendingReceiver<Interface>),
488 mojo::PendingReceiver<Interface> receiver) {
489 auto* process_host =
490 static_cast<RenderProcessHostImpl*>(host->GetProcessHost());
491 if (process_host)
492 (process_host->*method)(host->GetStorageKey(), std::move(receiver));
493 },
494 base::Unretained(host), method);
495}
496
Oksana Zhuravlova0235d7bd2019-11-19 06:40:54497template <typename Interface>
Abhishek Shanthkumar7aee48b2024-06-24 15:02:47498using StorageKeyAndBucketContextMethod =
Mingyu Lei0fe8df72022-12-16 06:44:48499 void (RenderProcessHostImpl::*)(const blink::StorageKey&,
Abhishek Shanthkumar7aee48b2024-06-24 15:02:47500 BucketContext&,
Mingyu Lei0fe8df72022-12-16 06:44:48501 mojo::PendingReceiver<Interface>);
502
503template <typename WorkerHost, typename Interface>
504base::RepeatingCallback<void(mojo::PendingReceiver<Interface>)>
Abhishek Shanthkumar7aee48b2024-06-24 15:02:47505BindWorkerReceiverForStorageKeyAndBucketContext(
506 StorageKeyAndBucketContextMethod<Interface> method,
Mingyu Lei0fe8df72022-12-16 06:44:48507 WorkerHost* host) {
508 return base::BindRepeating(
Abhishek Shanthkumar7aee48b2024-06-24 15:02:47509 [](WorkerHost* host, StorageKeyAndBucketContextMethod<Interface> method,
Mingyu Lei0fe8df72022-12-16 06:44:48510 mojo::PendingReceiver<Interface> receiver) {
511 auto* process_host =
512 static_cast<RenderProcessHostImpl*>(host->GetProcessHost());
513 if (process_host)
Abhishek Shanthkumar7aee48b2024-06-24 15:02:47514 (process_host->*method)(host->GetStorageKey(), *host,
Mingyu Lei0fe8df72022-12-16 06:44:48515 std::move(receiver));
516 },
517 base::Unretained(host), method);
518}
519
520template <typename Interface>
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07521base::RepeatingCallback<void(mojo::PendingReceiver<Interface>)>
522BindServiceWorkerReceiver(
Victor Costandb4002e2020-03-25 19:09:03523 void (RenderProcessHostImpl::*method)(mojo::PendingReceiver<Interface>),
Hiroki Nakagawa593b6f52020-05-25 03:10:25524 ServiceWorkerHost* host) {
Matt Falkenhagen03dfa022021-09-07 08:16:26525 DCHECK_CURRENTLY_ON(BrowserThread::UI);
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07526 return base::BindRepeating(
Hiroki Nakagawa593b6f52020-05-25 03:10:25527 [](ServiceWorkerHost* host,
Victor Costandb4002e2020-03-25 19:09:03528 void (RenderProcessHostImpl::*method)(
529 mojo::PendingReceiver<Interface>),
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07530 mojo::PendingReceiver<Interface> receiver) {
Matt Falkenhagen03dfa022021-09-07 08:16:26531 DCHECK_CURRENTLY_ON(BrowserThread::UI);
532 auto* process_host = static_cast<RenderProcessHostImpl*>(
533 RenderProcessHost::FromID(host->worker_process_id()));
534 if (!process_host)
535 return;
536 (process_host->*method)(std::move(receiver));
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07537 },
538 base::Unretained(host), method);
539}
540
541template <typename Interface>
Julie Jeongeun Kime58b0f42021-04-22 05:33:28542base::RepeatingCallback<void(const ServiceWorkerVersionBaseInfo&,
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07543 mojo::PendingReceiver<Interface>)>
544BindServiceWorkerReceiverForOrigin(
Victor Costandb4002e2020-03-25 19:09:03545 void (RenderProcessHostImpl::*method)(const url::Origin&,
546 mojo::PendingReceiver<Interface>),
Hiroki Nakagawa593b6f52020-05-25 03:10:25547 ServiceWorkerHost* host) {
Matt Falkenhagen03dfa022021-09-07 08:16:26548 DCHECK_CURRENTLY_ON(BrowserThread::UI);
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07549 return base::BindRepeating(
Hiroki Nakagawa593b6f52020-05-25 03:10:25550 [](ServiceWorkerHost* host,
Victor Costandb4002e2020-03-25 19:09:03551 void (RenderProcessHostImpl::*method)(
552 const url::Origin&, mojo::PendingReceiver<Interface>),
Julie Jeongeun Kime58b0f42021-04-22 05:33:28553 const ServiceWorkerVersionBaseInfo& info,
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07554 mojo::PendingReceiver<Interface> receiver) {
Matt Falkenhagen03dfa022021-09-07 08:16:26555 DCHECK_CURRENTLY_ON(BrowserThread::UI);
Antonio Sartoria6093adb2021-06-24 07:48:46556 auto origin = info.storage_key.origin();
Matt Falkenhagen03dfa022021-09-07 08:16:26557 auto* process_host = static_cast<RenderProcessHostImpl*>(
558 RenderProcessHost::FromID(host->worker_process_id()));
559 if (!process_host)
560 return;
561 (process_host->*method)(origin, std::move(receiver));
Oksana Zhuravlova9d0c3e32019-11-19 05:10:07562 },
563 base::Unretained(host), method);
564}
565
Oksana Zhuravlova0235d7bd2019-11-19 06:40:54566template <typename Interface>
Julie Jeongeun Kime58b0f42021-04-22 05:33:28567base::RepeatingCallback<void(const ServiceWorkerVersionBaseInfo&,
Oksana Zhuravlova0235d7bd2019-11-19 06:40:54568 mojo::PendingReceiver<Interface>)>
Antonio Sartori12147a82021-07-13 15:40:53569BindServiceWorkerReceiverForStorageKey(
570 void (RenderProcessHostImpl::*method)(const blink::StorageKey&,
571 mojo::PendingReceiver<Interface>),
572 ServiceWorkerHost* host) {
Matt Falkenhagen03dfa022021-09-07 08:16:26573 DCHECK_CURRENTLY_ON(BrowserThread::UI);
Antonio Sartori12147a82021-07-13 15:40:53574 return base::BindRepeating(
575 [](ServiceWorkerHost* host,
576 void (RenderProcessHostImpl::*method)(
577 const blink::StorageKey&, mojo::PendingReceiver<Interface>),
578 const ServiceWorkerVersionBaseInfo& info,
579 mojo::PendingReceiver<Interface> receiver) {
Matt Falkenhagen03dfa022021-09-07 08:16:26580 DCHECK_CURRENTLY_ON(BrowserThread::UI);
581 auto* process_host = static_cast<RenderProcessHostImpl*>(
582 RenderProcessHost::FromID(host->worker_process_id()));
583 if (!process_host)
584 return;
585 (process_host->*method)(info.storage_key, std::move(receiver));
Antonio Sartori12147a82021-07-13 15:40:53586 },
587 base::Unretained(host), method);
588}
589
arthursonzogni3d5cc6d2019-12-20 14:08:30590template <typename Interface>
Mingyu Lei0fe8df72022-12-16 06:44:48591base::RepeatingCallback<void(const ServiceWorkerVersionBaseInfo&,
592 mojo::PendingReceiver<Interface>)>
Abhishek Shanthkumar7aee48b2024-06-24 15:02:47593BindServiceWorkerReceiverForStorageKeyAndBucketContext(
594 StorageKeyAndBucketContextMethod<Interface> method,
Mingyu Lei0fe8df72022-12-16 06:44:48595 ServiceWorkerHost* host) {
596 DCHECK_CURRENTLY_ON(BrowserThread::UI);
597 return base::BindRepeating(
598 [](ServiceWorkerHost* host,
Abhishek Shanthkumar7aee48b2024-06-24 15:02:47599 StorageKeyAndBucketContextMethod<Interface> method,
Mingyu Lei0fe8df72022-12-16 06:44:48600 const ServiceWorkerVersionBaseInfo& info,
601 mojo::PendingReceiver<Interface> receiver) {
602 DCHECK_CURRENTLY_ON(BrowserThread::UI);
603 auto* process_host = static_cast<RenderProcessHostImpl*>(
604 RenderProcessHost::FromID(host->worker_process_id()));
Abhishek Shanthkumar7aee48b2024-06-24 15:02:47605 if (!process_host) {
Mingyu Lei0fe8df72022-12-16 06:44:48606 return;
Abhishek Shanthkumar7aee48b2024-06-24 15:02:47607 }
608 (process_host->*method)(info.storage_key, *host, std::move(receiver));
Mingyu Lei0fe8df72022-12-16 06:44:48609 },
610 base::Unretained(host), method);
611}
612
613template <typename Interface>
Oksana Zhuravlova3f3295d2020-03-06 21:43:07614void EmptyBinderForFrame(RenderFrameHost* host,
615 mojo::PendingReceiver<Interface> receiver) {
Simon Pelchat06406ad2022-06-16 00:05:01616 DVLOG(1) << "Empty binder for interface " << Interface::Name_
617 << " for the frame/document scope";
Oksana Zhuravlova3f3295d2020-03-06 21:43:07618}
619
Johann165093e32020-11-18 04:25:30620BatteryMonitorBinder& GetBatteryMonitorBinderOverride() {
621 static base::NoDestructor<BatteryMonitorBinder> binder;
622 return *binder;
623}
624
625void BindBatteryMonitor(
Yoshisato Yanagisawa0d8d2ed62022-01-31 00:41:33626 RenderFrameHostImpl* host,
Johann165093e32020-11-18 04:25:30627 mojo::PendingReceiver<device::mojom::BatteryMonitor> receiver) {
628 const auto& binder = GetBatteryMonitorBinderOverride();
Yoshisato Yanagisawa0d8d2ed62022-01-31 00:41:33629 // TODO(crbug.com/1007264, crbug.com/1290231): remove fenced frame specific
630 // code when permission policy implements the battery status API support.
631 if (host->IsNestedWithinFencedFrame()) {
632 bad_message::ReceivedBadMessage(
633 host->GetProcess(), bad_message::BadMessageReason::
634 BIBI_BIND_BATTERY_MONITOR_FOR_FENCED_FRAME);
635 return;
636 }
Johann165093e32020-11-18 04:25:30637 if (binder)
638 binder.Run(std::move(receiver));
639 else
640 GetDeviceService().BindBatteryMonitor(std::move(receiver));
641}
642
Arnaud Mandy624afa3322024-08-09 13:33:54643#if BUILDFLAG(ENABLE_COMPUTE_PRESSURE)
Wei4 Wang1dfb1de02023-01-23 17:57:44644void BindPressureManager(
645 RenderFrameHostImpl* host,
Raphael Kubo da Costae8d284a2024-07-01 08:46:30646 mojo::PendingReceiver<blink::mojom::WebPressureManager> receiver) {
Wei4 Wang1dfb1de02023-01-23 17:57:44647 if (!network::IsOriginPotentiallyTrustworthy(
648 host->GetLastCommittedOrigin())) {
649 bad_message::ReceivedBadMessage(
650 host->GetProcess(), bad_message::BadMessageReason::
651 BIBI_BIND_PRESSURE_MANAGER_FOR_INSECURE_ORIGIN);
652 return;
653 }
654
655 if (host->IsNestedWithinFencedFrame()) {
656 // The renderer is supposed to disallow the use of compute pressure API
657 // when inside a fenced frame. Anything getting past the renderer checks
658 // must be marked as a bad request.
659 bad_message::ReceivedBadMessage(
660 host->GetProcess(), bad_message::BadMessageReason::
661 BIBI_BIND_PRESSURE_MANAGER_FOR_FENCED_FRAME);
662 return;
663 }
664
665 if (!host->IsFeatureEnabled(
Sandor «Alex» Majore9545a72025-01-31 20:40:46666 network::mojom::PermissionsPolicyFeature::kComputePressure)) {
Wei4 Wang1dfb1de02023-01-23 17:57:44667 bad_message::ReceivedBadMessage(
668 host->GetProcess(),
669 bad_message::BadMessageReason::
670 BIBI_BIND_PRESSURE_MANAGER_BLOCKED_BY_PERMISSIONS_POLICY);
671 return;
672 }
673
Wei4 Wanga90dd312023-12-14 02:35:32674 PressureServiceForFrame::GetOrCreateForCurrentDocument(host)->BindReceiver(
Wei4 Wang78e6eab2023-12-14 01:47:28675 std::move(receiver));
Wei4 Wang1dfb1de02023-01-23 17:57:44676}
Arnaud Mandy624afa3322024-08-09 13:33:54677#endif // BUILDFLAG(ENABLE_COMPUTE_PRESSURE)
Wei4 Wang1dfb1de02023-01-23 17:57:44678
Ken Rockot05499cf2019-12-12 05:22:54679VibrationManagerBinder& GetVibrationManagerBinderOverride() {
680 static base::NoDestructor<VibrationManagerBinder> binder;
681 return *binder;
682}
683
684void BindVibrationManager(
Seung Jae Limc16c5e12024-05-10 23:30:00685 RenderFrameHostImpl* frame,
Ken Rockot05499cf2019-12-12 05:22:54686 mojo::PendingReceiver<device::mojom::VibrationManager> receiver) {
687 const auto& binder = GetVibrationManagerBinderOverride();
Seung Jae Limc16c5e12024-05-10 23:30:00688 if (binder) {
689 binder.Run(std::move(receiver), frame->CreateVibrationManagerListener());
690 } else {
691 GetDeviceService().BindVibrationManager(
692 std::move(receiver), frame->CreateVibrationManagerListener());
693 }
Ken Rockot05499cf2019-12-12 05:22:54694}
695
evliu5e44d85c2021-09-24 22:56:07696void BindMediaPlayerObserverClientHandler(
Victor Costandbb66772021-10-27 21:00:50697 RenderFrameHost* frame_host,
evliu5e44d85c2021-09-24 22:56:07698 mojo::PendingReceiver<media::mojom::MediaPlayerObserverClient> receiver) {
Victor Costandbb66772021-10-27 21:00:50699 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
700 WebContents::FromRenderFrameHost(frame_host));
evliu5e44d85c2021-09-24 22:56:07701 web_contents->media_web_contents_observer()->BindMediaPlayerObserverClient(
702 std::move(receiver));
703}
704
Tal Pressman6b5c3002021-05-13 06:48:09705void BindSocketManager(
706 RenderFrameHostImpl* frame,
707 mojo::PendingReceiver<network::mojom::P2PSocketManager> receiver) {
708 static_cast<RenderProcessHostImpl*>(frame->GetProcess())
Brianna Goldsteind22b0642022-10-11 16:30:50709 ->BindP2PSocketManager(
710 frame->GetIsolationInfoForSubresources().network_anonymization_key(),
711 std::move(receiver), frame->GetGlobalId());
Tal Pressman6b5c3002021-05-13 06:48:09712}
713
Alexis Menardd99e01f2024-01-29 14:39:37714void BindDevicePostureProvider(
715 RenderFrameHost* frame_host,
716 mojo::PendingReceiver<blink::mojom::DevicePostureProvider> receiver) {
717 DevicePostureProviderImpl::GetOrCreate(
718 WebContents::FromRenderFrameHost(frame_host))
719 ->Bind(std::move(receiver));
720}
721
Mario Sanchez Pradabaa893732019-09-30 22:10:17722} // namespace
723
Oksana Zhuravlovad4bbeec2019-08-13 21:43:57724// Documents/frames
Robert Sesek5a5fbb82020-05-04 16:18:28725void PopulateFrameBinders(RenderFrameHostImpl* host, mojo::BinderMap* map) {
Oksana Zhuravlovafee097c2019-07-26 17:01:30726 map->Add<blink::mojom::AudioContextManager>(base::BindRepeating(
Oksana Zhuravlovad4bbeec2019-08-13 21:43:57727 &RenderFrameHostImpl::GetAudioContextManager, base::Unretained(host)));
Oksana Zhuravlovaab9ff302019-08-08 22:31:00728
Johann165093e32020-11-18 04:25:30729 map->Add<device::mojom::BatteryMonitor>(
Yoshisato Yanagisawa0d8d2ed62022-01-31 00:41:33730 base::BindRepeating(&BindBatteryMonitor, base::Unretained(host)));
Johann165093e32020-11-18 04:25:30731
Mario Sanchez Pradac71a6302019-11-25 14:47:20732 map->Add<blink::mojom::CacheStorage>(base::BindRepeating(
733 &RenderFrameHostImpl::BindCacheStorage, base::Unretained(host)));
734
Mythri Afefc0c462021-05-26 08:37:26735 map->Add<blink::mojom::CodeCacheHost>(base::BindRepeating(
736 &RenderFrameHostImpl::CreateCodeCacheHost, base::Unretained(host)));
737
janiceliu2457d49d2024-07-09 18:15:57738 map->Add<blink::mojom::BlobURLStore>(base::BindRepeating(
739 &RenderFrameHostImpl::BindBlobUrlStoreReceiver, base::Unretained(host)));
Andrew Williams39151a72022-10-18 23:12:41740
Arnaud Mandy624afa3322024-08-09 13:33:54741#if BUILDFLAG(ENABLE_COMPUTE_PRESSURE)
Wei4 Wang0b2ecad2022-07-19 00:36:11742 if (base::FeatureList::IsEnabled(blink::features::kComputePressure)) {
Raphael Kubo da Costae8d284a2024-07-01 08:46:30743 map->Add<blink::mojom::WebPressureManager>(
Wei4 Wang1dfb1de02023-01-23 17:57:44744 base::BindRepeating(&BindPressureManager, base::Unretained(host)));
Wei4 Wang0b2ecad2022-07-19 00:36:11745 }
Arnaud Mandy624afa3322024-08-09 13:33:54746#endif // BUILDFLAG(ENABLE_COMPUTE_PRESSURE)
Olivier Yiptong8a3945e2021-05-05 22:19:52747
danakjc70aec1f2022-07-07 15:48:19748 map->Add<blink::mojom::ContactsManager>(
749 base::BindRepeating(ContactsManagerImpl::Create, base::Unretained(host)));
Miyoung Shin3b15d4d2019-09-24 10:38:44750
Hiroki Nakagawa761b9b02020-07-13 11:12:02751 map->Add<blink::mojom::ContentSecurityNotifier>(base::BindRepeating(
752 [](RenderFrameHostImpl* host,
753 mojo::PendingReceiver<blink::mojom::ContentSecurityNotifier>
754 receiver) {
Alexander Timin8690530c2021-06-19 00:34:32755 mojo::MakeSelfOwnedReceiver(
756 std::make_unique<ContentSecurityNotifier>(host->GetGlobalId()),
757 std::move(receiver));
Hiroki Nakagawa761b9b02020-07-13 11:12:02758 },
759 base::Unretained(host)));
760
Miyoung Shin996cb652019-11-28 03:27:22761 map->Add<blink::mojom::DedicatedWorkerHostFactory>(base::BindRepeating(
762 &RenderFrameHostImpl::CreateDedicatedWorkerHostFactory,
763 base::Unretained(host)));
764
Alexis Menardd99e01f2024-01-29 14:39:37765 map->Add<blink::mojom::DevicePostureProvider>(
766 base::BindRepeating(&BindDevicePostureProvider, base::Unretained(host)));
767
Adrienne Walker80d95f02020-02-07 22:37:04768 map->Add<blink::mojom::FeatureObserver>(base::BindRepeating(
769 &RenderFrameHostImpl::GetFeatureObserver, base::Unretained(host)));
770
Austin Sullivan559bb382021-01-26 00:52:43771 map->Add<blink::mojom::FileSystemAccessManager>(
772 base::BindRepeating(&RenderFrameHostImpl::GetFileSystemAccessManager,
773 base::Unretained(host)));
Olivier Yiptong5a58487e2020-08-07 19:04:24774
Oksana Zhuravlovaab9ff302019-08-08 22:31:00775 map->Add<blink::mojom::FileSystemManager>(base::BindRepeating(
Oksana Zhuravlovad4bbeec2019-08-13 21:43:57776 &RenderFrameHostImpl::GetFileSystemManager, base::Unretained(host)));
Oksana Zhuravlova99a8e522019-08-20 21:58:11777
Ayu Ishii68366d32021-07-09 04:18:28778 if (base::FeatureList::IsEnabled(blink::features::kFontAccess)) {
779 map->Add<blink::mojom::FontAccessManager>(base::BindRepeating(
780 &RenderFrameHostImpl::GetFontAccessManager, base::Unretained(host)));
781 }
Austin Sullivan559bb382021-01-26 00:52:43782
Tal Pressman78369f62021-01-06 05:21:53783 map->Add<device::mojom::GamepadHapticsManager>(
Aldo Culquicondored054b92025-07-02 19:13:38784 &device::GamepadHapticsManager::Create);
Tal Pressman78369f62021-01-06 05:21:53785
Mario Sanchez Pradafa6dda8c2019-11-25 18:20:19786 map->Add<blink::mojom::GeolocationService>(base::BindRepeating(
787 &RenderFrameHostImpl::GetGeolocationService, base::Unretained(host)));
788
Oksana Zhuravlova99a8e522019-08-20 21:58:11789 map->Add<blink::mojom::IdleManager>(base::BindRepeating(
Maksim Sadyma30263e2020-07-29 17:09:27790 &RenderFrameHostImpl::BindIdleManager, base::Unretained(host)));
Staphany Parkafda6dd72019-09-02 08:51:49791
Tal Pressman70dc36392021-05-25 04:11:57792#if BUILDFLAG(ENABLE_MDNS)
793 map->Add<network::mojom::MdnsResponder>(base::BindRepeating(
794 &RenderFrameHostImpl::CreateMdnsResponder, base::Unretained(host)));
795#endif // BUILDFLAG(ENABLE_MDNS)
796
Johanna445d5d2020-09-15 04:45:27797 // BrowserMainLoop::GetInstance() may be null on unit tests.
798 if (BrowserMainLoop::GetInstance()) {
799 map->Add<midi::mojom::MidiSessionProvider>(
800 base::BindRepeating(&MidiHost::BindReceiver,
Emily Andrewsd15fd762024-12-10 20:41:54801 host->GetProcess()->GetDeprecatedID(),
Johanna445d5d2020-09-15 04:45:27802 BrowserMainLoop::GetInstance()->midi_service()),
803 GetIOThreadTaskRunner({}));
804 }
805
evliu5e44d85c2021-09-24 22:56:07806 map->Add<media::mojom::MediaPlayerObserverClient>(base::BindRepeating(
807 &BindMediaPlayerObserverClientHandler, base::Unretained(host)));
808
Miyoung Shindb479fec42019-11-22 06:29:20809 map->Add<blink::mojom::NotificationService>(base::BindRepeating(
810 &RenderFrameHostImpl::CreateNotificationService, base::Unretained(host)));
811
Andrew Verge9c6d4212024-07-03 11:43:56812 // WebRTC p2p connections are disallowed in fenced frames. Creation of
813 // RTCPeerConnection is already disabled in the renderer, so in theory this
814 // unbound interface should never present an issue.
815 bool should_ban_p2p =
816 base::FeatureList::IsEnabled(
817 blink::features::kFencedFramesLocalUnpartitionedDataAccess) &&
818 host->IsNestedWithinFencedFrame();
819 if (!should_ban_p2p) {
820 map->Add<network::mojom::P2PSocketManager>(
821 base::BindRepeating(&BindSocketManager, base::Unretained(host)));
822 }
Tal Pressman6b5c3002021-05-13 06:48:09823
Tal Pressmand7f6d6f2021-03-02 00:10:04824 map->Add<blink::mojom::PeerConnectionTrackerHost>(
825 base::BindRepeating(&RenderFrameHostImpl::BindPeerConnectionTrackerHost,
826 base::Unretained(host)));
827
Miyoung Shine676be1f2019-09-25 00:47:02828 map->Add<blink::mojom::PermissionService>(base::BindRepeating(
829 &RenderFrameHostImpl::CreatePermissionService, base::Unretained(host)));
830
Mario Sanchez Prada3532f442019-09-10 08:28:08831 map->Add<blink::mojom::PresentationService>(base::BindRepeating(
832 &RenderFrameHostImpl::GetPresentationService, base::Unretained(host)));
833
Victor Costan52fc24b2020-03-12 23:36:59834 map->Add<blink::mojom::QuotaManagerHost>(
835 base::BindRepeating(&BindQuotaManagerHost, base::Unretained(host)));
Miyoung Shin0e38e912019-12-04 01:52:15836
Matt Menke6751f662020-12-01 05:44:00837 map->Add<blink::mojom::ReportingServiceProxy>(base::BindRepeating(
838 &CreateReportingServiceProxyForFrame, base::Unretained(host)));
Matt Menke6751f662020-12-01 05:44:00839
Miyoung Shine6ff4b5b2019-11-27 17:36:29840 map->Add<blink::mojom::SharedWorkerConnector>(
841 base::BindRepeating(&BindSharedWorkerConnector, base::Unretained(host)));
842
Evan Liud7252282024-05-16 20:10:32843 map->Add<media::mojom::SpeechRecognizer>(
Miyoung Shin8f0d8582019-10-02 01:12:28844 base::BindRepeating(&SpeechRecognitionDispatcherHost::Create,
Emily Andrewsd15fd762024-12-10 20:41:54845 host->GetProcess()->GetDeprecatedID(),
846 host->GetRoutingID()),
Gabriel Charettee7cdc5cd2020-05-27 23:35:05847 GetIOThreadTaskRunner({}));
Miyoung Shin8f0d8582019-10-02 01:12:28848
Darin Fishera26aa7e2019-09-02 20:22:59849 map->Add<blink::mojom::SpeechSynthesis>(base::BindRepeating(
850 &RenderFrameHostImpl::GetSpeechSynthesis, base::Unretained(host)));
851
Xiaohan Wang1ecfd002022-01-19 22:33:10852#if !BUILDFLAG(IS_ANDROID)
Anatoliy Potapchuk096e4d0a2020-12-01 16:49:21853 map->Add<blink::mojom::DeviceAPIService>(base::BindRepeating(
854 &RenderFrameHostImpl::GetDeviceInfoService, base::Unretained(host)));
Anatoliy Potapchukdbe89042021-03-30 23:04:02855 map->Add<blink::mojom::ManagedConfigurationService>(
856 base::BindRepeating(&RenderFrameHostImpl::GetManagedConfigurationService,
857 base::Unretained(host)));
Xiaohan Wang1ecfd002022-01-19 22:33:10858#endif // !BUILDFLAG(IS_ANDROID)
Anatoliy Potapchuk096e4d0a2020-12-01 16:49:21859
Majid Valipourae11335e2020-10-14 04:09:24860 if (base::FeatureList::IsEnabled(features::kWebOTP)) {
861 map->Add<blink::mojom::WebOTPService>(
862 base::BindRepeating(&RenderFrameHostImpl::BindWebOTPServiceReceiver,
863 base::Unretained(host)));
Miyoung Shin97be5ad2019-09-27 12:40:54864 }
865
Peter Kotwicz3a1ff042024-02-07 20:50:39866 map->Add<blink::mojom::DigitalIdentityRequest>(base::BindRepeating(
867 &RenderFrameHostImpl::BindDigitalIdentityRequestReceiver,
868 base::Unretained(host)));
869
Yi Gud328cc22022-03-25 19:07:19870 map->Add<blink::mojom::FederatedAuthRequest>(base::BindRepeating(
871 &RenderFrameHostImpl::BindFederatedAuthRequestReceiver,
872 base::Unretained(host)));
Ken Buchananc47efed2020-11-05 23:07:17873
Miyoung Shin120483842019-10-08 06:59:41874 map->Add<blink::mojom::WebUsbService>(base::BindRepeating(
875 &RenderFrameHostImpl::CreateWebUsbService, base::Unretained(host)));
876
Miyoung Shine5cb8f12019-11-27 16:40:54877 map->Add<blink::mojom::WebSocketConnector>(base::BindRepeating(
878 &RenderFrameHostImpl::CreateWebSocketConnector, base::Unretained(host)));
879
Oksana Zhuravlova4a9804e2019-09-11 19:35:50880 map->Add<blink::mojom::LockManager>(base::BindRepeating(
881 &RenderFrameHostImpl::CreateLockManager, base::Unretained(host)));
Mario Sanchez Pradaaa35b422019-09-24 06:50:31882
Francois Doray1be23f12019-10-01 16:37:51883 map->Add<blink::mojom::IDBFactory>(base::BindRepeating(
884 &RenderFrameHostImpl::CreateIDBFactory, base::Unretained(host)));
885
Ayu Ishii1d05bfe92021-02-02 21:42:33886 map->Add<blink::mojom::BucketManagerHost>(base::BindRepeating(
887 &RenderFrameHostImpl::CreateBucketManagerHost, base::Unretained(host)));
888
Avi Drissmanbd3e986442020-05-20 21:09:20889 map->Add<blink::mojom::FileChooser>(
Jeremy Roman5936f392020-05-21 01:38:12890 base::BindRepeating(&FileChooserImpl::Create, base::Unretained(host)));
Mario Sanchez Pradaaa35b422019-09-24 06:50:31891
Tal Pressman0c2342892020-12-11 06:37:57892 map->Add<blink::mojom::FileUtilitiesHost>(
893 base::BindRepeating(FileUtilitiesHostImpl::Create,
Emily Andrewsd15fd762024-12-10 20:41:54894 host->GetProcess()->GetDeprecatedID()),
Tal Pressman0c2342892020-12-11 06:37:57895 base::ThreadPool::CreateSequencedTaskRunner(
896 {base::MayBlock(), base::TaskPriority::USER_VISIBLE}));
897
Aldo Culquicondored054b92025-07-02 19:13:38898 map->Add<device::mojom::GamepadMonitor>(&device::GamepadMonitor::Create);
Miyoung Shinc9f4dac2019-09-26 15:14:10899
Raphael Kubo da Costa739756542023-10-06 22:41:53900 map->Add<blink::mojom::WebSensorProvider>(base::BindRepeating(
Miyoung Shin561a338c2019-09-26 01:13:14901 &RenderFrameHostImpl::GetSensorProvider, base::Unretained(host)));
902
Ken Rockot05499cf2019-12-12 05:22:54903 map->Add<device::mojom::VibrationManager>(
Seung Jae Limc16c5e12024-05-10 23:30:00904 base::BindRepeating(&BindVibrationManager, base::Unretained(host)));
Miyoung Shin090544a42019-09-26 03:48:16905
Rouslan Solomakhin8788e2542019-10-24 01:10:05906 map->Add<payments::mojom::PaymentManager>(base::BindRepeating(
907 &RenderFrameHostImpl::CreatePaymentManager, base::Unretained(host)));
Miyoung Shin8aa77f292019-09-27 10:46:46908
Jiewei Qian87fc98462022-03-29 09:59:31909 map->Add<handwriting::mojom::HandwritingRecognitionService>(
Aldo Culquicondored054b92025-07-02 19:13:38910 &CreateHandwritingRecognitionService);
Honglin Yu6cdb4b32021-02-23 13:14:33911
Honglin Yua0a14fa2022-03-31 22:40:05912 if (base::FeatureList::IsEnabled(
Alex Gough6ae91282023-12-18 23:19:23913 webnn::mojom::features::kWebMachineLearningNeuralNetwork)) {
Enrico Galli19271ea2023-10-04 01:41:48914 map->Add<webnn::mojom::WebNNContextProvider>(base::BindRepeating(
915 &BindWebNNContextProviderForRenderFrame, base::Unretained(host)));
junweid4ed5a812023-04-19 03:19:26916 }
junweid4ed5a812023-04-19 03:19:26917
Mario Sanchez Prada19294b52019-09-24 10:57:14918 map->Add<blink::mojom::WebBluetoothService>(base::BindRepeating(
Daniel Chengd6978b062023-11-16 00:11:38919 &WebBluetoothServiceImpl::BindIfAllowed, base::Unretained(host)));
Oksana Zhuravlova16498df82019-09-25 17:33:18920
921 map->Add<blink::mojom::PushMessaging>(base::BindRepeating(
922 &RenderFrameHostImpl::GetPushMessaging, base::Unretained(host)));
Oksana Zhuravlova567040b2019-09-25 20:45:22923
Adam Ricee98a22322021-04-27 08:26:26924 map->Add<blink::mojom::WebTransportConnector>(
925 base::BindRepeating(&RenderFrameHostImpl::CreateWebTransportConnector,
Yutaka Hirano492c93d2019-11-05 11:28:03926 base::Unretained(host)));
927
Stephen McGruer18ed1a062025-01-20 20:18:52928 map->Add<payments::mojom::SecurePaymentConfirmationService>(
929 base::BindRepeating(
930 &RenderFrameHostImpl::CreateSecurePaymentConfirmationService,
931 base::Unretained(host)));
Stephen McGruerb721a3f2024-01-18 14:58:12932
Miyoung Shin8d6542582019-10-08 12:30:55933 // BrowserMainLoop::GetInstance() may be null on unit tests.
934 if (BrowserMainLoop::GetInstance()) {
935 // BrowserMainLoop, which owns MediaStreamManager, is alive for the lifetime
936 // of Mojo communication (see BrowserMainLoop::ShutdownThreadsAndCleanUp(),
937 // which shuts down Mojo). Hence, passing that MediaStreamManager instance
938 // as a raw pointer here is safe.
939 MediaStreamManager* media_stream_manager =
940 BrowserMainLoop::GetInstance()->media_stream_manager();
941
942 map->Add<blink::mojom::MediaDevicesDispatcherHost>(
943 base::BindRepeating(&MediaDevicesDispatcherHost::Create,
Sunggook Chue469ea1772024-12-11 01:12:54944 host->GetMainFrame()->GetGlobalFrameToken(),
Bryant Chandler915a45c92023-11-01 20:02:16945 host->GetGlobalId(),
Miyoung Shin8d6542582019-10-08 12:30:55946 base::Unretained(media_stream_manager)),
Gabriel Charettee7cdc5cd2020-05-27 23:35:05947 GetIOThreadTaskRunner({}));
Miyoung Shin8d6542582019-10-08 12:30:55948
949 map->Add<blink::mojom::MediaStreamDispatcherHost>(
950 base::BindRepeating(&MediaStreamDispatcherHost::Create,
Bryant Chandler915a45c92023-11-01 20:02:16951 host->GetGlobalId(),
Miyoung Shin8d6542582019-10-08 12:30:55952 base::Unretained(media_stream_manager)),
Gabriel Charettee7cdc5cd2020-05-27 23:35:05953 GetIOThreadTaskRunner({}));
Tal Pressman06a62f22021-03-02 04:34:11954
955 map->Add<media::mojom::VideoCaptureHost>(
Patrick Monette031229b2023-11-02 17:21:18956 base::BindRepeating(&VideoCaptureHost::Create, host->GetGlobalId(),
Tal Pressman06a62f22021-03-02 04:34:11957 base::Unretained(media_stream_manager)),
958 GetIOThreadTaskRunner({}));
Miyoung Shin8d6542582019-10-08 12:30:55959 }
960
Guido Urdaneta3a7cd9e62020-07-21 08:31:28961 map->Add<blink::mojom::RendererAudioInputStreamFactory>(
Miyoung Shin7e7af082019-12-04 03:39:42962 base::BindRepeating(&RenderFrameHostImpl::CreateAudioInputStreamFactory,
963 base::Unretained(host)));
964
Guido Urdaneta9d773b12020-07-21 08:45:45965 map->Add<blink::mojom::RendererAudioOutputStreamFactory>(
Miyoung Shin7e7af082019-12-04 03:39:42966 base::BindRepeating(&RenderFrameHostImpl::CreateAudioOutputStreamFactory,
967 base::Unretained(host)));
968
Mario Sanchez Prada416cfd42019-09-30 15:15:29969 map->Add<media::mojom::ImageCapture>(
François Beaufortb9c083e52020-05-12 18:00:00970 base::BindRepeating(&ImageCaptureImpl::Create, base::Unretained(host)));
Mario Sanchez Prada416cfd42019-09-30 15:15:29971
Miyoung Shin3f38bc82019-11-29 17:25:14972 map->Add<media::mojom::InterfaceFactory>(base::BindRepeating(
973 &RenderFrameHostImpl::BindMediaInterfaceFactoryReceiver,
974 base::Unretained(host)));
975
Feras Aldahlawid996da752024-04-04 19:27:29976#if BUILDFLAG(ENABLE_LIBRARY_CDMS) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID)
977 map->Add<media::mojom::KeySystemSupport>(
978 base::BindRepeating(&RenderFrameHostImpl::BindKeySystemSupportReceiver,
979 base::Unretained(host)));
980#endif
981
Miyoung Shince548602019-12-03 04:05:49982 map->Add<media::mojom::MediaMetricsProvider>(base::BindRepeating(
983 &RenderFrameHostImpl::BindMediaMetricsProviderReceiver,
984 base::Unretained(host)));
985
Hirokazu Honda09fab5f2023-06-13 02:40:10986 map->Add<media::mojom::VideoEncoderMetricsProvider>(base::BindRepeating(
987 &RenderFrameHostImpl::BindVideoEncoderMetricsProviderReceiver,
988 base::Unretained(host)));
989
Johannes Kronb1209bd2022-02-15 10:32:39990 map->Add<media::mojom::WebrtcVideoPerfRecorder>(base::BindRepeating(
991 [](RenderFrameHostImpl* host,
992 mojo::PendingReceiver<media::mojom::WebrtcVideoPerfRecorder>
993 receiver) {
Johannes Kron98aca4022022-02-18 21:15:24994 DCHECK_CURRENTLY_ON(BrowserThread::UI);
Johannes Kronb1209bd2022-02-15 10:32:39995 media::WebrtcVideoPerfRecorder::Create(
Johannes Kron98aca4022022-02-18 21:15:24996 BrowserContextImpl::From(host->GetBrowserContext())
Johannes Kronb1209bd2022-02-15 10:32:39997 ->GetWebrtcVideoPerfHistory(),
998 std::move(receiver));
999 },
1000 base::Unretained(host)));
1001
Johannes Kron98aca4022022-02-18 21:15:241002 map->Add<media::mojom::WebrtcVideoPerfHistory>(base::BindRepeating(
1003 [](RenderFrameHostImpl* host,
1004 mojo::PendingReceiver<media::mojom::WebrtcVideoPerfHistory> receiver) {
1005 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1006 BrowserContextImpl::From(host->GetBrowserContext())
1007 ->GetWebrtcVideoPerfHistory()
1008 ->BindReceiver(std::move(receiver));
1009 },
1010 base::Unretained(host)));
1011
Miyoung Shin09b64562019-11-28 02:49:021012#if BUILDFLAG(ENABLE_MEDIA_REMOTING)
1013 map->Add<media::mojom::RemoterFactory>(
1014 base::BindRepeating(&RenderFrameHostImpl::BindMediaRemoterFactoryReceiver,
1015 base::Unretained(host)));
1016#endif
1017
Rayan Kanso2b1096c2021-09-21 09:49:141018 map->Add<blink::mojom::OneShotBackgroundSyncService>(base::BindRepeating(
1019 [](RenderFrameHostImpl* host,
1020 mojo::PendingReceiver<blink::mojom::OneShotBackgroundSyncService>
1021 receiver) {
1022 host->GetProcess()->CreateOneShotSyncService(
Mariam Ali8338d9fa2023-07-24 16:57:311023 host->GetStorageKey().origin(), std::move(receiver));
Rayan Kanso2b1096c2021-09-21 09:49:141024 },
1025 base::Unretained(host)));
Lingqi Chibcc673e2020-09-16 03:12:031026
Rayan Kanso2b1096c2021-09-21 09:49:141027 map->Add<blink::mojom::PeriodicBackgroundSyncService>(base::BindRepeating(
1028 [](RenderFrameHostImpl* host,
1029 mojo::PendingReceiver<blink::mojom::PeriodicBackgroundSyncService>
1030 receiver) {
1031 host->GetProcess()->CreatePeriodicSyncService(
Mariam Ali8338d9fa2023-07-24 16:57:311032 host->GetStorageKey().origin(), std::move(receiver));
Rayan Kanso2b1096c2021-09-21 09:49:141033 },
1034 base::Unretained(host)));
Lingqi Chi128fbd72020-09-16 03:36:091035
Mario Sanchez Prada416cfd42019-09-30 15:15:291036 map->Add<media::mojom::VideoDecodePerfHistory>(
1037 base::BindRepeating(&RenderProcessHost::BindVideoDecodePerfHistory,
1038 base::Unretained(host->GetProcess())));
Mario Sanchez Pradabaa893732019-09-30 22:10:171039
Miyoung Shin58d0b6c2019-12-03 07:38:181040 map->Add<network::mojom::RestrictedCookieManager>(
1041 base::BindRepeating(&RenderFrameHostImpl::BindRestrictedCookieManager,
1042 base::Unretained(host)));
1043
Aykut Bulutb9884252022-07-18 16:18:381044 map->Add<network::mojom::TrustTokenQueryAnswerer>(
1045 base::BindRepeating(&RenderFrameHostImpl::BindTrustTokenQueryAnswerer,
David Van Cleve8a36b0f2020-04-08 17:44:031046 base::Unretained(host)));
1047
Mario Sanchez Pradabaa893732019-09-30 22:10:171048 map->Add<shape_detection::mojom::BarcodeDetectionProvider>(
Aldo Culquicondored054b92025-07-02 19:13:381049 &BindBarcodeDetectionProvider);
Mario Sanchez Pradabaa893732019-09-30 22:10:171050
1051 map->Add<shape_detection::mojom::FaceDetectionProvider>(
Aldo Culquicondored054b92025-07-02 19:13:381052 &BindFaceDetectionProvider);
Mario Sanchez Pradabaa893732019-09-30 22:10:171053
Aldo Culquicondored054b92025-07-02 19:13:381054 map->Add<shape_detection::mojom::TextDetection>(&BindTextDetection);
Miyoung Shin74a9bdcc2019-10-01 01:59:051055
Miyoung Shin56d47322019-12-03 13:01:161056 auto* command_line = base::CommandLine::ForCurrentProcess();
Peter Kasting6e6af3c2024-10-15 00:13:181057 if (command_line->HasSwitch(switches::kEnableGpuBenchmarking)) {
Miyoung Shin56d47322019-12-03 13:01:161058 map->Add<mojom::InputInjector>(
1059 base::BindRepeating(&RenderFrameHostImpl::BindInputInjectorReceiver,
1060 base::Unretained(host)));
1061 }
1062
Gyuyoung Kim9ce9ddda2025-06-19 02:01:141063#if BUILDFLAG(IS_ANDROID) || (BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_IOS_TVOS))
Nathan Memmottb3e20ab2024-12-14 02:04:421064 map->Add<device::mojom::NFC>(base::BindRepeating(
1065 &RenderFrameHostImpl::BindNFCReceiver, base::Unretained(host)));
Miyoung Shin74a9bdcc2019-10-01 01:59:051066#else
1067 map->Add<blink::mojom::HidService>(base::BindRepeating(
1068 &RenderFrameHostImpl::GetHidService, base::Unretained(host)));
1069
Rayan Kansofbd962fe2020-05-27 17:26:471070 map->Add<blink::mojom::InstalledAppProvider>(
1071 base::BindRepeating(&RenderFrameHostImpl::CreateInstalledAppProvider,
1072 base::Unretained(host)));
Gyuyoung Kim9ce9ddda2025-06-19 02:01:141073#endif // BUILDFLAG(IS_ANDROID) || (BUILDFLAG(IS_IOS) &&
1074 // !BUILDFLAG(IS_IOS_TVOS))
Rayan Kansofbd962fe2020-05-27 17:26:471075
Reilly Grant276296b2019-10-17 20:00:151076 map->Add<blink::mojom::SerialService>(base::BindRepeating(
1077 &RenderFrameHostImpl::BindSerialService, base::Unretained(host)));
Julie Jeongeun Kim8e157b22020-04-22 04:02:411078
Daniel d'Andrada8ed516f2023-02-28 15:46:161079#if BUILDFLAG(IS_CHROMEOS)
Daniel d'Andradaa0289342022-12-14 08:48:041080 map->Add<blink::mojom::SmartCardService>(base::BindRepeating(
1081 &RenderFrameHostImpl::GetSmartCardService, base::Unretained(host)));
1082#endif
1083
Xiaohan Wang1ecfd002022-01-19 22:33:101084#if BUILDFLAG(IS_MAC)
Aldo Culquicondored054b92025-07-02 19:13:381085 map->Add<blink::mojom::TextInputHost>(&BindTextInputHost);
Julie Jeongeun Kim8e157b22020-04-22 04:02:411086#endif
Dan Elphick1a677ec2021-06-29 11:15:311087
Chris Harrelsond2fe06ad2022-07-11 21:36:231088 map->Add<blink::mojom::RenderAccessibilityHost>(
Dan Elphick1a677ec2021-06-29 11:15:311089 base::BindRepeating(&RenderFrameHostImpl::BindRenderAccessibilityHost,
1090 base::Unretained(host)));
Guocheng Weiae52cc32022-11-24 01:45:401091
Minoru Chikamunec2d363c2022-11-28 08:26:241092 map->Add<blink::mojom::NonAssociatedLocalFrameHost>(
1093 base::BindRepeating(&RenderFrameHostImpl::BindNonAssociatedLocalFrameHost,
1094 base::Unretained(host)));
1095
Guocheng Weiae52cc32022-11-24 01:45:401096#if BUILDFLAG(IS_FUCHSIA)
1097 map->Add<media::mojom::FuchsiaMediaCodecProvider>(
1098 base::BindRepeating(&RenderProcessHost::BindMediaCodecProvider,
1099 base::Unretained(host->GetProcess())));
1100#endif
Mingyu Lei682f6582024-06-14 04:26:591101
Fergal Dalyb810d692024-11-22 04:07:231102 if (base::FeatureList::IsEnabled(blink::features::kBuiltInAIAPI)) {
Fergal Daly2935c7a2024-11-07 06:29:431103 // We take the `document_associated_data` when the callback runs because
1104 // RenderFrameHosts live across multiple documents. Even though the current
1105 // implementation of `document_associated_data` persists across documents,
1106 // that is an implementation detail, without a guarantee.
Mingyu Leif6f9bc1c2024-08-15 05:23:211107 map->Add<blink::mojom::AIManager>(base::BindRepeating(
Fergal Daly2935c7a2024-11-07 06:29:431108 [](ContentBrowserClient* browser_client, RenderFrameHostImpl* host,
1109 mojo::PendingReceiver<blink::mojom::AIManager> receiver) {
1110 browser_client->BindAIManager(host->GetBrowserContext(),
Clark DuVallb04239772025-04-14 20:37:041111 &host->document_associated_data(), host,
Fergal Daly2935c7a2024-11-07 06:29:431112 std::move(receiver));
1113 },
Mingyu Leif6f9bc1c2024-08-15 05:23:211114 base::Unretained(GetContentClient()->browser()),
Fergal Daly2935c7a2024-11-07 06:29:431115 base::Unretained(host)));
Mingyu Lei682f6582024-06-14 04:26:591116 }
Fergal Dalyb65f07b2024-12-09 07:52:381117
Tsuyoshi Horo5f067a2a2024-12-06 12:01:441118 if (base::FeatureList::IsEnabled(blink::features::kTranslationAPI)) {
1119 map->Add<blink::mojom::TranslationManager>(base::BindRepeating(
1120 [](RenderFrameHostImpl* host,
1121 mojo::PendingReceiver<blink::mojom::TranslationManager> receiver) {
1122 GetContentClient()->browser()->BindTranslationManager(
Christine Hollingswortha1142ee2025-06-26 14:55:261123 host->GetProcess(), host->GetBrowserContext(),
1124 &host->document_associated_data(), host->GetLastCommittedOrigin(),
1125 std::move(receiver));
Tsuyoshi Horo5f067a2a2024-12-06 12:01:441126 },
1127 base::Unretained(host)));
1128 }
Fergal Dalyb65f07b2024-12-09 07:52:381129
1130 if (base::FeatureList::IsEnabled(blink::features::kLanguageDetectionAPI)) {
1131 map->Add<language_detection::mojom::ContentLanguageDetectionDriver>(
1132 base::BindRepeating(
1133 [](RenderFrameHostImpl* host,
1134 mojo::PendingReceiver<
1135 language_detection::mojom::ContentLanguageDetectionDriver>
1136 receiver) {
1137 GetContentClient()->browser()->BindLanguageDetectionDriver(
1138 host->GetBrowserContext(), &host->document_associated_data(),
1139 std::move(receiver));
1140 },
1141 base::Unretained(host)));
1142 }
Oksana Zhuravlovafee097c2019-07-26 17:01:301143}
1144
Oksana Zhuravlovaceb2cef52019-08-09 01:09:591145void PopulateBinderMapWithContext(
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571146 RenderFrameHostImpl* host,
Robert Sesek5a5fbb82020-05-04 16:18:281147 mojo::BinderMapWithContext<RenderFrameHost*>* map) {
Oksana Zhuravlova3f3295d2020-03-06 21:43:071148 // Register empty binders for interfaces not bound by content but requested
1149 // by blink.
1150 // This avoids renderer kills when no binder is found in the absence of the
1151 // production embedder (such as in tests).
Aldo Culquicondored054b92025-07-02 19:13:381152 map->Add<blink::mojom::NoStatePrefetchProcessor>(
1153 &EmptyBinderForFrame<blink::mojom::NoStatePrefetchProcessor>);
1154 map->Add<payments::mojom::PaymentRequest>(
1155 &EmptyBinderForFrame<payments::mojom::PaymentRequest>);
1156 map->Add<blink::mojom::AnchorElementMetricsHost>(
1157 &EmptyBinderForFrame<blink::mojom::AnchorElementMetricsHost>);
1158 map->Add<blink::mojom::CredentialManager>(
1159 &EmptyBinderForFrame<blink::mojom::CredentialManager>);
1160 map->Add<blink::mojom::LCPCriticalPathPredictorHost>(
1161 &EmptyBinderForFrame<blink::mojom::LCPCriticalPathPredictorHost>);
Sandor Majorf42e6bd62025-02-28 00:12:041162 if (base::FeatureList::IsEnabled(network::features::kBrowsingTopics) &&
Abigail Katcoff0e9e3102023-05-30 16:55:411163 base::FeatureList::IsEnabled(
1164 blink::features::kBrowsingTopicsDocumentAPI)) {
Yao Xiaoda2481e2022-03-31 21:20:041165 map->Add<blink::mojom::BrowsingTopicsDocumentService>(
Aldo Culquicondored054b92025-07-02 19:13:381166 &BrowsingTopicsDocumentHost::CreateMojoService);
Yao Xiaoda2481e2022-03-31 21:20:041167 }
Xiaohan Wang1ecfd002022-01-19 22:33:101168#if !BUILDFLAG(IS_ANDROID)
Andrew Rayskiyb6d994982022-09-01 10:24:421169 map->Add<blink::mojom::DirectSocketsService>(
Aldo Culquicondored054b92025-07-02 19:13:381170 &DirectSocketsServiceImpl::CreateForFrame);
1171 map->Add<media::mojom::SpeechRecognitionContext>(
1172 &EmptyBinderForFrame<media::mojom::SpeechRecognitionContext>);
evliu3b6e6d52020-10-20 17:34:141173 map->Add<media::mojom::SpeechRecognitionClientBrowserInterface>(
Aldo Culquicondored054b92025-07-02 19:13:381174 &EmptyBinderForFrame<
1175 media::mojom::SpeechRecognitionClientBrowserInterface>);
1176 map->Add<media::mojom::MediaFoundationRendererNotifier>(
1177 &EmptyBinderForFrame<media::mojom::MediaFoundationRendererNotifier>);
1178 map->Add<media::mojom::MediaPlayerObserverClient>(
1179 &EmptyBinderForFrame<media::mojom::MediaPlayerObserverClient>);
Abigail Klein82807c552020-04-06 19:58:071180#endif
Oksana Zhuravlova3f3295d2020-03-06 21:43:071181#if BUILDFLAG(ENABLE_UNHANDLED_TAP)
Aldo Culquicondored054b92025-07-02 19:13:381182 map->Add<blink::mojom::UnhandledTapNotifier>(
1183 &EmptyBinderForFrame<blink::mojom::UnhandledTapNotifier>);
Oksana Zhuravlova3f3295d2020-03-06 21:43:071184#endif
1185
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571186 map->Add<blink::mojom::BackgroundFetchService>(
Aldo Culquicondored054b92025-07-02 19:13:381187 &BackgroundFetchServiceImpl::CreateForFrame);
1188 map->Add<blink::mojom::ColorChooserFactory>(&BindColorChooserFactoryForFrame);
1189 map->Add<blink::mojom::EyeDropperChooser>(&EyeDropperChooserImpl::Create);
Victor Costan31ca3d22019-10-11 02:33:371190 map->Add<blink::mojom::CookieStore>(
Aldo Culquicondored054b92025-07-02 19:13:381191 &CookieStoreManager::BindReceiverForFrame);
Miyoung Shinf9dd1452019-09-24 12:57:461192 map->Add<blink::mojom::ContentIndexService>(
Aldo Culquicondored054b92025-07-02 19:13:381193 &ContentIndexServiceImpl::CreateForFrame);
Takuto Ikuta7cdebf62024-02-09 09:01:411194 map->Add<blink::mojom::KeyboardLockService>(
Aldo Culquicondored054b92025-07-02 19:13:381195 &KeyboardLockServiceImpl::CreateMojoService);
Sandor Majorf42e6bd62025-02-28 00:12:041196 if (base::FeatureList::IsEnabled(network::features::kInterestGroupStorage)) {
Takuto Ikuta080080152024-02-09 09:15:191197 map->Add<blink::mojom::AdAuctionService>(
Aldo Culquicondored054b92025-07-02 19:13:381198 &AdAuctionServiceImpl::CreateMojoService);
Caleb Raitto6c7f5e682021-04-07 23:58:051199 }
Aldo Culquicondored054b92025-07-02 19:13:381200 map->Add<blink::mojom::MediaSessionService>(&MediaSessionServiceImpl::Create);
Miyoung Shin059c0ff72019-09-26 11:13:391201 map->Add<blink::mojom::PictureInPictureService>(
Aldo Culquicondored054b92025-07-02 19:13:381202 &PictureInPictureServiceImpl::Create);
1203 map->Add<blink::mojom::WakeLockService>(&WakeLockServiceImpl::Create);
Alexander Cooper6e5bf7c62020-04-23 00:40:091204#if BUILDFLAG(ENABLE_VR)
Aldo Culquicondored054b92025-07-02 19:13:381205 map->Add<device::mojom::VRService>(&VRServiceImpl::Create);
Alexander Cooper6e5bf7c62020-04-23 00:40:091206#else
1207 map->Add<device::mojom::VRService>(
Aldo Culquicondored054b92025-07-02 19:13:381208 &EmptyBinderForFrame<device::mojom::VRService>);
Alexander Cooper6e5bf7c62020-04-23 00:40:091209#endif
John Delaney35c275f2022-08-19 19:31:541210 RegisterWebUIControllerInterfaceBinder<
Dan McArdlec8fe5af2023-11-02 18:59:251211 private_aggregation_internals::mojom::Factory,
1212 PrivateAggregationInternalsUI>(map);
Andrew Paseltiner88f6d952023-02-15 21:17:001213 RegisterWebUIControllerInterfaceBinder<attribution_internals::mojom::Factory,
Robert Sesek976c70cf2022-08-12 19:17:571214 AttributionInternalsUI>(map);
Nathan Memmott6729cf52022-10-18 20:04:071215 RegisterWebUIControllerInterfaceBinder<storage::mojom::IdbInternalsHandler,
Evan Stadecbb1e002024-09-13 20:06:571216 indexed_db::IndexedDBInternalsUI>(map);
Robert Sesek976c70cf2022-08-12 19:17:571217 RegisterWebUIControllerInterfaceBinder<::mojom::ProcessInternalsHandler,
1218 ProcessInternalsUI>(map);
1219 RegisterWebUIControllerInterfaceBinder<storage::mojom::QuotaInternalsHandler,
1220 QuotaInternalsUI>(map);
Sergey Ulanov647ad462025-02-19 19:34:331221#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_FUCHSIA)
Alex Attar9624dfb2023-09-28 01:32:351222 RegisterWebUIControllerInterfaceBinder<
Etienne Pierre-doray6db6af4f2025-06-05 14:20:591223 traces_internals::mojom::TracesInternalsHandlerFactory,
1224 TracesInternalsUI>(map);
Alex Attar4ee3fa3d2023-11-06 16:33:111225#endif
Mahmoud Ahmedc4eee9a32023-07-21 17:19:241226#if BUILDFLAG(ENABLE_VR)
1227 RegisterWebUIControllerInterfaceBinder<webxr::mojom::WebXrInternalsHandler,
1228 WebXrInternalsUI>(map);
1229#endif
Gyuyoung Kim3bd4ce02025-06-25 21:28:011230#if BUILDFLAG(IS_ANDROID) || (BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_IOS_TVOS))
Aldo Culquicondored054b92025-07-02 19:13:381231 map->Add<blink::mojom::DateTimeChooser>(&BindDateTimeChooserForFrame);
Julie Jeongeun Kimeac2fe22023-07-18 11:55:021232#endif
1233#if BUILDFLAG(IS_ANDROID)
Aldo Culquicondored054b92025-07-02 19:13:381234 map->Add<blink::mojom::TextSuggestionHost>(&BindTextSuggestionHostForFrame);
Kalvin Leee0f0c492025-07-01 06:40:581235#else
Aldo Culquicondored054b92025-07-02 19:13:381236 map->Add<blink::mojom::TextSuggestionHost>(
1237 &EmptyBinderForFrame<blink::mojom::TextSuggestionHost>);
Xiaohan Wang1ecfd002022-01-19 22:33:101238#endif // BUILDFLAG(IS_ANDROID)
Miyoung Shin87cd4522019-10-04 05:00:051239
Aldo Culquicondored054b92025-07-02 19:13:381240 map->Add<blink::mojom::Authenticator>(
Chris Staite8d2ebea2025-05-01 17:30:111241 [](RenderFrameHost* host,
1242 mojo::PendingReceiver<blink::mojom::Authenticator> receiver) {
1243 static_cast<RenderFrameHostImpl*>(host)->GetWebAuthenticationService(
1244 std::move(receiver));
Aldo Culquicondored054b92025-07-02 19:13:381245 });
1246 map->Add<blink::mojom::ClipboardHost>(&ClipboardHostImpl::Create);
1247 map->Add<blink::mojom::SpeculationHost>(&SpeculationHostImpl::Bind);
Adithya Srinivasan0d3e57182024-09-10 14:10:341248 map->Add<blink::mojom::AnchorElementInteractionHost>(
Aldo Culquicondored054b92025-07-02 19:13:381249 &AnchorElementInteractionHostImpl::Create);
Raymes Khourye24e0a92021-12-20 01:16:161250
Xiaohan Wang1ecfd002022-01-19 22:33:101251#if BUILDFLAG(IS_CHROMEOS)
Raymes Khourye24e0a92021-12-20 01:16:161252 if (base::FeatureList::IsEnabled(features::kWebLockScreenApi)) {
Aldo Culquicondored054b92025-07-02 19:13:381253 map->Add<blink::mojom::LockScreenService>(&LockScreenServiceImpl::Create);
Raymes Khourye24e0a92021-12-20 01:16:161254 }
1255#endif
Sergey Ulanovff752e4a2022-04-06 23:04:361256
1257#if BUILDFLAG(IS_FUCHSIA)
Guocheng Weib45357412022-11-28 23:39:541258 map->Add<media::mojom::FuchsiaMediaCdmProvider>(
Aldo Culquicondored054b92025-07-02 19:13:381259 &FuchsiaMediaCdmProviderImpl::Bind);
Sergey Ulanovff752e4a2022-04-06 23:04:361260#endif
kyraseevers2ca6dec2023-02-28 00:52:111261
Jiewei Qianc7a39e32023-09-28 06:25:401262 map->Add<blink::mojom::OriginTrialStateHost>(
Aldo Culquicondored054b92025-07-02 19:13:381263 &OriginTrialStateHostImpl::Create);
1264 map->Add<blink::mojom::StorageAccessHandle>(&StorageAccessHandle::Create);
Mingyu Lei682f6582024-06-14 04:26:591265
Aldo Culquicondored054b92025-07-02 19:13:381266 map->Add<optimization_guide::mojom::ModelBroker>(
1267 &EmptyBinderForFrame<optimization_guide::mojom::ModelBroker>);
Fergal Dalyb810d692024-11-22 04:07:231268 if (base::FeatureList::IsEnabled(blink::features::kBuiltInAIAPI)) {
Mingyu Lei682f6582024-06-14 04:26:591269 map->Add<blink::mojom::AIManager>(
Aldo Culquicondored054b92025-07-02 19:13:381270 &EmptyBinderForFrame<blink::mojom::AIManager>);
Mingyu Lei682f6582024-06-14 04:26:591271 }
Chris Staite8d2ebea2025-05-01 17:30:111272
1273 // This should be last to allow overrides of any interface.
1274 GetContentClient()->browser()->RegisterBrowserInterfaceBindersForFrame(host,
1275 map);
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571276}
Oksana Zhuravlovaceb2cef52019-08-09 01:09:591277
Robert Sesek5a5fbb82020-05-04 16:18:281278void PopulateBinderMap(RenderFrameHostImpl* host, mojo::BinderMap* map) {
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571279 PopulateFrameBinders(host, map);
Oksana Zhuravlovafee097c2019-07-26 17:01:301280}
1281
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571282RenderFrameHost* GetContextForHost(RenderFrameHostImpl* host) {
1283 return host;
Oksana Zhuravlovaceb2cef52019-08-09 01:09:591284}
1285
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571286// Dedicated workers
1287const url::Origin& GetContextForHost(DedicatedWorkerHost* host) {
Antonio Sartori4c385ecc2021-06-30 09:14:251288 return host->GetStorageKey().origin();
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571289}
1290
1291void PopulateDedicatedWorkerBinders(DedicatedWorkerHost* host,
Robert Sesek5a5fbb82020-05-04 16:18:281292 mojo::BinderMap* map) {
Oksana Zhuravlova3f3295d2020-03-06 21:43:071293 // Do nothing for interfaces that the renderer might request, but doesn't
1294 // always expect to be bound.
1295 map->Add<blink::mojom::FeatureObserver>(base::DoNothing());
1296
Oksana Zhuravlova9d0c3e32019-11-19 05:10:071297 // static binders
Mario Sanchez Pradabaa893732019-09-30 22:10:171298 map->Add<shape_detection::mojom::BarcodeDetectionProvider>(
Aldo Culquicondored054b92025-07-02 19:13:381299 &BindBarcodeDetectionProvider);
Mario Sanchez Pradabaa893732019-09-30 22:10:171300 map->Add<shape_detection::mojom::FaceDetectionProvider>(
Aldo Culquicondored054b92025-07-02 19:13:381301 &BindFaceDetectionProvider);
1302 map->Add<shape_detection::mojom::TextDetection>(&BindTextDetection);
1303 map->Add<ukm::mojom::UkmRecorderFactory>(&BindUkmRecorderFactory);
Oksana Zhuravlova9d0c3e32019-11-19 05:10:071304
1305 // worker host binders
1306 // base::Unretained(host) is safe because the map is owned by
1307 // |DedicatedWorkerHost::broker_|.
1308 map->Add<blink::mojom::IdleManager>(base::BindRepeating(
1309 &DedicatedWorkerHost::CreateIdleManager, base::Unretained(host)));
Miyoung Shin996cb652019-11-28 03:27:221310 map->Add<blink::mojom::DedicatedWorkerHostFactory>(
1311 base::BindRepeating(&DedicatedWorkerHost::CreateNestedDedicatedWorker,
1312 base::Unretained(host)));
Tal Pressmanc6192c12021-03-08 06:46:021313
1314 map->Add<blink::mojom::FileUtilitiesHost>(
1315 base::BindRepeating(FileUtilitiesHostImpl::Create,
Emily Andrewsd15fd762024-12-10 20:41:541316 host->GetProcessHost()->GetDeprecatedID()),
Tal Pressmanc6192c12021-03-08 06:46:021317 base::ThreadPool::CreateSequencedTaskRunner(
1318 {base::MayBlock(), base::TaskPriority::USER_VISIBLE}));
1319
Enrico Galli19271ea2023-10-04 01:41:481320 if (base::FeatureList::IsEnabled(
Alex Gough6ae91282023-12-18 23:19:231321 webnn::mojom::features::kWebMachineLearningNeuralNetwork)) {
Enrico Galli19271ea2023-10-04 01:41:481322 // base::Unretained(host->GetProcessHost()) is safe because the map is owned
1323 // by |DedicatedWorkerHost::broker_|.
1324 map->Add<webnn::mojom::WebNNContextProvider>(base::BindRepeating(
Joshua Bellbc43ccf2025-03-05 23:21:221325 &BindWebNNContextProviderForWorker<DedicatedWorkerHost>,
1326 base::Unretained(host)));
Enrico Galli19271ea2023-10-04 01:41:481327 }
Enrico Galli19271ea2023-10-04 01:41:481328
Andrew Rayskiy0b29f122023-06-21 14:30:431329#if !BUILDFLAG(IS_ANDROID)
1330 map->Add<blink::mojom::DirectSocketsService>(
1331 base::BindRepeating(&DedicatedWorkerHost::CreateDirectSocketsService,
1332 base::Unretained(host)));
1333#endif
Oksana Zhuravlova9d0c3e32019-11-19 05:10:071334 map->Add<blink::mojom::WebUsbService>(base::BindRepeating(
1335 &DedicatedWorkerHost::CreateWebUsbService, base::Unretained(host)));
Miyoung Shine5cb8f12019-11-27 16:40:541336 map->Add<blink::mojom::WebSocketConnector>(base::BindRepeating(
1337 &DedicatedWorkerHost::CreateWebSocketConnector, base::Unretained(host)));
Adam Ricee98a22322021-04-27 08:26:261338 map->Add<blink::mojom::WebTransportConnector>(
1339 base::BindRepeating(&DedicatedWorkerHost::CreateWebTransportConnector,
Yutaka Hirano492c93d2019-11-05 11:28:031340 base::Unretained(host)));
Reilly Grantd6714bc2020-03-18 20:46:571341 map->Add<blink::mojom::WakeLockService>(base::BindRepeating(
1342 &DedicatedWorkerHost::CreateWakeLockService, base::Unretained(host)));
Hiroki Nakagawa761b9b02020-07-13 11:12:021343 map->Add<blink::mojom::ContentSecurityNotifier>(
1344 base::BindRepeating(&DedicatedWorkerHost::CreateContentSecurityNotifier,
1345 base::Unretained(host)));
arthursonzognibb006d82020-03-11 14:30:061346 map->Add<blink::mojom::CacheStorage>(base::BindRepeating(
1347 &DedicatedWorkerHost::BindCacheStorage, base::Unretained(host)));
Mythri A25d7bdd2021-06-15 11:20:481348 map->Add<blink::mojom::CodeCacheHost>(base::BindRepeating(
1349 &DedicatedWorkerHost::CreateCodeCacheHost, base::Unretained(host)));
Andrew Williams61e816d2021-11-01 04:41:041350 map->Add<blink::mojom::BroadcastChannelProvider>(
1351 base::BindRepeating(&DedicatedWorkerHost::CreateBroadcastChannelProvider,
1352 base::Unretained(host)));
janiceliu2457d49d2024-07-09 18:15:571353 map->Add<blink::mojom::BlobURLStore>(
1354 base::BindRepeating(&DedicatedWorkerHost::CreateBlobUrlStoreProvider,
1355 base::Unretained(host)));
Matt Menke6751f662020-12-01 05:44:001356 map->Add<blink::mojom::ReportingServiceProxy>(base::BindRepeating(
1357 &CreateReportingServiceProxyForDedicatedWorker, base::Unretained(host)));
Reilly Grant276296b2019-10-17 20:00:151358 map->Add<blink::mojom::SerialService>(base::BindRepeating(
1359 &DedicatedWorkerHost::BindSerialService, base::Unretained(host)));
Garfield Tan6aba0032025-02-14 02:07:351360#if !BUILDFLAG(IS_ANDROID)
François Beaufortd7269ab2024-09-18 13:18:001361 map->Add<blink::mojom::HidService>(base::BindRepeating(
1362 &DedicatedWorkerHost::BindHidService, base::Unretained(host)));
Xiaohan Wang1ecfd002022-01-19 22:33:101363#endif // !BUILDFLAG(IS_ANDROID)
Evan Stade88ef22322022-09-12 21:19:091364 map->Add<blink::mojom::BucketManagerHost>(base::BindRepeating(
1365 &DedicatedWorkerHost::CreateBucketManagerHost, base::Unretained(host)));
Nathan Memmotta9fcfeb2023-10-31 19:58:301366 map->Add<blink::mojom::FileSystemAccessManager>(
1367 base::BindRepeating(&DedicatedWorkerHost::GetFileSystemAccessManager,
1368 base::Unretained(host)));
Arnaud Mandy624afa3322024-08-09 13:33:541369#if BUILDFLAG(ENABLE_COMPUTE_PRESSURE)
Wei4 Wang353aca02023-12-14 03:40:581370 if (base::FeatureList::IsEnabled(blink::features::kComputePressure)) {
Raphael Kubo da Costae8d284a2024-07-01 08:46:301371 map->Add<blink::mojom::WebPressureManager>(base::BindRepeating(
Wei4 Wang353aca02023-12-14 03:40:581372 &DedicatedWorkerHost::BindPressureService, base::Unretained(host)));
1373 }
Arnaud Mandy624afa3322024-08-09 13:33:541374#endif // BUILDFLAG(ENABLE_COMPUTE_PRESSURE)
Oksana Zhuravlova9d0c3e32019-11-19 05:10:071375
Kyra Seevers9e566022021-09-01 15:49:251376 // RenderProcessHost binders
Victor Costandb4002e2020-03-25 19:09:031377 map->Add<media::mojom::VideoDecodePerfHistory>(BindWorkerReceiver(
1378 &RenderProcessHostImpl::BindVideoDecodePerfHistory, host));
Johannes Kron98aca4022022-02-18 21:15:241379 map->Add<media::mojom::WebrtcVideoPerfHistory>(BindWorkerReceiver(
1380 &RenderProcessHostImpl::BindWebrtcVideoPerfHistory, host));
Guocheng Weiae52cc32022-11-24 01:45:401381#if BUILDFLAG(IS_FUCHSIA)
1382 map->Add<media::mojom::FuchsiaMediaCodecProvider>(
1383 BindWorkerReceiver(&RenderProcessHostImpl::BindMediaCodecProvider, host));
1384#endif
Antonio Sartori12147a82021-07-13 15:40:531385
Kyra Seevers9e566022021-09-01 15:49:251386 // RenderProcessHost binders taking a StorageKey
kyraseevers28b58f562021-09-09 16:09:041387 map->Add<blink::mojom::FileSystemManager>(BindWorkerReceiverForStorageKey(
1388 &RenderProcessHostImpl::BindFileSystemManager, host));
Mingyu Lei0fe8df72022-12-16 06:44:481389 map->Add<blink::mojom::IDBFactory>(
Abhishek Shanthkumar7aee48b2024-06-24 15:02:471390 BindWorkerReceiverForStorageKeyAndBucketContext(
Mingyu Lei0fe8df72022-12-16 06:44:481391 &RenderProcessHostImpl::BindIndexedDB, host));
Joshua Hoodbd47013d2022-01-06 19:45:041392 map->Add<blink::mojom::LockManager>(BindWorkerReceiverForStorageKey(
1393 &RenderProcessHostImpl::CreateLockManager, host));
Marijn Kruisselbrink60589022022-05-03 19:54:181394 map->Add<blink::mojom::QuotaManagerHost>(BindWorkerReceiverForStorageKey(
1395 &RenderProcessHostImpl::BindQuotaManagerHost, host));
Andrew Williamsfc090562022-12-05 17:53:481396 map->Add<blink::mojom::NotificationService>(BindNotificationService(
1397 host->GetAncestorRenderFrameHostId(),
1398 RenderProcessHost::NotificationServiceCreatorType::kDedicatedWorker,
1399 host));
Mingyu Lei682f6582024-06-14 04:26:591400
Fergal Dalyb810d692024-11-22 04:07:231401 if (base::FeatureList::IsEnabled(blink::features::kBuiltInAIAPI)) {
Clark DuVallb04239772025-04-14 20:37:041402 map->Add<blink::mojom::AIManager>(
1403 base::BindRepeating(&ContentBrowserClient::BindAIManager,
1404 base::Unretained(GetContentClient()->browser()),
1405 host->GetProcessHost()->GetBrowserContext(),
1406 base::Unretained(host), /*rfh=*/nullptr));
Mingyu Lei682f6582024-06-14 04:26:591407 }
Tsuyoshi Horo5f067a2a2024-12-06 12:01:441408 if (base::FeatureList::IsEnabled(blink::features::kTranslationAPI)) {
1409 map->Add<blink::mojom::TranslationManager>(base::BindRepeating(
1410 [](DedicatedWorkerHost* host,
1411 mojo::PendingReceiver<blink::mojom::TranslationManager> receiver) {
Christine Hollingswortha1142ee2025-06-26 14:55:261412 auto* process_host = host->GetProcessHost();
Tsuyoshi Horo5f067a2a2024-12-06 12:01:441413 GetContentClient()->browser()->BindTranslationManager(
Christine Hollingswortha1142ee2025-06-26 14:55:261414 process_host, process_host->GetBrowserContext(), host,
Tsuyoshi Horo5f067a2a2024-12-06 12:01:441415 host->GetStorageKey().origin(), std::move(receiver));
1416 },
1417 base::Unretained(host)));
1418 }
Jiacheng Guoc62e3c022025-01-10 08:37:571419 if (base::FeatureList::IsEnabled(blink::features::kLanguageDetectionAPI)) {
1420 map->Add<language_detection::mojom::ContentLanguageDetectionDriver>(
1421 base::BindRepeating(
1422 [](DedicatedWorkerHost* host,
1423 mojo::PendingReceiver<
1424 language_detection::mojom::ContentLanguageDetectionDriver>
1425 receiver) {
1426 GetContentClient()->browser()->BindLanguageDetectionDriver(
1427 host->GetProcessHost()->GetBrowserContext(), host,
1428 std::move(receiver));
1429 },
1430 base::Unretained(host)));
1431 }
Oksana Zhuravlova99a8e522019-08-20 21:58:111432}
Oksana Zhuravlovafee097c2019-07-26 17:01:301433
Oksana Zhuravlovaceb2cef52019-08-09 01:09:591434void PopulateBinderMapWithContext(
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571435 DedicatedWorkerHost* host,
Robert Sesek5a5fbb82020-05-04 16:18:281436 mojo::BinderMapWithContext<const url::Origin&>* map) {
Kyra Seevers9e566022021-09-01 15:49:251437 // RenderProcessHost binders taking an origin
Miyoung Shin0e38e912019-12-04 01:52:151438 map->Add<payments::mojom::PaymentManager>(BindWorkerReceiverForOrigin(
Victor Costandb4002e2020-03-25 19:09:031439 &RenderProcessHostImpl::CreatePaymentManagerForOrigin, host));
Miyoung Shin0e38e912019-12-04 01:52:151440 map->Add<blink::mojom::PermissionService>(BindWorkerReceiverForOrigin(
Victor Costandb4002e2020-03-25 19:09:031441 &RenderProcessHostImpl::CreatePermissionService, host));
Daniel Brinkers9004610c2023-10-23 15:27:511442 map->Add<blink::mojom::FileBackedBlobFactory>(BindWorkerReceiverForOrigin(
1443 &RenderProcessHostImpl::BindFileBackedBlobFactory, host));
David Risney909ecfc2025-06-25 21:23:241444
1445 if (base::FeatureList::IsEnabled(
1446 blink::features::kServiceWorkerInDedicatedWorker) &&
1447 base::FeatureList::IsEnabled(
1448 blink::features::kServiceWorkerBackgroundSyncInDedicatedWorker)) {
1449 map->Add<blink::mojom::OneShotBackgroundSyncService>(
1450 BindWorkerReceiverForOrigin(
1451 &RenderProcessHostImpl::CreateOneShotSyncService, host));
1452 map->Add<blink::mojom::PeriodicBackgroundSyncService>(
1453 BindWorkerReceiverForOrigin(
1454 &RenderProcessHostImpl::CreatePeriodicSyncService, host));
1455 }
Oksana Zhuravlovaceb2cef52019-08-09 01:09:591456}
1457
Robert Sesek5a5fbb82020-05-04 16:18:281458void PopulateBinderMap(DedicatedWorkerHost* host, mojo::BinderMap* map) {
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571459 PopulateDedicatedWorkerBinders(host, map);
Oksana Zhuravlovafee097c2019-07-26 17:01:301460}
1461
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571462// Shared workers
1463url::Origin GetContextForHost(SharedWorkerHost* host) {
Patrick Monette608f1c52019-08-16 18:56:021464 return url::Origin::Create(host->instance().url());
Oksana Zhuravlovaceb2cef52019-08-09 01:09:591465}
1466
Robert Sesek5a5fbb82020-05-04 16:18:281467void PopulateSharedWorkerBinders(SharedWorkerHost* host, mojo::BinderMap* map) {
Oksana Zhuravlova3f3295d2020-03-06 21:43:071468 // Do nothing for interfaces that the renderer might request, but doesn't
1469 // always expect to be bound.
1470 map->Add<blink::mojom::FeatureObserver>(base::DoNothing());
Hiroki Nakagawa761b9b02020-07-13 11:12:021471 // Ignore the pending receiver because it's not clear how to handle
1472 // notifications about content security (e.g., mixed contents and certificate
1473 // errors) on shared workers. Generally these notifications are routed to the
1474 // ancestor frame's WebContents like dedicated workers, but shared workers
1475 // don't have the ancestor frame.
1476 map->Add<blink::mojom::ContentSecurityNotifier>(base::DoNothing());
Oksana Zhuravlova3f3295d2020-03-06 21:43:071477
Oksana Zhuravlova9d0c3e32019-11-19 05:10:071478 // static binders
Mario Sanchez Pradabaa893732019-09-30 22:10:171479 map->Add<shape_detection::mojom::BarcodeDetectionProvider>(
Aldo Culquicondored054b92025-07-02 19:13:381480 &BindBarcodeDetectionProvider);
Mario Sanchez Pradabaa893732019-09-30 22:10:171481 map->Add<shape_detection::mojom::FaceDetectionProvider>(
Aldo Culquicondored054b92025-07-02 19:13:381482 &BindFaceDetectionProvider);
1483 map->Add<shape_detection::mojom::TextDetection>(&BindTextDetection);
1484 map->Add<ukm::mojom::UkmRecorderFactory>(&BindUkmRecorderFactory);
Oksana Zhuravlova9d0c3e32019-11-19 05:10:071485
1486 // worker host binders
1487 // base::Unretained(host) is safe because the map is owned by
1488 // |SharedWorkerHost::broker_|.
Tal Pressmanc6192c12021-03-08 06:46:021489 map->Add<blink::mojom::FileUtilitiesHost>(
1490 base::BindRepeating(FileUtilitiesHostImpl::Create,
Emily Andrewsd15fd762024-12-10 20:41:541491 host->GetProcessHost()->GetDeprecatedID()),
Tal Pressmanc6192c12021-03-08 06:46:021492 base::ThreadPool::CreateSequencedTaskRunner(
1493 {base::MayBlock(), base::TaskPriority::USER_VISIBLE}));
1494
Adam Ricee98a22322021-04-27 08:26:261495 map->Add<blink::mojom::WebTransportConnector>(base::BindRepeating(
1496 &SharedWorkerHost::CreateWebTransportConnector, base::Unretained(host)));
Hubert Chao0c32c1ab2025-08-22 13:06:101497 map->Add<blink::mojom::WebSocketConnector>(base::BindRepeating(
1498 &SharedWorkerHost::CreateWebSocketConnector, base::Unretained(host)));
arthursonzognibb006d82020-03-11 14:30:061499 map->Add<blink::mojom::CacheStorage>(base::BindRepeating(
1500 &SharedWorkerHost::BindCacheStorage, base::Unretained(host)));
Mythri A25d7bdd2021-06-15 11:20:481501 map->Add<blink::mojom::CodeCacheHost>(base::BindRepeating(
1502 &SharedWorkerHost::CreateCodeCacheHost, base::Unretained(host)));
Andrew Williams61e816d2021-11-01 04:41:041503 map->Add<blink::mojom::BroadcastChannelProvider>(
1504 base::BindRepeating(&SharedWorkerHost::CreateBroadcastChannelProvider,
1505 base::Unretained(host)));
janiceliu2457d49d2024-07-09 18:15:571506 map->Add<blink::mojom::BlobURLStore>(base::BindRepeating(
1507 &SharedWorkerHost::CreateBlobUrlStoreProvider, base::Unretained(host)));
Matt Menke6751f662020-12-01 05:44:001508 map->Add<blink::mojom::ReportingServiceProxy>(base::BindRepeating(
1509 &CreateReportingServiceProxyForSharedWorker, base::Unretained(host)));
Evan Stade88ef22322022-09-12 21:19:091510 map->Add<blink::mojom::BucketManagerHost>(base::BindRepeating(
1511 &SharedWorkerHost::CreateBucketManagerHost, base::Unretained(host)));
Arnaud Mandy624afa3322024-08-09 13:33:541512#if BUILDFLAG(ENABLE_COMPUTE_PRESSURE)
Wei4 Wang353aca02023-12-14 03:40:581513 if (base::FeatureList::IsEnabled(blink::features::kComputePressure)) {
Raphael Kubo da Costae8d284a2024-07-01 08:46:301514 map->Add<blink::mojom::WebPressureManager>(base::BindRepeating(
Wei4 Wang353aca02023-12-14 03:40:581515 &SharedWorkerHost::BindPressureService, base::Unretained(host)));
1516 }
Arnaud Mandy624afa3322024-08-09 13:33:541517#endif // BUILDFLAG(ENABLE_COMPUTE_PRESSURE)
Joshua Bellbc43ccf2025-03-05 23:21:221518 if (base::FeatureList::IsEnabled(
1519 webnn::mojom::features::kWebMachineLearningNeuralNetwork)) {
1520 map->Add<webnn::mojom::WebNNContextProvider>(base::BindRepeating(
1521 &BindWebNNContextProviderForWorker<SharedWorkerHost>,
1522 base::Unretained(host)));
1523 }
Fergal Dalyb810d692024-11-22 04:07:231524 if (base::FeatureList::IsEnabled(blink::features::kBuiltInAIAPI)) {
Clark DuVallb04239772025-04-14 20:37:041525 map->Add<blink::mojom::AIManager>(
1526 base::BindRepeating(&ContentBrowserClient::BindAIManager,
1527 base::Unretained(GetContentClient()->browser()),
1528 host->GetProcessHost()->GetBrowserContext(),
1529 base::Unretained(host), /*rfh=*/nullptr));
Mingyu Lei3cb40d602024-06-14 04:38:191530 }
Tsuyoshi Horo5f067a2a2024-12-06 12:01:441531 if (base::FeatureList::IsEnabled(blink::features::kTranslationAPI)) {
1532 map->Add<blink::mojom::TranslationManager>(base::BindRepeating(
1533 [](SharedWorkerHost* host,
1534 mojo::PendingReceiver<blink::mojom::TranslationManager> receiver) {
Christine Hollingswortha1142ee2025-06-26 14:55:261535 auto* process_host = host->GetProcessHost();
Tsuyoshi Horo5f067a2a2024-12-06 12:01:441536 GetContentClient()->browser()->BindTranslationManager(
Christine Hollingswortha1142ee2025-06-26 14:55:261537 process_host, process_host->GetBrowserContext(), host,
Tsuyoshi Horo5f067a2a2024-12-06 12:01:441538 host->GetStorageKey().origin(), std::move(receiver));
1539 },
1540 base::Unretained(host)));
1541 }
Jiacheng Guoc62e3c022025-01-10 08:37:571542 if (base::FeatureList::IsEnabled(blink::features::kLanguageDetectionAPI)) {
1543 map->Add<language_detection::mojom::ContentLanguageDetectionDriver>(
1544 base::BindRepeating(
1545 [](SharedWorkerHost* host,
1546 mojo::PendingReceiver<
1547 language_detection::mojom::ContentLanguageDetectionDriver>
1548 receiver) {
1549 GetContentClient()->browser()->BindLanguageDetectionDriver(
1550 host->GetProcessHost()->GetBrowserContext(), host,
1551 std::move(receiver));
1552 },
1553 base::Unretained(host)));
1554 }
Oksana Zhuravlova9d0c3e32019-11-19 05:10:071555
Andrew Rayskiyf807b712025-02-10 20:31:561556#if !BUILDFLAG(IS_ANDROID)
1557 map->Add<blink::mojom::DirectSocketsService>(base::BindRepeating(
1558 [](SharedWorkerHost* host,
1559 mojo::PendingReceiver<blink::mojom::DirectSocketsService> receiver) {
1560 DirectSocketsServiceImpl::CreateForSharedWorker(*host,
1561 std::move(receiver));
1562 },
1563 base::Unretained(host)));
1564#endif
1565
Kyra Seevers9e566022021-09-01 15:49:251566 // RenderProcessHost binders
Victor Costandb4002e2020-03-25 19:09:031567 map->Add<media::mojom::VideoDecodePerfHistory>(BindWorkerReceiver(
1568 &RenderProcessHostImpl::BindVideoDecodePerfHistory, host));
Johannes Kron98aca4022022-02-18 21:15:241569 map->Add<media::mojom::WebrtcVideoPerfHistory>(BindWorkerReceiver(
1570 &RenderProcessHostImpl::BindWebrtcVideoPerfHistory, host));
kyraseevers28b58f562021-09-09 16:09:041571
Kyra Seevers9e566022021-09-01 15:49:251572 // RenderProcessHost binders taking a StorageKey
kyraseevers28b58f562021-09-09 16:09:041573 map->Add<blink::mojom::FileSystemAccessManager>(
1574 BindWorkerReceiverForStorageKey(
1575 &RenderProcessHostImpl::BindFileSystemAccessManager, host));
1576 map->Add<blink::mojom::FileSystemManager>(BindWorkerReceiverForStorageKey(
1577 &RenderProcessHostImpl::BindFileSystemManager, host));
Mingyu Lei0fe8df72022-12-16 06:44:481578 map->Add<blink::mojom::IDBFactory>(
Abhishek Shanthkumar7aee48b2024-06-24 15:02:471579 BindWorkerReceiverForStorageKeyAndBucketContext(
Mingyu Lei0fe8df72022-12-16 06:44:481580 &RenderProcessHostImpl::BindIndexedDB, host));
Joshua Hoodbd47013d2022-01-06 19:45:041581 map->Add<blink::mojom::LockManager>(BindWorkerReceiverForStorageKey(
1582 &RenderProcessHostImpl::CreateLockManager, host));
Marijn Kruisselbrink60589022022-05-03 19:54:181583 map->Add<blink::mojom::QuotaManagerHost>(BindWorkerReceiverForStorageKey(
1584 &RenderProcessHostImpl::BindQuotaManagerHost, host));
Andrew Williamsfc090562022-12-05 17:53:481585 map->Add<blink::mojom::NotificationService>(BindNotificationService(
1586 GlobalRenderFrameHostId(),
1587 RenderProcessHost::NotificationServiceCreatorType::kSharedWorker, host));
Hiroki Nakagawaa5b407652019-08-21 09:56:541588}
Oksana Zhuravlovaceb2cef52019-08-09 01:09:591589
1590void PopulateBinderMapWithContext(
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571591 SharedWorkerHost* host,
Robert Sesek5a5fbb82020-05-04 16:18:281592 mojo::BinderMapWithContext<const url::Origin&>* map) {
Kyra Seevers9e566022021-09-01 15:49:251593 // RenderProcessHost binders taking an origin
Miyoung Shin0e38e912019-12-04 01:52:151594 map->Add<payments::mojom::PaymentManager>(BindWorkerReceiverForOrigin(
Victor Costandb4002e2020-03-25 19:09:031595 &RenderProcessHostImpl::CreatePaymentManagerForOrigin, host));
Miyoung Shin0e38e912019-12-04 01:52:151596 map->Add<blink::mojom::PermissionService>(BindWorkerReceiverForOrigin(
Victor Costandb4002e2020-03-25 19:09:031597 &RenderProcessHostImpl::CreatePermissionService, host));
Daniel Brinkers9004610c2023-10-23 15:27:511598 map->Add<blink::mojom::FileBackedBlobFactory>(BindWorkerReceiverForOrigin(
1599 &RenderProcessHostImpl::BindFileBackedBlobFactory, host));
Oksana Zhuravlovaceb2cef52019-08-09 01:09:591600}
1601
Robert Sesek5a5fbb82020-05-04 16:18:281602void PopulateBinderMap(SharedWorkerHost* host, mojo::BinderMap* map) {
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571603 PopulateSharedWorkerBinders(host, map);
1604}
1605
Yao Xiao94203f52024-09-13 17:35:571606// Shared storage worklets
1607SharedStorageWorkletHost* GetContextForHost(SharedStorageWorkletHost* host) {
1608 return host;
1609}
1610
1611void PopulateSharedStorageWorkletBinders(SharedStorageWorkletHost* host,
1612 mojo::BinderMap* map) {
Yao Xiaobfec2c822024-10-18 22:34:521613 // Ignore requests to bind UkmRecorderFactory and FeatureObserver, since there
1614 // is no current plan to support them for worklets and the renderer always
1615 // tries to bind them. TODO(crbug.com/366293454).
Yao Xiao94203f52024-09-13 17:35:571616 map->Add<ukm::mojom::UkmRecorderFactory>(base::DoNothing());
Yao Xiaobfec2c822024-10-18 22:34:521617 map->Add<blink::mojom::FeatureObserver>(base::DoNothing());
1618
1619 // SharedStorageWorkletHost binders
1620 // base::Unretained(host) is safe because the map is owned by
1621 // |SharedStorageWorkletHost::broker_|.
1622 map->Add<blink::mojom::LockManager>(base::BindRepeating(
1623 &SharedStorageWorkletHost::GetLockManager, base::Unretained(host)));
Yao Xiao94203f52024-09-13 17:35:571624}
1625
1626void PopulateBinderMapWithContext(
1627 SharedStorageWorkletHost* host,
1628 mojo::BinderMapWithContext<SharedStorageWorkletHost*>* map) {}
1629
1630void PopulateBinderMap(SharedStorageWorkletHost* host, mojo::BinderMap* map) {
1631 PopulateSharedStorageWorkletBinders(host, map);
1632}
1633
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571634// Service workers
Hiroki Nakagawa593b6f52020-05-25 03:10:251635ServiceWorkerVersionInfo GetContextForHost(ServiceWorkerHost* host) {
Matt Falkenhagendb5d03e2021-09-28 10:14:211636 DCHECK_CURRENTLY_ON(BrowserThread::UI);
Hiroki Nakagawacd1e5382020-05-25 04:14:481637 return host->version()->GetInfo();
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571638}
1639
Hiroki Nakagawa593b6f52020-05-25 03:10:251640void PopulateServiceWorkerBinders(ServiceWorkerHost* host,
Robert Sesek5a5fbb82020-05-04 16:18:281641 mojo::BinderMap* map) {
Matt Falkenhagendb5d03e2021-09-28 10:14:211642 DCHECK_CURRENTLY_ON(BrowserThread::UI);
Oksana Zhuravlova9d0c3e32019-11-19 05:10:071643
Oksana Zhuravlova3f3295d2020-03-06 21:43:071644 // Do nothing for interfaces that the renderer might request, but doesn't
1645 // always expect to be bound.
1646 map->Add<blink::mojom::FeatureObserver>(base::DoNothing());
Hiroki Nakagawa761b9b02020-07-13 11:12:021647 // Ignore the pending receiver because it's not clear how to handle
1648 // notifications about content security (e.g., mixed contents and certificate
1649 // errors) on service workers. Generally these notifications are routed to the
1650 // ancestor frame's WebContents like dedicated workers, but service workers
1651 // don't have the ancestor frame.
1652 map->Add<blink::mojom::ContentSecurityNotifier>(base::DoNothing());
Oksana Zhuravlova3f3295d2020-03-06 21:43:071653
Oksana Zhuravlova9d0c3e32019-11-19 05:10:071654 // static binders
Tal Pressman0c2342892020-12-11 06:37:571655 map->Add<blink::mojom::FileUtilitiesHost>(
Tal Pressmane2123a8e2021-07-21 09:11:131656 base::BindRepeating(&BindFileUtilitiesHost, host));
Mario Sanchez Pradabaa893732019-09-30 22:10:171657 map->Add<shape_detection::mojom::BarcodeDetectionProvider>(
Aldo Culquicondored054b92025-07-02 19:13:381658 &BindBarcodeDetectionProvider);
Mario Sanchez Pradabaa893732019-09-30 22:10:171659 map->Add<shape_detection::mojom::FaceDetectionProvider>(
Aldo Culquicondored054b92025-07-02 19:13:381660 &BindFaceDetectionProvider);
1661 map->Add<shape_detection::mojom::TextDetection>(&BindTextDetection);
1662 map->Add<ukm::mojom::UkmRecorderFactory>(&BindUkmRecorderFactory);
Yutaka Hirano492c93d2019-11-05 11:28:031663
Oksana Zhuravlova9d0c3e32019-11-19 05:10:071664 // worker host binders
Hubert Chao0c32c1ab2025-08-22 13:06:101665 map->Add<blink::mojom::WebSocketConnector>(base::BindRepeating(
1666 &ServiceWorkerHost::CreateWebSocketConnector, base::Unretained(host)));
Adam Ricee98a22322021-04-27 08:26:261667 map->Add<blink::mojom::WebTransportConnector>(base::BindRepeating(
1668 &ServiceWorkerHost::CreateWebTransportConnector, base::Unretained(host)));
arthursonzognib59742e2020-03-11 12:19:201669 map->Add<blink::mojom::CacheStorage>(base::BindRepeating(
Hiroki Nakagawa593b6f52020-05-25 03:10:251670 &ServiceWorkerHost::BindCacheStorage, base::Unretained(host)));
Mythri A25d7bdd2021-06-15 11:20:481671 map->Add<blink::mojom::CodeCacheHost>(base::BindRepeating(
1672 &ServiceWorkerHost::CreateCodeCacheHost, base::Unretained(host)));
Andrew Williams61e816d2021-11-01 04:41:041673 map->Add<blink::mojom::BroadcastChannelProvider>(
1674 base::BindRepeating(&ServiceWorkerHost::CreateBroadcastChannelProvider,
1675 base::Unretained(host)));
janiceliu2457d49d2024-07-09 18:15:571676 map->Add<blink::mojom::BlobURLStore>(base::BindRepeating(
1677 &ServiceWorkerHost::CreateBlobUrlStoreProvider, base::Unretained(host)));
Matt Menke6751f662020-12-01 05:44:001678 map->Add<blink::mojom::ReportingServiceProxy>(base::BindRepeating(
1679 &CreateReportingServiceProxyForServiceWorker, base::Unretained(host)));
Jack Hsiehd38699b2022-07-01 16:25:581680#if !BUILDFLAG(IS_ANDROID)
Andrew Rayskiyfa93b82742025-02-11 10:24:161681 map->Add<blink::mojom::DirectSocketsService>(base::BindRepeating(
1682 [](ServiceWorkerHost* host,
1683 mojo::PendingReceiver<blink::mojom::DirectSocketsService> receiver) {
1684 DirectSocketsServiceImpl::CreateForServiceWorker(*host->version(),
1685 std::move(receiver));
1686 },
1687 base::Unretained(host)));
Jack Hsiehd38699b2022-07-01 16:25:581688 map->Add<blink::mojom::HidService>(base::BindRepeating(
1689 &ServiceWorkerHost::BindHidService, base::Unretained(host)));
1690#endif
Evan Stade88ef22322022-09-12 21:19:091691 map->Add<blink::mojom::BucketManagerHost>(base::BindRepeating(
1692 &ServiceWorkerHost::CreateBucketManagerHost, base::Unretained(host)));
Matt Reynolds033387d2022-10-07 20:59:371693 map->Add<blink::mojom::WebUsbService>(base::BindRepeating(
1694 &ServiceWorkerHost::BindUsbService, base::Unretained(host)));
Joshua Bellbc43ccf2025-03-05 23:21:221695 if (base::FeatureList::IsEnabled(
1696 webnn::mojom::features::kWebMachineLearningNeuralNetwork)) {
1697 map->Add<webnn::mojom::WebNNContextProvider>(base::BindRepeating(
1698 &BindWebNNContextProviderForWorker<ServiceWorkerHost>,
1699 base::Unretained(host)));
1700 }
Fergal Dalyb810d692024-11-22 04:07:231701 if (base::FeatureList::IsEnabled(blink::features::kBuiltInAIAPI)) {
Mingyu Lei3cb40d602024-06-14 04:38:191702 map->Add<blink::mojom::AIManager>(base::BindRepeating(
1703 &ServiceWorkerHost::BindAIManager, base::Unretained(host)));
1704 }
Tsuyoshi Horo5f067a2a2024-12-06 12:01:441705 if (base::FeatureList::IsEnabled(blink::features::kTranslationAPI)) {
1706 map->Add<blink::mojom::TranslationManager>(base::BindRepeating(
1707 [](ServiceWorkerHost* host,
1708 mojo::PendingReceiver<blink::mojom::TranslationManager> receiver) {
1709 if (auto* process_host = static_cast<RenderProcessHostImpl*>(
1710 RenderProcessHost::FromID(host->worker_process_id()))) {
1711 GetContentClient()->browser()->BindTranslationManager(
Christine Hollingswortha1142ee2025-06-26 14:55:261712 process_host, process_host->GetBrowserContext(), host,
Tsuyoshi Horo5f067a2a2024-12-06 12:01:441713 host->GetBucketStorageKey().origin(), std::move(receiver));
1714 }
1715 },
1716 base::Unretained(host)));
1717 }
Jiacheng Guoc62e3c022025-01-10 08:37:571718 if (base::FeatureList::IsEnabled(blink::features::kLanguageDetectionAPI)) {
1719 map->Add<language_detection::mojom::ContentLanguageDetectionDriver>(
1720 base::BindRepeating(
1721 [](ServiceWorkerHost* host,
1722 mojo::PendingReceiver<
1723 language_detection::mojom::ContentLanguageDetectionDriver>
1724 receiver) {
1725 if (auto* process_host = static_cast<RenderProcessHostImpl*>(
1726 RenderProcessHost::FromID(host->worker_process_id()))) {
1727 GetContentClient()->browser()->BindLanguageDetectionDriver(
1728 process_host->GetBrowserContext(), host,
1729 std::move(receiver));
1730 }
1731 },
1732 base::Unretained(host)));
1733 }
Oksana Zhuravlova9d0c3e32019-11-19 05:10:071734
Kyra Seevers9e566022021-09-01 15:49:251735 // RenderProcessHost binders
Oksana Zhuravlova9d0c3e32019-11-19 05:10:071736 map->Add<media::mojom::VideoDecodePerfHistory>(BindServiceWorkerReceiver(
Victor Costandb4002e2020-03-25 19:09:031737 &RenderProcessHostImpl::BindVideoDecodePerfHistory, host));
Johannes Kron98aca4022022-02-18 21:15:241738 map->Add<media::mojom::WebrtcVideoPerfHistory>(BindServiceWorkerReceiver(
1739 &RenderProcessHostImpl::BindWebrtcVideoPerfHistory, host));
Tal Pressmand0c2fd82021-01-08 03:08:101740 map->Add<blink::mojom::PushMessaging>(BindServiceWorkerReceiver(
1741 &RenderProcessHostImpl::BindPushMessaging, host));
Matt Falkenhagen8f68c202019-08-16 04:40:341742}
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571743
1744void PopulateBinderMapWithContext(
Hiroki Nakagawa593b6f52020-05-25 03:10:251745 ServiceWorkerHost* host,
Julie Jeongeun Kime58b0f42021-04-22 05:33:281746 mojo::BinderMapWithContext<const ServiceWorkerVersionBaseInfo&>* map) {
Matt Falkenhagendb5d03e2021-09-28 10:14:211747 DCHECK_CURRENTLY_ON(BrowserThread::UI);
Matt Falkenhagen8f68c202019-08-16 04:40:341748
Oksana Zhuravlova0235d7bd2019-11-19 06:40:541749 // static binders
Hiroki Nakagawa593b6f52020-05-25 03:10:251750 // Use a task runner if ServiceWorkerHost lives on the IO thread, as
1751 // CreateForWorker() needs to be called on the UI thread.
Asami Doia99b5fd52020-12-01 04:15:241752 map->Add<blink::mojom::BackgroundFetchService>(
Rayan Kansofd260c292021-10-12 15:05:101753 base::BindRepeating(&BackgroundFetchServiceImpl::CreateForWorker,
1754 host->GetNetworkIsolationKey()));
Asami Doia99b5fd52020-12-01 04:15:241755 map->Add<blink::mojom::ContentIndexService>(
Aldo Culquicondored054b92025-07-02 19:13:381756 &ContentIndexServiceImpl::CreateForWorker);
Asami Doia99b5fd52020-12-01 04:15:241757 map->Add<blink::mojom::CookieStore>(
Aldo Culquicondored054b92025-07-02 19:13:381758 &CookieStoreManager::BindReceiverForWorker);
Oksana Zhuravlova0235d7bd2019-11-19 06:40:541759
Kyra Seevers9e566022021-09-01 15:49:251760 // RenderProcessHost binders taking an origin
Oksana Zhuravlova0235d7bd2019-11-19 06:40:541761 map->Add<payments::mojom::PaymentManager>(BindServiceWorkerReceiverForOrigin(
Victor Costandb4002e2020-03-25 19:09:031762 &RenderProcessHostImpl::CreatePaymentManagerForOrigin, host));
Oksana Zhuravlova0235d7bd2019-11-19 06:40:541763 map->Add<blink::mojom::PermissionService>(BindServiceWorkerReceiverForOrigin(
Victor Costandb4002e2020-03-25 19:09:031764 &RenderProcessHostImpl::CreatePermissionService, host));
Miyoung Shin58d0b6c2019-12-03 07:38:181765 map->Add<network::mojom::RestrictedCookieManager>(
Dylan Cutler0d2654e62021-10-05 16:34:511766 BindServiceWorkerReceiverForStorageKey(
Victor Costandb4002e2020-03-25 19:09:031767 &RenderProcessHostImpl::BindRestrictedCookieManagerForServiceWorker,
Miyoung Shin58d0b6c2019-12-03 07:38:181768 host));
Rayan Kanso2b1096c2021-09-21 09:49:141769 map->Add<blink::mojom::OneShotBackgroundSyncService>(
1770 BindServiceWorkerReceiverForOrigin(
1771 &RenderProcessHostImpl::CreateOneShotSyncService, host));
1772 map->Add<blink::mojom::PeriodicBackgroundSyncService>(
1773 BindServiceWorkerReceiverForOrigin(
1774 &RenderProcessHostImpl::CreatePeriodicSyncService, host));
Oksana Zhuravlova0235d7bd2019-11-19 06:40:541775
Kyra Seevers9e566022021-09-01 15:49:251776 // RenderProcessHost binders taking a storage key
Mingyu Lei0fe8df72022-12-16 06:44:481777 map->Add<blink::mojom::IDBFactory>(
Abhishek Shanthkumar7aee48b2024-06-24 15:02:471778 BindServiceWorkerReceiverForStorageKeyAndBucketContext(
Mingyu Lei0fe8df72022-12-16 06:44:481779 &RenderProcessHostImpl::BindIndexedDB, host));
Kyra Seevers9e566022021-09-01 15:49:251780 map->Add<blink::mojom::FileSystemAccessManager>(
1781 BindServiceWorkerReceiverForStorageKey(
1782 &RenderProcessHostImpl::BindFileSystemAccessManager, host));
Joshua Hoodbd47013d2022-01-06 19:45:041783 map->Add<blink::mojom::LockManager>(BindServiceWorkerReceiverForStorageKey(
1784 &RenderProcessHostImpl::CreateLockManager, host));
Marijn Kruisselbrink60589022022-05-03 19:54:181785 map->Add<blink::mojom::QuotaManagerHost>(
1786 BindServiceWorkerReceiverForStorageKey(
1787 &RenderProcessHostImpl::BindQuotaManagerHost, host));
Mingyu Lei0ece2ab2022-10-28 11:58:541788 map->Add<blink::mojom::NotificationService>(BindNotificationService(host));
Daniel Brinkers9004610c2023-10-23 15:27:511789 map->Add<blink::mojom::FileBackedBlobFactory>(
1790 BindServiceWorkerReceiverForOrigin(
1791 &RenderProcessHostImpl::BindFileBackedBlobFactory, host));
Julie Jeongeun Kime58b0f42021-04-22 05:33:281792
Giovanni Ortuño Urquidi5d63257b2022-07-08 04:01:071793 // This is called when `host` is constructed. ServiceWorkerVersion, which
1794 // constructs `host`, checks that context() is not null and also uses
1795 // BrowserContext right after constructing `host`, so this is safe.
1796 BrowserContext* browser_context =
1797 host->version()->context()->wrapper()->browser_context();
1798
Giovanni Ortuño Urquidifc39f142022-09-26 05:05:091799 const auto service_worker_version_info = host->version()->GetInfo();
1800
Julie Jeongeun Kime58b0f42021-04-22 05:33:281801 // Give the embedder a chance to register binders.
1802 GetContentClient()
1803 ->browser()
Giovanni Ortuño Urquidifc39f142022-09-26 05:05:091804 ->RegisterBrowserInterfaceBindersForServiceWorker(
1805 browser_context, service_worker_version_info, map);
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571806}
1807
Hiroki Nakagawa593b6f52020-05-25 03:10:251808void PopulateBinderMap(ServiceWorkerHost* host, mojo::BinderMap* map) {
Matt Falkenhagendb5d03e2021-09-28 10:14:211809 DCHECK_CURRENTLY_ON(BrowserThread::UI);
Oksana Zhuravlovad4bbeec2019-08-13 21:43:571810 PopulateServiceWorkerBinders(host, map);
Oksana Zhuravlovaceb2cef52019-08-09 01:09:591811}
1812
Oksana Zhuravlovafee097c2019-07-26 17:01:301813} // namespace internal
Ken Rockot05499cf2019-12-12 05:22:541814
Johann165093e32020-11-18 04:25:301815void OverrideBatteryMonitorBinderForTesting(BatteryMonitorBinder binder) {
1816 internal::GetBatteryMonitorBinderOverride() = std::move(binder);
1817}
1818
Ken Rockot05499cf2019-12-12 05:22:541819void OverrideVibrationManagerBinderForTesting(VibrationManagerBinder binder) {
1820 internal::GetVibrationManagerBinderOverride() = std::move(binder);
1821}
1822
Matt Falkenhagen8f68c202019-08-16 04:40:341823} // namespace content