Index: chrome/browser/ui/cocoa/browser/zoom_bubble_controller.mm |
diff --git a/chrome/browser/ui/cocoa/browser/zoom_bubble_controller.mm b/chrome/browser/ui/cocoa/browser/zoom_bubble_controller.mm |
index 234eb6d92827d1b22738ade1fe3a7921cbfe6ddc..05c9221a6f3caa69d83dc0136eb528dd24f0a3b9 100644 |
--- a/chrome/browser/ui/cocoa/browser/zoom_bubble_controller.mm |
+++ b/chrome/browser/ui/cocoa/browser/zoom_bubble_controller.mm |
@@ -75,6 +75,8 @@ void SetZoomBubbleAutoCloseDelayForTesting(NSTimeInterval time_interval) { |
@implementation ZoomBubbleController |
+@synthesize delegate = delegate_; |
+ |
- (id)initWithParentWindow:(NSWindow*)parentWindow |
delegate:(ZoomBubbleControllerDelegate*)delegate { |
base::scoped_nsobject<InfoBubbleWindow> window( |
@@ -126,6 +128,10 @@ void SetZoomBubbleAutoCloseDelayForTesting(NSTimeInterval time_interval) { |
} |
- (void)onZoomChanged { |
+ // |delegate_| may be set null by this object's owner. |
+ if (!delegate_) |
+ return; |
+ |
// TODO(shess): It may be appropriate to close the window if |
// |contents| or |zoomController| are NULL. But they can be NULL in |
// tests. |
@@ -169,8 +175,11 @@ void SetZoomBubbleAutoCloseDelayForTesting(NSTimeInterval time_interval) { |
} |
- (void)windowWillClose:(NSNotification*)notification { |
- delegate_->OnClose(); |
- delegate_ = NULL; |
+ // |delegate_| may be set null by this object's owner. |
+ if (delegate_) { |
+ delegate_->OnClose(); |
+ delegate_ = NULL; |
+ } |
[NSObject cancelPreviousPerformRequestsWithTarget:self |
selector:@selector(autoCloseBubble) |
object:nil]; |