// 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.

#ifndef IOS_CHROME_BROWSER_UI_UI_FEATURE_FLAGS_H_
#define IOS_CHROME_BROWSER_UI_UI_FEATURE_FLAGS_H_

#include "Availability.h"
#include "base/feature_list.h"

// Feature to open tab switcher after sliding down the toolbar.
extern const base::Feature kExpandedTabStrip;

// Test-only: Feature flag used to verify that EG2 can trigger flags. Must be
// always disabled by default, because it is used to verify that enabling
// features in tests works.
extern const base::Feature kTestFeature;

// Feature flag to enable Shared Highlighting (Link to Text).
extern const base::Feature kSharedHighlightingIOS;

// Feature flag for testing the 'default browser' screen in FRE and different
// experiments to suggest the users to update the default browser in the
// Settings.app.
extern const base::Feature kEnableFREDefaultBrowserPromoScreen;

// Feature flag that enables using the FRE UI module to show first run screens.
extern const base::Feature kEnableFREUIModuleIOS;

// TODO(crbug.com/1128242): Remove this flag after the refactoring work is
// finished. Flag to modernize the tabstrip without disturbing the existing one.
extern const base::Feature kModernTabStrip;

// Enables the usage of dark mode color while in Incognito mode.
extern const base::Feature kIncognitoBrandConsistencyForIOS;

// Feature flag to enable revamped Incognito NTP page.
extern const base::Feature kIncognitoNtpRevamp;

// Feature flag to enable third-party intents in Incognito.
extern const base::Feature kIOS3PIntentsInIncognito;

// Feature flag that experiments with the default browser fullscreen promo UI.
extern const base::Feature kDefaultBrowserFullscreenPromoExperiment;

// Feature flag that allows external apps to show default browser settings.
extern const base::Feature kDefaultBrowserIntentsShowSettings;

// Feature flag that shows iOS 15 context menu, instead of tooltip popover,
// during a location bar long press gesture.
extern const base::Feature kIOSLocationBarUseNativeContextMenu;

// Feature flag that swaps the omnibox textfield implementation.
extern const base::Feature kIOSNewOmniboxImplementation;

// Feature flag that toggles the SwiftUI omnibox popup implementation.
extern const base::Feature kIOSOmniboxUpdatedPopupUI;

// Parameter name for the parameter controlling which UI variation to use for
// the SwiftUI omnibox popup.
extern const char kIOSOmniboxUpdatedPopupUIVariationName[];

// Variation 1 for the parameter controlling which UI variation to use for
// the SwiftUI omnibox popup.
extern const char kIOSOmniboxUpdatedPopupUIVariation1[];
// Variation 2 for the parameter controlling which UI variation to use for
// the SwiftUI omnibox popup.
extern const char kIOSOmniboxUpdatedPopupUIVariation2[];

// Feature flag to enable removing any entry points to the history UI from
// Incognito mode.
extern const base::Feature kUpdateHistoryEntryPointsInIncognito;

// Feature flag to enable using Lens to search for images.
extern const base::Feature kUseLensToSearchForImage;

// Feature flag to enable duplicate NTP cleanup.
extern const base::Feature kRemoveExcessNTPs;

// Feature flag to enable shortened instruction to turn on Password AutoFill for
// Chrome.
extern const base::Feature kEnableShortenedPasswordAutoFillInstruction;

// Feature flag to show the setting allowing the user to choose the mode
// (Desktop/Mobile) in which the pages will be requested by default.
extern const base::Feature kAddSettingForDefaultPageMode;

// Feature flag to switch images to SFSymbols when enabled.
extern const base::Feature kUseSFSymbols;

// Feature flag to enable Calendar event in experience kit.
extern const base::Feature kCalendarExperienceKit;

// Feature flag to enable Apple Calendar event in experience kit.
extern const base::Feature kEnableExpKitAppleCalendar;

// Feature flag to enable Text Classifier entity detection in experience kit
// calendar.
extern const base::Feature kEnableExpKitCalendarTextClassifier;

#endif  // IOS_CHROME_BROWSER_UI_UI_FEATURE_FLAGS_H_
