Chromium Code Reviews| Index: services/device/device_service.cc |
| diff --git a/services/device/device_service.cc b/services/device/device_service.cc |
| index 27c020d1d42d39901ec9cc14c6682f6c350a5149..886691cb8968c1090ecfe05a0fe28261588a17c6 100644 |
| --- a/services/device/device_service.cc |
| +++ b/services/device/device_service.cc |
| @@ -8,12 +8,18 @@ |
| #include "base/memory/ptr_util.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/threading/thread_task_runner_handle.h" |
| +#include "device/power_monitor/power_monitor_message_broadcaster.h" |
| #include "device/time_zone_monitor/time_zone_monitor.h" |
| #include "services/service_manager/public/cpp/connection.h" |
| #include "services/service_manager/public/cpp/interface_registry.h" |
| namespace device { |
| +namespace { |
| +// Flag to guarantee device service has singleton instance. |
| +static bool g_service_instance_alive = false; |
|
blundell
2017/01/03 15:20:50
I wouldn't worry about this -- this is essentially
leonhsl(Using Gerrit)
2017/01/04 04:56:28
Done.
|
| +} |
| + |
| std::unique_ptr<service_manager::Service> CreateDeviceService( |
| scoped_refptr<base::SingleThreadTaskRunner> file_task_runner) { |
| return base::MakeUnique<DeviceService>(std::move(file_task_runner)); |
| @@ -21,19 +27,30 @@ std::unique_ptr<service_manager::Service> CreateDeviceService( |
| DeviceService::DeviceService( |
| scoped_refptr<base::SingleThreadTaskRunner> file_task_runner) |
| - : file_task_runner_(std::move(file_task_runner)) {} |
| + : file_task_runner_(std::move(file_task_runner)) { |
| + DCHECK(!g_service_instance_alive); |
| + g_service_instance_alive = true; |
| +} |
| -DeviceService::~DeviceService() {} |
| +DeviceService::~DeviceService() { |
| + g_service_instance_alive = false; |
| +} |
| void DeviceService::OnStart() {} |
| bool DeviceService::OnConnect(const service_manager::ServiceInfo& remote_info, |
| service_manager::InterfaceRegistry* registry) { |
| + registry->AddInterface<mojom::PowerMonitor>(this); |
| registry->AddInterface<mojom::TimeZoneMonitor>(this); |
| return true; |
| } |
| void DeviceService::Create(const service_manager::Identity& remote_identity, |
| + mojom::PowerMonitorRequest request) { |
| + PowerMonitorMessageBroadcaster::Create(std::move(request)); |
| +} |
| + |
| +void DeviceService::Create(const service_manager::Identity& remote_identity, |
| mojom::TimeZoneMonitorRequest request) { |
| if (!time_zone_monitor_) |
| time_zone_monitor_ = device::TimeZoneMonitor::Create(file_task_runner_); |