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