ipc/chromium/src/base/event_recorder.h

Wed, 31 Dec 2014 13:27:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 13:27:57 +0100
branch
TOR_BUG_3246
changeset 6
8bccb770b82d
permissions
-rw-r--r--

Ignore runtime configuration files generated during quality assurance.

     1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
     2 // Use of this source code is governed by a BSD-style license that can be
     3 // found in the LICENSE file.
     5 #ifndef BASE_EVENT_RECORDER_H_
     6 #define BASE_EVENT_RECORDER_H_
     8 #include <string>
     9 #if defined(OS_WIN)
    10 #include <windows.h>
    11 #endif
    12 #include "base/basictypes.h"
    14 class FilePath;
    16 namespace base {
    18 // A class for recording and playing back keyboard and mouse input events.
    19 //
    20 // Note - if you record events, and the playback with the windows in
    21 //        different sizes or positions, the playback will fail.  When
    22 //        recording and playing, you should move the relevant windows
    23 //        to constant sizes and locations.
    24 // TODO(mbelshe) For now this is a singleton.  I believe that this class
    25 //        could be easily modified to:
    26 //             support two simultaneous recorders
    27 //             be playing back events while already recording events.
    28 //        Why?  Imagine if the product had a "record a macro" feature.
    29 //        You might be recording globally, while recording or playing back
    30 //        a macro.  I don't think two playbacks make sense.
    31 class EventRecorder {
    32  public:
    33   // Get the singleton EventRecorder.
    34   // We can only handle one recorder/player at a time.
    35   static EventRecorder* current() {
    36     if (!current_)
    37       current_ = new EventRecorder();
    38     return current_;
    39   }
    41   // Starts recording events.
    42   // Will clobber the file if it already exists.
    43   // Returns true on success, or false if an error occurred.
    44   bool StartRecording(const FilePath& filename);
    46   // Stops recording.
    47   void StopRecording();
    49   // Is the EventRecorder currently recording.
    50   bool is_recording() const { return is_recording_; }
    52   // Plays events previously recorded.
    53   // Returns true on success, or false if an error occurred.
    54   bool StartPlayback(const FilePath& filename);
    56   // Stops playback.
    57   void StopPlayback();
    59   // Is the EventRecorder currently playing.
    60   bool is_playing() const { return is_playing_; }
    62 #if defined(OS_WIN)
    63   // C-style callbacks for the EventRecorder.
    64   // Used for internal purposes only.
    65   LRESULT RecordWndProc(int nCode, WPARAM wParam, LPARAM lParam);
    66   LRESULT PlaybackWndProc(int nCode, WPARAM wParam, LPARAM lParam);
    67 #endif
    69  private:
    70   // Create a new EventRecorder.  Events are saved to the file filename.
    71   // If the file already exists, it will be deleted before recording
    72   // starts.
    73   explicit EventRecorder()
    74       : is_recording_(false),
    75         is_playing_(false),
    76 #if defined(OS_WIN)
    77         journal_hook_(NULL),
    78         file_(NULL),
    79 #endif
    80         playback_first_msg_time_(0),
    81         playback_start_time_(0) {
    82   }
    83   ~EventRecorder();
    85   static EventRecorder* current_;  // Our singleton.
    87   bool is_recording_;
    88   bool is_playing_;
    89 #if defined(OS_WIN)
    90   HHOOK journal_hook_;
    91   FILE* file_;
    92   EVENTMSG playback_msg_;
    93 #endif
    94   int playback_first_msg_time_;
    95   int playback_start_time_;
    97   DISALLOW_EVIL_CONSTRUCTORS(EventRecorder);
    98 };
   100 }  // namespace base
   102 #endif // BASE_EVENT_RECORDER_H_

mercurial