chromium/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_TEST_EARL_GREY_CHROME_MATCHERS_APP_INTERFACE_H_
#define IOS_CHROME_TEST_EARL_GREY_CHROME_MATCHERS_APP_INTERFACE_H_

#import <UIKit/UIKit.h>

@protocol GREYMatcher;

// Helper class to return matchers for EG tests.  These helpers are compiled
// into the app binary and can be called from either app or test code.
// All calls of grey_... involve the App process, so it's more efficient to
// define the matchers in the app process.
@interface ChromeMatchersAppInterface : NSObject

// Matcher for a window with a given number.
// Window numbers are assigned at scene creation. Normally, each EGTest will
// start with exactly one window with number 0. Each time a window is created,
// it is assigned an accessibility identifier equal to the number of connected
// scenes (stored as NSString). This means typically any windows created in a
// test will have consecutive numbers.
+ (id<GREYMatcher>)windowWithNumber:(int)windowNumber;

// Same as above, but for the blocking window which only appears when a blocking
// UI is shown in another window.
+ (id<GREYMatcher>)blockerWindowWithNumber:(int)windowNumber;

// Matcher for element with accessibility label corresponding to `label` and
// accessibility trait UIAccessibilityTraitButton.
+ (id<GREYMatcher>)buttonWithAccessibilityLabel:(NSString*)label;

// Matcher for element with accessibility label corresponding to `messageID`
// and accessibility trait UIAccessibilityTraitButton.
+ (id<GREYMatcher>)buttonWithAccessibilityLabelID:(int)messageID;

// Matcher for element with accessibility label corresponding to `messageID`,
// `number` for the plural rule and accessibility trait
// UIAccessibilityTraitButton.
+ (id<GREYMatcher>)buttonWithAccessibilityLabelID:(int)messageID
                                  numberForPlural:(int)number;

// Matcher for element with foreground color corresponding to `colorName`
// and accessibility trait UIAccessibilityTraitButton.
+ (id<GREYMatcher>)buttonWithForegroundColor:(NSString*)colorName;

// Matcher for element with background color corresponding to `colorName`
// and accessibility trait UIAccessibilityTraitButton.
+ (id<GREYMatcher>)buttonWithBackgroundColor:(NSString*)colorName;

// Matcher for context menu items with accessibility label
// corresponding to `label`.
+ (id<GREYMatcher>)contextMenuItemWithAccessibilityLabel:(NSString*)label;

// Matcher for context menu items with accessibility label
// corresponding to `messageID`.
+ (id<GREYMatcher>)contextMenuItemWithAccessibilityLabelID:(int)messageID;

// Matcher for element with an image corresponding to `image`.
+ (id<GREYMatcher>)imageViewWithImage:(UIImage*)image;

// Matcher for element with an image defined by its name in the main bundle.
+ (id<GREYMatcher>)imageViewWithImageNamed:(NSString*)imageName;

// Matcher for element with a custom symbol defined by its name and point size
// in the main bundle.
+ (id<GREYMatcher>)imageViewWithCustomSymbolNamed:(NSString*)symbolName
                                        pointSize:(CGFloat)pointSize;

// Matcher for element with an image corresponding to `imageID` and
// accessibility trait UIAccessibilityTraitButton.
+ (id<GREYMatcher>)buttonWithImage:(int)imageID;

// Matcher for element with accessibility label corresponding to `messageID`
// and accessibility trait UIAccessibilityTraitStaticText.
+ (id<GREYMatcher>)staticTextWithAccessibilityLabelID:(int)messageID;

// Matcher for element with accessibility label corresponding to `label` and
// accessibility trait UIAccessibilityTraitStaticText.
+ (id<GREYMatcher>)staticTextWithAccessibilityLabel:(NSString*)label;

// Matcher for element with accessibility label corresponding to `messageID`
// and accessibility trait UIAccessibilityTraitHeader.
+ (id<GREYMatcher>)headerWithAccessibilityLabelID:(int)labelID;

// Matcher for navigation bar title element with accessibility label
// corresponding to `titleID`.
+ (id<GREYMatcher>)navigationBarTitleWithAccessibilityLabelID:(int)titleID;

// Matcher for text field of a cell with `messageID`.
+ (id<GREYMatcher>)textFieldForCellWithLabelID:(int)messageID;

// Matcher for icon view of a cell with `messageID`.
+ (id<GREYMatcher>)iconViewForCellWithLabelID:(int)messageID
                                     iconType:(NSString*)iconType;

// Matcher for element with accessibility label corresponding to `label` and
// accessibility trait UIAccessibilityTraitHeader.
+ (id<GREYMatcher>)headerWithAccessibilityLabel:(NSString*)label;

// Returns matcher for the primary toolbar.
+ (id<GREYMatcher>)primaryToolbar;

// Returns matcher for a cancel button.
+ (id<GREYMatcher>)cancelButton;

// Returns the matcher for an enabled cancel button in a navigation bar.
+ (id<GREYMatcher>)navigationBarCancelButton;

// Returns matcher for close tab context menu button.
+ (id<GREYMatcher>)closeTabMenuButton;

// Matcher for the navigate forward button.
+ (id<GREYMatcher>)forwardButton;

// Matcher for the navigate backward button.
+ (id<GREYMatcher>)backButton;

// Matcher for the reload button.
+ (id<GREYMatcher>)reloadButton;

// Matcher for the stop loading button.
+ (id<GREYMatcher>)stopButton;

// Returns a matcher for the omnibox.
+ (id<GREYMatcher>)omnibox;

// Returns a matcher for the omnibox at the bottom.
+ (id<GREYMatcher>)omniboxAtBottom;

// Returns a matcher for the omnibox on the top.
+ (id<GREYMatcher>)omniboxOnTop;

// Returns a matcher for the location view.
+ (id<GREYMatcher>)defocusedLocationView;

// Returns a matcher for the page security info button.
+ (id<GREYMatcher>)pageSecurityInfoButton;

// Returns a matcher for the page security info indicator.
+ (id<GREYMatcher>)pageSecurityInfoIndicator;

// Returns matcher for omnibox containing `text`. Performs an exact match of the
// omnibox contents.
+ (id<GREYMatcher>)omniboxText:(NSString*)text;

// Returns matcher for `text` being a substring of the text in the omnibox.
+ (id<GREYMatcher>)omniboxContainingText:(NSString*)text;

// Returns matcher for `text` being the inline autocomplete text in the omnibox.
+ (id<GREYMatcher>)omniboxContainingAutocompleteText:(NSString*)text;

// Returns matcher for `text` being a substring of the text in the location
// view.
+ (id<GREYMatcher>)locationViewContainingText:(NSString*)text;

// Matcher for Tools menu button.
+ (id<GREYMatcher>)toolsMenuButton;

// Matcher for the New Tab button, which can be long-pressed for a menu.
// (This method can't be named +newTabButton, because starting a class method
// with 'new' implicitly treats it as a constructor).
+ (id<GREYMatcher>)openNewTabButton;

// Matcher for the Share... button.
+ (id<GREYMatcher>)shareButton;

// Matcher for the Show Full URL action button.
+ (id<GREYMatcher>)showFullURLFromWebContextMenu;

// Matcher for the tab Share button (either in the omnibox or the toolbar).
+ (id<GREYMatcher>)tabShareButton;

// Matcher for show tabs button.
+ (id<GREYMatcher>)showTabsButton;

// Matcher for Add to reading list button.
+ (id<GREYMatcher>)addToReadingListButton;

// Matcher for Add to bookmarks button.
+ (id<GREYMatcher>)addToBookmarksButton;

// Matcher for TableViewSwitchCell.
+ (id<GREYMatcher>)tableViewSwitchCell:(NSString*)accessibilityIdentifier
                           isToggledOn:(BOOL)isToggledOn;

// Matcher for TableViewSwitchCell.
+ (id<GREYMatcher>)tableViewSwitchCell:(NSString*)accessibilityIdentifier
                           isToggledOn:(BOOL)isToggledOn
                             isEnabled:(BOOL)isEnabled;

// Matcher for SyncSwitchCell.
+ (id<GREYMatcher>)syncSwitchCell:(NSString*)accessibilityLabel
                      isToggledOn:(BOOL)isToggledOn;

// Matcher for the Open in New Tab option in the context menu when long pressing
// a link.
+ (id<GREYMatcher>)openLinkInNewTabButton;

// Matcher for the Open in Incognito option in the context menu when long
// pressing a link.
+ (id<GREYMatcher>)openLinkInIncognitoButton;

// Matcher for the Open in New Window option in the context menu when long
// pressing a link.
+ (id<GREYMatcher>)openLinkInNewWindowButton;

// Matcher for the done button on the navigation bar.
+ (id<GREYMatcher>)navigationBarDoneButton;

// Matcher for the done button on the Bookmarks navigation bar.
+ (id<GREYMatcher>)bookmarksNavigationBarDoneButton;

// Matcher for the back button on the Bookmarks navigation bar.
+ (id<GREYMatcher>)bookmarksNavigationBarBackButton;

// Returns matcher for the add account accounts button.
+ (id<GREYMatcher>)addAccountButton;

// Returns matcher for the sign out accounts button.
+ (id<GREYMatcher>)signOutAccountsButton;

// Returns matcher for the Clear Browsing Data cell on the Privacy screen.
+ (id<GREYMatcher>)clearBrowsingDataCell;

// Returns matcher for the clear browsing data button on the clear browsing data
// panel.
+ (id<GREYMatcher>)clearBrowsingDataButton;

// Returns matcher for the clear browsing data view.
+ (id<GREYMatcher>)clearBrowsingDataView;

// Matcher for the clear browsing data action sheet item.
+ (id<GREYMatcher>)confirmClearBrowsingDataButton;

// Returns matcher for the "Done" button in the settings' navigation bar.
+ (id<GREYMatcher>)settingsDoneButton;

// Returns matcher for the Autofill Credit Card "Payment Methods" edit view.
+ (id<GREYMatcher>)autofillCreditCardEditTableView;

// Returns matcher for the Autofill Credit Card "Payment Methods" view in the
// settings menu.
+ (id<GREYMatcher>)autofillCreditCardTableView;

// Returns matcher for the "Addresses and More" button in the settings menu.
+ (id<GREYMatcher>)addressesAndMoreButton;

// Returns matcher for the "Payment Methods" button in the settings menu.
+ (id<GREYMatcher>)paymentMethodsButton;

// Returns matcher for the "Languages" button in the settings menu.
+ (id<GREYMatcher>)languagesButton;

// Returns matcher for the "Add Credit Card" view in the Settings menu.
+ (id<GREYMatcher>)addCreditCardView;

// Returns matcher for the "Add" credit card button in the Payment
// Methods add credit card view.
+ (id<GREYMatcher>)addCreditCardButton;

// Returns matcher for the "Cancel" button in the Payment Methods add credit
// card view.
+ (id<GREYMatcher>)addCreditCardCancelButton;

// Returns matcher for the tools menu table view.
+ (id<GREYMatcher>)toolsMenuView;

// Returns matcher for the omnibox popup list row views.
+ (id<GREYMatcher>)omniboxPopupRow;

// Returns a matcher for a popup row containing `string` as accessibility label.
+ (id<GREYMatcher>)omniboxPopupRowWithString:(NSString*)string;

// Returns matcher for the omnibox popup list view.
+ (id<GREYMatcher>)omniboxPopupList;

// Returns matcher for the OK button.
+ (id<GREYMatcher>)OKButton;

// Returns matcher for the primary button in the sign-in promo view. This is
// "Sign in into Chrome" button for a cold state, or "Continue as John Doe" for
// a warm state.
+ (id<GREYMatcher>)primarySignInButton;

// Returns matcher for the secondary button in the sign-in promo view. This is
// "Not [email protected]" button.
+ (id<GREYMatcher>)secondarySignInButton;

// Returns matcher for the identity chooser scrim that is shown behind the
// identity chooser dialog. Tapping on the scrim dismisses the dialog.
+ (id<GREYMatcher>)identityChooserScrim;

// Returns matcher for the cancel button in the fake add account flow.
+ (id<GREYMatcher>)fakeFakeAddAccountScreenCancelButton;

// Returns matcher for the button for the currently signed in account in the
// settings menu.
+ (id<GREYMatcher>)settingsAccountButton;

// Returns matcher for the accounts collection view.
+ (id<GREYMatcher>)settingsAccountsCollectionView;

// Returns matcher for the safety check table view.
+ (id<GREYMatcher>)settingsSafetyCheckTableView;

// Returns matcher for the privacy table view.
+ (id<GREYMatcher>)settingsPrivacyTableView;

// Returns matcher for the privacy safe browsing table view.
+ (id<GREYMatcher>)settingsPrivacySafeBrowsingTableView;

// Returns matcher for the notifications table view.
+ (id<GREYMatcher>)settingsNotificationsTableView;

// Returns matcher for the inactive tabs table view.
+ (id<GREYMatcher>)settingsInactiveTabsTableView;

// Returns matcher for the tabs table view.
+ (id<GREYMatcher>)settingsTabsTableView;

// Returns matcher for the tracking price table view.
+ (id<GREYMatcher>)settingsTrackingPriceTableView;

// Returns matcher for the Content Settings button on the main Settings screen.
+ (id<GREYMatcher>)contentSettingsButton;

// Returns matcher for the Google Services Settings button on the main Settings
// screen.
+ (id<GREYMatcher>)googleServicesSettingsButton;

// Returns matcher for the Inactive Tabs Settings button on the Tabs Settings
// screen.
+ (id<GREYMatcher>)inactiveTabsSettingsButton;

// Returns matcher for the Tabs Settings button on the main Settings screen.
+ (id<GREYMatcher>)tabsSettingsButton;

// Returns matcher for the Manage Sync Settings button on the main Settings
// screen.
+ (id<GREYMatcher>)manageSyncSettingsButton;

// Returns matcher for the Google Services Settings view.
+ (id<GREYMatcher>)googleServicesSettingsView;

// Returns matcher for the Navigation Bar embedded in the Settings Navigation
// Controller.
+ (id<GREYMatcher>)settingsNavigationBar;

// Returns matcher for the back button on a settings menu.
+ (id<GREYMatcher>)settingsMenuBackButton;

// Returns matcher for the back button on a settings menu in given window
// number.
+ (id<GREYMatcher>)settingsMenuBackButtonInWindowWithNumber:(int)windowNumber;

// Returns matcher for the Privacy cell on the main Settings screen.
+ (id<GREYMatcher>)settingsMenuPrivacyButton;

// Returns matcher for the Notifications cell on the main Settings screen.
+ (id<GREYMatcher>)settingsMenuNotificationsButton;

// Returns matcher for the Save passwords cell on the main Settings screen.
+ (id<GREYMatcher>)settingsMenuPasswordsButton;

// Returns matcher for the Safety Check cell on the main Settings screen.
+ (id<GREYMatcher>)settingsMenuSafetyCheckButton;

// Returns matcher for the payment request collection view.
+ (id<GREYMatcher>)paymentRequestView;

// Returns matcher for the error confirmation view for payment request.
+ (id<GREYMatcher>)paymentRequestErrorView;

// Returns matcher for the voice search button on the main Settings screen.
+ (id<GREYMatcher>)voiceSearchButton;

// Returns matcher for the voice search button on the omnibox input accessory.
+ (id<GREYMatcher>)voiceSearchInputAccessoryButton;

// Returns matcher for the settings main menu view.
+ (id<GREYMatcher>)settingsCollectionView;

// Returns matcher for the History table view.
+ (id<GREYMatcher>)historyTableView;

// Returns matcher for the clear browsing history cell on the clear browsing
// data panel.
+ (id<GREYMatcher>)clearBrowsingHistoryButton;

// Returns matcher for the clear cookies cell on the clear browsing data panel.
+ (id<GREYMatcher>)clearCookiesButton;

// Returns matcher for the clear cache cell on the clear browsing data panel.
+ (id<GREYMatcher>)clearCacheButton;

// Returns matcher for the clear saved passwords cell on the clear browsing data
// panel.
+ (id<GREYMatcher>)clearSavedPasswordsButton;

// Returns matcher for the clear saved passwords cell on the clear browsing data
// panel.
+ (id<GREYMatcher>)clearAutofillButton;

// Returns matcher for the collection view of content suggestion.
+ (id<GREYMatcher>)contentSuggestionCollectionView;

// Returns matcher for the collection view of the NTP.
+ (id<GREYMatcher>)ntpCollectionView;

// Returns matcher for the NTP view when the user is in incognito mode.
+ (id<GREYMatcher>)ntpIncognitoView;

// Returns matcher for the NTP Feed menu button which enables the feed.
+ (id<GREYMatcher>)ntpFeedMenuEnableButton;

// Returns matcher for the NTP Feed menu button which disables the feed.
+ (id<GREYMatcher>)ntpFeedMenuDisableButton;

// Returns matcher for the warning message while filling in payment requests.
+ (id<GREYMatcher>)warningMessageView;

// Returns matcher for the payment picker cell.
+ (id<GREYMatcher>)paymentRequestPickerRow;

// Returns matcher for the payment request search bar.
+ (id<GREYMatcher>)paymentRequestPickerSearchBar;

// Returns matcher for the New Window button on the Tools menu.
+ (id<GREYMatcher>)openNewWindowMenuButton;

// Matcher for a Copy button, such as the one in the Activity View. This matcher
// is very broad and will look for any button with a matching string.
+ (id<GREYMatcher>)copyActivityButton;

// Matcher for the Copy Link option in the updated context menus when long
// pressing on a link.
+ (id<GREYMatcher>)copyLinkButton;

// Matcher for the Edit option on the context menus.
+ (id<GREYMatcher>)editButton;

// Matcher for the Move option on the updated context menus.
+ (id<GREYMatcher>)moveButton;

// Matcher for the Mark as Read option on the Reading List's context menus.
+ (id<GREYMatcher>)readingListMarkAsReadButton;

// Matcher for the Mark as Unread option on the Reading List's context menus.
+ (id<GREYMatcher>)readingListMarkAsUnreadButton;

// Matcher for the Share option on the updated context menus.
+ (id<GREYMatcher>)deleteButton;

// Returns matcher for the Copy item on the old-style context menu.
+ (id<GREYMatcher>)contextMenuCopyButton;

// Returns matcher for defocused omnibox on a new tab.
+ (id<GREYMatcher>)NTPOmnibox;

// Returns matcher for a fake omnibox on a new tab page.
+ (id<GREYMatcher>)fakeOmnibox;

// Returns matcher for a label of a Discover feed header.
+ (id<GREYMatcher>)discoverHeaderLabel;

// Returns matcher for a logo on a new tab page.
+ (id<GREYMatcher>)ntpLogo;

// Returns a matcher for the current WebView.
+ (id<GREYMatcher>)webViewMatcher;

// Returns a matcher for the current WebState's scroll view.
+ (id<GREYMatcher>)webStateScrollViewMatcher;

// Returns a matcher for the current WebState's scroll view in the given
// `windowNumber`.
+ (id<GREYMatcher>)webStateScrollViewMatcherInWindowWithNumber:
    (int)windowNumber;

// Returns a matcher for the Clear Browsing Data button in the History UI.
+ (id<GREYMatcher>)historyClearBrowsingDataButton;

// Returns a matcher for "Open In..." button.
+ (id<GREYMatcher>)openInButton;

// Returns a matcher for "Open" button.
+ (id<GREYMatcher>)openPDFButton;

// Returns the GREYMatcher for the cell at `index` in the tab grid.
+ (id<GREYMatcher>)tabGridCellAtIndex:(unsigned int)index;

// Returns the GREYMatcher for the group cell at `index` in the tab grid.
+ (id<GREYMatcher>)tabGridGroupCellAtIndex:(unsigned int)index;

// Returns a matcher for the group cell for the given `groupName` and `count`.
+ (id<GREYMatcher>)tabGridGroupCellWithName:(NSString*)groupName
                                      count:(NSInteger)count;

// Returns the GREYMatcher for the cell at `index` in the tab strip.
+ (id<GREYMatcher>)tabStripCellAtIndex:(unsigned int)index;

// Returns the GREYMatcher for the group cell at `index` in the tab strip.
+ (id<GREYMatcher>)tabStripGroupCellAtIndex:(unsigned int)index;

// Returns the GREYMatcher for the button that closes the tab grid.
+ (id<GREYMatcher>)tabGridDoneButton;

// Returns the GREYMatcher for the button that closes all the tabs in the tab
// grid.
+ (id<GREYMatcher>)tabGridCloseAllButton;

// Returns the GREYMatcher for the button that reverts the close all tabs action
// in the tab grid.
+ (id<GREYMatcher>)tabGridUndoCloseAllButton;

// Returns the GREYMatcher for the cell that opens History in Recent Tabs.
+ (id<GREYMatcher>)tabGridSelectShowHistoryCell;

// Returns the GREYMatcher for the regular tabs empty state view.
+ (id<GREYMatcher>)tabGridRegularTabsEmptyStateView;

// Returns the GREYMatcher for the button that creates new non incognito tabs
// from within the tab grid.
+ (id<GREYMatcher>)tabGridNewTabButton;

// Returns the GREYMatcher for the button that creates new incognito tabs from
// within the tab grid.
+ (id<GREYMatcher>)tabGridNewIncognitoTabButton;

// Returns the GREYMatcher for the button to go to the non incognito panel in
// the tab grid.
+ (id<GREYMatcher>)tabGridOpenTabsPanelButton;

// Returns the GREYMatcher for the button to go to the incognito panel in
// the tab grid.
+ (id<GREYMatcher>)tabGridIncognitoTabsPanelButton;

// Returns the GREYMatcher for the button to go to the other devices panel in
// the tab grid.
+ (id<GREYMatcher>)tabGridOtherDevicesPanelButton;

// Returns the matcher for the tab group snack bar.
+ (id<GREYMatcher>)tabGroupSnackBar:(NSInteger)tabGroupCount;

// Returns the GREYMatcher for the button to go to the tab groups panel in
// the tab grid.
+ (id<GREYMatcher>)tabGridTabGroupsPanelButton;

// Returns the GREYMatcher for the button to go to the third panel in
// the tab grid. If Tab Group Sync is enabled, it's equivalent to
// `tabGridTabGroupsPanelButton`. Otherwise, it's equivalent to
// `tabGridOtherDevicesPanelButton`.
+ (id<GREYMatcher>)tabGridThirdPanelButton;

// Returns a matcher that matches tab grid normal mode page control - The
// PageControl panel always exist only on the tab grid normal mode, So this can
// be used to validate that the tab grid normal mode is active.
+ (id<GREYMatcher>)tabGridNormalModePageControl;

// Returns the GREYMatcher for the Inactive Tabs button of the tab grid.
+ (id<GREYMatcher>)tabGridInactiveTabsButton;

// Returns the GREYMatcher for the background of the tab grid.
+ (id<GREYMatcher>)tabGridBackground;

// Returns the GREYMatcher for the regular tab grid.
+ (id<GREYMatcher>)regularTabGrid;

// Returns the GREYMatcher for the incognito tab grid.
+ (id<GREYMatcher>)incognitoTabGrid;

// Returns the GREYMatcher for the button to close the cell at `index` in the
// tab grid.
+ (id<GREYMatcher>)tabGridCloseButtonForCellAtIndex:(unsigned int)index;

// Returns the GREYMatcher for the button to close the tab group cell at `index`
// in the tab grid.
+ (id<GREYMatcher>)tabGridCloseButtonForGroupCellAtIndex:(unsigned int)index;

// Returns a matcher for the password settings collection view.
+ (id<GREYMatcher>)settingsPasswordMatcher;

// Returns a matcher for the search bar in password settings.
+ (id<GREYMatcher>)settingsPasswordSearchMatcher;

// Returns a matcher for the profiles settings collection view.
+ (id<GREYMatcher>)settingsProfileMatcher;

// Returns a matcher for the credit card settings collection view.
+ (id<GREYMatcher>)settingsCreditCardMatcher;

// Returns a matcher for the delete button at the bottom of settings collection
// views.
+ (id<GREYMatcher>)settingsBottomToolbarDeleteButton;

// Returns a matcher for the search engine button in the main settings view.
+ (id<GREYMatcher>)settingsSearchEngineButton;

// Returns a matcher for the address bar button in the main settings view.
+ (id<GREYMatcher>)settingsAddressBarButton;

// Returns a matcher for an autofill suggestion view.
+ (id<GREYMatcher>)autofillSuggestionViewMatcher;

// Returns a matcher to test whether the element is a scroll view with a content
// smaller than the scroll view bounds.
+ (id<GREYMatcher>)contentViewSmallerThanScrollView;

// Returns a matcher for a history entry with `url` and `title`.
+ (id<GREYMatcher>)historyEntryForURL:(NSString*)URL title:(NSString*)title;

// Returns a matcher to the add button in the toolbar of the settings view.
+ (id<GREYMatcher>)settingsToolbarAddButton;

// Returns a matcher matching cells that can be swiped-to-dismiss.
+ (id<GREYMatcher>)cellCanBeSwipedToDismissed;

// Returns a matcher to password table view.
+ (id<GREYMatcher>)passwordsTableViewMatcher;

// Returns a matcher to default browser settings table view.
+ (id<GREYMatcher>)defaultBrowserSettingsTableViewMatcher;

// Returns a matcher to safety check table view.
+ (id<GREYMatcher>)safetyCheckTableViewMatcher;

#pragma mark - Overflow Menu Destinations

// Returns matcher for the bookmarks destination button in the overflow menu
// carousel.
+ (id<GREYMatcher>)bookmarksDestinationButton;

// Returns matcher for the history destination button in the overflow menu
// carousel.
+ (id<GREYMatcher>)historyDestinationButton;

// Returns matcher for the passwords destination button in the overflow menu
// carousel.
+ (id<GREYMatcher>)passwordsDestinationButton;

// Returns matcher for the price notifications destination button in the
// overflow menu carousel.
+ (id<GREYMatcher>)priceNotificationsDestinationButton;

// Returns matcher for the reading list destination button in the overflow menu
// carousel.
+ (id<GREYMatcher>)readingListDestinationButton;

// Returns matcher for the recent tabs destination button in the overflow menu
// carousel.
+ (id<GREYMatcher>)recentTabsDestinationButton;

// Returns matcher for the settings destination button in the overflow menu
// carousel.
+ (id<GREYMatcher>)settingsDestinationButton;

// Returns matcher for the site info destination button in the overflow menu
// carousel.
+ (id<GREYMatcher>)siteInfoDestinationButton;

// Returns matcher for the downloads destination button in the overflow menu
// carousel.
+ (id<GREYMatcher>)downloadsDestinationButton;

// Returns matcher for the What's New destination button in the overflow menu
// carousel.
+ (id<GREYMatcher>)whatsNewDestinationButton;

#pragma mark - Overflow Menu Actions

// Returns matcher for the settings action button in the overflow menu
// carousel.
+ (id<GREYMatcher>)settingsActionButton;

#pragma mark - Promo style view controller

// Returns matcher for the primary action button.
+ (id<GREYMatcher>)promoStylePrimaryActionButtonMatcher;

// Returns matcher for the secondary action button.
+ (id<GREYMatcher>)promoStyleSecondaryActionButtonMatcher;

#pragma mark - Incognito Interstitial

// Returns a matcher for the Incognito Interstitial view controller.
+ (id<GREYMatcher>)incognitoInterstitial;

// Returns a matcher for the subtitle of the Incognito Interstitial,
// as it should appear when `URL` was given to the Interstitial.
+ (id<GREYMatcher>)incognitoInterstitialLabelForURL:(NSString*)url;

// Returns a matcher for the primary action button in the Incognito
// Interstitial.
+ (id<GREYMatcher>)incognitoInterstitialOpenInChromeIncognitoButton;

// Returns a matcher for the secondary action button in the Incognito
// Interstitial.
+ (id<GREYMatcher>)incognitoInterstitialOpenInChromeButton;

// Returns a matcher for the Cancel button in the Incognito Interstitial.
+ (id<GREYMatcher>)incognitoInterstitialCancelButton;

#pragma mark - Manual Fallback

// Returns the matcher for the Activity View header.
+ (id<GREYMatcher>)activityViewHeaderWithURLHost:(NSString*)host
                                           title:(NSString*)pageTitle;

// Returns a matcher for the button to accept the generated password.
+ (id<GREYMatcher>)useSuggestedPasswordMatcher;

#pragma mark - Tab Grid Edit Mode

// Returns a matcher for the button to open the context menu for edit actions.
+ (id<GREYMatcher>)tabGridEditButton;

// Returns a matcher for the context menu button to close all tabs.
+ (id<GREYMatcher>)tabGridEditMenuCloseAllButton;

// Returns a matcher for the context menu button to enter the tab grid tab
// selection mode.
+ (id<GREYMatcher>)tabGridSelectTabsMenuButton;

// Returns a matcher for the button to act on the selected tabs.
+ (id<GREYMatcher>)tabGridEditAddToButton;

// Returns a matcher for the button to close the selected tabs.
+ (id<GREYMatcher>)tabGridEditCloseTabsButton;

// Returns a matcher for the button to select all tabs.
+ (id<GREYMatcher>)tabGridEditSelectAllButton;

// Returns a matcher for the button to share tabs.
+ (id<GREYMatcher>)tabGridEditShareButton;

#pragma mark - Tab Grid Search Mode

// Returns a matcher for the button to enter the tab grid search mode.
+ (id<GREYMatcher>)tabGridSearchTabsButton;

// Returns a matcher for the tab grid search bar.
+ (id<GREYMatcher>)tabGridSearchBar;

// Returns a matcher for the tab grid search cancel button.
+ (id<GREYMatcher>)tabGridSearchCancelButton;

// Returns a matcher for the tab grid search mode toolbar.
+ (id<GREYMatcher>)tabGridSearchModeToolbar;

#pragma mark - Create Tab Group View

// Returns the matcher for the tab group creation view.
+ (id<GREYMatcher>)tabGroupCreationView;

// Returns the matcher for the text field's clear button in the tab group
// creation view.
+ (id<GREYMatcher>)createTabGroupTextField;

// Returns the matcher for the text field's clear button in the tab group
+ (id<GREYMatcher>)createTabGroupTextFieldClearButton;

// Returns the matcher for `Create Group` button in the tab group creation view.
+ (id<GREYMatcher>)createTabGroupCreateButton;

// Returns the matcher for the cancel button in the tab group creation view.
+ (id<GREYMatcher>)createTabGroupCancelButton;

#pragma mark - Tab Group View

// Returns the matcher for the tab group view.
+ (id<GREYMatcher>)tabGroupView;

// Returns the matcher for the title on the tab group view.
+ (id<GREYMatcher>)tabGroupViewTitle:(NSString*)title;

// Returns the matcher for the overflow menu button in the tab group view.
+ (id<GREYMatcher>)tabGroupOverflowMenuButton;

// Returns the matcher for the back button in the tab group view.
+ (id<GREYMatcher>)tabGroupBackButton;

#pragma mark - Tab Groups Context Menus

// Returns the matcher for `Add Tab to New Group` button in the context menu.
+ (id<GREYMatcher>)addTabToNewGroupButton;

// Returns the matcher for the sub menu button `New Tab Group` in the `Add Tab
// To Group` button.
+ (id<GREYMatcher>)addTabToGroupSubMenuButton;

// Returns the matcher for `Rename Group` button in the context menu of a tab
// group.
+ (id<GREYMatcher>)renameGroupButton;

// Returns the matcher for `Ungroup` button in the context menu of a tab group.
+ (id<GREYMatcher>)ungroupButton;

// Returns the matcher for `Ungroup` button in the confirmation dialog of a tab
// group. It's displayed only when tab groups sync is enabled.
+ (id<GREYMatcher>)ungroupConfirmationButton;

// Returns the matcher for `Delete Group` button in the context menu of a tab
// group.
+ (id<GREYMatcher>)deleteGroupButton;

// Returns the matcher for `Delete Group` button in the confirmation dialog of a
// tab group. It's displayed only when tab groups sync is enabled.
+ (id<GREYMatcher>)deleteGroupConfirmationButton;

// Returns the matcher for `Close Group` button in the context menu of a tab
// group.
+ (id<GREYMatcher>)closeGroupButton;

@end

#endif  // IOS_CHROME_TEST_EARL_GREY_CHROME_MATCHERS_APP_INTERFACE_H_