1// Copyright (c) 2012 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 BASE_MESSAGE_LOOP_MESSAGE_PUMP_OBSERVER_H
6#define BASE_MESSAGE_LOOP_MESSAGE_PUMP_OBSERVER_H
7
8#include "base/base_export.h"
9#include "base/event_types.h"
10
11namespace base {
12
13enum EventStatus {
14  EVENT_CONTINUE,    // The event should be dispatched as normal.
15#if defined(USE_X11)
16  EVENT_HANDLED      // The event should not be processed any farther.
17#endif
18};
19
20// A MessagePumpObserver is an object that receives global
21// notifications from the UI MessageLoop with MessagePumpWin or
22// MessagePumpAuraX11.
23//
24// NOTE: An Observer implementation should be extremely fast!
25//
26// For use with MessagePumpAuraX11, please see message_pump_glib.h for more
27// info about how this is invoked in this environment.
28class BASE_EXPORT MessagePumpObserver {
29 public:
30  // This method is called before processing a NativeEvent. If the
31  // method returns EVENT_HANDLED, it indicates the event has already
32  // been handled, so the event is not processed any farther. If the
33  // method returns EVENT_CONTINUE, the event dispatching proceeds as
34  // normal.
35  virtual EventStatus WillProcessEvent(const NativeEvent& event) = 0;
36
37  // This method is called after processing a message. This method
38  // will not be called if WillProcessEvent returns EVENT_HANDLED.
39  virtual void DidProcessEvent(const NativeEvent& event) = 0;
40
41 protected:
42  virtual ~MessagePumpObserver() {}
43};
44
45}  // namespace base
46
47#endif  // BASE_MESSAGE_LOOP_MESSAGE_PUMP_OBSERVER_H
48