Index: chrome/browser/views/toolbar_view.cc |
diff --git a/chrome/browser/views/toolbar_view.cc b/chrome/browser/views/toolbar_view.cc |
index d917804e92122cede09cd56e3dae715cfd307456..9cb3168bbd2b676537a21eb48789b5407695f5ac 100644 |
--- a/chrome/browser/views/toolbar_view.cc |
+++ b/chrome/browser/views/toolbar_view.cc |
@@ -1042,8 +1042,8 @@ void ToolbarView::CreateDevToolsMenuContents() { |
#endif |
void ToolbarView::CreateAppMenu() { |
- if (app_menu_contents_.get()) |
- return; |
+ // We always rebuild the app menu so that we can get the current state of the |
+ // extension system. |
app_menu_contents_.reset(new views::SimpleMenuModel(this)); |
app_menu_contents_->AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB); |
@@ -1054,7 +1054,8 @@ void ToolbarView::CreateAppMenu() { |
// We will create the child menu items for this once the asynchronous call is |
// done. See OnGetProfilesDone(). |
const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
- if (command_line.HasSwitch(switches::kEnableUserDataDirProfiles)) { |
+ if (command_line.HasSwitch(switches::kEnableUserDataDirProfiles) && |
+ !profiles_menu_contents_.get()) { |
profiles_helper_->GetProfiles(NULL); |
profiles_menu_contents_.reset(new views::SimpleMenuModel(this)); |
app_menu_contents_->AddSubMenuWithStringId(IDS_PROFILE_MENU, |
@@ -1071,6 +1072,39 @@ void ToolbarView::CreateAppMenu() { |
IDS_BOOKMARK_MANAGER); |
app_menu_contents_->AddItemWithStringId(IDC_SHOW_DOWNLOADS, |
IDS_SHOW_DOWNLOADS); |
+ |
+ // Create the extensions item or submenu. |
+ // If there are any browser actions, we create an "Extensions" submenu, of |
+ // which "Manage extensions" is the first entry. If there are no browser |
+ // actions, we just create an "Extensions" menu item which does the same thing |
+ // as "Manage extensions". |
+ ExtensionsService* extensions_service = |
+ browser_->profile()->GetExtensionsService(); |
+ if (extensions_service && extensions_service->extensions_enabled()) { |
+ std::vector<ContextualAction*> browser_actions = |
+ browser_->profile()->GetExtensionsService()->GetBrowserActions(); |
+ if (browser_actions.size() == 0) { |
+ app_menu_contents_->AddItemWithStringId(IDC_MANAGE_EXTENSIONS, |
+ IDS_SHOW_EXTENSIONS); |
+ } else { |
+ extension_menu_contents_.reset(new views::SimpleMenuModel(this)); |
+ app_menu_contents_->AddSubMenuWithStringId( |
+ IDS_SHOW_EXTENSIONS, extension_menu_contents_.get()); |
+ |
+ extension_menu_contents_->AddItemWithStringId(IDC_MANAGE_EXTENSIONS, |
+ IDS_MANAGE_EXTENSIONS); |
+ for (size_t i = 0; i < browser_actions.size(); ++i) { |
+ if (browser_actions[i]->command_id() > IDC_BROWSER_ACTION_LAST) { |
+ NOTREACHED() << "Too many browser actions."; |
+ } else { |
+ extension_menu_contents_->AddItem( |
+ browser_actions[i]->command_id(), |
+ UTF8ToUTF16(browser_actions[i]->name())); |
+ } |
+ } |
+ } |
+ } |
+ |
app_menu_contents_->AddSeparator(); |
#ifdef CHROME_PERSONALIZATION |
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableSync)) { |