blob: fe158efecca3a55cbd7e62dedd2139224b1508f2 [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
Jiaquan He4b48f912018-03-01 03:59:399#include "ash/app_list/app_list_controller_impl.h"
David Black8c19e83e2018-12-10 23:35:1010#include "ash/assistant/assistant_alarm_timer_controller.h"
David Black00fdce32018-05-10 20:59:1411#include "ash/assistant/assistant_controller.h"
David Black3e154a722018-12-18 21:34:0612#include "ash/assistant/assistant_notification_controller.h"
David Blackc5c3e342018-11-27 21:20:4013#include "ash/assistant/assistant_screen_context_controller.h"
14#include "ash/assistant/assistant_setup_controller.h"
Steven Bennetts2a9b4382018-04-26 23:41:1915#include "ash/display/cros_display_config.h"
James Cookfdee0242017-06-20 14:14:0016#include "ash/ime/ime_controller.h"
Jacob Dufaultffd9b0d2017-11-15 23:07:1617#include "ash/login/login_screen_controller.h"
Xiyuan Xiad03bd2f2019-06-05 22:00:4918#include "ash/media/media_controller_impl.h"
Ahmed Fakhry4af48e42018-02-28 17:45:3819#include "ash/public/cpp/ash_features.h"
Jun Mukai6ce2a0602019-06-04 23:23:1020#include "ash/public/cpp/voice_interaction_controller.h"
James Cookb0bf8e82017-04-09 17:01:4421#include "ash/shell.h"
22#include "ash/shell_delegate.h"
James Cookb0bf8e82017-04-09 17:01:4423#include "ash/system/network/vpn_list.h"
tbarzicc78da1ff92017-05-08 20:46:1524#include "ash/tray_action/tray_action.h"
James Cookb0bf8e82017-04-09 17:01:4425#include "base/bind.h"
James Cook625eff02017-10-11 20:44:3126#include "base/lazy_instance.h"
Gabriel Charette5ff87ce2017-05-16 18:03:4527#include "base/single_thread_task_runner.h"
James Cook8ab85f32019-08-05 18:30:1128#include "chromeos/constants/chromeos_features.h"
James Cookb0bf8e82017-04-09 17:01:4429
30namespace ash {
James Cook625eff02017-10-11 20:44:3131namespace mojo_interface_factory {
James Cookb0bf8e82017-04-09 17:01:4432namespace {
33
James Cook625eff02017-10-11 20:44:3134base::LazyInstance<RegisterInterfacesCallback>::Leaky
35 g_register_interfaces_callback = LAZY_INSTANCE_INITIALIZER;
36
David Black8c19e83e2018-12-10 23:35:1037void BindAssistantAlarmTimerControllerRequestOnMainThread(
38 mojom::AssistantAlarmTimerControllerRequest request) {
Ken Rockotc20c60112019-06-20 22:54:1639 if (Shell::HasInstance()) {
40 Shell::Get()->assistant_controller()->alarm_timer_controller()->BindRequest(
41 std::move(request));
42 }
David Black8c19e83e2018-12-10 23:35:1043}
44
David Black00fdce32018-05-10 20:59:1445void BindAssistantControllerRequestOnMainThread(
46 mojom::AssistantControllerRequest request) {
Ken Rockotc20c60112019-06-20 22:54:1647 if (Shell::HasInstance())
48 Shell::Get()->assistant_controller()->BindRequest(std::move(request));
David Black00fdce32018-05-10 20:59:1449}
50
David Black3e154a722018-12-18 21:34:0651void BindAssistantNotificationControllerRequestOnMainThread(
52 mojom::AssistantNotificationControllerRequest request) {
Ken Rockotc20c60112019-06-20 22:54:1653 if (Shell::HasInstance()) {
54 Shell::Get()
55 ->assistant_controller()
56 ->notification_controller()
57 ->BindRequest(std::move(request));
58 }
David Black3e154a722018-12-18 21:34:0659}
60
David Blackc5c3e342018-11-27 21:20:4061void BindAssistantScreenContextControllerRequestOnMainThread(
62 mojom::AssistantScreenContextControllerRequest request) {
Ken Rockotc20c60112019-06-20 22:54:1663 if (Shell::HasInstance()) {
64 Shell::Get()
65 ->assistant_controller()
66 ->screen_context_controller()
67 ->BindRequest(std::move(request));
68 }
David Blackc5c3e342018-11-27 21:20:4069}
70
Muyuan Lied7c76402018-08-07 23:59:0071void BindAssistantVolumeControlRequestOnMainThread(
72 mojom::AssistantVolumeControlRequest request) {
Ken Rockotc20c60112019-06-20 22:54:1673 if (Shell::HasInstance())
74 Shell::Get()->assistant_controller()->BindRequest(std::move(request));
Muyuan Lied7c76402018-08-07 23:59:0075}
76
Steven Bennetts2a9b4382018-04-26 23:41:1977void BindCrosDisplayConfigControllerRequestOnMainThread(
78 mojom::CrosDisplayConfigControllerRequest request) {
Ken Rockotc20c60112019-06-20 22:54:1679 if (Shell::HasInstance())
80 Shell::Get()->cros_display_config()->BindRequest(std::move(request));
Steven Bennetts2a9b4382018-04-26 23:41:1981}
82
Ben Goodger21ada1e2017-07-19 14:53:0183void BindImeControllerRequestOnMainThread(mojom::ImeControllerRequest request) {
Ken Rockotc20c60112019-06-20 22:54:1684 if (Shell::HasInstance())
85 Shell::Get()->ime_controller()->BindRequest(std::move(request));
James Cookfdee0242017-06-20 14:14:0086}
87
Ben Goodger21ada1e2017-07-19 14:53:0188void BindTrayActionRequestOnMainThread(mojom::TrayActionRequest request) {
Ken Rockotc20c60112019-06-20 22:54:1689 if (Shell::HasInstance())
90 Shell::Get()->tray_action()->BindRequest(std::move(request));
tbarzicc78da1ff92017-05-08 20:46:1591}
92
Yue Lia33960a2017-11-01 22:06:0793void BindVoiceInteractionControllerRequestOnMainThread(
94 mojom::VoiceInteractionControllerRequest request) {
Ken Rockotc20c60112019-06-20 22:54:1695 if (Shell::HasInstance())
96 VoiceInteractionController::Get()->BindRequest(std::move(request));
Yue Lia33960a2017-11-01 22:06:0797}
98
Ben Goodger21ada1e2017-07-19 14:53:0199void BindVpnListRequestOnMainThread(mojom::VpnListRequest request) {
Ken Rockotc20c60112019-06-20 22:54:16100 if (Shell::HasInstance())
101 Shell::Get()->vpn_list()->BindRequest(std::move(request));
James Cookb0bf8e82017-04-09 17:01:44102}
103
James Cookb0bf8e82017-04-09 17:01:44104} // namespace
105
James Cookb0bf8e82017-04-09 17:01:44106void RegisterInterfaces(
107 service_manager::BinderRegistry* registry,
108 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner) {
James Cook8ab85f32019-08-05 18:30:11109 if (chromeos::features::IsAssistantEnabled()) {
David Blacke8f815042018-03-28 18:59:37110 registry->AddInterface(
David Black8c19e83e2018-12-10 23:35:10111 base::BindRepeating(
112 &BindAssistantAlarmTimerControllerRequestOnMainThread),
113 main_thread_task_runner);
114 registry->AddInterface(
Muyuan Lid48e2e12018-07-17 21:45:54115 base::BindRepeating(&BindAssistantControllerRequestOnMainThread),
David Blacke8f815042018-03-28 18:59:37116 main_thread_task_runner);
Muyuan Lied7c76402018-08-07 23:59:00117 registry->AddInterface(
David Blackc5c3e342018-11-27 21:20:40118 base::BindRepeating(
David Black3e154a722018-12-18 21:34:06119 &BindAssistantNotificationControllerRequestOnMainThread),
120 main_thread_task_runner);
121 registry->AddInterface(
122 base::BindRepeating(
David Blackc5c3e342018-11-27 21:20:40123 &BindAssistantScreenContextControllerRequestOnMainThread),
124 main_thread_task_runner);
125 registry->AddInterface(
Muyuan Lied7c76402018-08-07 23:59:00126 base::BindRepeating(&BindAssistantVolumeControlRequestOnMainThread),
127 main_thread_task_runner);
David Blacke8f815042018-03-28 18:59:37128 }
Scott Violetd64dac12017-06-02 21:50:08129 registry->AddInterface(
Steven Bennetts2a9b4382018-04-26 23:41:19130 base::BindRepeating(&BindCrosDisplayConfigControllerRequestOnMainThread),
131 main_thread_task_runner);
132 registry->AddInterface(
Muyuan Lid48e2e12018-07-17 21:45:54133 base::BindRepeating(&BindImeControllerRequestOnMainThread),
James Cookb0bf8e82017-04-09 17:01:44134 main_thread_task_runner);
James Cookb0bf8e82017-04-09 17:01:44135 registry->AddInterface(
Muyuan Lid48e2e12018-07-17 21:45:54136 base::BindRepeating(&BindTrayActionRequestOnMainThread),
137 main_thread_task_runner);
138 registry->AddInterface(
139 base::BindRepeating(&BindVoiceInteractionControllerRequestOnMainThread),
140 main_thread_task_runner);
141 registry->AddInterface(base::BindRepeating(&BindVpnListRequestOnMainThread),
James Cookb0bf8e82017-04-09 17:01:44142 main_thread_task_runner);
James Cook625eff02017-10-11 20:44:31143
144 // Inject additional optional interfaces.
145 if (g_register_interfaces_callback.Get()) {
146 std::move(g_register_interfaces_callback.Get())
147 .Run(registry, main_thread_task_runner);
148 }
149}
150
151void SetRegisterInterfacesCallback(RegisterInterfacesCallback callback) {
152 g_register_interfaces_callback.Get() = std::move(callback);
James Cookb0bf8e82017-04-09 17:01:44153}
154
155} // namespace mojo_interface_factory
156
157} // namespace ash