1// Copyright 2013 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.
4
5#ifndef UI_EVENTS_EVENT_SOURCE_H_
6#define UI_EVENTS_EVENT_SOURCE_H_
7
8#include <vector>
9
10#include "ui/events/event_dispatcher.h"
11#include "ui/events/events_export.h"
12
13namespace ui {
14
15class Event;
16class EventProcessor;
17class EventRewriter;
18
19// EventSource receives events from the native platform (e.g. X11, win32 etc.)
20// and sends the events to an EventProcessor.
21class EVENTS_EXPORT EventSource {
22 public:
23  EventSource();
24  virtual ~EventSource();
25
26  virtual EventProcessor* GetEventProcessor() = 0;
27
28  // Adds a rewriter to modify events before they are sent to the
29  // EventProcessor. The rewriter must be explicitly removed from the
30  // EventSource before the rewriter is destroyed. The EventSource
31  // does not take ownership of the rewriter.
32  void AddEventRewriter(EventRewriter* rewriter);
33  void RemoveEventRewriter(EventRewriter* rewriter);
34
35 protected:
36  EventDispatchDetails SendEventToProcessor(Event* event);
37
38 private:
39  friend class EventSourceTestApi;
40
41  typedef std::vector<EventRewriter*> EventRewriterList;
42  EventDispatchDetails DeliverEventToProcessor(Event* event);
43  EventRewriterList rewriter_list_;
44  DISALLOW_COPY_AND_ASSIGN(EventSource);
45};
46
47}  // namespace ui
48
49#endif // UI_EVENTS_EVENT_SOURCE_H_
50