Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: base/message_loop/message_pump_mac.mm

Issue 2889293002: Filter run loop modes in message_pump_mac.mm (Closed)
Patch Set: selfnits Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "base/message_loop/message_pump_mac.h" 5 #import "base/message_loop/message_pump_mac.h"
6 6
7 #import <Foundation/Foundation.h> 7 #import <Foundation/Foundation.h>
8 8
9 #include <limits> 9 #include <limits>
10 10
(...skipping 26 matching lines...) Expand all
37 // Mode that only sees Chrome work sources. 37 // Mode that only sees Chrome work sources.
38 kMessageLoopExclusiveRunLoopMode, 38 kMessageLoopExclusiveRunLoopMode,
39 39
40 // Process work when NSMenus are fading out. 40 // Process work when NSMenus are fading out.
41 CFSTR("com.apple.hitoolbox.windows.windowfadingmode"), 41 CFSTR("com.apple.hitoolbox.windows.windowfadingmode"),
42 42
43 // Process work when AppKit is highlighting an item on the main menubar. 43 // Process work when AppKit is highlighting an item on the main menubar.
44 CFSTR("NSUnhighlightMenuRunLoopMode"), 44 CFSTR("NSUnhighlightMenuRunLoopMode"),
45 }; 45 };
46 46
47 void CFRunLoopAddSourceToAllModes(CFRunLoopRef rl, CFRunLoopSourceRef source) { 47 // Mask that determines which modes in |kAllModes| to use.
48 for (const CFStringRef& mode : kAllModes) 48 enum { kCommonModeMask = 0x1, kAllModesMask = ~0 };
49 CFRunLoopAddSource(rl, source, mode);
50 }
51
52 void CFRunLoopRemoveSourceFromAllModes(CFRunLoopRef rl,
53 CFRunLoopSourceRef source) {
54 for (const CFStringRef& mode : kAllModes)
55 CFRunLoopRemoveSource(rl, source, mode);
56 }
57
58 void CFRunLoopAddTimerToAllModes(CFRunLoopRef rl, CFRunLoopTimerRef timer) {
59 for (const CFStringRef& mode : kAllModes)
60 CFRunLoopAddTimer(rl, timer, mode);
61 }
62
63 void CFRunLoopRemoveTimerFromAllModes(CFRunLoopRef rl,
64 CFRunLoopTimerRef timer) {
65 for (const CFStringRef& mode : kAllModes)
66 CFRunLoopRemoveTimer(rl, timer, mode);
67 }
68
69 void CFRunLoopAddObserverToAllModes(CFRunLoopRef rl,
70 CFRunLoopObserverRef observer) {
71 for (const CFStringRef& mode : kAllModes)
72 CFRunLoopAddObserver(rl, observer, mode);
73 }
74
75 void CFRunLoopRemoveObserverFromAllModes(CFRunLoopRef rl,
76 CFRunLoopObserverRef observer) {
77 for (const CFStringRef& mode : kAllModes)
78 CFRunLoopRemoveObserver(rl, observer, mode);
79 }
80 49
81 void NoOp(void* info) { 50 void NoOp(void* info) {
82 } 51 }
83 52
84 const CFTimeInterval kCFTimeIntervalMax = 53 const CFTimeInterval kCFTimeIntervalMax =
85 std::numeric_limits<CFTimeInterval>::max(); 54 std::numeric_limits<CFTimeInterval>::max();
86 55
87 #if !defined(OS_IOS) 56 #if !defined(OS_IOS)
88 // Set to true if MessagePumpMac::Create() is called before NSApp is 57 // Set to true if MessagePumpMac::Create() is called before NSApp is
89 // initialized. Only accessed from the main thread. 58 // initialized. Only accessed from the main thread.
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 bool valid) { 158 bool valid) {
190 #if !defined(OS_IOS) 159 #if !defined(OS_IOS)
191 static bool can_invalidate_timers = CanInvalidateCFRunLoopTimers(); 160 static bool can_invalidate_timers = CanInvalidateCFRunLoopTimers();
192 if (can_invalidate_timers) { 161 if (can_invalidate_timers) {
193 __ChromeCFRunLoopTimerSetValid(timer, valid); 162 __ChromeCFRunLoopTimerSetValid(timer, valid);
194 } 163 }
195 #endif // !defined(OS_IOS) 164 #endif // !defined(OS_IOS)
196 } 165 }
197 166
198 // Must be called on the run loop thread. 167 // Must be called on the run loop thread.
199 MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase() 168 MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase(int mode_mask)
200 : delegate_(NULL), 169 : mode_mask_(mode_mask),
170 delegate_(NULL),
201 delayed_work_fire_time_(kCFTimeIntervalMax), 171 delayed_work_fire_time_(kCFTimeIntervalMax),
202 timer_slack_(base::TIMER_SLACK_NONE), 172 timer_slack_(base::TIMER_SLACK_NONE),
203 nesting_level_(0), 173 nesting_level_(0),
204 run_nesting_level_(0), 174 run_nesting_level_(0),
205 deepest_nesting_level_(0), 175 deepest_nesting_level_(0),
206 delegateless_work_(false), 176 delegateless_work_(false),
207 delegateless_idle_work_(false) { 177 delegateless_idle_work_(false) {
208 run_loop_ = CFRunLoopGetCurrent(); 178 run_loop_ = CFRunLoopGetCurrent();
209 CFRetain(run_loop_); 179 CFRetain(run_loop_);
210 180
211 // Set a repeating timer with a preposterous firing time and interval. The 181 // Set a repeating timer with a preposterous firing time and interval. The
212 // timer will effectively never fire as-is. The firing time will be adjusted 182 // timer will effectively never fire as-is. The firing time will be adjusted
213 // as needed when ScheduleDelayedWork is called. 183 // as needed when ScheduleDelayedWork is called.
214 CFRunLoopTimerContext timer_context = CFRunLoopTimerContext(); 184 CFRunLoopTimerContext timer_context = CFRunLoopTimerContext();
215 timer_context.info = this; 185 timer_context.info = this;
216 delayed_work_timer_ = CFRunLoopTimerCreate(NULL, // allocator 186 delayed_work_timer_ = CFRunLoopTimerCreate(NULL, // allocator
217 kCFTimeIntervalMax, // fire time 187 kCFTimeIntervalMax, // fire time
218 kCFTimeIntervalMax, // interval 188 kCFTimeIntervalMax, // interval
219 0, // flags 189 0, // flags
220 0, // priority 190 0, // priority
221 RunDelayedWorkTimer, 191 RunDelayedWorkTimer,
222 &timer_context); 192 &timer_context);
223 CFRunLoopAddTimerToAllModes(run_loop_, delayed_work_timer_); 193 InvokeForAllModes(&CFRunLoopAddTimer, delayed_work_timer_);
224 194
225 CFRunLoopSourceContext source_context = CFRunLoopSourceContext(); 195 CFRunLoopSourceContext source_context = CFRunLoopSourceContext();
226 source_context.info = this; 196 source_context.info = this;
227 source_context.perform = RunWorkSource; 197 source_context.perform = RunWorkSource;
228 work_source_ = CFRunLoopSourceCreate(NULL, // allocator 198 work_source_ = CFRunLoopSourceCreate(NULL, // allocator
229 1, // priority 199 1, // priority
230 &source_context); 200 &source_context);
231 CFRunLoopAddSourceToAllModes(run_loop_, work_source_); 201 InvokeForAllModes(&CFRunLoopAddSource, work_source_);
232 202
233 source_context.perform = RunIdleWorkSource; 203 source_context.perform = RunIdleWorkSource;
234 idle_work_source_ = CFRunLoopSourceCreate(NULL, // allocator 204 idle_work_source_ = CFRunLoopSourceCreate(NULL, // allocator
235 2, // priority 205 2, // priority
236 &source_context); 206 &source_context);
237 CFRunLoopAddSourceToAllModes(run_loop_, idle_work_source_); 207 InvokeForAllModes(&CFRunLoopAddSource, idle_work_source_);
238 208
239 source_context.perform = RunNestingDeferredWorkSource; 209 source_context.perform = RunNestingDeferredWorkSource;
240 nesting_deferred_work_source_ = CFRunLoopSourceCreate(NULL, // allocator 210 nesting_deferred_work_source_ = CFRunLoopSourceCreate(NULL, // allocator
241 0, // priority 211 0, // priority
242 &source_context); 212 &source_context);
243 CFRunLoopAddSourceToAllModes(run_loop_, nesting_deferred_work_source_); 213 InvokeForAllModes(&CFRunLoopAddSource, nesting_deferred_work_source_);
244 214
245 CFRunLoopObserverContext observer_context = CFRunLoopObserverContext(); 215 CFRunLoopObserverContext observer_context = CFRunLoopObserverContext();
246 observer_context.info = this; 216 observer_context.info = this;
247 pre_wait_observer_ = CFRunLoopObserverCreate(NULL, // allocator 217 pre_wait_observer_ = CFRunLoopObserverCreate(NULL, // allocator
248 kCFRunLoopBeforeWaiting, 218 kCFRunLoopBeforeWaiting,
249 true, // repeat 219 true, // repeat
250 0, // priority 220 0, // priority
251 PreWaitObserver, 221 PreWaitObserver,
252 &observer_context); 222 &observer_context);
253 CFRunLoopAddObserverToAllModes(run_loop_, pre_wait_observer_); 223 InvokeForAllModes(&CFRunLoopAddObserver, pre_wait_observer_);
254 224
255 pre_source_observer_ = CFRunLoopObserverCreate(NULL, // allocator 225 pre_source_observer_ = CFRunLoopObserverCreate(NULL, // allocator
256 kCFRunLoopBeforeSources, 226 kCFRunLoopBeforeSources,
257 true, // repeat 227 true, // repeat
258 0, // priority 228 0, // priority
259 PreSourceObserver, 229 PreSourceObserver,
260 &observer_context); 230 &observer_context);
261 CFRunLoopAddObserverToAllModes(run_loop_, pre_source_observer_); 231 InvokeForAllModes(&CFRunLoopAddObserver, pre_source_observer_);
262 232
263 enter_exit_observer_ = CFRunLoopObserverCreate(NULL, // allocator 233 enter_exit_observer_ = CFRunLoopObserverCreate(NULL, // allocator
264 kCFRunLoopEntry | 234 kCFRunLoopEntry |
265 kCFRunLoopExit, 235 kCFRunLoopExit,
266 true, // repeat 236 true, // repeat
267 0, // priority 237 0, // priority
268 EnterExitObserver, 238 EnterExitObserver,
269 &observer_context); 239 &observer_context);
270 CFRunLoopAddObserverToAllModes(run_loop_, enter_exit_observer_); 240 InvokeForAllModes(&CFRunLoopAddObserver, enter_exit_observer_);
271 } 241 }
272 242
273 // Ideally called on the run loop thread. If other run loops were running 243 // Ideally called on the run loop thread. If other run loops were running
274 // lower on the run loop thread's stack when this object was created, the 244 // lower on the run loop thread's stack when this object was created, the
275 // same number of run loops must be running when this object is destroyed. 245 // same number of run loops must be running when this object is destroyed.
276 MessagePumpCFRunLoopBase::~MessagePumpCFRunLoopBase() { 246 MessagePumpCFRunLoopBase::~MessagePumpCFRunLoopBase() {
277 CFRunLoopRemoveObserverFromAllModes(run_loop_, enter_exit_observer_); 247 for (const CFRunLoopObserverRef& observer :
278 CFRelease(enter_exit_observer_); 248 {enter_exit_observer_, pre_source_observer_, pre_wait_observer_}) {
279 249 InvokeForAllModes(&CFRunLoopRemoveObserver, observer);
280 CFRunLoopRemoveObserverFromAllModes(run_loop_, pre_source_observer_); 250 CFRelease(observer);
281 CFRelease(pre_source_observer_); 251 }
282 252 for (const CFRunLoopSourceRef& source :
283 CFRunLoopRemoveObserverFromAllModes(run_loop_, pre_wait_observer_); 253 {nesting_deferred_work_source_, idle_work_source_, work_source_}) {
284 CFRelease(pre_wait_observer_); 254 InvokeForAllModes(&CFRunLoopRemoveSource, source);
285 255 CFRelease(source);
286 CFRunLoopRemoveSourceFromAllModes(run_loop_, nesting_deferred_work_source_); 256 }
287 CFRelease(nesting_deferred_work_source_); 257 InvokeForAllModes(&CFRunLoopRemoveTimer, delayed_work_timer_);
288
289 CFRunLoopRemoveSourceFromAllModes(run_loop_, idle_work_source_);
290 CFRelease(idle_work_source_);
291
292 CFRunLoopRemoveSourceFromAllModes(run_loop_, work_source_);
293 CFRelease(work_source_);
294
295 CFRunLoopRemoveTimerFromAllModes(run_loop_, delayed_work_timer_);
296 CFRelease(delayed_work_timer_); 258 CFRelease(delayed_work_timer_);
297
298 CFRelease(run_loop_); 259 CFRelease(run_loop_);
299 } 260 }
300 261
301 // Must be called on the run loop thread. 262 // Must be called on the run loop thread.
302 void MessagePumpCFRunLoopBase::Run(Delegate* delegate) { 263 void MessagePumpCFRunLoopBase::Run(Delegate* delegate) {
303 // nesting_level_ will be incremented in EnterExitRunLoop, so set 264 // nesting_level_ will be incremented in EnterExitRunLoop, so set
304 // run_nesting_level_ accordingly. 265 // run_nesting_level_ accordingly.
305 int last_run_nesting_level = run_nesting_level_; 266 int last_run_nesting_level = run_nesting_level_;
306 run_nesting_level_ = nesting_level_ + 1; 267 run_nesting_level_ = nesting_level_ + 1;
307 268
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 CFRunLoopTimerSetTolerance(delayed_work_timer_, delta.InSecondsF() * 0.5); 321 CFRunLoopTimerSetTolerance(delayed_work_timer_, delta.InSecondsF() * 0.5);
361 } else { 322 } else {
362 CFRunLoopTimerSetTolerance(delayed_work_timer_, 0); 323 CFRunLoopTimerSetTolerance(delayed_work_timer_, 0);
363 } 324 }
364 } 325 }
365 326
366 void MessagePumpCFRunLoopBase::SetTimerSlack(TimerSlack timer_slack) { 327 void MessagePumpCFRunLoopBase::SetTimerSlack(TimerSlack timer_slack) {
367 timer_slack_ = timer_slack; 328 timer_slack_ = timer_slack;
368 } 329 }
369 330
331 template <typename Argument>
332 void MessagePumpCFRunLoopBase::InvokeForAllModes(void method(CFRunLoopRef,
333 Argument,
334 CFStringRef),
335 Argument argument) {
336 for (size_t i = 0; i < arraysize(kAllModes); ++i) {
337 if (mode_mask_ & (0x1 << i))
338 method(run_loop_, argument, kAllModes[i]);
339 }
340 }
341
370 // Called from the run loop. 342 // Called from the run loop.
371 // static 343 // static
372 void MessagePumpCFRunLoopBase::RunDelayedWorkTimer(CFRunLoopTimerRef timer, 344 void MessagePumpCFRunLoopBase::RunDelayedWorkTimer(CFRunLoopTimerRef timer,
373 void* info) { 345 void* info) {
374 MessagePumpCFRunLoopBase* self = static_cast<MessagePumpCFRunLoopBase*>(info); 346 MessagePumpCFRunLoopBase* self = static_cast<MessagePumpCFRunLoopBase*>(info);
375 347
376 // The timer won't fire again until it's reset. 348 // The timer won't fire again until it's reset.
377 self->delayed_work_fire_time_ = kCFTimeIntervalMax; 349 self->delayed_work_fire_time_ = kCFTimeIntervalMax;
378 350
379 // The message pump's timer needs to fire at changing and unpredictable 351 // The message pump's timer needs to fire at changing and unpredictable
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 // implementation is a no-op. 610 // implementation is a no-op.
639 void MessagePumpCFRunLoopBase::EnterExitRunLoop(CFRunLoopActivity activity) { 611 void MessagePumpCFRunLoopBase::EnterExitRunLoop(CFRunLoopActivity activity) {
640 } 612 }
641 613
642 // Base version returns a standard NSAutoreleasePool. 614 // Base version returns a standard NSAutoreleasePool.
643 AutoreleasePoolType* MessagePumpCFRunLoopBase::CreateAutoreleasePool() { 615 AutoreleasePoolType* MessagePumpCFRunLoopBase::CreateAutoreleasePool() {
644 return [[NSAutoreleasePool alloc] init]; 616 return [[NSAutoreleasePool alloc] init];
645 } 617 }
646 618
647 MessagePumpCFRunLoop::MessagePumpCFRunLoop() 619 MessagePumpCFRunLoop::MessagePumpCFRunLoop()
648 : quit_pending_(false) { 620 : MessagePumpCFRunLoopBase(kCommonModeMask), quit_pending_(false) {}
649 }
650 621
651 MessagePumpCFRunLoop::~MessagePumpCFRunLoop() {} 622 MessagePumpCFRunLoop::~MessagePumpCFRunLoop() {}
652 623
653 // Called by MessagePumpCFRunLoopBase::DoRun. If other CFRunLoopRun loops were 624 // Called by MessagePumpCFRunLoopBase::DoRun. If other CFRunLoopRun loops were
654 // running lower on the run loop thread's stack when this object was created, 625 // running lower on the run loop thread's stack when this object was created,
655 // the same number of CFRunLoopRun loops must be running for the outermost call 626 // the same number of CFRunLoopRun loops must be running for the outermost call
656 // to Run. Run/DoRun are reentrant after that point. 627 // to Run. Run/DoRun are reentrant after that point.
657 void MessagePumpCFRunLoop::DoRun(Delegate* delegate) { 628 void MessagePumpCFRunLoop::DoRun(Delegate* delegate) {
658 // This is completely identical to calling CFRunLoopRun(), except autorelease 629 // This is completely identical to calling CFRunLoopRun(), except autorelease
659 // pool management is introduced. 630 // pool management is introduced.
(...skipping 30 matching lines...) Expand all
690 // Quit was called while loops other than those managed by this object 661 // Quit was called while loops other than those managed by this object
691 // were running further inside a run loop managed by this object. Now 662 // were running further inside a run loop managed by this object. Now
692 // that all unmanaged inner run loops are gone, stop the loop running 663 // that all unmanaged inner run loops are gone, stop the loop running
693 // just inside Run. 664 // just inside Run.
694 CFRunLoopStop(run_loop()); 665 CFRunLoopStop(run_loop());
695 quit_pending_ = false; 666 quit_pending_ = false;
696 } 667 }
697 } 668 }
698 669
699 MessagePumpNSRunLoop::MessagePumpNSRunLoop() 670 MessagePumpNSRunLoop::MessagePumpNSRunLoop()
700 : keep_running_(true) { 671 : MessagePumpCFRunLoopBase(kCommonModeMask), keep_running_(true) {
701 CFRunLoopSourceContext source_context = CFRunLoopSourceContext(); 672 CFRunLoopSourceContext source_context = CFRunLoopSourceContext();
702 source_context.perform = NoOp; 673 source_context.perform = NoOp;
703 quit_source_ = CFRunLoopSourceCreate(NULL, // allocator 674 quit_source_ = CFRunLoopSourceCreate(NULL, // allocator
704 0, // priority 675 0, // priority
705 &source_context); 676 &source_context);
706 CFRunLoopAddSourceToAllModes(run_loop(), quit_source_); 677 InvokeForAllModes(&CFRunLoopAddSource, quit_source_);
707 } 678 }
708 679
709 MessagePumpNSRunLoop::~MessagePumpNSRunLoop() { 680 MessagePumpNSRunLoop::~MessagePumpNSRunLoop() {
710 CFRunLoopRemoveSourceFromAllModes(run_loop(), quit_source_); 681 InvokeForAllModes(&CFRunLoopRemoveSource, quit_source_);
711 CFRelease(quit_source_); 682 CFRelease(quit_source_);
712 } 683 }
713 684
714 void MessagePumpNSRunLoop::DoRun(Delegate* delegate) { 685 void MessagePumpNSRunLoop::DoRun(Delegate* delegate) {
715 while (keep_running_) { 686 while (keep_running_) {
716 // NSRunLoop manages autorelease pools itself. 687 // NSRunLoop manages autorelease pools itself.
717 [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode 688 [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
718 beforeDate:[NSDate distantFuture]]; 689 beforeDate:[NSDate distantFuture]];
719 } 690 }
720 691
721 keep_running_ = true; 692 keep_running_ = true;
722 } 693 }
723 694
724 void MessagePumpNSRunLoop::Quit() { 695 void MessagePumpNSRunLoop::Quit() {
725 keep_running_ = false; 696 keep_running_ = false;
726 CFRunLoopSourceSignal(quit_source_); 697 CFRunLoopSourceSignal(quit_source_);
727 CFRunLoopWakeUp(run_loop()); 698 CFRunLoopWakeUp(run_loop());
728 } 699 }
729 700
730 #if defined(OS_IOS) 701 #if defined(OS_IOS)
731 MessagePumpUIApplication::MessagePumpUIApplication() 702 MessagePumpUIApplication::MessagePumpUIApplication()
732 : run_loop_(NULL) { 703 : MessagePumpCFRunLoopBase(kCommonModeMask), run_loop_(NULL) {}
733 }
734 704
735 MessagePumpUIApplication::~MessagePumpUIApplication() {} 705 MessagePumpUIApplication::~MessagePumpUIApplication() {}
736 706
737 void MessagePumpUIApplication::DoRun(Delegate* delegate) { 707 void MessagePumpUIApplication::DoRun(Delegate* delegate) {
738 NOTREACHED(); 708 NOTREACHED();
739 } 709 }
740 710
741 void MessagePumpUIApplication::Quit() { 711 void MessagePumpUIApplication::Quit() {
742 NOTREACHED(); 712 NOTREACHED();
743 } 713 }
744 714
745 void MessagePumpUIApplication::Attach(Delegate* delegate) { 715 void MessagePumpUIApplication::Attach(Delegate* delegate) {
746 DCHECK(!run_loop_); 716 DCHECK(!run_loop_);
747 run_loop_ = new RunLoop(); 717 run_loop_ = new RunLoop();
748 CHECK(run_loop_->BeforeRun()); 718 CHECK(run_loop_->BeforeRun());
749 SetDelegate(delegate); 719 SetDelegate(delegate);
750 } 720 }
751 721
752 #else 722 #else
753 723
754 MessagePumpNSApplication::MessagePumpNSApplication() 724 MessagePumpNSApplication::MessagePumpNSApplication()
755 : keep_running_(true), 725 : MessagePumpCFRunLoopBase(kAllModesMask),
756 running_own_loop_(false) { 726 keep_running_(true),
757 } 727 running_own_loop_(false) {}
758 728
759 MessagePumpNSApplication::~MessagePumpNSApplication() {} 729 MessagePumpNSApplication::~MessagePumpNSApplication() {}
760 730
761 void MessagePumpNSApplication::DoRun(Delegate* delegate) { 731 void MessagePumpNSApplication::DoRun(Delegate* delegate) {
762 bool last_running_own_loop_ = running_own_loop_; 732 bool last_running_own_loop_ = running_own_loop_;
763 733
764 // NSApp must be initialized by calling: 734 // NSApp must be initialized by calling:
765 // [{some class which implements CrAppProtocol} sharedApplication] 735 // [{some class which implements CrAppProtocol} sharedApplication]
766 // Most likely candidates are CrApplication or BrowserCrApplication. 736 // Most likely candidates are CrApplication or BrowserCrApplication.
767 // These can be initialized from C++ code by calling 737 // These can be initialized from C++ code by calling
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 [NSApplication sharedApplication]; 863 [NSApplication sharedApplication];
894 g_not_using_cr_app = true; 864 g_not_using_cr_app = true;
895 return new MessagePumpNSApplication; 865 return new MessagePumpNSApplication;
896 #endif 866 #endif
897 } 867 }
898 868
899 return new MessagePumpNSRunLoop; 869 return new MessagePumpNSRunLoop;
900 } 870 }
901 871
902 } // namespace base 872 } // namespace base
OLDNEW
« base/message_loop/message_pump_mac.h ('K') | « base/message_loop/message_pump_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698