// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef SERVICES_UI_SERVICE_H_ #define SERVICES_UI_SERVICE_H_ #include #include #include #include #include #include "base/macros.h" #include "components/discardable_memory/public/interfaces/discardable_shared_memory_manager.mojom.h" #include "services/service_manager/public/cpp/interface_factory.h" #include "services/service_manager/public/cpp/service.h" #include "services/service_manager/public/cpp/service_runner.h" #include "services/tracing/public/cpp/provider.h" #include "services/ui/ime/ime_registrar_impl.h" #include "services/ui/ime/ime_server_impl.h" #include "services/ui/input_devices/input_device_server.h" #include "services/ui/public/interfaces/accessibility_manager.mojom.h" #include "services/ui/public/interfaces/clipboard.mojom.h" #include "services/ui/public/interfaces/display_manager.mojom.h" #include "services/ui/public/interfaces/gpu.mojom.h" #include "services/ui/public/interfaces/ime/ime.mojom.h" #include "services/ui/public/interfaces/user_access_manager.mojom.h" #include "services/ui/public/interfaces/user_activity_monitor.mojom.h" #include "services/ui/public/interfaces/window_manager_window_tree_factory.mojom.h" #include "services/ui/public/interfaces/window_server_test.mojom.h" #include "services/ui/public/interfaces/window_tree.mojom.h" #include "services/ui/public/interfaces/window_tree_host.mojom.h" #include "services/ui/ws/platform_display_init_params.h" #include "services/ui/ws/user_id.h" #include "services/ui/ws/window_server_delegate.h" #if defined(USE_OZONE) #include "ui/ozone/public/client_native_pixmap_factory.h" #endif namespace discardable_memory { class DiscardableSharedMemoryManager; } namespace display { class ScreenManager; } namespace service_manager { class Connector; } namespace ui { class PlatformEventSource; namespace ws { class WindowServer; } class Service : public service_manager::Service, public ws::WindowServerDelegate, public service_manager::InterfaceFactory, public service_manager::InterfaceFactory, public service_manager::InterfaceFactory, public service_manager::InterfaceFactory, public service_manager::InterfaceFactory, public service_manager::InterfaceFactory, public service_manager::InterfaceFactory, public service_manager::InterfaceFactory, public service_manager::InterfaceFactory< mojom::WindowManagerWindowTreeFactory>, public service_manager::InterfaceFactory, public service_manager::InterfaceFactory, public service_manager::InterfaceFactory< discardable_memory::mojom::DiscardableSharedMemoryManager>, public service_manager::InterfaceFactory { public: Service(); ~Service() override; private: // Holds InterfaceRequests received before the first WindowTreeHost Display // has been established. struct PendingRequest; struct UserState; using UserIdToUserState = std::map>; void InitializeResources(service_manager::Connector* connector); // Returns the user specific state for the user id of |remote_identity|. // Service owns the return value. // TODO(sky): if we allow removal of user ids then we need to close anything // associated with the user (all incoming pipes...) on removal. UserState* GetUserState(const service_manager::Identity& remote_identity); void AddUserIfNecessary(const service_manager::Identity& remote_identity); // service_manager::Service: void OnStart() override; bool OnConnect(const service_manager::ServiceInfo& remote_info, service_manager::InterfaceRegistry* registry) override; // WindowServerDelegate: void StartDisplayInit() override; void OnFirstDisplayReady() override; void OnNoMoreDisplays() override; bool IsTestConfig() const override; // service_manager::InterfaceFactory // implementation. void Create(const service_manager::Identity& remote_identity, mojom::AccessibilityManagerRequest request) override; // service_manager::InterfaceFactory implementation. void Create(const service_manager::Identity& remote_identity, mojom::ClipboardRequest request) override; // service_manager::InterfaceFactory implementation. void Create(const service_manager::Identity& remote_identity, mojom::DisplayManagerRequest request) override; // service_manager::InterfaceFactory implementation. void Create(const service_manager::Identity& remote_identity, mojom::GpuRequest request) override; // service_manager::InterfaceFactory implementation. void Create(const service_manager::Identity& remote_identity, mojom::IMERegistrarRequest request) override; // service_manager::InterfaceFactory implementation. void Create(const service_manager::Identity& remote_identity, mojom::IMEServerRequest request) override; // service_manager::InterfaceFactory implementation. void Create(const service_manager::Identity& remote_identity, mojom::UserAccessManagerRequest request) override; // service_manager::InterfaceFactory // implementation. void Create(const service_manager::Identity& remote_identity, mojom::UserActivityMonitorRequest request) override; // service_manager::InterfaceFactory // implementation. void Create(const service_manager::Identity& remote_identity, mojom::WindowManagerWindowTreeFactoryRequest request) override; // service_manager::InterfaceFactory: void Create(const service_manager::Identity& remote_identity, mojom::WindowTreeFactoryRequest request) override; // service_manager::InterfaceFactory: void Create(const service_manager::Identity& remote_identity, mojom::WindowTreeHostFactoryRequest request) override; // service_manager::InterfaceFactory< // discardable_memory::mojom::DiscardableSharedMemoryManager>: void Create(const service_manager::Identity& remote_identity, discardable_memory::mojom::DiscardableSharedMemoryManagerRequest request) override; // service_manager::InterfaceFactory implementation. void Create(const service_manager::Identity& remote_identity, mojom::WindowServerTestRequest request) override; std::unique_ptr window_server_; std::unique_ptr event_source_; tracing::Provider tracing_; using PendingRequests = std::vector>; PendingRequests pending_requests_; UserIdToUserState user_id_to_user_state_; // Provides input-device information via Mojo IPC. Registers Mojo interfaces // and must outlive service_manager::InterfaceRegistry. InputDeviceServer input_device_server_; bool test_config_; #if defined(USE_OZONE) std::unique_ptr client_native_pixmap_factory_; #endif // Manages display hardware and handles display management. May register Mojo // interfaces and must outlive service_manager::InterfaceRegistry. std::unique_ptr screen_manager_; IMERegistrarImpl ime_registrar_; IMEServerImpl ime_server_; std::unique_ptr discardable_shared_memory_manager_; DISALLOW_COPY_AND_ASSIGN(Service); }; } // namespace ui #endif // SERVICES_UI_SERVICE_H_