OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.h" | 5 #import "chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/mac/bundle_locations.h" | 8 #include "base/mac/bundle_locations.h" |
9 #include "base/strings/string16.h" | 9 #include "base/strings/string16.h" |
10 #include "base/strings/sys_string_conversions.h" | 10 #include "base/strings/sys_string_conversions.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 observer_.reset(new WrenchMenuControllerInternal::ZoomLevelObserver( | 107 observer_.reset(new WrenchMenuControllerInternal::ZoomLevelObserver( |
108 self, | 108 self, |
109 ui_zoom::ZoomEventManager::GetForBrowserContext(browser->profile()))); | 109 ui_zoom::ZoomEventManager::GetForBrowserContext(browser->profile()))); |
110 acceleratorDelegate_.reset( | 110 acceleratorDelegate_.reset( |
111 new WrenchMenuControllerInternal::AcceleratorDelegate()); | 111 new WrenchMenuControllerInternal::AcceleratorDelegate()); |
112 [self createModel]; | 112 [self createModel]; |
113 } | 113 } |
114 return self; | 114 return self; |
115 } | 115 } |
116 | 116 |
| 117 - (void)browserWillBeDestroyed { |
| 118 // This method indicates imminent destruction. Destroy owned objects that hold |
| 119 // a weak Browser*, or pass this call onto reference counted objects. |
| 120 recentTabsMenuModelDelegate_.reset(); |
| 121 [self setModel:nullptr]; |
| 122 wrenchMenuModel_.reset(); |
| 123 buttonViewController_.reset(); |
| 124 |
| 125 [browserActionsController_ browserWillBeDestroyed]; |
| 126 |
| 127 browser_ = nullptr; |
| 128 } |
| 129 |
117 - (void)addItemToMenu:(NSMenu*)menu | 130 - (void)addItemToMenu:(NSMenu*)menu |
118 atIndex:(NSInteger)index | 131 atIndex:(NSInteger)index |
119 fromModel:(ui::MenuModel*)model { | 132 fromModel:(ui::MenuModel*)model { |
120 // Non-button item types should be built as normal items, with the exception | 133 // Non-button item types should be built as normal items, with the exception |
121 // of the extensions overflow menu. | 134 // of the extensions overflow menu. |
122 int command_id = model->GetCommandIdAt(index); | 135 int command_id = model->GetCommandIdAt(index); |
123 if (model->GetTypeAt(index) != ui::MenuModel::TYPE_BUTTON_ITEM && | 136 if (model->GetTypeAt(index) != ui::MenuModel::TYPE_BUTTON_ITEM && |
124 command_id != IDC_EXTENSIONS_OVERFLOW_MENU) { | 137 command_id != IDC_EXTENSIONS_OVERFLOW_MENU) { |
125 [super addItemToMenu:menu | 138 [super addItemToMenu:menu |
126 atIndex:index | 139 atIndex:index |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 recentTabsMenuModelDelegate_.reset( | 334 recentTabsMenuModelDelegate_.reset( |
322 new RecentTabsMenuModelDelegate(model, [self recentTabsSubmenu])); | 335 new RecentTabsMenuModelDelegate(model, [self recentTabsSubmenu])); |
323 } | 336 } |
324 } | 337 } |
325 | 338 |
326 - (BrowserActionsController*)browserActionsController { | 339 - (BrowserActionsController*)browserActionsController { |
327 return browserActionsController_.get(); | 340 return browserActionsController_.get(); |
328 } | 341 } |
329 | 342 |
330 - (void)createModel { | 343 - (void)createModel { |
| 344 DCHECK(browser_); |
331 recentTabsMenuModelDelegate_.reset(); | 345 recentTabsMenuModelDelegate_.reset(); |
332 wrenchMenuModel_.reset( | 346 wrenchMenuModel_.reset( |
333 new WrenchMenuModel(acceleratorDelegate_.get(), browser_)); | 347 new WrenchMenuModel(acceleratorDelegate_.get(), browser_)); |
334 [self setModel:wrenchMenuModel_.get()]; | 348 [self setModel:wrenchMenuModel_.get()]; |
335 | 349 |
336 buttonViewController_.reset( | 350 buttonViewController_.reset( |
337 [[WrenchMenuButtonViewController alloc] initWithController:self]); | 351 [[WrenchMenuButtonViewController alloc] initWithController:self]); |
338 [buttonViewController_ view]; | 352 [buttonViewController_ view]; |
339 } | 353 } |
340 | 354 |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 controller_ = controller; | 476 controller_ = controller; |
463 } | 477 } |
464 return self; | 478 return self; |
465 } | 479 } |
466 | 480 |
467 - (IBAction)dispatchWrenchMenuCommand:(id)sender { | 481 - (IBAction)dispatchWrenchMenuCommand:(id)sender { |
468 [controller_ dispatchWrenchMenuCommand:sender]; | 482 [controller_ dispatchWrenchMenuCommand:sender]; |
469 } | 483 } |
470 | 484 |
471 @end // @implementation WrenchMenuButtonViewController | 485 @end // @implementation WrenchMenuButtonViewController |
OLD | NEW |