// Copyright (c) 2011 The Chromium OS 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 CROS_DISKS_DEVICE_EVENT_MODERATOR_H_
#define CROS_DISKS_DEVICE_EVENT_MODERATOR_H_

#include <string>

#include <base/macros.h>

#include "cros-disks/device_event_queue.h"
#include "cros-disks/session_manager_observer_interface.h"

namespace cros_disks {

class DeviceEventDispatcherInterface;
class DeviceEventSourceInterface;

// A class for moderating device events by retrieving events from an event
// source and dispatching them through a dispatcher at appropriate moments.
//
// Device events are dispatched immediately only during an active user session.
// After a user session ends or the screen is locked, any received device
// event is temporarily queued and only dispatched after a new user session
// starts or the screen is unlocked. This is to minimize the chance of device
// insertion attacks when the system is not actively used.
class DeviceEventModerator : public SessionManagerObserverInterface {
 public:
  DeviceEventModerator(DeviceEventDispatcherInterface* event_dispatcher,
                       DeviceEventSourceInterface* event_source);

  virtual ~DeviceEventModerator() = default;

  // Dispatches all queued device events through the event dispatcher.
  void DispatchQueuedDeviceEvents();

  // Implements the SessionManagerObserverInterface interface to handle
  // the event when the screen is locked.
  virtual void OnScreenIsLocked();

  // Implements the SessionManagerObserverInterface interface to handle
  // the event when the screen is unlocked.
  virtual void OnScreenIsUnlocked();

  // Implements the SessionManagerObserverInterface interface to handle
  // the event when the session has been started.
  virtual void OnSessionStarted();

  // Implements the SessionManagerObserverInterface interface to handle
  // the event when the session has been stopped.
  virtual void OnSessionStopped();

  // Process the available device events from the event source.
  void ProcessDeviceEvents();

  bool is_event_queued() const { return is_event_queued_; }

 private:
  // An object that dispatches device events.
  DeviceEventDispatcherInterface* event_dispatcher_;

  // An object that queues up device events when the system is not active.
  DeviceEventQueue event_queue_;

  // An object from which device events are retrieved.
  DeviceEventSourceInterface* event_source_;

  // This variable is set to true if any new device event should be queued
  // instead of being dispatched immediately.
  bool is_event_queued_;

  DISALLOW_COPY_AND_ASSIGN(DeviceEventModerator);
};

}  // namespace cros_disks

#endif  // CROS_DISKS_DEVICE_EVENT_MODERATOR_H_
