Index: chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.mm |
diff --git a/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.mm b/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.mm |
index 0a200cacc02a0785e4c1c050eb07e67fbb95d620..0bfe5f98c32895ec61f147f76fe7cb871a75045b 100644 |
--- a/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.mm |
+++ b/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.mm |
@@ -114,6 +114,19 @@ class ZoomLevelObserver { |
return self; |
} |
+- (void)browserWillBeDestroyed { |
+ // This method indicates imminent destruction. Destroy owned objects that hold |
+ // a weak Browser*, or pass this call onto reference counted objects. |
+ recentTabsMenuModelDelegate_.reset(); |
+ [self setModel:nullptr]; |
+ wrenchMenuModel_.reset(); |
+ buttonViewController_.reset(); |
+ |
+ [browserActionsController_ browserWillBeDestroyed]; |
+ |
+ browser_ = nullptr; |
+} |
+ |
- (void)addItemToMenu:(NSMenu*)menu |
atIndex:(NSInteger)index |
fromModel:(ui::MenuModel*)model { |
@@ -328,6 +341,7 @@ class ZoomLevelObserver { |
} |
- (void)createModel { |
+ DCHECK(browser_); |
recentTabsMenuModelDelegate_.reset(); |
wrenchMenuModel_.reset( |
new WrenchMenuModel(acceleratorDelegate_.get(), browser_)); |