Index: chrome/browser/ui/cocoa/extensions/browser_action_button.mm |
diff --git a/chrome/browser/ui/cocoa/extensions/browser_action_button.mm b/chrome/browser/ui/cocoa/extensions/browser_action_button.mm |
index b8bc8885aeeb977e122dc02c0067e00275bc7be5..3dd70481b4bdf1de6c11c47af5d6353c17af301e 100644 |
--- a/chrome/browser/ui/cocoa/extensions/browser_action_button.mm |
+++ b/chrome/browser/ui/cocoa/extensions/browser_action_button.mm |
@@ -40,12 +40,18 @@ class ToolbarActionViewDelegateBridge : public ToolbarActionViewDelegateCocoa { |
BrowserActionsController* controller); |
~ToolbarActionViewDelegateBridge(); |
+ ExtensionActionContextMenuController* menuController() { |
+ return menuController_; |
+ } |
+ |
private: |
// ToolbarActionViewDelegateCocoa: |
ToolbarActionViewController* GetPreferredPopupViewController() override; |
content::WebContents* GetCurrentWebContents() const override; |
void UpdateState() override; |
NSPoint GetPopupPoint() override; |
+ void SetContextMenuController( |
+ ExtensionActionContextMenuController* menuController) override; |
// The owning button. Weak. |
BrowserActionButton* owner_; |
@@ -53,6 +59,9 @@ class ToolbarActionViewDelegateBridge : public ToolbarActionViewDelegateCocoa { |
// The BrowserActionsController that owns the button. Weak. |
BrowserActionsController* controller_; |
+ // The context menu controller. Weak. |
+ ExtensionActionContextMenuController* menuController_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ToolbarActionViewDelegateBridge); |
}; |
@@ -60,7 +69,8 @@ ToolbarActionViewDelegateBridge::ToolbarActionViewDelegateBridge( |
BrowserActionButton* owner, |
BrowserActionsController* controller) |
: owner_(owner), |
- controller_(controller) { |
+ controller_(controller), |
+ menuController_(nil) { |
} |
ToolbarActionViewDelegateBridge::~ToolbarActionViewDelegateBridge() { |
@@ -84,6 +94,11 @@ NSPoint ToolbarActionViewDelegateBridge::GetPopupPoint() { |
return [controller_ popupPointForId:[owner_ viewController]->GetId()]; |
} |
+void ToolbarActionViewDelegateBridge::SetContextMenuController( |
+ ExtensionActionContextMenuController* menuController) { |
+ menuController_ = menuController; |
+} |
+ |
@interface BrowserActionCell (Internals) |
- (void)drawBadgeWithinFrame:(NSRect)frame; |
@end |
@@ -102,8 +117,7 @@ NSPoint ToolbarActionViewDelegateBridge::GetPopupPoint() { |
- (id)initWithFrame:(NSRect)frame |
viewController:(scoped_ptr<ToolbarActionViewController>)viewController |
- controller:(BrowserActionsController*)controller |
- menuController:(ExtensionActionContextMenuController*)menuController { |
+ controller:(BrowserActionsController*)controller { |
if ((self = [super initWithFrame:frame])) { |
BrowserActionCell* cell = [[[BrowserActionCell alloc] init] autorelease]; |
// [NSButton setCell:] warns to NOT use setCell: other than in the |
@@ -138,8 +152,6 @@ NSPoint ToolbarActionViewDelegateBridge::GetPopupPoint() { |
[self setButtonType:NSMomentaryChangeButton]; |
[self setShowsBorderOnlyWhileMouseInside:YES]; |
- contextMenuController_.reset(menuController); |
- |
base::scoped_nsobject<NSMenu> contextMenu( |
[[NSMenu alloc] initWithTitle:@""]); |
[contextMenu setDelegate:self]; |
@@ -300,7 +312,10 @@ NSPoint ToolbarActionViewDelegateBridge::GetPopupPoint() { |
- (void)menuNeedsUpdate:(NSMenu*)menu { |
[menu removeAllItems]; |
- [contextMenuController_ populateMenu:menu]; |
+ // |menuController()| can be nil if we don't show context menus for the given |
+ // action. |
+ if (viewControllerDelegate_->menuController()) |
+ [viewControllerDelegate_->menuController() populateMenu:menu]; |
} |
@end |