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

Side by Side Diff: chrome/browser/cocoa/infobar_controller.mm

Issue 4767001: Make TabContents own its infobar delegates.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 <Cocoa/Cocoa.h> 5 #import <Cocoa/Cocoa.h>
6 6
7 #include "base/logging.h" // for NOTREACHED() 7 #include "base/logging.h" // for NOTREACHED()
8 #include "base/mac_util.h" 8 #include "base/mac_util.h"
9 #include "base/sys_string_conversions.h" 9 #include "base/sys_string_conversions.h"
10 #import "chrome/browser/cocoa/animatable_view.h" 10 #import "chrome/browser/cocoa/animatable_view.h"
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 // Force the frame size to be 0 and then start an animation. 169 // Force the frame size to be 0 and then start an animation.
170 NSRect frame = [[self view] frame]; 170 NSRect frame = [[self view] frame];
171 CGFloat finalHeight = frame.size.height; 171 CGFloat finalHeight = frame.size.height;
172 frame.size.height = 0; 172 frame.size.height = 0;
173 [[self view] setFrame:frame]; 173 [[self view] setFrame:frame];
174 [[self animatableView] animateToNewHeight:finalHeight 174 [[self animatableView] animateToNewHeight:finalHeight
175 duration:kAnimateOpenDuration]; 175 duration:kAnimateOpenDuration];
176 } 176 }
177 177
178 - (void)close { 178 - (void)close {
179 delegate_ = NULL;
180
179 // Stop any running animations. 181 // Stop any running animations.
180 [[self animatableView] stopAnimation]; 182 [[self animatableView] stopAnimation];
181 infoBarClosing_ = YES; 183 infoBarClosing_ = YES;
182 [self cleanUpAfterAnimation:YES]; 184 [self cleanUpAfterAnimation:YES];
183 } 185 }
184 186
185 - (void)animateClosed { 187 - (void)animateClosed {
188 delegate_ = NULL;
189
186 // Start animating closed. We will receive a notification when the animation 190 // Start animating closed. We will receive a notification when the animation
187 // is done, at which point we can remove our view from the hierarchy and 191 // is done, at which point we can remove our view from the hierarchy.
188 // notify the delegate that the infobar was closed.
189 [[self animatableView] animateToNewHeight:0 duration:kAnimateCloseDuration]; 192 [[self animatableView] animateToNewHeight:0 duration:kAnimateCloseDuration];
190 193
191 // The above call may trigger an animationDidStop: notification for any 194 // The above call may trigger an animationDidStop: notification for any
192 // currently-running animations, so do not set |infoBarClosing_| until after 195 // currently-running animations, so do not set |infoBarClosing_| until after
193 // starting the animation. 196 // starting the animation.
194 infoBarClosing_ = YES; 197 infoBarClosing_ = YES;
195 } 198 }
196 199
197 - (void)addAdditionalControls { 200 - (void)addAdditionalControls {
198 // Default implementation does nothing. 201 // Default implementation does nothing.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 [label_.get() setDrawsBackground:NO]; 244 [label_.get() setDrawsBackground:NO];
242 [label_.get() setHorizontallyResizable:NO]; 245 [label_.get() setHorizontallyResizable:NO];
243 [label_.get() setVerticallyResizable:NO]; 246 [label_.get() setVerticallyResizable:NO];
244 } 247 }
245 248
246 - (void)removeInfoBar { 249 - (void)removeInfoBar {
247 // TODO(rohitrao): This method can be called even if the infobar has already 250 // TODO(rohitrao): This method can be called even if the infobar has already
248 // been removed and |delegate_| is NULL. Is there a way to rewrite the code 251 // been removed and |delegate_| is NULL. Is there a way to rewrite the code
249 // so that inner event loops don't cause us to try and remove the infobar 252 // so that inner event loops don't cause us to try and remove the infobar
250 // twice? http://crbug.com/54253 253 // twice? http://crbug.com/54253
251 [containerController_ removeDelegate:delegate_]; 254 if (delegate_ != NULL)
255 [containerController_ removeDelegate:delegate_];
252 } 256 }
253 257
254 - (void)cleanUpAfterAnimation:(BOOL)finished { 258 - (void)cleanUpAfterAnimation:(BOOL)finished {
255 // Don't need to do any cleanup if the bar was animating open. 259 // Don't need to do any cleanup if the bar was animating open.
256 if (!infoBarClosing_) 260 if (!infoBarClosing_)
257 return; 261 return;
258 262
259 // Notify the delegate that the infobar was closed. The delegate may delete
260 // itself as a result of InfoBarClosed(), so we null out its pointer.
261 if (delegate_) {
262 delegate_->InfoBarClosed();
263 delegate_ = NULL;
264 }
265
266 // If the animation ran to completion, then we need to remove ourselves from 263 // If the animation ran to completion, then we need to remove ourselves from
267 // the container. If the animation was interrupted, then the container will 264 // the container. If the animation was interrupted, then the container will
268 // take care of removing us. 265 // take care of removing us.
269 // TODO(rohitrao): UGH! This works for now, but should be cleaner. 266 // TODO(rohitrao): UGH! This works for now, but should be cleaner.
270 if (finished) 267 if (finished)
271 [containerController_ removeController:self]; 268 [containerController_ removeController:self];
272 } 269 }
273 270
274 - (void)animationDidStop:(NSAnimation*)animation { 271 - (void)animationDidStop:(NSAnimation*)animation {
275 [self cleanUpAfterAnimation:NO]; 272 [self cleanUpAfterAnimation:NO];
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 LinkInfoBarController* controller = 522 LinkInfoBarController* controller =
526 [[LinkInfoBarController alloc] initWithDelegate:this]; 523 [[LinkInfoBarController alloc] initWithDelegate:this];
527 return new InfoBar(controller); 524 return new InfoBar(controller);
528 } 525 }
529 526
530 InfoBar* ConfirmInfoBarDelegate::CreateInfoBar() { 527 InfoBar* ConfirmInfoBarDelegate::CreateInfoBar() {
531 ConfirmInfoBarController* controller = 528 ConfirmInfoBarController* controller =
532 [[ConfirmInfoBarController alloc] initWithDelegate:this]; 529 [[ConfirmInfoBarController alloc] initWithDelegate:this];
533 return new InfoBar(controller); 530 return new InfoBar(controller);
534 } 531 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698