| Index: base/message_loop/message_pump_mac.mm
|
| diff --git a/base/message_loop/message_pump_mac.mm b/base/message_loop/message_pump_mac.mm
|
| index 25aac17f2672c78b503f6bd9aa35b8be95a6bcc3..0ab9ab7c467de5128be33444db018ce73d369f7d 100644
|
| --- a/base/message_loop/message_pump_mac.mm
|
| +++ b/base/message_loop/message_pump_mac.mm
|
| @@ -23,8 +23,44 @@
|
| #import <AppKit/AppKit.h>
|
| #endif // !defined(OS_IOS)
|
|
|
| +namespace base {
|
| +
|
| namespace {
|
|
|
| +void CFRunLoopAddSourceToAllModes(CFRunLoopRef rl, CFRunLoopSourceRef source) {
|
| + CFRunLoopAddSource(rl, source, kCFRunLoopCommonModes);
|
| + CFRunLoopAddSource(rl, source, kMessageLoopExclusiveRunLoopMode);
|
| +}
|
| +
|
| +void CFRunLoopRemoveSourceFromAllModes(CFRunLoopRef rl,
|
| + CFRunLoopSourceRef source) {
|
| + CFRunLoopRemoveSource(rl, source, kCFRunLoopCommonModes);
|
| + CFRunLoopRemoveSource(rl, source, kMessageLoopExclusiveRunLoopMode);
|
| +}
|
| +
|
| +void CFRunLoopAddTimerToAllModes(CFRunLoopRef rl, CFRunLoopTimerRef timer) {
|
| + CFRunLoopAddTimer(rl, timer, kCFRunLoopCommonModes);
|
| + CFRunLoopAddTimer(rl, timer, kMessageLoopExclusiveRunLoopMode);
|
| +}
|
| +
|
| +void CFRunLoopRemoveTimerFromAllModes(CFRunLoopRef rl,
|
| + CFRunLoopTimerRef timer) {
|
| + CFRunLoopRemoveTimer(rl, timer, kCFRunLoopCommonModes);
|
| + CFRunLoopRemoveTimer(rl, timer, kMessageLoopExclusiveRunLoopMode);
|
| +}
|
| +
|
| +void CFRunLoopAddObserverToAllModes(CFRunLoopRef rl,
|
| + CFRunLoopObserverRef observer) {
|
| + CFRunLoopAddObserver(rl, observer, kCFRunLoopCommonModes);
|
| + CFRunLoopAddObserver(rl, observer, kMessageLoopExclusiveRunLoopMode);
|
| +}
|
| +
|
| +void CFRunLoopRemoveObserverFromAllModes(CFRunLoopRef rl,
|
| + CFRunLoopObserverRef observer) {
|
| + CFRunLoopRemoveObserver(rl, observer, kCFRunLoopCommonModes);
|
| + CFRunLoopRemoveObserver(rl, observer, kMessageLoopExclusiveRunLoopMode);
|
| +}
|
| +
|
| void NoOp(void* info) {
|
| }
|
|
|
| @@ -66,7 +102,9 @@ void SetTimerTolerance(CFRunLoopTimerRef timer, CFTimeInterval tolerance) {
|
|
|
| } // namespace
|
|
|
| -namespace base {
|
| +// static
|
| +const CFStringRef kMessageLoopExclusiveRunLoopMode =
|
| + CFSTR("kMessageLoopExclusiveRunLoopMode");
|
|
|
| // A scoper for autorelease pools created from message pump run loops.
|
| // Avoids dirtying up the ScopedNSAutoreleasePool interface for the rare
|
| @@ -124,9 +162,7 @@ class MessagePumpInstrumentation {
|
| 0, // order
|
| &MessagePumpInstrumentation::TimerFired,
|
| &timer_context));
|
| - CFRunLoopAddTimer(CFRunLoopGetCurrent(),
|
| - timer_,
|
| - kCFRunLoopCommonModes);
|
| + CFRunLoopAddTimerToAllModes(CFRunLoopGetCurrent(), timer_);
|
| }
|
|
|
| // Used to track kCFRunLoopEntry.
|
| @@ -332,7 +368,7 @@ MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase()
|
| 0, // priority
|
| RunDelayedWorkTimer,
|
| &timer_context);
|
| - CFRunLoopAddTimer(run_loop_, delayed_work_timer_, kCFRunLoopCommonModes);
|
| + CFRunLoopAddTimerToAllModes(run_loop_, delayed_work_timer_);
|
|
|
| CFRunLoopSourceContext source_context = CFRunLoopSourceContext();
|
| source_context.info = this;
|
| @@ -340,20 +376,19 @@ MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase()
|
| work_source_ = CFRunLoopSourceCreate(NULL, // allocator
|
| 1, // priority
|
| &source_context);
|
| - CFRunLoopAddSource(run_loop_, work_source_, kCFRunLoopCommonModes);
|
| + CFRunLoopAddSourceToAllModes(run_loop_, work_source_);
|
|
|
| source_context.perform = RunIdleWorkSource;
|
| idle_work_source_ = CFRunLoopSourceCreate(NULL, // allocator
|
| 2, // priority
|
| &source_context);
|
| - CFRunLoopAddSource(run_loop_, idle_work_source_, kCFRunLoopCommonModes);
|
| + CFRunLoopAddSourceToAllModes(run_loop_, idle_work_source_);
|
|
|
| source_context.perform = RunNestingDeferredWorkSource;
|
| nesting_deferred_work_source_ = CFRunLoopSourceCreate(NULL, // allocator
|
| 0, // priority
|
| &source_context);
|
| - CFRunLoopAddSource(run_loop_, nesting_deferred_work_source_,
|
| - kCFRunLoopCommonModes);
|
| + CFRunLoopAddSourceToAllModes(run_loop_, nesting_deferred_work_source_);
|
|
|
| CFRunLoopObserverContext observer_context = CFRunLoopObserverContext();
|
| observer_context.info = this;
|
| @@ -364,7 +399,7 @@ MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase()
|
| 0, // priority
|
| StartOrEndWaitObserver,
|
| &observer_context);
|
| - CFRunLoopAddObserver(run_loop_, pre_wait_observer_, kCFRunLoopCommonModes);
|
| + CFRunLoopAddObserverToAllModes(run_loop_, pre_wait_observer_);
|
|
|
| pre_source_observer_ = CFRunLoopObserverCreate(NULL, // allocator
|
| kCFRunLoopBeforeSources,
|
| @@ -372,7 +407,7 @@ MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase()
|
| 0, // priority
|
| PreSourceObserver,
|
| &observer_context);
|
| - CFRunLoopAddObserver(run_loop_, pre_source_observer_, kCFRunLoopCommonModes);
|
| + CFRunLoopAddObserverToAllModes(run_loop_, pre_source_observer_);
|
|
|
| enter_exit_observer_ = CFRunLoopObserverCreate(NULL, // allocator
|
| kCFRunLoopEntry |
|
| @@ -381,36 +416,32 @@ MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase()
|
| 0, // priority
|
| EnterExitObserver,
|
| &observer_context);
|
| - CFRunLoopAddObserver(run_loop_, enter_exit_observer_, kCFRunLoopCommonModes);
|
| + CFRunLoopAddObserverToAllModes(run_loop_, enter_exit_observer_);
|
| }
|
|
|
| // Ideally called on the run loop thread. If other run loops were running
|
| // lower on the run loop thread's stack when this object was created, the
|
| // same number of run loops must be running when this object is destroyed.
|
| MessagePumpCFRunLoopBase::~MessagePumpCFRunLoopBase() {
|
| - CFRunLoopRemoveObserver(run_loop_, enter_exit_observer_,
|
| - kCFRunLoopCommonModes);
|
| + CFRunLoopRemoveObserverFromAllModes(run_loop_, enter_exit_observer_);
|
| CFRelease(enter_exit_observer_);
|
|
|
| - CFRunLoopRemoveObserver(run_loop_, pre_source_observer_,
|
| - kCFRunLoopCommonModes);
|
| + CFRunLoopRemoveObserverFromAllModes(run_loop_, pre_source_observer_);
|
| CFRelease(pre_source_observer_);
|
|
|
| - CFRunLoopRemoveObserver(run_loop_, pre_wait_observer_,
|
| - kCFRunLoopCommonModes);
|
| + CFRunLoopRemoveObserverFromAllModes(run_loop_, pre_wait_observer_);
|
| CFRelease(pre_wait_observer_);
|
|
|
| - CFRunLoopRemoveSource(run_loop_, nesting_deferred_work_source_,
|
| - kCFRunLoopCommonModes);
|
| + CFRunLoopRemoveSourceFromAllModes(run_loop_, nesting_deferred_work_source_);
|
| CFRelease(nesting_deferred_work_source_);
|
|
|
| - CFRunLoopRemoveSource(run_loop_, idle_work_source_, kCFRunLoopCommonModes);
|
| + CFRunLoopRemoveSourceFromAllModes(run_loop_, idle_work_source_);
|
| CFRelease(idle_work_source_);
|
|
|
| - CFRunLoopRemoveSource(run_loop_, work_source_, kCFRunLoopCommonModes);
|
| + CFRunLoopRemoveSourceFromAllModes(run_loop_, work_source_);
|
| CFRelease(work_source_);
|
|
|
| - CFRunLoopRemoveTimer(run_loop_, delayed_work_timer_, kCFRunLoopCommonModes);
|
| + CFRunLoopRemoveTimerFromAllModes(run_loop_, delayed_work_timer_);
|
| CFRelease(delayed_work_timer_);
|
|
|
| CFRelease(run_loop_);
|
| @@ -799,11 +830,11 @@ MessagePumpNSRunLoop::MessagePumpNSRunLoop()
|
| quit_source_ = CFRunLoopSourceCreate(NULL, // allocator
|
| 0, // priority
|
| &source_context);
|
| - CFRunLoopAddSource(run_loop(), quit_source_, kCFRunLoopCommonModes);
|
| + CFRunLoopAddSourceToAllModes(run_loop(), quit_source_);
|
| }
|
|
|
| MessagePumpNSRunLoop::~MessagePumpNSRunLoop() {
|
| - CFRunLoopRemoveSource(run_loop(), quit_source_, kCFRunLoopCommonModes);
|
| + CFRunLoopRemoveSourceFromAllModes(run_loop(), quit_source_);
|
| CFRelease(quit_source_);
|
| }
|
|
|
|
|