// Copyright 2018 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 COMPONENTS_FEED_FEED_FEATURE_LIST_H_
#define COMPONENTS_FEED_FEED_FEATURE_LIST_H_

#include <string>

#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
#include "build/build_config.h"

// TODO(crbug.com/1165828): Clean up feedv1 features.

namespace feed {

extern const base::Feature kInterestFeedContentSuggestions;
extern const base::Feature kInterestFeedV2;
extern const base::Feature kInterestFeedV2Autoplay;
extern const base::Feature kInterestFeedV2Hearts;
extern const base::Feature kInterestFeedV2Scrolling;

extern const base::FeatureParam<std::string> kDisableTriggerTypes;
extern const base::FeatureParam<int> kSuppressRefreshDurationMinutes;
extern const base::FeatureParam<int> kTimeoutDurationSeconds;
extern const base::FeatureParam<bool> kThrottleBackgroundFetches;
extern const base::FeatureParam<bool> kOnlySetLastRefreshAttemptOnSuccess;

// TODO(b/213622639): The following two features are obsolete and should be
// removed.
// Determines whether conditions should be reached before enabling the upload of
// click and view actions in the feed (e.g., the user needs to view X cards).
// For example, this is needed when the notice card is at the second position in
// the feed.
extern const base::Feature kInterestFeedV1ClicksAndViewsConditionalUpload;
extern const base::Feature kInterestFeedV2ClicksAndViewsConditionalUpload;

// Feature that allows the client to automatically dismiss the notice card based
// on the clicks and views on the notice card.
#if BUILDFLAG(IS_IOS)
extern const base::Feature kInterestFeedNoticeCardAutoDismiss;
#endif

// Used for A:B testing of a bug fix (crbug.com/1151391).
extern const base::Feature kInterestFeedSpinnerAlwaysAnimate;

// Feature that allows users to keep up with and consume web content.
extern const base::Feature kWebFeed;

// Use the new DiscoFeed endpoint.
extern const base::Feature kDiscoFeedEndpoint;

// Feature that enables xsurface to provide the metrics reporting state to an
// xsurface feed.
extern const base::Feature kXsurfaceMetricsReporting;

// Whether to log reliability events.
extern const base::Feature kReliabilityLogging;

// Feature that enables refreshing feeds triggered by the users.
extern const base::Feature kFeedInteractiveRefresh;

// Feature that shows placeholder cards instead of a loading spinner at first
// load.
extern const base::Feature kFeedLoadingPlaceholder;

// Param allowing animations to be disabled when showing the placeholder on
// instant start.
extern const base::FeatureParam<bool>
    kEnableFeedLoadingPlaceholderAnimationOnInstantStart;

// Feature that allows tuning the size of the image memory cache. Value is a
// percentage of the maximum size calculated for the device.
extern const base::Feature kFeedImageMemoryCacheSizePercentage;

// Feature that enables clearing the image memory cache when the feed is
// destroyed.
extern const base::Feature kFeedClearImageMemoryCache;

// Feature that enables showing a callout to help users return to the top of the
// feeds quickly.
extern const base::Feature kFeedBackToTop;

// Feature that enables StAMP cards in the feed.
extern const base::Feature kFeedStamp;

// Feature that provides the user assistance in discovering the web feed.
extern const base::Feature kWebFeedAwareness;

// Feature that provides the user assistance in using the web feed.
extern const base::Feature kWebFeedOnboarding;

// Feature that enables sorting by different heuristics in the web feed.
extern const base::Feature kWebFeedSort;

// Feature that causes the "open in new tab" menu item to appear on feed items
// on Start Surface.
extern const base::Feature kEnableOpenInNewTabFromStartSurfaceFeed;

// Feature that causes the WebUI version of the Feed to be enabled.
extern const base::Feature kWebUiFeed;
extern const base::FeatureParam<std::string> kWebUiScriptFetchUrl;
extern const base::FeatureParam<bool> kWebUiDisableContentSecurityPolicy;

std::string GetFeedReferrerUrl();

// Personalize feed for unsigned users.
extern const base::Feature kPersonalizeFeedUnsignedUsers;

// Feature that enables tracking the acknowledgement state for the info cards.
extern const base::Feature kInfoCardAcknowledgementTracking;

// Feature that when enabled completely removes all Feeds from chrome.
extern const base::Feature kIsAblated;

}  // namespace feed

#endif  // COMPONENTS_FEED_FEED_FEATURE_LIST_H_
