blob: 3785735721b6a6717a7684ad182ce317d0bebaff [file] [log] [blame]
James Cookb0bf8e82017-04-09 17:01:441// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ash/mojo_interface_factory.h"
6
7#include <utility>
8
9#include "ash/accelerators/accelerator_controller.h"
Qiang Xu0133ccb2017-11-13 23:32:0610#include "ash/accessibility/accessibility_controller.h"
Jiaquan He4b48f912018-03-01 03:59:3911#include "ash/app_list/app_list_controller_impl.h"
James Cookb0bf8e82017-04-09 17:01:4412#include "ash/cast_config_controller.h"
Scott Violetd64dac12017-06-02 21:50:0813#include "ash/display/ash_display_controller.h"
Vladislav Kaznacheev1fa1eff2017-10-12 16:39:0114#include "ash/highlighter/highlighter_controller.h"
James Cookfdee0242017-06-20 14:14:0015#include "ash/ime/ime_controller.h"
Jacob Dufaultffd9b0d2017-11-15 23:07:1616#include "ash/login/login_screen_controller.h"
Ahmed Fakhry4bf3f742018-02-06 17:33:3617#include "ash/magnifier/docked_magnifier_controller.h"
James Cookb0bf8e82017-04-09 17:01:4418#include "ash/media_controller.h"
Evan Stade04c18d02017-10-20 20:53:2219#include "ash/message_center/message_center_controller.h"
Scott Violet3c554ae2017-12-13 02:25:4120#include "ash/metrics/time_to_first_present_recorder.h"
James Cookb0bf8e82017-04-09 17:01:4421#include "ash/new_window_controller.h"
Vladislav Kaznacheev92edf62e2017-10-13 22:08:0122#include "ash/note_taking_controller.h"
Ahmed Fakhry4af48e42018-02-28 17:45:3823#include "ash/public/cpp/ash_features.h"
Evan Stade48768f42017-10-10 05:23:3024#include "ash/public/cpp/ash_switches.h"
James Cookb0bf8e82017-04-09 17:01:4425#include "ash/session/session_controller.h"
26#include "ash/shelf/shelf_controller.h"
27#include "ash/shell.h"
28#include "ash/shell_delegate.h"
29#include "ash/shutdown_controller.h"
30#include "ash/system/locale/locale_notification_controller.h"
31#include "ash/system/network/vpn_list.h"
afakhryee3e2fa2017-06-15 17:45:4132#include "ash/system/night_light/night_light_controller.h"
James Cookb0bf8e82017-04-09 17:01:4433#include "ash/system/tray/system_tray_controller.h"
tbarzicc78da1ff92017-05-08 20:46:1534#include "ash/tray_action/tray_action.h"
Yue Lia33960a2017-11-01 22:06:0735#include "ash/voice_interaction/voice_interaction_controller.h"
James Cookb0bf8e82017-04-09 17:01:4436#include "ash/wallpaper/wallpaper_controller.h"
Xiaoqian Dai44f67e872018-02-22 18:15:4137#include "ash/wm/splitview/split_view_controller.h"
Mitsuru Oshima0e9b7a62017-07-19 18:23:0338#include "ash/wm/tablet_mode/tablet_mode_controller.h"
James Cookb0bf8e82017-04-09 17:01:4439#include "base/bind.h"
James Cook625eff02017-10-11 20:44:3140#include "base/lazy_instance.h"
Gabriel Charette5ff87ce2017-05-16 18:03:4541#include "base/single_thread_task_runner.h"
James Cookb0bf8e82017-04-09 17:01:4442#include "ui/app_list/presenter/app_list.h"
43
44namespace ash {
James Cook625eff02017-10-11 20:44:3145namespace mojo_interface_factory {
James Cookb0bf8e82017-04-09 17:01:4446namespace {
47
James Cook625eff02017-10-11 20:44:3148base::LazyInstance<RegisterInterfacesCallback>::Leaky
49 g_register_interfaces_callback = LAZY_INSTANCE_INITIALIZER;
50
James Cookb0bf8e82017-04-09 17:01:4451void BindAcceleratorControllerRequestOnMainThread(
52 mojom::AcceleratorControllerRequest request) {
53 Shell::Get()->accelerator_controller()->BindRequest(std::move(request));
54}
55
Qiang Xu0133ccb2017-11-13 23:32:0656void BindAccessibilityControllerRequestOnMainThread(
57 mojom::AccessibilityControllerRequest request) {
58 Shell::Get()->accessibility_controller()->BindRequest(std::move(request));
59}
60
Jiaquan He4b48f912018-03-01 03:59:3961void BindAppListRequestOnMainThread(app_list::mojom::AppListRequest request) {
James Cookb0bf8e82017-04-09 17:01:4462 Shell::Get()->app_list()->BindRequest(std::move(request));
63}
64
Jiaquan He4b48f912018-03-01 03:59:3965void BindAppListControllerRequestOnMainThread(
66 mojom::AppListControllerRequest request) {
67 Shell::Get()->app_list_controller()->BindRequest(std::move(request));
68}
69
Scott Violetd64dac12017-06-02 21:50:0870void BindAshDisplayControllerRequestOnMainThread(
Scott Violetd64dac12017-06-02 21:50:0871 mojom::AshDisplayControllerRequest request) {
72 Shell::Get()->ash_display_controller()->BindRequest(std::move(request));
73}
74
Evan Stade04c18d02017-10-20 20:53:2275void BindAshMessageCenterControllerRequestOnMainThread(
76 mojom::AshMessageCenterControllerRequest request) {
77 Shell::Get()->message_center_controller()->BindRequest(std::move(request));
78}
79
Ben Goodger21ada1e2017-07-19 14:53:0180void BindCastConfigOnMainThread(mojom::CastConfigRequest request) {
James Cookb0bf8e82017-04-09 17:01:4481 Shell::Get()->cast_config()->BindRequest(std::move(request));
82}
83
Ahmed Fakhry4bf3f742018-02-06 17:33:3684void BindDockedMagnifierControllerRequestOnMainThread(
85 mojom::DockedMagnifierControllerRequest request) {
86 Shell::Get()->docked_magnifier_controller()->BindRequest(std::move(request));
87}
88
Vladislav Kaznacheev1fa1eff2017-10-12 16:39:0189void BindHighlighterControllerRequestOnMainThread(
90 mojom::HighlighterControllerRequest request) {
91 Shell::Get()->highlighter_controller()->BindRequest(std::move(request));
92}
93
Ben Goodger21ada1e2017-07-19 14:53:0194void BindImeControllerRequestOnMainThread(mojom::ImeControllerRequest request) {
James Cookfdee0242017-06-20 14:14:0095 Shell::Get()->ime_controller()->BindRequest(std::move(request));
96}
97
James Cookb0bf8e82017-04-09 17:01:4498void BindLocaleNotificationControllerOnMainThread(
99 mojom::LocaleNotificationControllerRequest request) {
100 Shell::Get()->locale_notification_controller()->BindRequest(
101 std::move(request));
102}
103
Jacob Dufaultffd9b0d2017-11-15 23:07:16104void BindLockScreenRequestOnMainThread(mojom::LoginScreenRequest request) {
105 Shell::Get()->login_screen_controller()->BindRequest(std::move(request));
xiaoyinh2bbdd102017-05-18 23:29:42106}
107
James Cookb0bf8e82017-04-09 17:01:44108void BindMediaControllerRequestOnMainThread(
109 mojom::MediaControllerRequest request) {
110 Shell::Get()->media_controller()->BindRequest(std::move(request));
111}
112
113void BindNewWindowControllerRequestOnMainThread(
114 mojom::NewWindowControllerRequest request) {
115 Shell::Get()->new_window_controller()->BindRequest(std::move(request));
116}
117
afakhryee3e2fa2017-06-15 17:45:41118void BindNightLightControllerRequestOnMainThread(
afakhryee3e2fa2017-06-15 17:45:41119 mojom::NightLightControllerRequest request) {
120 Shell::Get()->night_light_controller()->BindRequest(std::move(request));
121}
122
Vladislav Kaznacheev92edf62e2017-10-13 22:08:01123void BindNoteTakingControllerRequestOnMainThread(
124 mojom::NoteTakingControllerRequest request) {
125 Shell::Get()->note_taking_controller()->BindRequest(std::move(request));
126}
127
Scott Violet3c554ae2017-12-13 02:25:41128void BindProcessCreationTimeRecorderOnMainThread(
129 mojom::ProcessCreationTimeRecorderRequest request) {
130 Shell::Get()->time_to_first_present_recorder()->Bind(std::move(request));
131}
132
James Cookb0bf8e82017-04-09 17:01:44133void BindSessionControllerRequestOnMainThread(
134 mojom::SessionControllerRequest request) {
135 Shell::Get()->session_controller()->BindRequest(std::move(request));
136}
137
Ben Goodger21ada1e2017-07-19 14:53:01138void BindShelfRequestOnMainThread(mojom::ShelfControllerRequest request) {
James Cookb0bf8e82017-04-09 17:01:44139 Shell::Get()->shelf_controller()->BindRequest(std::move(request));
140}
141
142void BindShutdownControllerRequestOnMainThread(
143 mojom::ShutdownControllerRequest request) {
144 Shell::Get()->shutdown_controller()->BindRequest(std::move(request));
145}
146
Ben Goodger21ada1e2017-07-19 14:53:01147void BindSystemTrayRequestOnMainThread(mojom::SystemTrayRequest request) {
James Cookb0bf8e82017-04-09 17:01:44148 Shell::Get()->system_tray_controller()->BindRequest(std::move(request));
149}
150
Mitsuru Oshima63d3f2a2017-08-23 00:12:11151void BindTabletModeRequestOnMainThread(
James Cookbf962f32017-09-21 19:48:44152 mojom::TabletModeControllerRequest request) {
Mitsuru Oshima0e9b7a62017-07-19 18:23:03153 Shell::Get()->tablet_mode_controller()->BindRequest(std::move(request));
James Cookb0bf8e82017-04-09 17:01:44154}
155
Ben Goodger21ada1e2017-07-19 14:53:01156void BindTrayActionRequestOnMainThread(mojom::TrayActionRequest request) {
tbarzicc78da1ff92017-05-08 20:46:15157 Shell::Get()->tray_action()->BindRequest(std::move(request));
158}
159
Yue Lia33960a2017-11-01 22:06:07160void BindVoiceInteractionControllerRequestOnMainThread(
161 mojom::VoiceInteractionControllerRequest request) {
162 Shell::Get()->voice_interaction_controller()->BindRequest(std::move(request));
163}
164
Ben Goodger21ada1e2017-07-19 14:53:01165void BindVpnListRequestOnMainThread(mojom::VpnListRequest request) {
James Cookb0bf8e82017-04-09 17:01:44166 Shell::Get()->vpn_list()->BindRequest(std::move(request));
167}
168
169void BindWallpaperRequestOnMainThread(
James Cookb0bf8e82017-04-09 17:01:44170 mojom::WallpaperControllerRequest request) {
171 Shell::Get()->wallpaper_controller()->BindRequest(std::move(request));
172}
173
Xiaoqian Dai44f67e872018-02-22 18:15:41174void BindSplitViewRequestOnMainThread(
175 mojom::SplitViewControllerRequest request) {
176 Shell::Get()->split_view_controller()->BindRequest(std::move(request));
177}
178
James Cookb0bf8e82017-04-09 17:01:44179} // namespace
180
James Cookb0bf8e82017-04-09 17:01:44181void RegisterInterfaces(
182 service_manager::BinderRegistry* registry,
183 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner) {
184 registry->AddInterface(
185 base::Bind(&BindAcceleratorControllerRequestOnMainThread),
186 main_thread_task_runner);
Qiang Xu0133ccb2017-11-13 23:32:06187 registry->AddInterface(
188 base::Bind(&BindAccessibilityControllerRequestOnMainThread),
189 main_thread_task_runner);
James Cookb0bf8e82017-04-09 17:01:44190 registry->AddInterface(base::Bind(&BindAppListRequestOnMainThread),
191 main_thread_task_runner);
Jiaquan He4b48f912018-03-01 03:59:39192 registry->AddInterface(base::Bind(&BindAppListControllerRequestOnMainThread),
193 main_thread_task_runner);
Scott Violetd64dac12017-06-02 21:50:08194 registry->AddInterface(
195 base::Bind(&BindAshDisplayControllerRequestOnMainThread),
196 main_thread_task_runner);
Evan Stade04c18d02017-10-20 20:53:22197 registry->AddInterface(
198 base::Bind(&BindAshMessageCenterControllerRequestOnMainThread),
199 main_thread_task_runner);
James Cookb0bf8e82017-04-09 17:01:44200 registry->AddInterface(base::Bind(&BindCastConfigOnMainThread),
201 main_thread_task_runner);
Ahmed Fakhry4af48e42018-02-28 17:45:38202 if (features::IsDockedMagnifierEnabled()) {
Ahmed Fakhry4bf3f742018-02-06 17:33:36203 registry->AddInterface(
204 base::BindRepeating(&BindDockedMagnifierControllerRequestOnMainThread),
205 main_thread_task_runner);
206 }
James Cookb0bf8e82017-04-09 17:01:44207 registry->AddInterface(
Vladislav Kaznacheev1fa1eff2017-10-12 16:39:01208 base::Bind(&BindHighlighterControllerRequestOnMainThread),
209 main_thread_task_runner);
210 registry->AddInterface(base::Bind(&BindImeControllerRequestOnMainThread),
211 main_thread_task_runner);
212 registry->AddInterface(
James Cookb0bf8e82017-04-09 17:01:44213 base::Bind(&BindLocaleNotificationControllerOnMainThread),
214 main_thread_task_runner);
xiaoyinh2bbdd102017-05-18 23:29:42215 registry->AddInterface(base::Bind(&BindLockScreenRequestOnMainThread),
216 main_thread_task_runner);
James Cookb0bf8e82017-04-09 17:01:44217 registry->AddInterface(base::Bind(&BindMediaControllerRequestOnMainThread),
218 main_thread_task_runner);
219 registry->AddInterface(
220 base::Bind(&BindNewWindowControllerRequestOnMainThread),
221 main_thread_task_runner);
Evan Stade48768f42017-10-10 05:23:30222 if (switches::IsNightLightEnabled()) {
afakhryee3e2fa2017-06-15 17:45:41223 registry->AddInterface(
224 base::Bind(&BindNightLightControllerRequestOnMainThread),
225 main_thread_task_runner);
226 }
Vladislav Kaznacheev92edf62e2017-10-13 22:08:01227 registry->AddInterface(
228 base::Bind(&BindNoteTakingControllerRequestOnMainThread),
229 main_thread_task_runner);
Scott Violet3c554ae2017-12-13 02:25:41230 registry->AddInterface(
231 base::Bind(&BindProcessCreationTimeRecorderOnMainThread),
232 main_thread_task_runner);
James Cookb0bf8e82017-04-09 17:01:44233 registry->AddInterface(base::Bind(&BindSessionControllerRequestOnMainThread),
234 main_thread_task_runner);
235 registry->AddInterface(base::Bind(&BindShelfRequestOnMainThread),
236 main_thread_task_runner);
237 registry->AddInterface(base::Bind(&BindShutdownControllerRequestOnMainThread),
238 main_thread_task_runner);
239 registry->AddInterface(base::Bind(&BindSystemTrayRequestOnMainThread),
240 main_thread_task_runner);
Mitsuru Oshima63d3f2a2017-08-23 00:12:11241 registry->AddInterface(base::Bind(&BindTabletModeRequestOnMainThread),
James Cookb0bf8e82017-04-09 17:01:44242 main_thread_task_runner);
tbarzicc78da1ff92017-05-08 20:46:15243 registry->AddInterface(base::Bind(&BindTrayActionRequestOnMainThread),
244 main_thread_task_runner);
Yue Lia33960a2017-11-01 22:06:07245 registry->AddInterface(
246 base::Bind(&BindVoiceInteractionControllerRequestOnMainThread),
247 main_thread_task_runner);
James Cookb0bf8e82017-04-09 17:01:44248 registry->AddInterface(base::Bind(&BindVpnListRequestOnMainThread),
249 main_thread_task_runner);
250 registry->AddInterface(base::Bind(&BindWallpaperRequestOnMainThread),
251 main_thread_task_runner);
Xiaoqian Dai44f67e872018-02-22 18:15:41252 registry->AddInterface(base::Bind(&BindSplitViewRequestOnMainThread),
253 main_thread_task_runner);
James Cook625eff02017-10-11 20:44:31254
255 // Inject additional optional interfaces.
256 if (g_register_interfaces_callback.Get()) {
257 std::move(g_register_interfaces_callback.Get())
258 .Run(registry, main_thread_task_runner);
259 }
260}
261
262void SetRegisterInterfacesCallback(RegisterInterfacesCallback callback) {
263 g_register_interfaces_callback.Get() = std::move(callback);
James Cookb0bf8e82017-04-09 17:01:44264}
265
266} // namespace mojo_interface_factory
267
268} // namespace ash