// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef BASE_MESSAGE_PUMP_OBSERVER_H
#define BASE_MESSAGE_PUMP_OBSERVER_H

#include "base/base_export.h"
#include "base/event_types.h"

namespace base {

enum EventStatus {
  EVENT_CONTINUE,    // The event should be dispatched as normal.
#if defined(USE_X11)
  EVENT_HANDLED      // The event should not be processed any farther.
#endif
};

// A MessagePumpObserver is an object that receives global
// notifications from the UI MessageLoop with MessagePumpWin or
// MessagePumpAuraX11.
//
// NOTE: An Observer implementation should be extremely fast!
//
// For use with MessagePumpAuraX11, please see message_pump_glib.h for more
// info about how this is invoked in this environment.
class BASE_EXPORT MessagePumpObserver {
 public:
  // This method is called before processing a NativeEvent. If the
  // method returns EVENT_HANDLED, it indicates the event has already
  // been handled, so the event is not processed any farther. If the
  // method returns EVENT_CONTINUE, the event dispatching proceeds as
  // normal.
  virtual EventStatus WillProcessEvent(const NativeEvent& event) = 0;

  // This method is called after processing a message. This method
  // will not be called if WillProcessEvent returns EVENT_HANDLED.
  virtual void DidProcessEvent(const NativeEvent& event) = 0;

 protected:
  virtual ~MessagePumpObserver() {}
};

}  // namespace base

#endif  // BASE_MESSAGE_PUMP_OBSERVER_VIEWS_H
