blob: 076b57da2fd0051ecd0a29851f156a6c9d1a14e2 [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"
13#include "components/permissions/prediction_service/prediction_signature_model_executor.h"
14#include "components/version_info/version_info.h"
15
16namespace permissions {
17
18namespace {
19using ModelInput = PermissionsAiv3Encoder::ModelInput;
20using ModelOutput = PermissionsAiv3Encoder::ModelOutput;
21} // namespace
22
23PermissionsAiv3Handler::PermissionsAiv3Handler(
24 optimization_guide::OptimizationGuideModelProvider* model_provider,
25 optimization_guide::proto::OptimizationTarget optimization_target,
26 RequestType request_type,
27 scoped_refptr<base::SequencedTaskRunner> model_executor_task_runner,
28 std::unique_ptr<PermissionsAiv3Encoder> model_executor)
29 : ModelHandler<ModelOutput, const ModelInput&>(
30 model_provider,
31 model_executor_task_runner,
32 std::move(model_executor),
33 /*model_inference_timeout=*/std::nullopt,
34 optimization_target,
35 /*model_metadata=*/std::nullopt) {}
36
37PermissionsAiv3Handler::PermissionsAiv3Handler(
38 optimization_guide::OptimizationGuideModelProvider* model_provider,
39 optimization_guide::proto::OptimizationTarget optimization_target,
40 RequestType request_type)
41 : PermissionsAiv3Handler(
42 model_provider,
43 optimization_target,
44 request_type,
45 base::ThreadPool::CreateSequencedTaskRunner(
46 {base::MayBlock(), base::TaskPriority::USER_VISIBLE}),
47 std::make_unique<PermissionsAiv3Encoder>(request_type)) {}
48
49PermissionsAiv3Handler::~PermissionsAiv3Handler() = default;
50
51void PermissionsAiv3Handler::OnModelUpdated(
52 optimization_guide::proto::OptimizationTarget optimization_target,
53 base::optional_ref<const optimization_guide::ModelInfo> model_info) {
54 // First invoke parent to update internal status.
55 optimization_guide::ModelHandler<
56 ModelOutput, const ModelInput&>::OnModelUpdated(optimization_target,
57 model_info);
58 if (model_info.has_value()) {
59 // The parent class should always set the model availability to true after
60 // having received an updated model.
61 DCHECK(ModelAvailable());
62 // TODO(crbug.com/405095664): Parse ModelMetadata as soon as we have it.
63 }
64}
65
66void PermissionsAiv3Handler::ExecuteModel(
67 ExecutionCallback callback,
68 std::unique_ptr<ModelInput> snapshot) {
69 if (snapshot.get()) {
70 ExecuteModelWithInput(std::move(callback), *snapshot);
71 } else {
72 std::move(callback).Run(std::nullopt);
73 }
74}
75
76} // namespace permissions