// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_OPTIMIZATION_GUIDE_CHROME_HINTS_MANAGER_H_
#define CHROME_BROWSER_OPTIMIZATION_GUIDE_CHROME_HINTS_MANAGER_H_

#include "base/memory/raw_ptr.h"
#include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service.h"
#include "components/optimization_guide/core/hints_manager.h"

class OptimizationGuideLogger;
class Profile;

namespace optimization_guide {

class ChromeHintsManager : public HintsManager,
                           public NavigationPredictorKeyedService::Observer {
 public:
  ChromeHintsManager(
      Profile* profile,
      PrefService* pref_service,
      base::WeakPtr<optimization_guide::OptimizationGuideStore> hint_store,
      optimization_guide::TopHostProvider* top_host_provider,
      optimization_guide::TabUrlProvider* tab_url_provider,
      scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
      std::unique_ptr<optimization_guide::PushNotificationManager>
          push_notification_manager,
      OptimizationGuideLogger* optimization_guide_logger);

  ~ChromeHintsManager() override;

  // Unhooks the observer from the navigation predictor service.
  void Shutdown();

  // NavigationPredictorKeyedService::Observer:
  void OnPredictionUpdated(
      const absl::optional<NavigationPredictorKeyedService::Prediction>
          prediction) override;

 private:
  // A reference to the profile. Not owned.
  raw_ptr<Profile> profile_ = nullptr;
};

}  // namespace optimization_guide

#endif  // CHROME_BROWSER_OPTIMIZATION_GUIDE_CHROME_HINTS_MANAGER_H_
