1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file.
4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#ifndef UI_EVENTS_EVENT_REWRITER_H_
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define UI_EVENTS_EVENT_REWRITER_H_
7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/memory/scoped_ptr.h"
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/events/events_export.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace ui {
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass Event;
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Return status of EventRewriter operations; see that class below.
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochenum EventRewriteStatus {
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Nothing was done; no rewritten event returned. Pass the original
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // event to later rewriters, or send it to the EventProcessor if this
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // was the final rewriter.
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EVENT_REWRITE_CONTINUE,
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // The event has been rewritten. Send the rewritten event to the
23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // EventProcessor instead of the original event (without sending
24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // either to any later rewriters).
25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EVENT_REWRITE_REWRITTEN,
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // The event should be discarded, neither passing it to any later
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // rewriters nor sending it to the EventProcessor.
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EVENT_REWRITE_DISCARD,
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // The event has been rewritten. As for EVENT_REWRITE_REWRITTEN,
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // send the rewritten event to the EventProcessor instead of the
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // original event (without sending either to any later rewriters).
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // In addition the rewriter has one or more additional new events
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // to be retrieved using |NextDispatchEvent()| and sent to the
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // EventProcessor.
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EVENT_REWRITE_DISPATCH_ANOTHER,
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// EventRewriter provides a mechanism for Events to be rewritten
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// before being dispatched from EventSource to EventProcessor.
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass EVENTS_EXPORT EventRewriter {
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual ~EventRewriter() {}
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Potentially rewrites (replaces) an event, or requests it be discarded.
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // or discards an event. If the rewriter wants to rewrite an event, and
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // dispatch another event once the rewritten event is dispatched, it should
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // return EVENT_REWRITE_DISPATCH_ANOTHER, and return the next event to
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // dispatch from |NextDispatchEvent()|.
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual EventRewriteStatus RewriteEvent(
52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      const Event& event,
53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      scoped_ptr<Event>* rewritten_event) = 0;
54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Supplies an additional event to be dispatched. It is only valid to
56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // call this after the immediately previous call to |RewriteEvent()|
57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // or |NextDispatchEvent()| has returned EVENT_REWRITE_DISPATCH_ANOTHER.
58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Should only return either EVENT_REWRITE_REWRITTEN or
59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // EVENT_REWRITE_DISPATCH_ANOTHER; otherwise the previous call should not
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // have returned EVENT_REWRITE_DISPATCH_ANOTHER.
61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual EventRewriteStatus NextDispatchEvent(
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      const Event& last_event,
63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      scoped_ptr<Event>* new_event) = 0;
64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}  // namespace ui
67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif  // UI_EVENTS_EVENT_REWRITER_H_
69