Index: chrome/browser/ui/cocoa/tracking_area.mm |
diff --git a/chrome/browser/ui/cocoa/tracking_area.mm b/chrome/browser/ui/cocoa/tracking_area.mm |
deleted file mode 100644 |
index 004695bc7dedd8b5d5d2ebee6fd75ed146ed6a57..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/cocoa/tracking_area.mm |
+++ /dev/null |
@@ -1,126 +0,0 @@ |
-// Copyright (c) 2011 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. |
- |
-#import "chrome/browser/ui/cocoa/tracking_area.h" |
- |
-#include "base/logging.h" |
- |
-// NSTrackingArea does not retain its |owner| so CrTrackingArea wraps the real |
-// owner in this proxy, which can stop forwarding messages to the owner when |
-// it is no longer |alive_|. |
-@interface CrTrackingAreaOwnerProxy : NSObject { |
- @private |
- // Whether or not the owner is "alive" and should forward calls to the real |
- // owner object. |
- BOOL alive_; |
- |
- // The real object for which this is a proxy. Weak. |
- id owner_; |
- |
- // The Class of |owner_|. When the actual object is no longer alive (and could |
- // be zombie), this allows for introspection. |
- Class ownerClass_; |
-} |
-@property(nonatomic, assign) BOOL alive; |
-- (id)initWithOwner:(id)owner; |
-@end |
- |
-@implementation CrTrackingAreaOwnerProxy |
- |
-@synthesize alive = alive_; |
- |
-- (id)initWithOwner:(id)owner { |
- if ((self = [super init])) { |
- alive_ = YES; |
- owner_ = owner; |
- ownerClass_ = [owner class]; |
- } |
- return self; |
-} |
- |
-- (void)forwardInvocation:(NSInvocation*)invocation { |
- if (!alive_) |
- return; |
- [invocation invokeWithTarget:owner_]; |
-} |
- |
-- (NSMethodSignature*)methodSignatureForSelector:(SEL)sel { |
- // This can be called if |owner_| is not |alive_|, so use the Class to |
- // generate the signature. |-forwardInvocation:| will block the actual call. |
- return [ownerClass_ instanceMethodSignatureForSelector:sel]; |
-} |
- |
-- (BOOL)respondsToSelector:(SEL)aSelector { |
- return [ownerClass_ instancesRespondToSelector:aSelector]; |
-} |
- |
-@end |
- |
-// Private Interface /////////////////////////////////////////////////////////// |
- |
-@interface CrTrackingArea (Private) |
-- (void)windowWillClose:(NSNotification*)notif; |
-@end |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-@implementation CrTrackingArea |
- |
-- (id)initWithRect:(NSRect)rect |
- options:(NSTrackingAreaOptions)options |
- owner:(id)owner |
- userInfo:(NSDictionary*)userInfo { |
- scoped_nsobject<CrTrackingAreaOwnerProxy> ownerProxy( |
- [[CrTrackingAreaOwnerProxy alloc] initWithOwner:owner]); |
- if ((self = [super initWithRect:rect |
- options:options |
- owner:ownerProxy.get() |
- userInfo:userInfo])) { |
- ownerProxy_.swap(ownerProxy); |
- } |
- return self; |
-} |
- |
-- (void)dealloc { |
- [self clearOwner]; |
- [[NSNotificationCenter defaultCenter] removeObserver:self]; |
- [super dealloc]; |
-} |
- |
-- (void)clearOwner { |
- [ownerProxy_ setAlive:NO]; |
-} |
- |
-- (void)clearOwnerWhenWindowWillClose:(NSWindow*)window { |
- DCHECK(window); |
- NSNotificationCenter* center = [NSNotificationCenter defaultCenter]; |
- [center addObserver:self |
- selector:@selector(windowWillClose:) |
- name:NSWindowWillCloseNotification |
- object:window]; |
-} |
- |
-- (void)windowWillClose:(NSNotification*)notif { |
- [self clearOwner]; |
-} |
- |
-@end |
- |
-// Scoper ////////////////////////////////////////////////////////////////////// |
- |
-ScopedCrTrackingArea::ScopedCrTrackingArea(CrTrackingArea* tracking_area) |
- : tracking_area_(tracking_area) { |
-} |
- |
-ScopedCrTrackingArea::~ScopedCrTrackingArea() { |
- [tracking_area_ clearOwner]; |
-} |
- |
-void ScopedCrTrackingArea::reset(CrTrackingArea* tracking_area) { |
- tracking_area_.reset(tracking_area); |
-} |
- |
-CrTrackingArea* ScopedCrTrackingArea::get() const { |
- return tracking_area_.get(); |
-} |