blob: f098a761d20e7d3f5d03f8e309c356019d3f8094 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ios/chrome/browser/ui/tools_menu/tools_menu_model.h"
#include "components/strings/grit/components_strings.h"
#include "ios/chrome/browser/experimental_flags.h"
#include "ios/chrome/browser/ui/commands/application_commands.h"
#include "ios/chrome/browser/ui/commands/browser_commands.h"
#import "ios/chrome/browser/ui/tools_menu/new_tab_menu_view_item.h"
#include "ios/chrome/browser/ui/tools_menu/public/tools_menu_constants.h"
#import "ios/chrome/browser/ui/tools_menu/reading_list_menu_view_item.h"
#include "ios/chrome/browser/ui/ui_util.h"
#include "ios/chrome/grit/ios_strings.h"
#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider.h"
#include "ios/web/public/user_agent.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
// Menu items can be marked as visible or not when Incognito is enabled.
// The following bits are used for |visibility| field in |MenuItemInfo|.
const NSInteger kVisibleIncognitoOnly = 1 << 0;
const NSInteger kVisibleNotIncognitoOnly = 1 << 1;
// Declare all the possible items. If adding or removing items update
// kToolsMenuNumberOfItems with the new total count.
const MenuItemInfo itemInfoList[kToolsMenuNumberOfItems] = {
// clang-format off
{ IDS_IOS_TOOLS_MENU_NEW_TAB, kToolsMenuNewTabId,
TOOLS_NEW_TAB_ITEM, nullptr, ToolbarTypeAll,
0, [NewTabMenuViewItem class] },
{ IDS_IOS_TOOLS_MENU_NEW_INCOGNITO_TAB, kToolsMenuNewIncognitoTabId,
TOOLS_NEW_INCOGNITO_TAB_ITEM, nullptr,ToolbarTypeAll,
0, [NewIncognitoTabMenuViewItem class] },
{ IDS_IOS_TOOLS_MENU_CLOSE_ALL_TABS, kToolsMenuCloseAllTabsId,
TOOLS_CLOSE_ALL_TABS,
@selector(closeAllTabs), ToolbarTypeSwitcheriPhone,
kVisibleNotIncognitoOnly, nil },
{ IDS_IOS_TOOLS_MENU_CLOSE_ALL_INCOGNITO_TABS,
kToolsMenuCloseAllIncognitoTabsId,
TOOLS_CLOSE_ALL_INCOGNITO_TABS,
@selector(closeAllIncognitoTabs), ToolbarTypeSwitcheriPhone,
kVisibleIncognitoOnly, nil },
{ IDS_IOS_TOOLS_MENU_BOOKMARKS, kToolsMenuBookmarksId,
TOOLS_SHOW_BOOKMARKS,
@selector(showBookmarksManager), ToolbarTypeWebAll,
0, nil },
{ IDS_IOS_TOOLS_MENU_READING_LIST, kToolsMenuReadingListId,
TOOLS_READING_LIST,
@selector(showReadingList), ToolbarTypeWebAll,
0, [ReadingListMenuViewItem class] },
{ IDS_IOS_TOOLS_MENU_RECENT_TABS, kToolsMenuOtherDevicesId,
TOOLS_SHOW_RECENT_TABS,
@selector(showRecentTabs), ToolbarTypeWebAll,
kVisibleNotIncognitoOnly, nil },
{ IDS_HISTORY_SHOW_HISTORY, kToolsMenuHistoryId,
TOOLS_SHOW_HISTORY,
@selector(showHistory), ToolbarTypeWebAll,
0, nil },
{ IDS_IOS_OPTIONS_REPORT_AN_ISSUE, kToolsMenuReportAnIssueId,
TOOLS_REPORT_AN_ISSUE,
nullptr, ToolbarTypeAll,
0, nil },
{ IDS_IOS_TOOLS_MENU_FIND_IN_PAGE, kToolsMenuFindInPageId,
TOOLS_SHOW_FIND_IN_PAGE,
@selector(showFindInPage), ToolbarTypeWebAll,
0, nil },
{ IDS_IOS_TOOLS_MENU_REQUEST_DESKTOP_SITE,
kToolsMenuRequestDesktopId,
TOOLS_REQUEST_DESKTOP_SITE,
@selector(requestDesktopSite), ToolbarTypeWebAll,
0, nil },
{ IDS_IOS_TOOLS_MENU_REQUEST_MOBILE_SITE,
kToolsMenuRequestMobileId,
TOOLS_REQUEST_MOBILE_SITE,
@selector(requestMobileSite), ToolbarTypeWebAll,
0, nil },
{ IDS_IOS_TOOLS_MENU_SETTINGS, kToolsMenuSettingsId,
TOOLS_SETTINGS_ITEM,
nullptr, ToolbarTypeAll,
0, nil },
{ IDS_IOS_TOOLS_MENU_HELP_MOBILE, kToolsMenuHelpId,
TOOLS_SHOW_HELP_PAGE,
@selector(showHelpPage), ToolbarTypeWebAll,
0, nil },
// clang-format on
};
bool ToolsMenuItemShouldBeVisible(const MenuItemInfo& item,
ToolbarType toolbarType,
ToolsMenuConfiguration* configuration) {
if (!(item.toolbar_types & toolbarType))
return false;
if (configuration.inIncognito && (item.visibility & kVisibleNotIncognitoOnly))
return false;
if (!configuration.inIncognito && (item.visibility & kVisibleIncognitoOnly))
return false;
switch (item.title_id) {
case IDS_IOS_TOOLBAR_SHOW_TABS:
return IsIPadIdiom();
case IDS_IOS_OPTIONS_REPORT_AN_ISSUE:
return ios::GetChromeBrowserProvider()
->GetUserFeedbackProvider()
->IsUserFeedbackEnabled();
case IDS_IOS_TOOLS_MENU_REQUEST_DESKTOP_SITE:
return (configuration.userAgentType != web::UserAgentType::DESKTOP);
case IDS_IOS_TOOLS_MENU_REQUEST_MOBILE_SITE:
return (configuration.userAgentType == web::UserAgentType::DESKTOP);
default:
return true;
}
}