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)dealloc { |
| 118 [self browserWillBeDestroyed]; |
| 119 [super dealloc]; |
| 120 } |
| 121 |
| 122 - (void)browserWillBeDestroyed { |
| 123 // This method indicates imminent destruction. Destroy owned objects that hold |
| 124 // a weak Browser*, or pass this call onto reference counted objects. |
| 125 recentTabsMenuModelDelegate_.reset(); |
| 126 [self setModel:nullptr]; |
| 127 wrenchMenuModel_.reset(); |
| 128 buttonViewController_.reset(); |
| 129 |
| 130 [browserActionsController_ browserWillBeDestroyed]; |
| 131 |
| 132 browser_ = nullptr; |
| 133 } |
| 134 |
117 - (void)addItemToMenu:(NSMenu*)menu | 135 - (void)addItemToMenu:(NSMenu*)menu |
118 atIndex:(NSInteger)index | 136 atIndex:(NSInteger)index |
119 fromModel:(ui::MenuModel*)model { | 137 fromModel:(ui::MenuModel*)model { |
120 // Non-button item types should be built as normal items, with the exception | 138 // Non-button item types should be built as normal items, with the exception |
121 // of the extensions overflow menu. | 139 // of the extensions overflow menu. |
122 int command_id = model->GetCommandIdAt(index); | 140 int command_id = model->GetCommandIdAt(index); |
123 if (model->GetTypeAt(index) != ui::MenuModel::TYPE_BUTTON_ITEM && | 141 if (model->GetTypeAt(index) != ui::MenuModel::TYPE_BUTTON_ITEM && |
124 command_id != IDC_EXTENSIONS_OVERFLOW_MENU) { | 142 command_id != IDC_EXTENSIONS_OVERFLOW_MENU) { |
125 [super addItemToMenu:menu | 143 [super addItemToMenu:menu |
126 atIndex:index | 144 atIndex:index |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 recentTabsMenuModelDelegate_.reset( | 339 recentTabsMenuModelDelegate_.reset( |
322 new RecentTabsMenuModelDelegate(model, [self recentTabsSubmenu])); | 340 new RecentTabsMenuModelDelegate(model, [self recentTabsSubmenu])); |
323 } | 341 } |
324 } | 342 } |
325 | 343 |
326 - (BrowserActionsController*)browserActionsController { | 344 - (BrowserActionsController*)browserActionsController { |
327 return browserActionsController_.get(); | 345 return browserActionsController_.get(); |
328 } | 346 } |
329 | 347 |
330 - (void)createModel { | 348 - (void)createModel { |
| 349 DCHECK(browser_); |
331 recentTabsMenuModelDelegate_.reset(); | 350 recentTabsMenuModelDelegate_.reset(); |
332 wrenchMenuModel_.reset( | 351 wrenchMenuModel_.reset( |
333 new WrenchMenuModel(acceleratorDelegate_.get(), browser_)); | 352 new WrenchMenuModel(acceleratorDelegate_.get(), browser_)); |
334 [self setModel:wrenchMenuModel_.get()]; | 353 [self setModel:wrenchMenuModel_.get()]; |
335 | 354 |
336 buttonViewController_.reset( | 355 buttonViewController_.reset( |
337 [[WrenchMenuButtonViewController alloc] initWithController:self]); | 356 [[WrenchMenuButtonViewController alloc] initWithController:self]); |
338 [buttonViewController_ view]; | 357 [buttonViewController_ view]; |
339 } | 358 } |
340 | 359 |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 controller_ = controller; | 481 controller_ = controller; |
463 } | 482 } |
464 return self; | 483 return self; |
465 } | 484 } |
466 | 485 |
467 - (IBAction)dispatchWrenchMenuCommand:(id)sender { | 486 - (IBAction)dispatchWrenchMenuCommand:(id)sender { |
468 [controller_ dispatchWrenchMenuCommand:sender]; | 487 [controller_ dispatchWrenchMenuCommand:sender]; |
469 } | 488 } |
470 | 489 |
471 @end // @implementation WrenchMenuButtonViewController | 490 @end // @implementation WrenchMenuButtonViewController |
OLD | NEW |