| Index: chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc
|
| diff --git a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc
|
| index 60aef57cd4a981cfe62d8fe4f1415be0890f3146..65c5ce9527bc28c87179bb232055f224683654d8 100644
|
| --- a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc
|
| +++ b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc
|
| @@ -69,6 +69,10 @@ const int kMaxDeviceNameCommandId = 1110;
|
| // shown in the menu.
|
| const int kMaxLocalEntries = 8;
|
|
|
| +// Index of the separator that follows the history menu item. Used as a
|
| +// reference position for inserting local entries.
|
| +const int kHistorySeparatorIndex = 1;
|
| +
|
| // Comparator function for use with std::sort that will sort sessions by
|
| // descending modified_time (i.e., most recent first).
|
| bool SortSessionsByRecency(const sync_driver::SyncedSession* s1,
|
| @@ -171,10 +175,9 @@ RecentTabsSubMenuModel::RecentTabsSubMenuModel(
|
| : ui::SimpleMenuModel(this),
|
| browser_(browser),
|
| open_tabs_delegate_(open_tabs_delegate),
|
| - last_local_model_index_(-1),
|
| - default_favicon_(
|
| - ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
|
| - IDR_DEFAULT_FAVICON)),
|
| + last_local_model_index_(kHistorySeparatorIndex),
|
| + default_favicon_(ui::ResourceBundle::GetSharedInstance().
|
| + GetNativeImageNamed(IDR_DEFAULT_FAVICON)),
|
| weak_ptr_factory_(this) {
|
| // Invoke asynchronous call to load tabs from local last session, which does
|
| // nothing if the tabs have already been loaded or they shouldn't be loaded.
|
| @@ -211,6 +214,11 @@ RecentTabsSubMenuModel::RecentTabsSubMenuModel(
|
| IDC_RESTORE_TAB, &reopen_closed_tab_accelerator_);
|
| }
|
| #endif // defined(USE_ASH)
|
| +
|
| + if (accelerator_provider) {
|
| + accelerator_provider->GetAcceleratorForCommandId(
|
| + IDC_SHOW_HISTORY, &show_history_accelerator_);
|
| + }
|
| }
|
|
|
| RecentTabsSubMenuModel::~RecentTabsSubMenuModel() {
|
| @@ -246,6 +254,12 @@ bool RecentTabsSubMenuModel::GetAcceleratorForCommandId(
|
| *accelerator = reopen_closed_tab_accelerator_;
|
| return true;
|
| }
|
| +
|
| + if (command_id == IDC_SHOW_HISTORY) {
|
| + *accelerator = show_history_accelerator_;
|
| + return true;
|
| + }
|
| +
|
| return false;
|
| }
|
|
|
| @@ -367,30 +381,33 @@ bool RecentTabsSubMenuModel::GetURLAndTitleForItemAtIndex(
|
|
|
| void RecentTabsSubMenuModel::Build() {
|
| // The menu contains:
|
| + // - History to open the full history tab.
|
| + // - Separator
|
| // - Recently closed header, then list of local recently closed tabs/windows,
|
| // then separator
|
| // - device 1 section header, then list of tabs from device, then separator
|
| // - device 2 section header, then list of tabs from device, then separator
|
| // - device 3 section header, then list of tabs from device, then separator
|
| - // - More... to open the history tab to get more other devices.
|
| // |local_tab_navigation_items_| and |other_devices_tab_navigation_items_|
|
| // only contain navigatable (and hence executable) tab items for local
|
| // recently closed tabs and tabs from other devices respectively.
|
| // |local_window_items_| contains the local recently closed windows.
|
| + InsertItemWithStringIdAt(0, IDC_SHOW_HISTORY, IDS_SHOW_HISTORY);
|
| + InsertSeparatorAt(1, ui::NORMAL_SEPARATOR);
|
| BuildLocalEntries();
|
| BuildTabsFromOtherDevices();
|
| }
|
|
|
| void RecentTabsSubMenuModel::BuildLocalEntries() {
|
| + last_local_model_index_ = kHistorySeparatorIndex;
|
| +
|
| // All local items use InsertItem*At() to append or insert a menu item.
|
| // We're appending if building the entries for the first time i.e. invoked
|
| // from Constructor(), inserting when local entries change subsequently i.e.
|
| // invoked from TabRestoreServiceChanged().
|
| -
|
| - DCHECK_EQ(last_local_model_index_, -1);
|
| -
|
| TabRestoreService* service =
|
| TabRestoreServiceFactory::GetForProfile(browser_->profile());
|
| +
|
| if (!service || service->entries().size() == 0) {
|
| // This is to show a disabled restore tab entry with the accelerator to
|
| // teach users about this command.
|
| @@ -430,7 +447,6 @@ void RecentTabsSubMenuModel::BuildLocalEntries() {
|
| ++added_count;
|
| }
|
| }
|
| -
|
| DCHECK_GE(last_local_model_index_, 0);
|
| }
|
|
|
| @@ -510,8 +526,6 @@ void RecentTabsSubMenuModel::BuildTabsFromOtherDevices() {
|
|
|
| // We are not supposed to get here unless at least some items were added.
|
| DCHECK_GT(GetItemCount(), 0);
|
| - AddSeparator(ui::NORMAL_SEPARATOR);
|
| - AddItemWithStringId(IDC_SHOW_HISTORY, IDS_RECENT_TABS_MORE);
|
| }
|
|
|
| void RecentTabsSubMenuModel::BuildLocalTabItem(int session_id,
|
| @@ -655,12 +669,11 @@ int RecentTabsSubMenuModel::CommandIdToTabVectorIndex(
|
|
|
| void RecentTabsSubMenuModel::ClearLocalEntries() {
|
| // Remove local items (recently closed tabs and windows) from menumodel.
|
| - while (last_local_model_index_ >= 0)
|
| + while (last_local_model_index_ > kHistorySeparatorIndex)
|
| RemoveItemAt(last_local_model_index_--);
|
|
|
| // Cancel asynchronous FaviconService::GetFaviconImageForPageURL() tasks of
|
| - // all
|
| - // local tabs.
|
| + // all local tabs.
|
| local_tab_cancelable_task_tracker_.TryCancelAll();
|
|
|
| // Remove all local tab navigation items.
|
|
|