|  | // 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_ |