// 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_MAC_SCOPED_SENDING_EVENT_H_
#define BASE_MAC_SCOPED_SENDING_EVENT_H_

#include "base/base_export.h"
#include "base/basictypes.h"
#include "base/memory/scoped_nsobject.h"
#include "base/message_pump_mac.h"

// Nested event loops can pump IPC messages, including
// script-initiated tab closes, which could release objects that the
// nested event loop might message.  CrAppProtocol defines how to ask
// the embedding NSApplication subclass if an event is currently being
// handled, in which case such closes are deferred to the top-level
// event loop.
//
// ScopedSendingEvent allows script-initiated event loops to work like
// a nested event loop, as such events do not arrive via -sendEvent:.
// CrAppControlProtocol lets ScopedSendingEvent tell the embedding
// NSApplication what to return from -handlingSendEvent.

@protocol CrAppControlProtocol<CrAppProtocol>
- (void)setHandlingSendEvent:(BOOL)handlingSendEvent;
@end

namespace base {
namespace mac {

class BASE_EXPORT ScopedSendingEvent {
 public:
  ScopedSendingEvent();
  ~ScopedSendingEvent();

 private:
  // The NSApp in control at the time the constructor was run, to be
  // sure the |handling_| setting is restored appropriately.
  NSObject<CrAppControlProtocol>* app_;
  BOOL handling_;  // Value of -[app_ handlingSendEvent] at construction.

  DISALLOW_COPY_AND_ASSIGN(ScopedSendingEvent);
};

}  // namespace mac
}  // namespace base

#endif  // BASE_MAC_SCOPED_SENDING_EVENT_H_
