blob: 6cde0ea5499ea2db5ab326a6d3039ce9986297ad [file]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/contextual_cueing/features.h"
namespace contextual_cueing {
BASE_FEATURE(kContextualCueingV2, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kContextualCueingV2EnforceAgeRestriction,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kContextualCueingV2MultiSource, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kContextualCueingV2AllowOverridingUcbScoring,
base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<double> kEduClassifierThreshold(
&kContextualCueingV2,
"ContextualCueingV2EduClassifierThreshold",
0.5);
const base::FeatureParam<double> kShoppingClassifierThreshold(
&kContextualCueingV2,
"ContextualCueingV2ShoppingClassifierThreshold",
0.5);
const base::FeatureParam<bool> kDiscardShoppingPdfs(
&kContextualCueingV2,
"ContextualCueingV2DiscardShoppingPdfs",
true);
const base::FeatureParam<int> kMaxNumBackgroundTabs(
&kContextualCueingV2,
"ContextualCueingV2MaxNumBackgroundTabs",
10);
const base::FeatureParam<bool> kDisableCueBackoff(
&kContextualCueingV2,
"ContextualCueingV2DisableCueBackoff",
false);
const base::FeatureParam<int> kMinPageCountBetweenNudges(
&kContextualCueingV2,
"ContextualCueingV2MinPageCountBetweenNudges",
10);
const base::FeatureParam<base::TimeDelta> kMinTimeBetweenNudges(
&kContextualCueingV2,
"ContextualCueingV2MinTimeBetweenNudges",
base::Minutes(10));
// Cap number of cues shown to a user to be at most `kCueCapCount` in
// `kCueCapTime` duration.
const base::FeatureParam<base::TimeDelta> kCueCapTime(
&kContextualCueingV2,
"ContextualCueingV2CueCapTime",
base::Hours(8));
const base::FeatureParam<int> kCueCapCount(&kContextualCueingV2,
"ContextualCueingV2CueCapCount",
10);
// Cap number of cues for an origin to be at most `kCueCapCountPerOrigin` in
// `kCueCapTimePerOrigin` duration.
const base::FeatureParam<base::TimeDelta> kCueCapTimePerOrigin(
&kContextualCueingV2,
"ContextualCueingV2CueCapTimePerOrigin",
base::Hours(4));
const base::FeatureParam<int> kCueCapCountPerOrigin(
&kContextualCueingV2,
"ContextualCueingV2CueCapCountPerOrigin",
3);
const base::FeatureParam<int> kVisitedOriginsLimit(
&kContextualCueingV2,
"ContextualCueingV2VisitedOriginsLimit",
20);
const base::FeatureParam<base::TimeDelta> kDismissBackoffTime(
&kContextualCueingV2,
"ContextualCueingV2DismissBackoffTime",
base::Hours(24));
const base::FeatureParam<double> kDismissBackoffMultiplierBase(
&kContextualCueingV2,
"ContextualCueingV2DismissBackoffMultiplierBase",
2.0);
const base::FeatureParam<base::TimeDelta> kClickBackoffTime(
&kContextualCueingV2,
"ContextualCueingV2ClickBackoffTime",
base::Hours(1));
const base::FeatureParam<bool> kUsePrivateAi(&kContextualCueingV2,
"ContextualCueingV2UsePrivateAi",
true);
const base::FeatureParam<base::TimeDelta> kAnnotationTimeout(
&kContextualCueingV2MultiSource,
"ContextualCueingV2MultiSourceAnnotationTimeout",
base::Seconds(3));
// UCB scorer hyperparameters. Defaults are a reasonable starting point;
// tune via Finch once multi-source experiments are running.
const base::FeatureParam<double> kUcbExplorationWeight(
&kContextualCueingV2MultiSource,
"ContextualCueingV2MultiSourceUcbExplorationWeight",
1.414);
const base::FeatureParam<double> kUcbAlpha(
&kContextualCueingV2MultiSource,
"ContextualCueingV2MultiSourceUcbAlpha",
1.0);
const base::FeatureParam<double> kUcbBeta(
&kContextualCueingV2MultiSource,
"ContextualCueingV2MultiSourceUcbBeta",
0.5);
const base::FeatureParam<double> kUcbGamma(
&kContextualCueingV2MultiSource,
"ContextualCueingV2MultiSourceUcbGamma",
1.0);
const base::FeatureParam<int> kUcbMaxExploreImpressions(
&kContextualCueingV2MultiSource,
"ContextualCueingV2MultiSourceUcbMaxExploreImpressions",
50);
const base::FeatureParam<std::string> kHelpCenterArticleLink(
&kContextualCueingV2,
"ContextualCueingV2HelpCenterArticleLink",
"https://support.google.com/chrome?p=");
constexpr base::FeatureParam<TabListVisibility>::Option
kTabListVisibilityOptions[] = {
{TabListVisibility::kNever, "never"},
{TabListVisibility::kAlways, "always"},
{TabListVisibility::kOnlyIfMultiple, "only-if-multiple"},
};
const base::FeatureParam<TabListVisibility> kTabListVisibility(
&kContextualCueingV2,
"ContextualCueingV2TabListVisibility",
TabListVisibility::kOnlyIfMultiple,
&kTabListVisibilityOptions);
const base::FeatureParam<bool> kShouldShowCueInSplitView(
&kContextualCueingV2,
"ContextualCueingV2ShouldShowCueInSplitView",
false);
const base::FeatureParam<bool> kEnablePrivateInsightsLogging(
&kContextualCueingV2,
"ContextualCueingV2EnablePrivateInsightsLogging",
false);
BASE_FEATURE(kHappinessTrackingSurveysForContextualCueingDismissed,
base::FEATURE_DISABLED_BY_DEFAULT);
} // namespace contextual_cueing