| // Copyright 2024 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/contextual_cueing_features.h" |
| |
| #include "base/metrics/field_trial_params.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/common/chrome_features.h" |
| #include "components/variations/service/variations_service.h" |
| |
| #if BUILDFLAG(ENABLE_GLIC) |
| #include "chrome/browser/glic/host/glic_features.mojom.h" |
| #include "chrome/browser/glic/public/glic_enabling.h" |
| #endif // BUILDFLAG(ENABLE_GLIC) |
| |
| namespace contextual_cueing { |
| |
| BASE_FEATURE(kContextualCueing, |
| "ContextualCueing", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| BASE_FEATURE(kGlicZeroStateSuggestions, |
| "GlicZeroStateSuggestions", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| bool IsZeroStateSuggestionsEnabled() { |
| #if BUILDFLAG(ENABLE_GLIC) |
| // If the feature is overridden (e.g. via server-side config or command-line), |
| // use that state. |
| auto* feature_list = base::FeatureList::GetInstance(); |
| if (feature_list && |
| feature_list->IsFeatureOverridden(kGlicZeroStateSuggestions.name)) { |
| // Important: If a server-side config applies to this client (i.e. after |
| // accounting for its filters), but the client gets assigned to the default |
| // group, they will still take this code path and receive the state |
| // specified via BASE_FEATURE() above. |
| return base::FeatureList::IsEnabled(kGlicZeroStateSuggestions); |
| } |
| |
| return glic::GlicEnabling::IsInRolloutLocation(); |
| #else |
| return false; |
| #endif |
| } |
| |
| const base::FeatureParam<base::TimeDelta> kBackoffTime(&kContextualCueing, |
| "BackoffTime", |
| base::Hours(24)); |
| |
| const base::FeatureParam<double> kBackoffMultiplierBase(&kContextualCueing, |
| "BackoffMultiplierBase", |
| 2.0); |
| |
| const base::FeatureParam<base::TimeDelta> kNudgeCapTime(&kContextualCueing, |
| "NudgeCapTime", |
| base::Hours(8)); |
| |
| const base::FeatureParam<int> kNudgeCapCount(&kContextualCueing, |
| "NudgeCapCount", |
| 10); |
| |
| const base::FeatureParam<base::TimeDelta> kNudgeCapTimePerDomain( |
| &kContextualCueing, |
| "NudgeCapTimePerDomain", |
| base::Hours(8)); |
| |
| const base::FeatureParam<int> kNudgeCapCountPerDomain(&kContextualCueing, |
| "NudgeCapCountPerDomain", |
| 3); |
| |
| const base::FeatureParam<int> kMinPageCountBetweenNudges( |
| &kContextualCueing, |
| "MinPageCountBetweenNudges", |
| 3); |
| |
| const base::FeatureParam<base::TimeDelta> kMinTimeBetweenNudges( |
| &kContextualCueing, |
| "MinTimeBetweenNudges", |
| base::Minutes(10)); |
| |
| const base::FeatureParam<int> kVisitedDomainsLimit(&kContextualCueing, |
| "VisitedDomainsLimit", |
| 20); |
| |
| const base::FeatureParam<base::TimeDelta> kPdfPageCountCaptureDelay( |
| &kContextualCueing, |
| "PdfPageCountCaptureDelay", |
| base::Seconds(4)); |
| |
| const base::FeatureParam<bool> kEnablePageContentExtraction( |
| &kContextualCueing, |
| "EnablePageContentExtraction", |
| true); |
| |
| const base::FeatureParam<bool> kExtractInnerTextForZeroStateSuggestions( |
| &kGlicZeroStateSuggestions, |
| "ZSSExtractInnerText", |
| true); |
| |
| const base::FeatureParam<bool> |
| kExtractAnnotatedPageContentForZeroStateSuggestions( |
| &kGlicZeroStateSuggestions, |
| "ZSSExtractAnnotatedPageContent", |
| false); |
| |
| const base::FeatureParam<base::TimeDelta> |
| kPageContentExtractionDelayForSameDocumentNavigation( |
| &kGlicZeroStateSuggestions, |
| "ZSSPageContentExtractionDelayForSameDocumentNavigation", |
| base::Seconds(3)); |
| |
| const base::FeatureParam<bool> kReturnEmptyForSameDocumentNavigation( |
| &kGlicZeroStateSuggestions, |
| "ZSSReturnEmptyForSameDocumentNavigation", |
| false); |
| |
| const base::FeatureParam<bool> kAllowContextualSuggestionsForSearchResultsPages( |
| &kGlicZeroStateSuggestions, |
| "ZSSAllowContextualSuggestionsForSearchResultsPages", |
| true); |
| |
| const base::FeatureParam<base::TimeDelta> kZSSPageContextTimeout( |
| &kGlicZeroStateSuggestions, |
| "ZSSPageContextTimeout", |
| base::Seconds(5)); |
| |
| #if BUILDFLAG(ENABLE_GLIC) |
| const base::FeatureParam<int> kMaxPinnedPagesForTriggeringSuggestions( |
| &glic::mojom::features::kZeroStateSuggestionsV2, |
| "ZSSMaxPinnedPagesForTriggeringSuggestions", |
| 10); |
| #endif // BUILDFLAG(ENABLE_GLIC) |
| |
| } // namespace contextual_cueing |