// Copyright 2013 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 MEDIA_BASE_KEYBOARD_EVENT_COUNTER_H_
#define MEDIA_BASE_KEYBOARD_EVENT_COUNTER_H_

#include <set>

#include "base/synchronization/lock.h"
#include "media/base/media_export.h"
#include "ui/events/event_constants.h"
#include "ui/events/keycodes/keyboard_codes.h"

namespace media {

// This class tracks the total number of keypresses based on the OnKeyboardEvent
// calls it receives from the client.
// Multiple key down events for the same key are counted as one keypress until
// the same key is released.
class MEDIA_EXPORT KeyboardEventCounter {
 public:
  KeyboardEventCounter();
  ~KeyboardEventCounter();

  // Resets the count to 0. Must be called on the same thread as
  // OnKeyboardEvent.
  void Reset();

  // Returns the total number of keypresses since its creation or last Reset()
  // call. Can be called on any thread.
  size_t GetKeyPressCount() const;

  // The client should call this method on key down or key up events.
  // Must be called on a single thread.
  void OnKeyboardEvent(ui::EventType event, ui::KeyboardCode key_code);

 private:
  // The set of keys currently held down.
  std::set<ui::KeyboardCode> pressed_keys_;

  size_t total_key_presses_;

  DISALLOW_COPY_AND_ASSIGN(KeyboardEventCounter);
};

}  // namespace media

#endif  // MEDIA_BASE_KEYBOARD_EVENT_COUNTER_H_
