1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_DEVICE_UMA_H_
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define CHROME_BROWSER_CHROMEOS_DEVICE_UMA_H_
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/basictypes.h"
9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/events/platform/platform_event_observer.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochtemplate <typename T> struct DefaultSingletonTraits;
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace chromeos {
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// A class to record devices' input event details via the UMA system
16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass DeviceUMA : public ui::PlatformEventObserver {
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Getting instance starts the class automatically if it hasn't been
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // started before.
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  static DeviceUMA* GetInstance();
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void Stop();
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  friend struct DefaultSingletonTraits<DeviceUMA>;
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DeviceUMA();
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~DeviceUMA();
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // ui::PlatformEventObserver:
31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void WillProcessEvent(const ui::PlatformEvent& event) OVERRIDE;
32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void DidProcessEvent(const ui::PlatformEvent& event) OVERRIDE;
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Check CrOS touchpad events to see if the metrics gesture is present
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  void CheckTouchpadEvent(XEvent* event);
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Check the incoming events for interesting patterns that we care about.
38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  void CheckIncomingEvent(XEvent* event);
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  bool stopped_;
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(DeviceUMA);
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace chromeos
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif  // CHROME_BROWSER_CHROMEOS_DEVICE_UMA_H_
48