blob: f50c746feaab8fe3923db0dec5f9a595d00d040c [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_PERMISSIONS_TEST_FAKE_PERMISSIONS_AIVX_MODELHANDLERS_H_
#define COMPONENTS_PERMISSIONS_TEST_FAKE_PERMISSIONS_AIVX_MODELHANDLERS_H_
#include <memory>
#include <string>
#include "base/run_loop.h"
#include "components/permissions/prediction_service/permissions_aiv3_executor.h"
#include "components/permissions/prediction_service/permissions_aiv3_handler.h"
#include "components/permissions/prediction_service/permissions_aiv4_executor.h"
#include "components/permissions/prediction_service/permissions_aiv4_handler.h"
// Contains fake classes to be used in tests for AIvX model handlers.
namespace test {
class PermissionsAivXHandlerFakeBase {
public:
// All AivX models share the same model execution callback for now
using ExecutionCallback =
permissions::PermissionsAiv3Handler::ExecutionCallback;
PermissionsAivXHandlerFakeBase() = default;
void ExecuteModelWrapper(
ExecutionCallback callback,
const std::optional<permissions::PermissionsAiv3Executor::ModelOutput>&
output);
void OnModelUpdated(
base::optional_ref<const optimization_guide::ModelInfo> model_info);
void WaitForModelLoadForTesting();
void WaitForModelExecutionForTesting();
protected:
base::RunLoop model_execute_run_loop_for_testing_;
base::RunLoop model_load_run_loop_for_testing_;
};
class PermissionsAiv3HandlerFake : public permissions::PermissionsAiv3Handler,
public PermissionsAivXHandlerFakeBase {
public:
PermissionsAiv3HandlerFake(
optimization_guide::OptimizationGuideModelProvider* model_provider,
optimization_guide::proto::OptimizationTarget optimization_target,
permissions::RequestType request_type);
~PermissionsAiv3HandlerFake() override;
void OnModelUpdated(
optimization_guide::proto::OptimizationTarget optimization_target,
base::optional_ref<const optimization_guide::ModelInfo> model_info)
override;
void ExecuteModel(PermissionsAiv3Handler::ExecutionCallback callback,
ModelInput model_input) override;
private:
base::WeakPtrFactory<PermissionsAiv3HandlerFake> weak_ptr_factory_{this};
};
class PermissionsAiv4HandlerFake : public permissions::PermissionsAiv4Handler,
public PermissionsAivXHandlerFakeBase {
public:
PermissionsAiv4HandlerFake(
optimization_guide::OptimizationGuideModelProvider* model_provider,
optimization_guide::proto::OptimizationTarget optimization_target,
permissions::RequestType request_type);
~PermissionsAiv4HandlerFake() override;
void OnModelUpdated(
optimization_guide::proto::OptimizationTarget optimization_target,
base::optional_ref<const optimization_guide::ModelInfo> model_info)
override;
void ExecuteModel(PermissionsAiv4Handler::ExecutionCallback callback,
ModelInput model_input) override;
private:
base::WeakPtrFactory<PermissionsAiv4HandlerFake> weak_ptr_factory_{this};
};
} // namespace test
#endif // COMPONENTS_PERMISSIONS_TEST_FAKE_PERMISSIONS_AIVX_MODELHANDLERS_H_