// Copyright 2016 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/ntp_snippets/features.h" #include "base/feature_list.h" #include "base/metrics/field_trial_params.h" #include "base/time/clock.h" #include "build/build_config.h" #include "components/ntp_snippets/category_rankers/click_based_category_ranker.h" #include "components/ntp_snippets/category_rankers/constant_category_ranker.h" #include "components/variations/variations_associated_data.h" namespace ntp_snippets { namespace { // All platforms proxy for whether the simplified NTP is enabled. bool IsSimplifiedNtpEnabled() { #if BUILDFLAG(IS_ANDROID) return true; #else return false; #endif // BUILDFLAG(IS_ANDROID) } } // namespace // Holds an experiment ID. So long as the feature is set through a server-side // variations config, this feature should exist on the client. This ensures that // the experiment ID is visible in chrome://snippets-internals. BASE_FEATURE(kRemoteSuggestionsBackendFeature, "NTPRemoteSuggestionsBackend", base::FEATURE_DISABLED_BY_DEFAULT); // Keep sorted, and keep nullptr at the end. const base::Feature* const kAllFeatures[] = { &kArticleSuggestionsFeature, &kKeepPrefetchedContentSuggestions, &kNotificationsFeature, &kRemoteSuggestionsBackendFeature, &kOptionalImagesEnabledFeature}; BASE_FEATURE(kArticleSuggestionsFeature, "NTPArticleSuggestions", base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kRemoteSuggestionsEmulateM58FetchingSchedule, "RemoteSuggestionsEmulateM58FetchingSchedule", base::FEATURE_DISABLED_BY_DEFAULT); std::unique_ptr BuildSelectedCategoryRanker( PrefService* pref_service, base::Clock* clock) { if (IsSimplifiedNtpEnabled()) { return std::make_unique(); } return std::make_unique(pref_service, clock); } BASE_FEATURE(kNotificationsFeature, "ContentSuggestionsNotifications", base::FEATURE_DISABLED_BY_DEFAULT); const char kNotificationsPriorityParam[] = "priority"; const char kNotificationsTextParam[] = "text"; const char kNotificationsTextValuePublisher[] = "publisher"; const char kNotificationsTextValueSnippet[] = "snippet"; const char kNotificationsTextValueAndMore[] = "and_more"; const char kNotificationsKeepWhenFrontmostParam[] = "keep_notification_when_frontmost"; const char kNotificationsOpenToNTPParam[] = "open_to_ntp"; const char kNotificationsDailyLimit[] = "daily_limit"; const char kNotificationsIgnoredLimitParam[] = "ignored_limit"; BASE_FEATURE(kKeepPrefetchedContentSuggestions, "KeepPrefetchedContentSuggestions", base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kOptionalImagesEnabledFeature, "NTPRemoteSuggestionsOptionalImages", base::FEATURE_ENABLED_BY_DEFAULT); std::vector GetAllFeatures() { // Skip the last feature as it's a nullptr. return std::vector( kAllFeatures, kAllFeatures + std::size(kAllFeatures)); } // Default referrer for the content suggestions. const char kDefaultReferrerUrl[] = "https://www.googleapis.com/auth/chrome-content-suggestions"; // Provides ability to customize the referrer URL. // When specifying a referrer through a field trial, it must contain a path. // In case of default value above the path is empty, but it is specified. const base::FeatureParam kArticleSuggestionsReferrerURLParam{ &kArticleSuggestionsFeature, "referrer_url", kDefaultReferrerUrl}; std::string GetContentSuggestionsReferrerURL() { return kArticleSuggestionsReferrerURLParam.Get(); } } // namespace ntp_snippets