summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/toolbar/wrench_menu_model.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/toolbar/wrench_menu_model.cc')
-rw-r--r--chrome/browser/ui/toolbar/wrench_menu_model.cc71
1 files changed, 69 insertions, 2 deletions
diff --git a/chrome/browser/ui/toolbar/wrench_menu_model.cc b/chrome/browser/ui/toolbar/wrench_menu_model.cc
index b3ffec0..5f9ca12 100644
--- a/chrome/browser/ui/toolbar/wrench_menu_model.cc
+++ b/chrome/browser/ui/toolbar/wrench_menu_model.cc
@@ -366,7 +366,8 @@ bool WrenchMenuModel::IsItemForCommandIdDynamic(int command_id) const {
#elif defined(OS_WIN)
command_id == IDC_PIN_TO_START_SCREEN ||
#endif
- command_id == IDC_UPGRADE_DIALOG;
+ command_id == IDC_UPGRADE_DIALOG ||
+ (!switches::IsNewAvatarMenu() && command_id == IDC_SHOW_SIGNIN);
}
base::string16 WrenchMenuModel::GetLabelForCommandId(int command_id) const {
@@ -396,6 +397,10 @@ base::string16 WrenchMenuModel::GetLabelForCommandId(int command_id) const {
#endif
case IDC_UPGRADE_DIALOG:
return GetUpgradeDialogMenuItemName();
+ case IDC_SHOW_SIGNIN:
+ DCHECK(!switches::IsNewAvatarMenu());
+ return signin_ui_util::GetSigninMenuLabel(
+ browser_->profile()->GetOriginalProfile());
default:
NOTREACHED();
return base::string16();
@@ -414,6 +419,19 @@ bool WrenchMenuModel::GetIconForCommandId(int command_id,
}
return false;
}
+ case IDC_SHOW_SIGNIN: {
+ DCHECK(!switches::IsNewAvatarMenu());
+ GlobalError* error = signin_ui_util::GetSignedInServiceError(
+ browser_->profile()->GetOriginalProfile());
+ if (error) {
+ int icon_id = error->MenuItemIconResourceID();
+ if (icon_id) {
+ *icon = rb.GetNativeImageNamed(icon_id);
+ return true;
+ }
+ }
+ return false;
+ }
default:
break;
}
@@ -428,6 +446,16 @@ void WrenchMenuModel::ExecuteCommand(int command_id, int event_flags) {
return;
}
+ 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());
+ if (error) {
+ error->ExecuteMenuItem(browser_);
+ return;
+ }
+ }
+
LogMenuMetrics(command_id);
chrome::ExecuteCommand(browser_, command_id);
}
@@ -672,6 +700,13 @@ void WrenchMenuModel::LogMenuMetrics(int command_id) {
}
LogMenuAction(MENU_ACTION_SHOW_DOWNLOADS);
break;
+ case IDC_SHOW_SYNC_SETUP:
+ if (!uma_action_recorded_) {
+ UMA_HISTOGRAM_MEDIUM_TIMES("WrenchMenu.TimeToAction.ShowSyncSetup",
+ delta);
+ }
+ LogMenuAction(MENU_ACTION_SHOW_SYNC_SETUP);
+ break;
case IDC_OPTIONS:
if (!uma_action_recorded_)
UMA_HISTOGRAM_MEDIUM_TIMES("WrenchMenu.TimeToAction.Settings", delta);
@@ -895,7 +930,21 @@ void WrenchMenuModel::Build() {
CreateCutCopyPasteMenu();
AddItemWithStringId(IDC_OPTIONS, IDS_SETTINGS);
-
+#if !defined(OS_CHROMEOS)
+ if (!switches::IsNewAvatarMenu()) {
+ // No "Sign in to Chromium..." menu item on ChromeOS.
+ SigninManager* signin = SigninManagerFactory::GetForProfile(
+ browser_->profile()->GetOriginalProfile());
+ if (signin && signin->IsSigninAllowed() &&
+ signin_ui_util::GetSignedInServiceErrors(
+ browser_->profile()->GetOriginalProfile()).empty()) {
+ AddItem(IDC_SHOW_SYNC_SETUP,
+ l10n_util::GetStringFUTF16(
+ IDS_SYNC_MENU_PRE_SYNCED_LABEL,
+ l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)));
+ }
+ }
+#endif
// The help submenu is only displayed on official Chrome builds. As the
// 'About' item has been moved to this submenu, it's reinstated here for
// Chromium builds.
@@ -941,6 +990,11 @@ bool WrenchMenuModel::AddGlobalErrorMenuItems() {
// it won't show in the existing wrench menu. To fix this we need to some
// how update the menu if new errors are added.
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_errors = signin_ui_util::GetSignedInServiceErrors(
+ browser_->profile()->GetOriginalProfile());
const GlobalErrorService::GlobalErrorList& errors =
GlobalErrorServiceFactory::GetForProfile(browser_->profile())->errors();
bool menu_items_added = false;
@@ -949,6 +1003,19 @@ bool WrenchMenuModel::AddGlobalErrorMenuItems() {
GlobalError* error = *it;
DCHECK(error);
if (error->HasMenuItem()) {
+#if !defined(OS_CHROMEOS)
+ // Don't add a signin error if it's already being displayed elsewhere.
+ if (std::find(signin_errors.begin(), signin_errors.end(), error) !=
+ signin_errors.end()) {
+ MenuModel* model = this;
+ int index = 0;
+ if (MenuModel::GetModelAndIndexForCommandId(
+ IDC_SHOW_SIGNIN, &model, &index)) {
+ continue;
+ }
+ }
+#endif
+
AddItem(error->MenuItemCommandID(), error->MenuItemLabel());
int icon_id = error->MenuItemIconResourceID();
if (icon_id) {