// Copyright 2015 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 DEVICE_DEVICES_DEVICES_APP_H_ #define DEVICE_DEVICES_DEVICES_APP_H_ #include "base/cancelable_callback.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "mojo/application/public/cpp/application_delegate.h" #include "mojo/application/public/cpp/interface_factory.h" namespace base { class SequencedTaskRunner; } namespace mojo { class ApplicationImpl; } namespace device { namespace usb { class DeviceManager; } class DevicesApp : public mojo::ApplicationDelegate, public mojo::InterfaceFactory { public: explicit DevicesApp( scoped_refptr service_task_runner); ~DevicesApp() override; private: class USBServiceInitializer; // mojo::ApplicationDelegate: void Initialize(mojo::ApplicationImpl* app) override; bool ConfigureIncomingConnection( mojo::ApplicationConnection* connection) override; void Quit() override; // mojo::InterfaceFactory: void Create(mojo::ApplicationConnection* connection, mojo::InterfaceRequest request) override; // Mojo error handler to track device manager count. void OnConnectionError(); // Sets the app for destruction after a period of idle time. If any top-level // services (e.g. usb::DeviceManager) are bound before the timeout elapses, // it's canceled. void StartIdleTimer(); mojo::ApplicationImpl* app_impl_; scoped_ptr service_initializer_; scoped_refptr service_task_runner_; size_t active_device_manager_count_; // Callback used to shut down the app after a period of inactivity. base::CancelableClosure idle_timeout_callback_; DISALLOW_COPY_AND_ASSIGN(DevicesApp); }; } // naespace device #endif // DEVICE_DEVICES_DEVICES_APP_H_