| Index: chrome/browser/app_menu_model.cc
|
| diff --git a/chrome/browser/app_menu_model.cc b/chrome/browser/app_menu_model.cc
|
| index 38aca1511d404f4287ddcfa9e32c60e2c1bd1e77..f42c92089d1d2f21705220990a17c60335bd90ac 100644
|
| --- a/chrome/browser/app_menu_model.cc
|
| +++ b/chrome/browser/app_menu_model.cc
|
| @@ -15,16 +15,33 @@
|
| #include "grit/chromium_strings.h"
|
| #include "grit/generated_resources.h"
|
|
|
| +// TODO(akalin): Now that AppMenuModel handles the sync item
|
| +// dynamically, we don't need to refresh the menu on Windows/Linux.
|
| +// Remove that code and make sure it works.
|
| +
|
| AppMenuModel::AppMenuModel(menus::SimpleMenuModel::Delegate* delegate,
|
| Browser* browser)
|
| : menus::SimpleMenuModel(delegate),
|
| - browser_(browser) {
|
| + browser_(browser),
|
| + // For now, we assume that sync cannot be enabled/disabled after
|
| + // launch.
|
| + sync_item_enabled_(ProfileSyncService::IsSyncEnabled()),
|
| + sync_item_index_(-1) {
|
| Build();
|
| }
|
|
|
| AppMenuModel::~AppMenuModel() {
|
| }
|
|
|
| +bool AppMenuModel::IsLabelDynamicAt(int index) const {
|
| + return IsSyncItem(index) || SimpleMenuModel::IsLabelDynamicAt(index);
|
| +}
|
| +
|
| +string16 AppMenuModel::GetLabelAt(int index) const {
|
| + return IsSyncItem(index) ?
|
| + GetSyncMenuLabel() : SimpleMenuModel::GetLabelAt(index);
|
| +}
|
| +
|
| void AppMenuModel::Build() {
|
| AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB);
|
| AddItemWithStringId(IDC_NEW_WINDOW, IDS_NEW_WINDOW);
|
| @@ -56,10 +73,11 @@ void AppMenuModel::Build() {
|
| AddItemWithStringId(IDC_MANAGE_EXTENSIONS, IDS_SHOW_EXTENSIONS);
|
|
|
| AddSeparator();
|
| - if (ProfileSyncService::IsSyncEnabled()) {
|
| - string16 label = sync_ui_util::GetSyncMenuLabel(
|
| - browser_->profile()->GetOriginalProfile()->GetProfileSyncService());
|
| - AddItem(IDC_SYNC_BOOKMARKS, label);
|
| + if (sync_item_enabled_) {
|
| + AddItem(IDC_SYNC_BOOKMARKS, GetSyncMenuLabel());
|
| + // TODO(akalin): Make it possible to get the index in a less
|
| + // hackish way.
|
| + sync_item_index_ = GetItemCount() - 1;
|
| AddSeparator();
|
| }
|
| #if defined(OS_MACOSX)
|
| @@ -109,3 +127,14 @@ void AppMenuModel::BuildProfileSubMenu() {
|
| IDC_NEW_PROFILE,
|
| IDS_SELECT_PROFILE_DIALOG_NEW_PROFILE_ENTRY);
|
| }
|
| +
|
| +string16 AppMenuModel::GetSyncMenuLabel() const {
|
| + DCHECK(sync_item_enabled_);
|
| + return sync_ui_util::GetSyncMenuLabel(
|
| + browser_->profile()->GetOriginalProfile()->GetProfileSyncService());
|
| +}
|
| +
|
| +bool AppMenuModel::IsSyncItem(int index) const {
|
| + return sync_item_enabled_ && (index == sync_item_index_);
|
| +}
|
| +
|
|
|