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

Unified Diff: chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm

Issue 1221173003: [Mac] Inform reference counted objects that hold a weak Browser* when the Browser is being destroye… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. Created 5 years, 5 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
diff --git a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
index 1a1c45512c99171b9a24d884945b9ed838aaf90e..8726e742c316debb4a1dff977ccd730e1f7b023e 100644
--- a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
+++ b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
@@ -122,6 +122,7 @@ CGFloat BrowserActionsContainerDelegate::GetMaxAllowedWidth() {
@interface ToolbarController()
@property(assign, nonatomic) Browser* browser;
+- (void)cleanUp;
- (void)addAccessibilityDescriptions;
- (void)initCommandStatus:(CommandUpdater*)commands;
- (void)prefChanged:(const std::string&)prefName;
@@ -206,7 +207,6 @@ class NotificationBridge : public WrenchMenuBadgeController::Delegate {
- (id)initWithCommands:(CommandUpdater*)commands
profile:(Profile*)profile
browser:(Browser*)browser
- resizeDelegate:(id<ViewResizer>)resizeDelegate
nibFileNamed:(NSString*)nibName {
DCHECK(commands && profile && [nibName length]);
if ((self = [super initWithNibName:nibName
@@ -214,7 +214,6 @@ class NotificationBridge : public WrenchMenuBadgeController::Delegate {
commands_ = commands;
profile_ = profile;
browser_ = browser;
- resizeDelegate_ = resizeDelegate;
hasToolbar_ = YES;
hasLocationBar_ = YES;
@@ -236,41 +235,15 @@ class NotificationBridge : public WrenchMenuBadgeController::Delegate {
- (id)initWithCommands:(CommandUpdater*)commands
profile:(Profile*)profile
- browser:(Browser*)browser
- resizeDelegate:(id<ViewResizer>)resizeDelegate {
+ browser:(Browser*)browser {
if ((self = [self initWithCommands:commands
profile:profile
browser:browser
- resizeDelegate:resizeDelegate
nibFileNamed:@"Toolbar"])) {
}
return self;
}
-
-- (void)dealloc {
- browserActionsContainerDelegate_.reset();
-
- // Unset ViewIDs of toolbar elements.
- // ViewIDs of |toolbarView|, |reloadButton_|, |locationBar_| and
- // |browserActionsContainerView_| are handled by themselves.
- view_id_util::UnsetID(backButton_);
- view_id_util::UnsetID(forwardButton_);
- view_id_util::UnsetID(homeButton_);
- view_id_util::UnsetID(wrenchButton_);
-
- // Make sure any code in the base class which assumes [self view] is
- // the "parent" view continues to work.
- hasToolbar_ = YES;
- hasLocationBar_ = YES;
-
- [[NSNotificationCenter defaultCenter] removeObserver:self];
-
- if (trackingArea_.get())
- [[self view] removeTrackingArea:trackingArea_.get()];
- [super dealloc];
-}
-
// Called after the view is done loading and the outlets have been hooked up.
// Now we can hook up bridges that rely on UI objects such as the location
// bar and button state.
@@ -398,6 +371,49 @@ class NotificationBridge : public WrenchMenuBadgeController::Delegate {
[self addAccessibilityDescriptions];
}
+- (void)dealloc {
+ [self cleanUp];
+ [super dealloc];
+}
+
+- (void)browserWillBeDestroyed {
+ // Pass this call onto other reference counted objects.
+ [backMenuController_ browserWillBeDestroyed];
+ [forwardMenuController_ browserWillBeDestroyed];
+ [browserActionsController_ browserWillBeDestroyed];
+ [wrenchMenuController_ browserWillBeDestroyed];
+
+ [self cleanUp];
+}
+
+- (void)cleanUp {
+ // Unset ViewIDs of toolbar elements.
+ // ViewIDs of |toolbarView|, |reloadButton_|, |locationBar_| and
+ // |browserActionsContainerView_| are handled by themselves.
+ view_id_util::UnsetID(backButton_);
+ view_id_util::UnsetID(forwardButton_);
+ view_id_util::UnsetID(homeButton_);
+ view_id_util::UnsetID(wrenchButton_);
+
+ // Make sure any code in the base class which assumes [self view] is
+ // the "parent" view continues to work.
+ hasToolbar_ = YES;
+ hasLocationBar_ = YES;
+
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+
+ if (trackingArea_.get()) {
+ [[self view] removeTrackingArea:trackingArea_.get()];
+ [trackingArea_.get() clearOwner];
+ trackingArea_.reset();
+ }
+
+ // Destroy owned objects that hold a weak Browser*.
+ locationBarView_.reset();
+ browserActionsContainerDelegate_.reset();
+ browser_ = nullptr;
+}
+
- (void)addAccessibilityDescriptions {
// Set accessibility descriptions. http://openradar.appspot.com/7496255
NSString* description = l10n_util::GetNSStringWithFixup(IDS_ACCNAME_BACK);
« no previous file with comments | « chrome/browser/ui/cocoa/toolbar/toolbar_controller.h ('k') | chrome/browser/ui/cocoa/toolbar/toolbar_controller_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698