| // Copyright 2016 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_SERVICE_MANAGER_BACKGROUND_SERVICE_MANAGER_H_ |
| #define SERVICES_SERVICE_MANAGER_BACKGROUND_SERVICE_MANAGER_H_ |
| |
| #include <memory> |
| #include <vector> |
| |
| #include "base/macros.h" |
| #include "base/threading/thread.h" |
| #include "build/build_config.h" |
| #include "services/service_manager/public/cpp/manifest.h" |
| #include "services/service_manager/public/mojom/connector.mojom.h" |
| #include "services/service_manager/public/mojom/service.mojom.h" |
| |
| namespace base { |
| class WaitableEvent; |
| } |
| |
| namespace service_manager { |
| |
| class Identity; |
| class ServiceManager; |
| |
| // BackgroundServiceManager is a helper class that be can used to instantiate a |
| // ServiceManager instance on a dedicated background thread. This is only |
| // slightly more convenient than simply running your own background thread and |
| // instantiating ServiceManager there yourself. |
| // |
| // TODO(https://crbug.com/904240): Consider deleting this class since it has |
| // such limited use and is trivial to replicate. |
| class BackgroundServiceManager { |
| public: |
| explicit BackgroundServiceManager(const std::vector<Manifest>& manifests); |
| ~BackgroundServiceManager(); |
| |
| // Creates a service instance for |identity|. This is intended for use by the |
| // Service Manager's embedder to register instances directly, without |
| // requiring a Connector. |
| // |
| // |pid_receiver_request| may be null, in which case the service manager |
| // assumes the new service is running in this process. |
| void RegisterService(const Identity& identity, |
| mojom::ServicePtr service, |
| mojom::PIDReceiverRequest pid_receiver_request); |
| |
| private: |
| void InitializeOnBackgroundThread(const std::vector<Manifest>& manifests); |
| void ShutDownOnBackgroundThread(base::WaitableEvent* done_event); |
| void RegisterServiceOnBackgroundThread( |
| const Identity& identity, |
| mojom::ServicePtrInfo service_info, |
| mojom::PIDReceiverRequest pid_receiver_request); |
| |
| base::Thread background_thread_; |
| |
| // Must only be used on the background thread. |
| std::unique_ptr<ServiceManager> service_manager_; |
| |
| DISALLOW_COPY_AND_ASSIGN(BackgroundServiceManager); |
| }; |
| |
| } // namespace service_manager |
| |
| #endif // SERVICES_SERVICE_MANAGER_BACKGROUND_SERVICE_MANAGER_H_ |