blob: d9beb2db6064591f2c433da86085c95633336579 [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/search/ntp_features.h"
#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/time/time.h"
#include "build/build_config.h"
namespace ntp_features {
// If enabled, shows a confirm dialog before removing search suggestions from
// the New Tab page real search box ("realbox").
BASE_FEATURE(kConfirmSuggestionRemovals,
"ConfirmNtpSuggestionRemovals",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, the OneGooleBar cached response is sent back to NTP.
BASE_FEATURE(kCacheOneGoogleBar,
"CacheOneGoogleBar",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, Chrome theme color will be set to match the NTP background
// on NTP Customize Chrome background change.
BASE_FEATURE(kCustomizeChromeColorExtraction,
"CustomizeChromeColorExtraction",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, Customize Chrome will be an option in the Unified Side Panel
// when on the New Tab Page.
BASE_FEATURE(kCustomizeChromeSidePanel,
"CustomizeChromeSidePanel",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables the removal of the NTP background scrim and forced dark foreground
// colors for a specific subset of Chrome Web Store themes (see
// crbug.com/1329552). This is enabled by default to allow finch to disable this
// NTP treatment in the case of unexpected regressions.
BASE_FEATURE(kCwsScrimRemoval,
"CwsScrimRemoval",
base::FEATURE_ENABLED_BY_DEFAULT);
// If enabled, "middle slot" promos on the bottom of the NTP will show a dismiss
// UI that allows users to close them and not see them again.
BASE_FEATURE(kDismissPromos,
"DismissNtpPromos",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, the NTP "realbox" will be themed like the omnibox
// (same background/text/selected/hover colors).
BASE_FEATURE(kRealboxMatchOmniboxTheme,
"NtpRealboxMatchOmniboxTheme",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, the NTP "realbox" will have same border/drop shadow in hover
// state as searchbox.
BASE_FEATURE(kRealboxMatchSearchboxTheme,
"NtpRealboxMatchSearchboxTheme",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, the NTP "realbox" will have the same rounded corners as
// searchbox.
BASE_FEATURE(kRealboxRoundedCorners,
"NtpRealboxRoundedCorners",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, the real search box ("realbox") on the New Tab page will show a
// Google (g) icon instead of the typical magnifying glass (aka loupe).
BASE_FEATURE(kRealboxUseGoogleGIcon,
"NtpRealboxUseGoogleGIcon",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, chrome cart module will be shown.
BASE_FEATURE(kNtpChromeCartModule,
"NtpChromeCartModule",
base::FEATURE_ENABLED_BY_DEFAULT);
// If enabled, Comprehensive Theming color changes will be applied to elements
// on the New Tab Page, excluding the Realbox.
BASE_FEATURE(kNtpComprehensiveTheming,
"NtpComprehensiveTheming",
base::FEATURE_ENABLED_BY_DEFAULT);
// If enabled, Comprehensive Theming color changes will be applied to the
// Realbox on the New Tab Page.
BASE_FEATURE(kNtpComprehensiveThemeRealbox,
"NtpComprehensiveThemeRealbox",
base::FEATURE_DISABLED_BY_DEFAULT);
#if !defined(OFFICIAL_BUILD)
// If enabled, dummy modules will be shown.
BASE_FEATURE(kNtpDummyModules,
"NtpDummyModules",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
// If enabled, Google Drive module will be shown.
BASE_FEATURE(kNtpDriveModule,
"NtpDriveModule",
base::FEATURE_ENABLED_BY_DEFAULT);
// If enabled, handles navigations from the Most Visited tiles explicitly and
// overrides the navigation's transition type to bookmark navigation before the
// navigation is issued.
// TODO(crbug.com/1147589): When removing this flag, also remove the workaround
// in ChromeContentBrowserClient::OverrideNavigationParams.
BASE_FEATURE(kNtpHandleMostVisitedNavigationExplicitly,
"HandleMostVisitedNavigationExplicitly",
base::FEATURE_ENABLED_BY_DEFAULT);
// If enabled, logo will be shown.
BASE_FEATURE(kNtpLogo, "NtpLogo", base::FEATURE_ENABLED_BY_DEFAULT);
// If enabled, logo will fill up less vertical space.
BASE_FEATURE(kNtpReducedLogoSpace,
"NtpReducedLogoSpace",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, middle slot promo will be shown.
BASE_FEATURE(kNtpMiddleSlotPromo,
"NtpMiddleSlotPromo",
base::FEATURE_ENABLED_BY_DEFAULT);
// If enabled, middle slot promo will be dismissed from New Tab Page until new
// promo message is populated
BASE_FEATURE(kNtpMiddleSlotPromoDismissal,
"NtpMiddleSlotPromoDismissal",
base::FEATURE_ENABLED_BY_DEFAULT);
// Dummy feature to set param "NtpModulesLoadTimeoutMillisecondsParam".
BASE_FEATURE(kNtpModulesLoadTimeoutMilliseconds,
"NtpModulesLoadTimeoutMilliseconds",
base::FEATURE_DISABLED_BY_DEFAULT);
// If true, extends width of modules if space allows.
BASE_FEATURE(kNtpWideModules,
"NtpWideModules",
base::FEATURE_DISABLED_BY_DEFAULT);
// Dummy feature to set param "NtpModulesOrderParam".
BASE_FEATURE(kNtpModulesOrder,
"NtpModulesOrder",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, modules will be able to be reordered via dragging and dropping
BASE_FEATURE(kNtpModulesDragAndDrop,
"NtpModulesDragAndDrop",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, the first run experience for Modular NTP Desktop v1 will show.
BASE_FEATURE(kNtpModulesFirstRunExperience,
"NtpModulesFirstRunExperience",
base::FEATURE_ENABLED_BY_DEFAULT);
// If enabled, modules will be loaded but not shown. This is useful to determine
// if a user would have seen modules in order to counterfactually log or
// trigger.
BASE_FEATURE(kNtpModulesLoad,
"NtpModulesLoad",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, redesigned modules will be shown.
BASE_FEATURE(kNtpModulesRedesigned,
"NtpModulesRedesigned",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, a different module layout where modules are organized in rows and
// columns will be shown.
BASE_FEATURE(kNtpModulesRedesignedLayout,
"NtpModulesRedesignedLayout",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, OneGoogleBar will be shown.
BASE_FEATURE(kNtpOneGoogleBar,
"NtpOneGoogleBar",
base::FEATURE_ENABLED_BY_DEFAULT);
// If enabled, Google Photos module will be shown.
BASE_FEATURE(kNtpPhotosModule,
"NtpPhotosModule",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, a customized title will be shown on the opt-in card.
BASE_FEATURE(kNtpPhotosModuleCustomizedOptInTitle,
"NtpPhotosModuleCustomizedOptInTitle",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, a customized art work will be shown on the opt-in card.
BASE_FEATURE(kNtpPhotosModuleCustomizedOptInArtWork,
"NtpPhotosModuleCustomizedOptInArtWork",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, Google Photos opt-in card will show a button to soft opt-out.
BASE_FEATURE(kNtpPhotosModuleSoftOptOut,
"NtpPhotosModuleSoftOptOut",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, the single svg image show in Photos opt-in screen will be
// replaced by constituent images to support i18n.
BASE_FEATURE(kNtpPhotosModuleSplitSvgOptInArtWork,
"NtpPhotosModuleSplitSvgOptInArtWork",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, Following Feed module will be shown.
BASE_FEATURE(kNtpFeedModule,
"NtpFeedModule",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, Google Lens image search will be shown in the NTP Realbox.
BASE_FEATURE(kNtpRealboxLensSearch,
"NtpRealboxLensSearch",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, recipe tasks module will be shown.
BASE_FEATURE(kNtpRecipeTasksModule,
"NtpRecipeTasksModule",
base::FEATURE_ENABLED_BY_DEFAULT);
// Controls whether the scrim is removed.
BASE_FEATURE(kNtpRemoveScrim,
"NtpRemoveScrim",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, SafeBrowsing module will be shown to a target user.
BASE_FEATURE(kNtpSafeBrowsingModule,
"NtpSafeBrowsingModule",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, shortcuts will be shown.
BASE_FEATURE(kNtpShortcuts, "NtpShortcuts", base::FEATURE_ENABLED_BY_DEFAULT);
// If enabled, shortcuts will be shown in a wide single row.
BASE_FEATURE(kNtpSingleRowShortcuts,
"NtpSingleRowShortcuts",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, the History clusters module will be shown.
BASE_FEATURE(kNtpHistoryClustersModule,
"NtpHistoryClustersModule",
base::FEATURE_DISABLED_BY_DEFAULT);
// Dummy feature to set kNtpHistoryClustersModuleBeginTimeDurationHoursParam.
BASE_FEATURE(kNtpHistoryClustersModuleBeginTimeDuration,
"NtpHistoryClustersModuleBeginTimeDuration",
base::FEATURE_DISABLED_BY_DEFAULT);
// Dummy feature to set kNtpHistoryClustersModuleMinimumVisitsRequiredParam.
BASE_FEATURE(kNtpHistoryClustersModuleMinimumVisitsRequired,
"NtpHistoryClustersModuleMinimumVisitsRequired",
base::FEATURE_DISABLED_BY_DEFAULT);
// Dummy feature to set kNtpHistoryClustersModuleMinimumImagesRequiredParam.
BASE_FEATURE(kNtpHistoryClustersModuleMinimumImagesRequired,
"NtpHistoryClustersModuleMinimumImagesRequired",
base::FEATURE_DISABLED_BY_DEFAULT);
// Dummy feature to set kNtpHistoryClustersModuleCategoriesParam.
BASE_FEATURE(kNtpHistoryClustersModuleCategories,
"NtpHistoryClustersModuleCategories",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, the history clusters module will be loaded but not shown. This is
// useful to determine if a user would have seen modules in order to
// counterfactually log or trigger.
BASE_FEATURE(kNtpHistoryClustersModuleLoad,
"NtpHistoryClustersModuleLoad",
base::FEATURE_DISABLED_BY_DEFAULT);
// Dummy feature to set kNtpHistoryClustersModuleMaxClustersParam.
BASE_FEATURE(kNtpHistoryClustersModuleMaxClusters,
"NtpHistoryClustersMaxClusters",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, module headers will display an associated icon.
BASE_FEATURE(kNtpModulesHeaderIcon,
"NtpModulesHeaderIcon",
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<double>
kNtpElementLuminosityChangeForLightBackgroundParam{
&kNtpComprehensiveTheming,
"NtpElementLuminosityChangeForLightBackgroundParam", 0.1};
const base::FeatureParam<double>
kNtpElementLuminosityChangeForDarkBackgroundParam{
&kNtpComprehensiveTheming,
"NtpElementLuminosityChangeForDarkBackgroundParam", 0.2};
const base::FeatureParam<std::string> kNtpOgbButtonSelectorParam{
&kNtpRemoveScrim, "NtpOgbButtonSelectorParam", ".gb_A"};
const base::FeatureParam<std::string> kNtpOgbUnprotectedTextSelectorParam{
&kNtpRemoveScrim, "NtpOgbUnprotectedTextSelectorParam", ".gb_d"};
const char kNtpModulesEligibleForHappinessTrackingSurveyParam[] =
"NtpModulesEligibleForHappinessTrackingSurveyParam";
const char kNtpModulesLoadTimeoutMillisecondsParam[] =
"NtpModulesLoadTimeoutMillisecondsParam";
const char kNtpModulesOrderParam[] = "NtpModulesOrderParam";
const char kNtpChromeCartModuleDataParam[] = "NtpChromeCartModuleDataParam";
const char kNtpChromeCartModuleAbandonedCartDiscountParam[] =
"NtpChromeCartModuleAbandonedCartDiscountParam";
const char kNtpChromeCartModuleAbandonedCartDiscountUseUtmParam[] =
"NtpChromeCartModuleAbandonedCartDiscountUseUtmParam";
const char kNtpChromeCartModuleHeuristicsImprovementParam[] =
"NtpChromeCartModuleHeuristicsImprovementParam";
const char kNtpChromeCartModuleCouponParam[] = "NtpChromeCartModuleCouponParam";
const char kNtpDriveModuleDataParam[] = "NtpDriveModuleDataParam";
const char kNtpDriveModuleManagedUsersOnlyParam[] =
"NtpDriveModuleManagedUsersOnlyParam";
const char kNtpDriveModuleCacheMaxAgeSParam[] =
"NtpDriveModuleCacheMaxAgeSParam";
const char kNtpDriveModuleExperimentGroupParam[] =
"NtpDriveModuleExperimentGroupParam";
const char kNtpHistoryClustersModuleDataParam[] =
"NtpRecipeTasksModuleDataParam";
const char kNtpMiddleSlotPromoDismissalParam[] =
"NtpMiddleSlotPromoDismissalParam";
const char kNtpPhotosModuleDataParam[] = "NtpPhotosModuleDataParam";
const char kNtpPhotosModuleOptInTitleParam[] = "NtpPhotosModuleOptInTitleParam";
const char kNtpPhotosModuleOptInArtWorkParam[] =
"NtpPhotosModuleOptInArtWorkParam";
const char kNtpSafeBrowsingModuleCooldownPeriodDaysParam[] =
"NtpSafeBrowsingModuleCooldownPeriodDaysParam";
const char kNtpSafeBrowsingModuleCountMaxParam[] =
"NtpSafeBrowsingModuleCountMaxParam";
const char kRealboxMatchOmniboxThemeVariantParam[] =
"RealboxMatchOmniboxThemeVariantParam";
const char kNtpRecipeTasksModuleDataParam[] = "NtpRecipeTasksModuleDataParam";
const char kNtpRecipeTasksModuleCacheMaxAgeSParam[] =
"NtpRecipeTasksModuleCacheMaxAgeSParam";
const char kNtpRecipeTasksModuleExperimentGroupParam[] =
"NtpRecipeTasksModuleExperimentGroupParam";
const char kNtpHistoryClustersModuleBeginTimeDurationHoursParam[] =
"NtpHistoryClustersModuleBeginTimeDurationHoursParam";
const char kNtpHistoryClustersModuleMinimumVisitsRequiredParam[] =
"NtpHistoryClustersModuleMinimumVisitsRequiredParam";
const char kNtpHistoryClustersModuleMinimumImagesRequiredParam[] =
"NtpHistoryClustersModuleMinimumImagesRequiredParam";
const char kNtpHistoryClustersModuleCategoriesAllowlistParam[] =
"NtpHistoryClustersModuleCategoriesParam";
const char kNtpHistoryClustersModuleCategoriesBlocklistParam[] =
"NtpHistoryClustersModuleCategoriesBlocklistParam";
const char kNtpHistoryClustersModuleCategoriesBoostlistParam[] =
"NtpHistoryClustersModuleCategoriesBoostlistParam";
const char kNtpHistoryClustersModuleMaxClustersParam[] =
"NtpHistoryClustersModuleMaxClustersParam";
base::TimeDelta GetModulesLoadTimeout() {
std::string param_value = base::GetFieldTrialParamValueByFeature(
kNtpModulesLoadTimeoutMilliseconds,
kNtpModulesLoadTimeoutMillisecondsParam);
// If the field trial param is not found or cannot be parsed to an unsigned
// integer, return the default value.
unsigned int param_value_as_int = 0;
if (!base::StringToUint(param_value, &param_value_as_int)) {
return base::Seconds(3);
}
return base::Milliseconds(param_value_as_int);
}
std::vector<std::string> GetModulesOrder() {
return base::SplitString(base::GetFieldTrialParamValueByFeature(
kNtpModulesOrder, kNtpModulesOrderParam),
",:;", base::WhitespaceHandling::TRIM_WHITESPACE,
base::SplitResult::SPLIT_WANT_NONEMPTY);
}
} // namespace ntp_features