| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef SERVICES_SERVICE_MANAGER_BACKGROUND_BACKGROUND_SERVICE_MANAGER_H_ | 5 #ifndef SERVICES_SERVICE_MANAGER_BACKGROUND_BACKGROUND_SERVICE_MANAGER_H_ |
| 6 #define SERVICES_SERVICE_MANAGER_BACKGROUND_BACKGROUND_SERVICE_MANAGER_H_ | 6 #define SERVICES_SERVICE_MANAGER_BACKGROUND_BACKGROUND_SERVICE_MANAGER_H_ |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <vector> | |
| 10 | 9 |
| 11 #include "base/macros.h" | 10 #include "base/macros.h" |
| 12 #include "mojo/public/cpp/bindings/interface_request.h" | 11 #include "base/threading/thread.h" |
| 13 #include "services/catalog/store.h" | 12 #include "services/service_manager/public/cpp/identity.h" |
| 13 #include "services/service_manager/public/interfaces/connector.mojom.h" |
| 14 #include "services/service_manager/public/interfaces/service.mojom.h" | 14 #include "services/service_manager/public/interfaces/service.mojom.h" |
| 15 #include "services/service_manager/runner/host/service_process_launcher.h" | 15 #include "services/service_manager/runner/host/service_process_launcher.h" |
| 16 | 16 |
| 17 namespace base { |
| 18 class Value; |
| 19 class WaitableEvent; |
| 20 } |
| 21 |
| 17 namespace service_manager { | 22 namespace service_manager { |
| 18 | 23 |
| 24 class Context; |
| 19 class ServiceManager; | 25 class ServiceManager; |
| 20 | 26 |
| 21 // BackgroundServiceManager starts up a Service Manager on a background thread, | 27 // BackgroundServiceManager runs a Service Manager on a dedicated background |
| 22 // and | 28 // thread. |
| 23 // destroys the thread in the destructor. Once created use CreateApplication() | |
| 24 // to obtain an InterfaceRequest for the Application. The InterfaceRequest can | |
| 25 // then be bound to an ApplicationImpl. | |
| 26 class BackgroundServiceManager { | 29 class BackgroundServiceManager { |
| 27 public: | 30 public: |
| 28 struct InitParams { | 31 BackgroundServiceManager( |
| 29 InitParams(); | 32 service_manager::ServiceProcessLauncher::Delegate* launcher_delegate, |
| 30 ~InitParams(); | 33 std::unique_ptr<base::Value> catalog_contents); |
| 31 | |
| 32 ServiceProcessLauncher::Delegate* | |
| 33 service_process_launcher_delegate = nullptr; | |
| 34 | |
| 35 // If true the edk is initialized. | |
| 36 bool init_edk = true; | |
| 37 }; | |
| 38 | |
| 39 BackgroundServiceManager(); | |
| 40 ~BackgroundServiceManager(); | 34 ~BackgroundServiceManager(); |
| 41 | 35 |
| 42 // Starts the background service manager. |command_line_switches| are | 36 // Creates a service instance for |identity|. This is intended for use by the |
| 43 // additional | 37 // Service Manager's embedder to register instances directly, without |
| 44 // switches applied to any processes spawned by this call. | 38 // requiring a Connector. |
| 45 void Init(std::unique_ptr<InitParams> init_params); | 39 // |
| 46 | 40 // |pid_receiver_request| may be null, in which case the service manager |
| 47 // Obtains an InterfaceRequest for the specified name. | 41 // assumes the new service is running in this process. |
| 48 mojom::ServiceRequest CreateServiceRequest(const std::string& name); | 42 void RegisterService(const Identity& identity, |
| 49 | 43 mojom::ServicePtr service, |
| 50 // Use to do processing on the thread running the Service Manager. The | 44 mojom::PIDReceiverRequest pid_receiver_request); |
| 51 // callback is supplied a pointer to the Service Manager. The callback does | |
| 52 // *not* own the Service Manager. | |
| 53 using ServiceManagerThreadCallback = base::Callback<void(ServiceManager*)>; | |
| 54 void ExecuteOnServiceManagerThread( | |
| 55 const ServiceManagerThreadCallback& callback); | |
| 56 | 45 |
| 57 private: | 46 private: |
| 58 class MojoThread; | 47 void InitializeOnBackgroundThread( |
| 48 service_manager::ServiceProcessLauncher::Delegate* launcher_delegate, |
| 49 std::unique_ptr<base::Value> catalog_contents); |
| 50 void ShutDownOnBackgroundThread(base::WaitableEvent* done_event); |
| 51 void RegisterServiceOnBackgroundThread( |
| 52 const Identity& identity, |
| 53 mojom::ServicePtrInfo service_info, |
| 54 mojom::PIDReceiverRequest pid_receiver_request); |
| 59 | 55 |
| 60 std::unique_ptr<MojoThread> thread_; | 56 base::Thread background_thread_; |
| 57 |
| 58 // The ServiceManager context. Must only be used on the background thread. |
| 59 std::unique_ptr<Context> context_; |
| 61 | 60 |
| 62 DISALLOW_COPY_AND_ASSIGN(BackgroundServiceManager); | 61 DISALLOW_COPY_AND_ASSIGN(BackgroundServiceManager); |
| 63 }; | 62 }; |
| 64 | 63 |
| 65 } // namespace service_manager | 64 } // namespace service_manager |
| 66 | 65 |
| 67 #endif // SERVICES_SERVICE_MANAGER_BACKGROUND_BACKGROUND_SERVICE_MANAGER_H_ | 66 #endif // SERVICES_SERVICE_MANAGER_BACKGROUND_BACKGROUND_SERVICE_MANAGER_H_ |
| OLD | NEW |