Upstream version 11.39.250.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / toolbar / wrench_menu_model.cc
index e713bca..c894199 100644 (file)
 #include "chrome/app/chrome_command_ids.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/defaults.h"
+#include "chrome/browser/extensions/extension_toolbar_model.h"
+#include "chrome/browser/extensions/extension_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/search/search.h"
-#include "chrome/browser/signin/signin_manager.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/browser/signin/signin_ui_util.h"
 #include "chrome/browser/task_manager/task_manager.h"
+#include "chrome/browser/ui/bookmarks/bookmark_utils.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/toolbar/bookmark_sub_menu_model.h"
 #include "chrome/browser/ui/toolbar/encoding_menu_controller.h"
 #include "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h"
+#include "chrome/browser/ui/zoom/zoom_controller.h"
+#include "chrome/browser/ui/zoom/zoom_event_manager.h"
 #include "chrome/browser/upgrade_detector.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/profiling.h"
+#include "chrome/grit/chromium_strings.h"
+#include "chrome/grit/generated_resources.h"
+#include "components/signin/core/browser/signin_manager.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/host_zoom_map.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/notification_service.h"
@@ -45,8 +53,7 @@
 #include "content/public/browser/notification_types.h"
 #include "content/public/browser/user_metrics.h"
 #include "content/public/browser/web_contents.h"
-#include "grit/chromium_strings.h"
-#include "grit/generated_resources.h"
+#include "extensions/common/feature_switch.h"
 #include "grit/theme_resources.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/layout.h"
 #include "chrome/browser/enumerate_modules_model_win.h"
 #include "chrome/browser/ui/metro_pin_tab_helper_win.h"
 #include "content/public/browser/gpu_data_manager.h"
-#include "win8/util/win8_util.h"
 #endif
 
 #if defined(USE_ASH)
 #include "ash/shell.h"
 #endif
 
-using content::HostZoomMap;
-using content::UserMetricsAction;
+using base::UserMetricsAction;
 using content::WebContents;
 
 namespace {
 // Conditionally return the update app menu item title based on upgrade detector
 // state.
-string16 GetUpgradeDialogMenuItemName() {
-  if (UpgradeDetector::GetInstance()->is_outdated_install()) {
-    return l10n_util::GetStringFUTF16(
-        IDS_UPGRADE_BUBBLE_MENU_ITEM,
-        l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME));
+base::string16 GetUpgradeDialogMenuItemName() {
+  if (UpgradeDetector::GetInstance()->is_outdated_install() ||
+      UpgradeDetector::GetInstance()->is_outdated_install_no_au()) {
+    return l10n_util::GetStringUTF16(IDS_UPGRADE_BUBBLE_MENU_ITEM);
   } else {
     return l10n_util::GetStringUTF16(IDS_UPDATE_NOW);
   }
@@ -114,7 +118,7 @@ void EncodingMenuModel::Build() {
       encoding_menu_items.begin();
   for (; it != encoding_menu_items.end(); ++it) {
     int id = it->first;
-    string16& label = it->second;
+    base::string16& label = it->second;
     if (id == 0) {
       AddSeparator(ui::NORMAL_SEPARATOR);
     } else {
@@ -179,6 +183,43 @@ void ZoomMenuModel::Build() {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
+// HelpMenuModel
+
+#if defined(GOOGLE_CHROME_BUILD)
+
+class WrenchMenuModel::HelpMenuModel : public ui::SimpleMenuModel {
+ public:
+  HelpMenuModel(ui::SimpleMenuModel::Delegate* delegate,
+                Browser* browser)
+      : SimpleMenuModel(delegate) {
+    Build(browser);
+  }
+  virtual ~HelpMenuModel() {
+  }
+
+ private:
+  void Build(Browser* browser) {
+#if defined(OS_CHROMEOS) && defined(OFFICIAL_BUILD)
+    int help_string_id = IDS_GET_HELP;
+#else
+    int help_string_id = IDS_HELP_PAGE;
+#endif
+    AddItemWithStringId(IDC_HELP_PAGE_VIA_MENU, help_string_id);
+    if (browser_defaults::kShowHelpMenuItemIcon) {
+      ui::ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+      SetIcon(GetIndexOfCommandId(IDC_HELP_PAGE_VIA_MENU),
+              rb.GetNativeImageNamed(IDR_HELP_MENU));
+    }
+
+    AddItemWithStringId(IDC_FEEDBACK, IDS_FEEDBACK);
+  }
+
+  DISALLOW_COPY_AND_ASSIGN(HelpMenuModel);
+};
+
+#endif  // defined(GOOGLE_CHROME_BUILD)
+
+////////////////////////////////////////////////////////////////////////////////
 // ToolsMenuModel
 
 ToolsMenuModel::ToolsMenuModel(ui::SimpleMenuModel::Delegate* delegate,
@@ -190,11 +231,22 @@ ToolsMenuModel::ToolsMenuModel(ui::SimpleMenuModel::Delegate* delegate,
 ToolsMenuModel::~ToolsMenuModel() {}
 
 void ToolsMenuModel::Build(Browser* browser) {
-#if !defined(OS_CHROMEOS) && !defined(OS_MACOSX)
-  AddItemWithStringId(IDC_CREATE_SHORTCUTS, IDS_CREATE_SHORTCUTS);
-  AddSeparator(ui::NORMAL_SEPARATOR);
+  bool show_create_shortcuts = true;
+#if defined(OS_CHROMEOS) || defined(OS_MACOSX)
+  show_create_shortcuts = false;
+#elif defined(USE_ASH)
+  if (browser->host_desktop_type() == chrome::HOST_DESKTOP_TYPE_ASH)
+    show_create_shortcuts = false;
 #endif
 
+  if (extensions::util::IsStreamlinedHostedAppsEnabled()) {
+    AddItemWithStringId(IDC_CREATE_HOSTED_APP, IDS_CREATE_HOSTED_APP);
+    AddSeparator(ui::NORMAL_SEPARATOR);
+  } else if (show_create_shortcuts) {
+    AddItemWithStringId(IDC_CREATE_SHORTCUTS, IDS_CREATE_SHORTCUTS);
+    AddSeparator(ui::NORMAL_SEPARATOR);
+  }
+
   AddItemWithStringId(IDC_MANAGE_EXTENSIONS, IDS_SHOW_EXTENSIONS);
 
   if (chrome::CanOpenTaskManager())
@@ -204,14 +256,6 @@ void ToolsMenuModel::Build(Browser* browser) {
 
   AddSeparator(ui::NORMAL_SEPARATOR);
 
-#if defined(GOOGLE_CHROME_BUILD)
-#if !defined(OS_CHROMEOS)
-  // Show IDC_FEEDBACK in "Tools" menu for non-ChromeOS platforms.
-  AddItemWithStringId(IDC_FEEDBACK, IDS_FEEDBACK);
-  AddSeparator(ui::NORMAL_SEPARATOR);
-#endif
-#endif // GOOGLE_CHROME_BUILD
-
   encoding_menu_model_.reset(new EncodingMenuModel(browser));
   AddSubMenuWithStringId(IDC_ENCODING_MENU, IDS_ENCODING_MENU,
                          encoding_menu_model_.get());
@@ -230,16 +274,20 @@ void ToolsMenuModel::Build(Browser* browser) {
 // WrenchMenuModel
 
 WrenchMenuModel::WrenchMenuModel(ui::AcceleratorProvider* provider,
-                                 Browser* browser,
-                                 bool is_new_menu)
+                                 Browser* browser)
     : ui::SimpleMenuModel(this),
       provider_(provider),
       browser_(browser),
       tab_strip_model_(browser_->tab_strip_model()) {
-  Build(is_new_menu);
+  Build();
   UpdateZoomControls();
 
-  zoom_subscription_ = HostZoomMap::GetForBrowserContext(
+  content_zoom_subscription_ =
+      content::HostZoomMap::GetDefaultForBrowserContext(browser->profile())
+          ->AddZoomLevelChangedCallback(base::Bind(
+              &WrenchMenuModel::OnZoomLevelChanged, base::Unretained(this)));
+
+  browser_zoom_subscription_ = ZoomEventManager::GetForBrowserContext(
       browser->profile())->AddZoomLevelChangedCallback(
           base::Bind(&WrenchMenuModel::OnZoomLevelChanged,
                      base::Unretained(this)));
@@ -267,10 +315,10 @@ bool WrenchMenuModel::IsItemForCommandIdDynamic(int command_id) const {
          command_id == IDC_PIN_TO_START_SCREEN ||
 #endif
          command_id == IDC_UPGRADE_DIALOG ||
-         command_id == IDC_SHOW_SIGNIN;
+         (!switches::IsNewAvatarMenu() && command_id == IDC_SHOW_SIGNIN);
 }
 
-string16 WrenchMenuModel::GetLabelForCommandId(int command_id) const {
+base::string16 WrenchMenuModel::GetLabelForCommandId(int command_id) const {
   switch (command_id) {
     case IDC_ZOOM_PERCENT_DISPLAY:
       return zoom_label_;
@@ -298,11 +346,12 @@ string16 WrenchMenuModel::GetLabelForCommandId(int command_id) const {
     case IDC_UPGRADE_DIALOG:
       return GetUpgradeDialogMenuItemName();
     case IDC_SHOW_SIGNIN:
+      DCHECK(!switches::IsNewAvatarMenu());
       return signin_ui_util::GetSigninMenuLabel(
           browser_->profile()->GetOriginalProfile());
     default:
       NOTREACHED();
-      return string16();
+      return base::string16();
   }
 }
 
@@ -313,13 +362,13 @@ bool WrenchMenuModel::GetIconForCommandId(int command_id,
     case IDC_UPGRADE_DIALOG: {
       if (UpgradeDetector::GetInstance()->notify_upgrade()) {
         *icon = rb.GetNativeImageNamed(
-            UpgradeDetector::GetInstance()->GetIconResourceID(
-                UpgradeDetector::UPGRADE_ICON_TYPE_MENU_ICON));
+            UpgradeDetector::GetInstance()->GetIconResourceID());
         return true;
       }
       return false;
     }
     case IDC_SHOW_SIGNIN: {
+      DCHECK(!switches::IsNewAvatarMenu());
       GlobalError* error = signin_ui_util::GetSignedInServiceError(
           browser_->profile()->GetOriginalProfile());
       if (error) {
@@ -345,7 +394,7 @@ void WrenchMenuModel::ExecuteCommand(int command_id, int event_flags) {
     return;
   }
 
-  if (command_id == IDC_SHOW_SIGNIN) {
+  if (!switches::IsNewAvatarMenu() && command_id == IDC_SHOW_SIGNIN) {
     // If a custom error message is being shown, handle it.
     GlobalError* error = signin_ui_util::GetSignedInServiceError(
         browser_->profile()->GetOriginalProfile());
@@ -370,7 +419,8 @@ void WrenchMenuModel::ExecuteCommand(int command_id, int event_flags) {
 
 bool WrenchMenuModel::IsCommandIdChecked(int command_id) const {
   if (command_id == IDC_SHOW_BOOKMARK_BAR) {
-    return browser_->profile()->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar);
+    return browser_->profile()->GetPrefs()->GetBoolean(
+        bookmarks::prefs::kShowBookmarkBar);
   } else if (command_id == IDC_PROFILING_ENABLED) {
     return Profiling::BeingProfiled();
   } else if (command_id == IDC_TOGGLE_REQUEST_TABLET_SITE) {
@@ -390,27 +440,36 @@ bool WrenchMenuModel::IsCommandIdEnabled(int command_id) const {
 }
 
 bool WrenchMenuModel::IsCommandIdVisible(int command_id) const {
+  switch (command_id) {
 #if defined(OS_WIN)
-  if (command_id == IDC_VIEW_INCOMPATIBILITIES) {
-    EnumerateModulesModel* loaded_modules =
-        EnumerateModulesModel::GetInstance();
-    if (loaded_modules->confirmed_bad_modules_detected() <= 0)
-      return false;
-    // We'll leave the wrench adornment on until the user clicks the link.
-    if (loaded_modules->modules_to_notify_about() <= 0)
-      loaded_modules->AcknowledgeConflictNotification();
-    return true;
-  } else if (command_id == IDC_PIN_TO_START_SCREEN) {
-    return base::win::IsMetroProcess();
+    case IDC_VIEW_INCOMPATIBILITIES: {
+      EnumerateModulesModel* loaded_modules =
+          EnumerateModulesModel::GetInstance();
+      if (loaded_modules->confirmed_bad_modules_detected() <= 0)
+        return false;
+      // We'll leave the wrench adornment on until the user clicks the link.
+      if (loaded_modules->modules_to_notify_about() <= 0)
+        loaded_modules->AcknowledgeConflictNotification();
+      return true;
+    }
+    case IDC_PIN_TO_START_SCREEN:
+      return base::win::IsMetroProcess();
 #else
-  if (command_id == IDC_VIEW_INCOMPATIBILITIES ||
-      command_id == IDC_PIN_TO_START_SCREEN) {
-    return false;
+    case IDC_VIEW_INCOMPATIBILITIES:
+    case IDC_PIN_TO_START_SCREEN:
+      return false;
+#endif
+    case IDC_UPGRADE_DIALOG:
+      return UpgradeDetector::GetInstance()->notify_upgrade();
+#if !defined(OS_LINUX) || defined(USE_AURA)
+    case IDC_BOOKMARK_PAGE:
+      return !chrome::ShouldRemoveBookmarkThisPageUI(browser_->profile());
+    case IDC_BOOKMARK_ALL_TABS:
+      return !chrome::ShouldRemoveBookmarkOpenPagesUI(browser_->profile());
 #endif
-  } else if (command_id == IDC_UPGRADE_DIALOG) {
-    return UpgradeDetector::GetInstance()->notify_upgrade();
+    default:
+      return true;
   }
-  return true;
 }
 
 bool WrenchMenuModel::GetAcceleratorForCommandId(
@@ -458,44 +517,13 @@ WrenchMenuModel::WrenchMenuModel()
 }
 
 bool WrenchMenuModel::ShouldShowNewIncognitoWindowMenuItem() {
-  if (browser_->profile()->IsManaged())
-    return false;
-
-#if defined(OS_WIN)
-  if (win8::IsSingleWindowMetroMode() &&
-      browser_->profile()->HasOffTheRecordProfile()) {
+  if (browser_->profile()->IsSupervised())
     return false;
-  }
-#endif
-
-#if defined(OS_CHROMEOS)
-  if (CommandLine::ForCurrentProcess()->HasSwitch(
-      chromeos::switches::kGuestSession)) {
-    return false;
-  }
-#endif
 
-  return true;
+  return !browser_->profile()->IsGuestSession();
 }
 
-bool WrenchMenuModel::ShouldShowNewWindowMenuItem() {
-#if defined(OS_WIN)
-  if (!win8::IsSingleWindowMetroMode())
-    return true;
-
-  // In Win8's single window Metro mode, we only show the New Window options
-  // if there isn't already a window of the requested type (incognito or not)
-  // that is available.
-  return browser_->profile()->IsOffTheRecord() &&
-      !chrome::FindBrowserWithProfile(
-          browser_->profile()->GetOriginalProfile(),
-          browser_->host_desktop_type());
-#else
-  return true;
-#endif
-}
-
-void WrenchMenuModel::Build(bool is_new_menu) {
+void WrenchMenuModel::Build() {
 #if defined(OS_WIN)
   AddItem(IDC_VIEW_INCOMPATIBILITIES,
       l10n_util::GetStringUTF16(IDS_VIEW_INCOMPATIBILITIES));
@@ -506,27 +534,20 @@ void WrenchMenuModel::Build(bool is_new_menu) {
     AddSeparator(ui::NORMAL_SEPARATOR);
 #endif
 
+  if (extensions::FeatureSwitch::extension_action_redesign()->IsEnabled())
+    CreateExtensionToolbarOverflowMenu();
+
   AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB);
-  if (ShouldShowNewWindowMenuItem())
-    AddItemWithStringId(IDC_NEW_WINDOW, IDS_NEW_WINDOW);
+  AddItemWithStringId(IDC_NEW_WINDOW, IDS_NEW_WINDOW);
 
   if (ShouldShowNewIncognitoWindowMenuItem())
     AddItemWithStringId(IDC_NEW_INCOGNITO_WINDOW, IDS_NEW_INCOGNITO_WINDOW);
 
-#if defined(OS_WIN) && !defined(NDEBUG) && defined(USE_ASH)
-  if (base::win::GetVersion() < base::win::VERSION_WIN8 &&
-      chrome::HOST_DESKTOP_TYPE_NATIVE != chrome::HOST_DESKTOP_TYPE_ASH) {
-    AddItemWithStringId(IDC_TOGGLE_ASH_DESKTOP,
-                        ash::Shell::HasInstance() ? IDS_CLOSE_ASH_DESKTOP :
-                                                    IDS_OPEN_ASH_DESKTOP);
-  }
-#endif
-
   bookmark_sub_menu_model_.reset(new BookmarkSubMenuModel(this, browser_));
   AddSubMenuWithStringId(IDC_BOOKMARKS_MENU, IDS_BOOKMARKS_MENU,
                          bookmark_sub_menu_model_.get());
 
-  if (chrome::IsInstantExtendedAPIEnabled()) {
+  if (!browser_->profile()->IsOffTheRecord()) {
     recent_tabs_sub_menu_model_.reset(new RecentTabsSubMenuModel(provider_,
                                                                  browser_,
                                                                  NULL));
@@ -535,76 +556,67 @@ void WrenchMenuModel::Build(bool is_new_menu) {
   }
 
 #if defined(OS_WIN)
-
-#if defined(USE_AURA)
- if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
-     content::GpuDataManager::GetInstance()->CanUseGpuBrowserCompositor()) {
+  if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
+      content::GpuDataManager::GetInstance()->CanUseGpuBrowserCompositor()) {
     if (browser_->host_desktop_type() == chrome::HOST_DESKTOP_TYPE_ASH) {
-      // Metro mode, add the 'Relaunch Chrome in desktop mode'.
+      // ASH/Metro mode, add the 'Relaunch Chrome in desktop mode'.
       AddSeparator(ui::NORMAL_SEPARATOR);
-      AddItemWithStringId(IDC_WIN8_DESKTOP_RESTART, IDS_WIN8_DESKTOP_RESTART);
+      AddItemWithStringId(IDC_WIN_DESKTOP_RESTART, IDS_WIN_DESKTOP_RESTART);
     } else {
-      // In Windows 8 desktop, add the 'Relaunch Chrome in Windows 8 mode'.
       AddSeparator(ui::NORMAL_SEPARATOR);
       AddItemWithStringId(IDC_WIN8_METRO_RESTART, IDS_WIN8_METRO_RESTART);
     }
   }
-#else
-  if (base::win::IsMetroProcess()) {
-    // Metro mode, add the 'Relaunch Chrome in desktop mode'.
-    AddSeparator(ui::NORMAL_SEPARATOR);
-    AddItemWithStringId(IDC_WIN8_DESKTOP_RESTART, IDS_WIN8_DESKTOP_RESTART);
-  } else {
-    // In Windows 8 desktop, add the 'Relaunch Chrome in Windows 8 mode'.
-    AddSeparator(ui::NORMAL_SEPARATOR);
-    AddItemWithStringId(IDC_WIN8_METRO_RESTART, IDS_WIN8_METRO_RESTART);
-  }
-#endif
-
 #endif
 
   // Append the full menu including separators. The final separator only gets
   // appended when this is a touch menu - otherwise it would get added twice.
-  CreateCutCopyPasteMenu(is_new_menu);
+  CreateCutCopyPasteMenu();
 
-  if (!is_new_menu)
-    CreateZoomMenu(is_new_menu);
+  if (CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kEnableDomDistiller)) {
+    AddItemWithStringId(IDC_DISTILL_PAGE, IDS_DISTILL_PAGE);
+  }
 
   AddItemWithStringId(IDC_SAVE_PAGE, IDS_SAVE_PAGE);
   AddItemWithStringId(IDC_FIND, IDS_FIND);
   AddItemWithStringId(IDC_PRINT, IDS_PRINT);
 
   tools_menu_model_.reset(new ToolsMenuModel(this, browser_));
-  // In case of touch this is the last item.
-  if (!is_new_menu) {
-    AddSubMenuWithStringId(IDC_ZOOM_MENU, IDS_TOOLS_MENU,
-                           tools_menu_model_.get());
-  }
-
-  if (is_new_menu)
-    CreateZoomMenu(is_new_menu);
-  else
-    AddSeparator(ui::NORMAL_SEPARATOR);
+  CreateZoomMenu();
 
   AddItemWithStringId(IDC_SHOW_HISTORY, IDS_SHOW_HISTORY);
   AddItemWithStringId(IDC_SHOW_DOWNLOADS, IDS_SHOW_DOWNLOADS);
   AddSeparator(ui::NORMAL_SEPARATOR);
 
 #if !defined(OS_CHROMEOS)
-  // No "Sign in to Chromium..." menu item on ChromeOS.
-  SigninManager* signin = SigninManagerFactory::GetForProfile(
-      browser_->profile()->GetOriginalProfile());
-  if (signin && signin->IsSigninAllowed()) {
-    const string16 short_product_name =
-        l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME);
-    AddItem(IDC_SHOW_SYNC_SETUP, l10n_util::GetStringFUTF16(
-        IDS_SYNC_MENU_PRE_SYNCED_LABEL, short_product_name));
-    AddSeparator(ui::NORMAL_SEPARATOR);
+  if (!switches::IsNewAvatarMenu()) {
+    // No "Sign in to Chromium..." menu item on ChromeOS.
+    SigninManager* signin = SigninManagerFactory::GetForProfile(
+        browser_->profile()->GetOriginalProfile());
+    if (signin && signin->IsSigninAllowed()) {
+      const base::string16 short_product_name =
+          l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME);
+      AddItem(IDC_SHOW_SYNC_SETUP, l10n_util::GetStringFUTF16(
+          IDS_SYNC_MENU_PRE_SYNCED_LABEL, short_product_name));
+      AddSeparator(ui::NORMAL_SEPARATOR);
+    }
   }
 #endif
 
   AddItemWithStringId(IDC_OPTIONS, IDS_SETTINGS);
 
+// On ChromeOS we don't want the about menu option.
+#if !defined(OS_CHROMEOS)
+  AddItem(IDC_ABOUT, l10n_util::GetStringUTF16(IDS_ABOUT));
+#endif
+
+#if defined(GOOGLE_CHROME_BUILD)
+  help_menu_model_.reset(new HelpMenuModel(this, browser_));
+  AddSubMenuWithStringId(IDC_HELP_MENU, IDS_HELP_MENU,
+                         help_menu_model_.get());
+#endif
+
 #if defined(OS_CHROMEOS)
   if (CommandLine::ForCurrentProcess()->HasSwitch(
           chromeos::switches::kEnableRequestTabletSite))
@@ -612,14 +624,6 @@ void WrenchMenuModel::Build(bool is_new_menu) {
                              IDS_TOGGLE_REQUEST_TABLET_SITE);
 #endif
 
-// On ChromeOS-Touch, we don't want the about menu option.
-#if defined(OS_CHROMEOS)
-  if (!is_new_menu)
-#endif
-  {
-    AddItem(IDC_ABOUT, l10n_util::GetStringUTF16(IDS_ABOUT));
-  }
-
   if (browser_defaults::kShowUpgradeMenuItem)
     AddItem(IDC_UPGRADE_DIALOG, GetUpgradeDialogMenuItemName());
 
@@ -629,31 +633,14 @@ void WrenchMenuModel::Build(bool is_new_menu) {
               GetNativeImageNamed(IDR_INPUT_ALERT_MENU));
 #endif
 
-  if (!is_new_menu) {
-    AddItemWithStringId(IDC_HELP_PAGE_VIA_MENU, IDS_HELP_PAGE);
-
-    if (browser_defaults::kShowHelpMenuItemIcon) {
-      ui::ResourceBundle& rb = ResourceBundle::GetSharedInstance();
-      SetIcon(GetIndexOfCommandId(IDC_HELP_PAGE_VIA_MENU),
-              rb.GetNativeImageNamed(IDR_HELP_MENU));
-    }
-  }
-
-#if defined(GOOGLE_CHROME_BUILD)
-#if defined(OS_CHROMEOS)
-  AddItemWithStringId(IDC_FEEDBACK, IDS_FEEDBACK);
-#endif
-#endif
-
   AddGlobalErrorMenuItems();
 
-  if (is_new_menu) {
-    AddSubMenuWithStringId(IDC_ZOOM_MENU, IDS_MORE_TOOLS_MENU,
-                           tools_menu_model_.get());
-  }
+  AddSeparator(ui::NORMAL_SEPARATOR);
+  AddSubMenuWithStringId(
+      IDC_ZOOM_MENU, IDS_MORE_TOOLS_MENU, tools_menu_model_.get());
 
   bool show_exit_menu = browser_defaults::kShowExitMenuItem;
-#if defined(OS_WIN) && defined(USE_AURA)
+#if defined(OS_WIN)
   if (browser_->host_desktop_type() == chrome::HOST_DESKTOP_TYPE_ASH)
     show_exit_menu = false;
 #endif
@@ -662,6 +649,8 @@ void WrenchMenuModel::Build(bool is_new_menu) {
     AddSeparator(ui::NORMAL_SEPARATOR);
     AddItemWithStringId(IDC_EXIT, IDS_EXIT);
   }
+
+  RemoveTrailingSeparators();
 }
 
 void WrenchMenuModel::AddGlobalErrorMenuItems() {
@@ -672,9 +661,9 @@ void WrenchMenuModel::AddGlobalErrorMenuItems() {
   ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
   // GetSignedInServiceErrors() can modify the global error list, so call it
   // before iterating through that list below.
-  std::vector<GlobalError*> signin_errors =
-      signin_ui_util::GetSignedInServiceErrors(
-          browser_->profile()->GetOriginalProfile());
+  std::vector<GlobalError*> signin_errors;
+  signin_errors = signin_ui_util::GetSignedInServiceErrors(
+      browser_->profile()->GetOriginalProfile());
   const GlobalErrorService::GlobalErrorList& errors =
       GlobalErrorServiceFactory::GetForProfile(browser_->profile())->errors();
   for (GlobalErrorService::GlobalErrorList::const_iterator
@@ -706,8 +695,20 @@ void WrenchMenuModel::AddGlobalErrorMenuItems() {
   }
 }
 
-void WrenchMenuModel::CreateCutCopyPasteMenu(bool new_menu) {
-  AddSeparator(new_menu ? ui::LOWER_SEPARATOR : ui::NORMAL_SEPARATOR);
+void WrenchMenuModel::CreateExtensionToolbarOverflowMenu() {
+#if defined(TOOLKIT_VIEWS)
+  AddItem(IDC_EXTENSIONS_OVERFLOW_MENU, base::string16());
+  // We only add the separator if there are > 0 items to show in the overflow.
+  extensions::ExtensionToolbarModel* toolbar_model =
+      extensions::ExtensionToolbarModel::Get(browser_->profile());
+  // A count of -1 means all actions are visible.
+  if (toolbar_model->GetVisibleIconCount() != -1)
+    AddSeparator(ui::UPPER_SEPARATOR);
+#endif  // defined(TOOLKIT_VIEWS)
+}
+
+void WrenchMenuModel::CreateCutCopyPasteMenu() {
+  AddSeparator(ui::LOWER_SEPARATOR);
 
 #if defined(OS_POSIX) && !defined(TOOLKIT_VIEWS)
   // WARNING: Mac does not use the ButtonMenuItemModel, but instead defines the
@@ -726,13 +727,12 @@ void WrenchMenuModel::CreateCutCopyPasteMenu(bool new_menu) {
   AddItemWithStringId(IDC_PASTE, IDS_PASTE);
 #endif
 
-  if (new_menu)
-    AddSeparator(ui::UPPER_SEPARATOR);
+  AddSeparator(ui::UPPER_SEPARATOR);
 }
 
-void WrenchMenuModel::CreateZoomMenu(bool new_menu) {
+void WrenchMenuModel::CreateZoomMenu() {
   // This menu needs to be enclosed by separators.
-  AddSeparator(new_menu ? ui::LOWER_SEPARATOR : ui::NORMAL_SEPARATOR);
+  AddSeparator(ui::LOWER_SEPARATOR);
 
 #if defined(OS_POSIX) && !defined(TOOLKIT_VIEWS)
   // WARNING: Mac does not use the ButtonMenuItemModel, but instead defines the
@@ -758,17 +758,15 @@ void WrenchMenuModel::CreateZoomMenu(bool new_menu) {
   AddItemWithStringId(IDC_FULLSCREEN, IDS_FULLSCREEN);
 #endif
 
-  AddSeparator(new_menu ? ui::UPPER_SEPARATOR : ui::NORMAL_SEPARATOR);
+  AddSeparator(ui::UPPER_SEPARATOR);
 }
 
 void WrenchMenuModel::UpdateZoomControls() {
-  bool enable_increment = false;
-  bool enable_decrement = false;
   int zoom_percent = 100;
   if (browser_->tab_strip_model()->GetActiveWebContents()) {
-    zoom_percent =
-        browser_->tab_strip_model()->GetActiveWebContents()->GetZoomPercent(
-            &enable_increment, &enable_decrement);
+    zoom_percent = ZoomController::FromWebContents(
+                       browser_->tab_strip_model()->GetActiveWebContents())
+                       ->GetZoomPercent();
   }
   zoom_label_ = l10n_util::GetStringFUTF16(
       IDS_ZOOM_PERCENT, base::IntToString16(zoom_percent));