blob: e6929fbe7e3bdeb2aeb5a2e990ee26b95be5b983 [file] [log] [blame]
Judith Hempa52f119532025-04-28 09:07:081// Copyright 2025 The Chromium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "components/permissions/prediction_service/permissions_aiv3_handler.h"
6
7#include <memory>
8
9#include "base/feature_list.h"
10#include "components/optimization_guide/core/optimization_guide_model_provider.h"
11#include "components/permissions/features.h"
12#include "components/permissions/prediction_service/permissions_aiv3_encoder.h"
Judith Hempa52f119532025-04-28 09:07:0813#include "components/version_info/version_info.h"
14
15namespace permissions {
16
17namespace {
18using ModelInput = PermissionsAiv3Encoder::ModelInput;
19using ModelOutput = PermissionsAiv3Encoder::ModelOutput;
20} // namespace
21
22PermissionsAiv3Handler::PermissionsAiv3Handler(
23 optimization_guide::OptimizationGuideModelProvider* model_provider,
24 optimization_guide::proto::OptimizationTarget optimization_target,
25 RequestType request_type,
26 scoped_refptr<base::SequencedTaskRunner> model_executor_task_runner,
27 std::unique_ptr<PermissionsAiv3Encoder> model_executor)
28 : ModelHandler<ModelOutput, const ModelInput&>(
29 model_provider,
30 model_executor_task_runner,
31 std::move(model_executor),
32 /*model_inference_timeout=*/std::nullopt,
33 optimization_target,
34 /*model_metadata=*/std::nullopt) {}
35
36PermissionsAiv3Handler::PermissionsAiv3Handler(
37 optimization_guide::OptimizationGuideModelProvider* model_provider,
38 optimization_guide::proto::OptimizationTarget optimization_target,
39 RequestType request_type)
40 : PermissionsAiv3Handler(
41 model_provider,
42 optimization_target,
43 request_type,
44 base::ThreadPool::CreateSequencedTaskRunner(
45 {base::MayBlock(), base::TaskPriority::USER_VISIBLE}),
46 std::make_unique<PermissionsAiv3Encoder>(request_type)) {}
47
Judith Hempa52f119532025-04-28 09:07:0848void PermissionsAiv3Handler::OnModelUpdated(
49 optimization_guide::proto::OptimizationTarget optimization_target,
50 base::optional_ref<const optimization_guide::ModelInfo> model_info) {
51 // First invoke parent to update internal status.
52 optimization_guide::ModelHandler<
53 ModelOutput, const ModelInput&>::OnModelUpdated(optimization_target,
54 model_info);
55 if (model_info.has_value()) {
56 // The parent class should always set the model availability to true after
57 // having received an updated model.
58 DCHECK(ModelAvailable());
59 // TODO(crbug.com/405095664): Parse ModelMetadata as soon as we have it.
60 }
61}
62
63void PermissionsAiv3Handler::ExecuteModel(
64 ExecutionCallback callback,
65 std::unique_ptr<ModelInput> snapshot) {
66 if (snapshot.get()) {
67 ExecuteModelWithInput(std::move(callback), *snapshot);
68 } else {
69 std::move(callback).Run(std::nullopt);
70 }
71}
72
73} // namespace permissions