Index: base/message_loop/message_pump_mac.h |
diff --git a/base/message_loop/message_pump_mac.h b/base/message_loop/message_pump_mac.h |
index 424cb70938d058a90288ceb5314bf73c8ae3200c..c075b28cc941305800d6fb4d2e33ab495220dc5e 100644 |
--- a/base/message_loop/message_pump_mac.h |
+++ b/base/message_loop/message_pump_mac.h |
@@ -38,9 +38,7 @@ |
#include "base/memory/weak_ptr.h" |
-#if !defined(__OBJC__) |
-class NSAutoreleasePool; |
-#else // !defined(__OBJC__) |
+#if defined(__OBJC__) |
#if defined(OS_IOS) |
#import <Foundation/Foundation.h> |
#else |
@@ -55,7 +53,7 @@ class NSAutoreleasePool; |
- (BOOL)isHandlingSendEvent; |
@end |
#endif // !defined(OS_IOS) |
-#endif // !defined(__OBJC__) |
+#endif // defined(__OBJC__) |
namespace base { |
@@ -63,6 +61,21 @@ class MessagePumpInstrumentation; |
class RunLoop; |
class TimeTicks; |
+// AutoreleasePoolType is a proxy type for autorelease pools. Its definition |
+// depends on the TU in which this header appears. In pure C++ TUs, it is |
Mark Mentovai
2014/04/29 02:07:03
TU is not a commonly-understood abbreviation. Say
|
+// defined as a forward C++ class declaration (that is never defined), because |
+// autorelease pools are an Objective-C concept. In Automatic Reference Counting |
+// (ARC) Objective-C TUs, it is similarly defined as a forward C++ class |
+// declaration, because clang will not allow the type "NSAutoreleasePool" in |
+// such TUs. Finally, in Manual Retain Release (MRR) Objective-C TUs, it is a |
+// type alias for NSAutoreleasePool. In all cases, a method that takes or |
+// returns an NSAutoreleasePool* can use AutoreleasePoolType* instead. |
+#if !defined(__OBJC__) || __has_feature(objc_arc) |
+class AutoreleasePoolType; |
+#else // !defined(__OBJC__) || __has_feature(objc_arc) |
+typedef NSAutoreleasePool AutoreleasePoolType; |
+#endif // !defined(__OBJC__) || __has_feature(objc_arc) |
+ |
class MessagePumpCFRunLoopBase : public MessagePump { |
// Needs access to CreateAutoreleasePool. |
friend class MessagePumpScopedAutoreleasePool; |
@@ -94,7 +107,7 @@ class MessagePumpCFRunLoopBase : public MessagePump { |
// In some cases, CreateAutoreleasePool may return nil intentionally to |
// preventing an autorelease pool from being created, allowing any |
// objects autoreleased by work to fall into the current autorelease pool. |
- virtual NSAutoreleasePool* CreateAutoreleasePool(); |
+ virtual AutoreleasePoolType* CreateAutoreleasePool(); |
// Enables instrumentation of the MessagePump. See MessagePumpInstrumentation |
// in the implementation for details. |
@@ -296,7 +309,7 @@ class MessagePumpCrApplication : public MessagePumpNSApplication { |
protected: |
// Returns nil if NSApp is currently in the middle of calling |
// -sendEvent. Requires NSApp implementing CrAppProtocol. |
- virtual NSAutoreleasePool* CreateAutoreleasePool() OVERRIDE; |
+ virtual AutoreleasePoolType* CreateAutoreleasePool() OVERRIDE; |
private: |
DISALLOW_COPY_AND_ASSIGN(MessagePumpCrApplication); |