blob: 445197bf3355d0d7ead8283ffeec33af507f2668 [file] [log] [blame]
// 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_BROWSER_TEST_UTIL_H_
#define CHROME_BROWSER_OPTIMIZATION_GUIDE_BROWSER_TEST_UTIL_H_
#include <string>
#include "base/functional/callback.h"
#include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
#include "components/optimization_guide/proto/models.pb.h"
class Profile;
namespace base {
class HistogramTester;
} // namespace base
namespace optimization_guide {
// Retries fetching |histogram_name| until it contains at least |count| samples.
// Returns the count of samples.
int RetryForHistogramUntilCountReached(
const base::HistogramTester* histogram_tester,
const std::string& histogram_name,
int count);
// Builds a test models response.
std::unique_ptr<optimization_guide::proto::GetModelsResponse>
BuildGetModelsResponse();
// Enables sign-in with the account having model execution capability.
void EnableSigninAndModelExecutionCapability(Profile* profile);
// Enables sign-in without the account having model execution capability.
void EnableSigninWithoutModelExecutionCapability(Profile* profile);
// Helper to receive modelinfo updates.
class ModelFileObserver : public OptimizationTargetModelObserver {
public:
using ModelFileReceivedCallback =
base::OnceCallback<void(proto::OptimizationTarget,
base::optional_ref<const ModelInfo>)>;
ModelFileObserver();
~ModelFileObserver() override;
void set_model_file_received_callback(ModelFileReceivedCallback callback) {
file_received_callback_ = std::move(callback);
}
std::optional<proto::OptimizationTarget> optimization_target() const {
return optimization_target_;
}
std::optional<ModelInfo> model_info() { return model_info_; }
// OptimizationTargetModelObserver implementation:
void OnModelUpdated(proto::OptimizationTarget optimization_target,
base::optional_ref<const ModelInfo> model_info) override;
private:
ModelFileReceivedCallback file_received_callback_;
// Holds the optimization target that was received from modelinfo updates.
std::optional<proto::OptimizationTarget> optimization_target_;
// Holds the modelinfo that was received from modelinfo updates.
std::optional<ModelInfo> model_info_;
};
} // namespace optimization_guide
#endif // CHROME_BROWSER_OPTIMIZATION_GUIDE_BROWSER_TEST_UTIL_H_