// Copyright 2020 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_OPTIMIZATION_GUIDE_TEST_OPTIMIZATION_GUIDE_DECIDER_H_
#define COMPONENTS_OPTIMIZATION_GUIDE_TEST_OPTIMIZATION_GUIDE_DECIDER_H_

#include "components/optimization_guide/optimization_guide_decider.h"

namespace optimization_guide {

// An implementation of |OptimizationGuideDecider| that can be selectively
// mocked out for unit testing features that rely on the Optimization Guide in
// //components/...
class TestOptimizationGuideDecider : public OptimizationGuideDecider {
 public:
  TestOptimizationGuideDecider();
  ~TestOptimizationGuideDecider() override;
  TestOptimizationGuideDecider(const TestOptimizationGuideDecider&) = delete;
  TestOptimizationGuideDecider& operator=(const TestOptimizationGuideDecider&) =
      delete;

  // OptimizationGuideDecider implementation:
  void RegisterOptimizationTargets(const std::vector<proto::OptimizationTarget>&
                                       optimization_targets) override;
  void ShouldTargetNavigationAsync(
      content::NavigationHandle* navigation_handle,
      proto::OptimizationTarget optimization_target,
      const base::flat_map<proto::ClientModelFeature, float>&
          client_model_feature_values,
      OptimizationGuideTargetDecisionCallback callback) override;
  void AddObserverForOptimizationTargetModel(
      proto::OptimizationTarget optimization_target,
      OptimizationTargetModelObserver* observer) override;
  void RemoveObserverForOptimizationTargetModel(
      proto::OptimizationTarget optimization_target,
      OptimizationTargetModelObserver* observer) override;
  void RegisterOptimizationTypes(
      const std::vector<proto::OptimizationType>& optimization_types) override;
  void CanApplyOptimizationAsync(
      content::NavigationHandle* navigation_handle,
      proto::OptimizationType optimization_type,
      OptimizationGuideDecisionCallback callback) override;
  OptimizationGuideDecision CanApplyOptimization(
      const GURL& url,
      proto::OptimizationType optimization_type,
      OptimizationMetadata* optimization_metadata) override;
};

}  // namespace optimization_guide

#endif  // COMPONENTS_OPTIMIZATION_GUIDE_TEST_OPTIMIZATION_GUIDE_DECIDER_H_
