1424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// found in the LICENSE file.
4424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
5424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#ifndef MEDIA_BASE_KEYBOARD_EVENT_COUNTER_H_
6424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#define MEDIA_BASE_KEYBOARD_EVENT_COUNTER_H_
7424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
8424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include <set>
9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
10424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/synchronization/lock.h"
11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "media/base/media_export.h"
12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_constants.h"
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h"
14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
15424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace media {
16424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This class tracks the total number of keypresses based on the OnKeyboardEvent
18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// calls it receives from the client.
19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Multiple key down events for the same key are counted as one keypress until
20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// the same key is released.
21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class MEDIA_EXPORT KeyboardEventCounter {
22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public:
23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  KeyboardEventCounter();
24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ~KeyboardEventCounter();
25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
26424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Resets the count to 0. Must be called on the same thread as
27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // OnKeyboardEvent.
28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void Reset();
29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Returns the total number of keypresses since its creation or last Reset()
31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // call. Can be called on any thread.
32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  size_t GetKeyPressCount() const;
33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // The client should call this method on key down or key up events.
35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Must be called on a single thread.
36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void OnKeyboardEvent(ui::EventType event, ui::KeyboardCode key_code);
37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private:
39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // The set of keys currently held down.
40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::set<ui::KeyboardCode> pressed_keys_;
41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  size_t total_key_presses_;
43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(KeyboardEventCounter);
45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)};
46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}  // namespace media
48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#endif  // MEDIA_BASE_KEYBOARD_EVENT_COUNTER_H_
50