| OLD | NEW |
| 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 // The basis for all native run loops on the Mac is the CFRunLoop. It can be | 5 // The basis for all native run loops on the Mac is the CFRunLoop. It can be |
| 6 // used directly, it can be used as the driving force behind the similar | 6 // used directly, it can be used as the driving force behind the similar |
| 7 // Foundation NSRunLoop, and it can be used to implement higher-level event | 7 // Foundation NSRunLoop, and it can be used to implement higher-level event |
| 8 // loops such as the NSApplication event loop. | 8 // loops such as the NSApplication event loop. |
| 9 // | 9 // |
| 10 // This file introduces a basic CFRunLoop-based implementation of the | 10 // This file introduces a basic CFRunLoop-based implementation of the |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 // must wait until a delegate is available to process it. This can happen | 212 // must wait until a delegate is available to process it. This can happen |
| 213 // when a MessagePumpCFRunLoopBase is instantiated and work arrives without | 213 // when a MessagePumpCFRunLoopBase is instantiated and work arrives without |
| 214 // any call to Run on the stack. The Run method will check for delegateless | 214 // any call to Run on the stack. The Run method will check for delegateless |
| 215 // work on entry and redispatch it as needed once a delegate is available. | 215 // work on entry and redispatch it as needed once a delegate is available. |
| 216 bool delegateless_work_; | 216 bool delegateless_work_; |
| 217 bool delegateless_idle_work_; | 217 bool delegateless_idle_work_; |
| 218 | 218 |
| 219 DISALLOW_COPY_AND_ASSIGN(MessagePumpCFRunLoopBase); | 219 DISALLOW_COPY_AND_ASSIGN(MessagePumpCFRunLoopBase); |
| 220 }; | 220 }; |
| 221 | 221 |
| 222 class MessagePumpCFRunLoop : public MessagePumpCFRunLoopBase { | 222 class BASE_EXPORT MessagePumpCFRunLoop : public MessagePumpCFRunLoopBase { |
| 223 public: | 223 public: |
| 224 MessagePumpCFRunLoop(); | 224 MessagePumpCFRunLoop(); |
| 225 virtual ~MessagePumpCFRunLoop(); | 225 virtual ~MessagePumpCFRunLoop(); |
| 226 | 226 |
| 227 virtual void DoRun(Delegate* delegate) OVERRIDE; | 227 virtual void DoRun(Delegate* delegate) OVERRIDE; |
| 228 virtual void Quit() OVERRIDE; | 228 virtual void Quit() OVERRIDE; |
| 229 | 229 |
| 230 private: | 230 private: |
| 231 virtual void EnterExitRunLoop(CFRunLoopActivity activity) OVERRIDE; | 231 virtual void EnterExitRunLoop(CFRunLoopActivity activity) OVERRIDE; |
| 232 | 232 |
| 233 // True if Quit is called to stop the innermost MessagePump | 233 // True if Quit is called to stop the innermost MessagePump |
| 234 // (innermost_quittable_) but some other CFRunLoopRun loop (nesting_level_) | 234 // (innermost_quittable_) but some other CFRunLoopRun loop (nesting_level_) |
| 235 // is running inside the MessagePump's innermost Run call. | 235 // is running inside the MessagePump's innermost Run call. |
| 236 bool quit_pending_; | 236 bool quit_pending_; |
| 237 | 237 |
| 238 DISALLOW_COPY_AND_ASSIGN(MessagePumpCFRunLoop); | 238 DISALLOW_COPY_AND_ASSIGN(MessagePumpCFRunLoop); |
| 239 }; | 239 }; |
| 240 | 240 |
| 241 class MessagePumpNSRunLoop : public MessagePumpCFRunLoopBase { | 241 class BASE_EXPORT MessagePumpNSRunLoop : public MessagePumpCFRunLoopBase { |
| 242 public: | 242 public: |
| 243 BASE_EXPORT MessagePumpNSRunLoop(); | 243 MessagePumpNSRunLoop(); |
| 244 virtual ~MessagePumpNSRunLoop(); | 244 virtual ~MessagePumpNSRunLoop(); |
| 245 | 245 |
| 246 virtual void DoRun(Delegate* delegate) OVERRIDE; | 246 virtual void DoRun(Delegate* delegate) OVERRIDE; |
| 247 virtual void Quit() OVERRIDE; | 247 virtual void Quit() OVERRIDE; |
| 248 | 248 |
| 249 private: | 249 private: |
| 250 // A source that doesn't do anything but provide something signalable | 250 // A source that doesn't do anything but provide something signalable |
| 251 // attached to the run loop. This source will be signalled when Quit | 251 // attached to the run loop. This source will be signalled when Quit |
| 252 // is called, to cause the loop to wake up so that it can stop. | 252 // is called, to cause the loop to wake up so that it can stop. |
| 253 CFRunLoopSourceRef quit_source_; | 253 CFRunLoopSourceRef quit_source_; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 protected: | 310 protected: |
| 311 // Returns nil if NSApp is currently in the middle of calling | 311 // Returns nil if NSApp is currently in the middle of calling |
| 312 // -sendEvent. Requires NSApp implementing CrAppProtocol. | 312 // -sendEvent. Requires NSApp implementing CrAppProtocol. |
| 313 virtual AutoreleasePoolType* CreateAutoreleasePool() OVERRIDE; | 313 virtual AutoreleasePoolType* CreateAutoreleasePool() OVERRIDE; |
| 314 | 314 |
| 315 private: | 315 private: |
| 316 DISALLOW_COPY_AND_ASSIGN(MessagePumpCrApplication); | 316 DISALLOW_COPY_AND_ASSIGN(MessagePumpCrApplication); |
| 317 }; | 317 }; |
| 318 #endif // !defined(OS_IOS) | 318 #endif // !defined(OS_IOS) |
| 319 | 319 |
| 320 class MessagePumpMac { | 320 class BASE_EXPORT MessagePumpMac { |
| 321 public: | 321 public: |
| 322 // If not on the main thread, returns a new instance of | 322 // If not on the main thread, returns a new instance of |
| 323 // MessagePumpNSRunLoop. | 323 // MessagePumpNSRunLoop. |
| 324 // | 324 // |
| 325 // On the main thread, if NSApp exists and conforms to | 325 // On the main thread, if NSApp exists and conforms to |
| 326 // CrAppProtocol, creates an instances of MessagePumpCrApplication. | 326 // CrAppProtocol, creates an instances of MessagePumpCrApplication. |
| 327 // | 327 // |
| 328 // Otherwise creates an instance of MessagePumpNSApplication using a | 328 // Otherwise creates an instance of MessagePumpNSApplication using a |
| 329 // default NSApplication. | 329 // default NSApplication. |
| 330 static MessagePump* Create(); | 330 static MessagePump* Create(); |
| 331 | 331 |
| 332 #if !defined(OS_IOS) | 332 #if !defined(OS_IOS) |
| 333 // If a pump is created before the required CrAppProtocol is | 333 // If a pump is created before the required CrAppProtocol is |
| 334 // created, the wrong MessagePump subclass could be used. | 334 // created, the wrong MessagePump subclass could be used. |
| 335 // UsingCrApp() returns false if the message pump was created before | 335 // UsingCrApp() returns false if the message pump was created before |
| 336 // NSApp was initialized, or if NSApp does not implement | 336 // NSApp was initialized, or if NSApp does not implement |
| 337 // CrAppProtocol. NSApp must be initialized before calling. | 337 // CrAppProtocol. NSApp must be initialized before calling. |
| 338 BASE_EXPORT static bool UsingCrApp(); | 338 static bool UsingCrApp(); |
| 339 | 339 |
| 340 // Wrapper to query -[NSApp isHandlingSendEvent] from C++ code. | 340 // Wrapper to query -[NSApp isHandlingSendEvent] from C++ code. |
| 341 // Requires NSApp to implement CrAppProtocol. | 341 // Requires NSApp to implement CrAppProtocol. |
| 342 BASE_EXPORT static bool IsHandlingSendEvent(); | 342 static bool IsHandlingSendEvent(); |
| 343 #endif // !defined(OS_IOS) | 343 #endif // !defined(OS_IOS) |
| 344 | 344 |
| 345 private: | 345 private: |
| 346 DISALLOW_IMPLICIT_CONSTRUCTORS(MessagePumpMac); | 346 DISALLOW_IMPLICIT_CONSTRUCTORS(MessagePumpMac); |
| 347 }; | 347 }; |
| 348 | 348 |
| 349 } // namespace base | 349 } // namespace base |
| 350 | 350 |
| 351 #endif // BASE_MESSAGE_LOOP_MESSAGE_PUMP_MAC_H_ | 351 #endif // BASE_MESSAGE_LOOP_MESSAGE_PUMP_MAC_H_ |
| OLD | NEW |