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