#include "components/feed/core/v2/public/feed_service.h"
#include <string_view>
#include <utility>
#include "base/command_line.h"
#include "base/hash/hash.h"
#include "base/memory/ptr_util.h"
#include "base/memory/raw_ptr.h"
#include "base/rand_util.h"
#include "base/scoped_observation.h"
#include "base/strings/strcat.h"
#include "base/task/sequenced_task_runner.h"
#include "build/build_config.h"
#include "components/country_codes/country_codes.h"
#include "components/feed/core/common/pref_names.h"
#include "components/feed/core/shared_prefs/pref_names.h"
#include "components/feed/core/v2/feed_network_impl.h"
#include "components/feed/core/v2/feed_store.h"
#include "components/feed/core/v2/feed_stream.h"
#include "components/feed/core/v2/image_fetcher.h"
#include "components/feed/core/v2/metrics_reporter.h"
#include "components/feed/core/v2/persistent_key_value_store_impl.h"
#include "components/feed/core/v2/prefs.h"
#include "components/feed/core/v2/public/refresh_task_scheduler.h"
#include "components/feed/feed_feature_list.h"
#include "components/history/core/browser/history_service.h"
#include "components/history/core/browser/history_service_observer.h"
#include "components/history/core/browser/history_types.h"
#include "components/prefs/pref_service.h"
#include "components/signin/public/base/consent_level.h"
#include "components/signin/public/base/signin_pref_names.h"
#include "components/signin/public/identity_manager/account_info.h"
#include "components/signin/public/identity_manager/identity_manager.h"
#include "net/base/network_change_notifier.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
namespace feed {
namespace {
class EulaObserver : public web_resource::EulaAcceptedNotifier::Observer { … };
}
namespace internal {
bool ShouldClearFeed(bool is_signed_in,
const history::DeletionInfo& deletion_info) { … }
}
class FeedService::HistoryObserverImpl
: public history::HistoryServiceObserver { … };
class FeedService::NetworkDelegateImpl : public FeedNetworkImpl::Delegate { … };
class FeedService::StreamDelegateImpl : public FeedStream::Delegate { … };
class FeedService::IdentityManagerObserverImpl
: public signin::IdentityManager::Observer { … };
FeedService::FeedService(std::unique_ptr<FeedStream> stream)
: … { … }
FeedService::FeedService(
std::unique_ptr<Delegate> delegate,
std::unique_ptr<RefreshTaskScheduler> refresh_task_scheduler,
PrefService* profile_prefs,
PrefService* local_state,
std::unique_ptr<leveldb_proto::ProtoDatabase<feedstore::Record>> database,
std::unique_ptr<leveldb_proto::ProtoDatabase<feedkvstore::Entry>>
key_value_store_database,
signin::IdentityManager* identity_manager,
history::HistoryService* history_service,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
scoped_refptr<base::SequencedTaskRunner> background_task_runner,
const std::string& api_key,
const ChromeInfo& chrome_info,
TemplateURLService* template_url_service)
: … { … }
FeedService::FeedService() = default;
std::unique_ptr<FeedService> FeedService::CreateForTesting(FeedApi* api) { … }
FeedService::~FeedService() = default;
FeedApi* FeedService::GetStream() { … }
void FeedService::ClearCachedData() { … }
const Experiments& FeedService::GetExperiments() const { … }
bool FeedService::IsEnabled(const PrefService& pref_service) { … }
uint64_t FeedService::GetReliabilityLoggingId(const std::string& metrics_id,
PrefService* prefs) { … }
bool FeedService::IsSignedIn() { … }
#if BUILDFLAG(IS_ANDROID)
void FeedService::OnApplicationStateChange(
base::android::ApplicationState state) {
if (state == base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES) {
foregrounded_ = true;
}
if (foregrounded_ &&
state == base::android::APPLICATION_STATE_HAS_PAUSED_ACTIVITIES) {
foregrounded_ = false;
stream_->OnEnterBackground();
}
}
#endif
void FeedService::Shutdown() { … }
}