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

Side by Side Diff: chrome/browser/ui/cocoa/wrench_menu/wrench_menu_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: Add HasWeakBrowserPointer protocol. Allow -dealloc without preceding -browserWillBeDestroyed. 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 unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698