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

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: Keep -[BookmarBarController dealloc] instead of changing all the tests. 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)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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698