Index: chrome/browser/views/browser_actions_container.cc |
=================================================================== |
--- chrome/browser/views/browser_actions_container.cc (revision 41960) |
+++ chrome/browser/views/browser_actions_container.cc (working copy) |
@@ -33,6 +33,7 @@ |
#include "third_party/skia/include/effects/SkGradientShader.h" |
#include "views/controls/button/menu_button.h" |
#include "views/controls/button/text_button.h" |
+#include "views/controls/menu/menu_2.h" |
#include "views/drag_utils.h" |
#include "views/window/window.h" |
@@ -225,8 +226,11 @@ |
// Make the menu appear below the button. |
point.Offset(0, height()); |
- panel_->GetContextMenu()->Run(extension(), extension()->browser_action(), |
- panel_, panel_->profile()->GetPrefs(), point); |
+ // Reconstructs the menu every time because the menu's contents are dynamic. |
+ context_menu_contents_.reset(new ExtensionContextMenuModel( |
+ extension(), panel_->browser(), panel_)); |
+ context_menu_menu_.reset(new views::Menu2(context_menu_contents_.get())); |
+ context_menu_menu_->RunContextMenuAt(point); |
SetButtonNotPushed(); |
return false; |
@@ -375,7 +379,6 @@ |
if (model_) |
model_->RemoveObserver(this); |
StopShowFolderDropMenuTimer(); |
- CloseMenus(); |
HidePopup(); |
DeleteBrowserActionViews(); |
} |
@@ -393,18 +396,12 @@ |
return tab_contents->controller().session_id().id(); |
} |
-ExtensionActionContextMenu* BrowserActionsContainer::GetContextMenu() { |
- if (!context_menu_.get()) |
- context_menu_.reset(new ExtensionActionContextMenu()); |
- return context_menu_.get(); |
-} |
- |
BrowserActionView* BrowserActionsContainer::GetBrowserActionView( |
- Extension* extension) { |
+ ExtensionAction* action) { |
for (BrowserActionViews::iterator iter = |
browser_action_views_.begin(); iter != browser_action_views_.end(); |
++iter) { |
- if ((*iter)->button()->extension() == extension) |
+ if ((*iter)->button()->browser_action() == action) |
return *iter; |
} |
@@ -416,10 +413,7 @@ |
browser_action_views_[i]->button()->UpdateState(); |
} |
-void BrowserActionsContainer::CloseMenus() { |
- if (context_menu_.get()) |
- context_menu_->Cancel(); |
- // Close the overflow menu if open. |
+void BrowserActionsContainer::CloseOverflowMenu() { |
if (overflow_menu_) |
overflow_menu_->CancelMenu(); |
} |
@@ -878,9 +872,8 @@ |
"exists."; |
} |
#endif |
+ CloseOverflowMenu(); |
- CloseMenus(); |
- |
if (!ShouldDisplayBrowserAction(extension)) |
return; |
@@ -918,7 +911,7 @@ |
} |
void BrowserActionsContainer::BrowserActionRemoved(Extension* extension) { |
- CloseMenus(); |
+ CloseOverflowMenu(); |
if (popup_ && popup_->host()->extension() == extension) |
HidePopup(); |
@@ -1074,9 +1067,9 @@ |
overflow_menu_ = NULL; |
} |
-void BrowserActionsContainer::ShowPopupForDevToolsWindow(Extension* extension, |
- ExtensionAction* extension_action) { |
- OnBrowserActionExecuted(GetBrowserActionView(extension)->button(), |
+void BrowserActionsContainer::InspectPopup( |
+ ExtensionAction* action) { |
+ OnBrowserActionExecuted(GetBrowserActionView(action)->button(), |
true); // inspect_with_devtools |
} |