blob: 8be646d07485b15421df822e16c6da13d62e4c24 [file] [log] [blame]
sanjeetnd54f6f9f42023-08-23 17:33:341// Copyright 2023 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
Jeffrey Young593d5912023-10-17 15:18:275#include "components/manta/manta_service.h"
sanjeetnd54f6f9f42023-08-23 17:33:346
7#include <memory>
8
Chuong Ho30c8ef32024-05-10 17:35:129#include "base/containers/contains.h"
10#include "base/containers/fixed_flat_set.h"
Jeffrey Youngf6ef8902023-10-11 19:39:3111#include "base/memory/scoped_refptr.h"
Chuong Ho9a1e5fb2024-03-11 11:30:3512#include "components/account_id/account_id.h"
Jacob Francise38e2962024-06-11 02:49:3413#include "components/manta/anchovy/anchovy_provider.h"
Xinglong Luan321e8672024-06-12 04:29:5514#include "components/manta/provider_params.h"
Chuong Ho9a1e5fb2024-03-11 11:30:3515#include "components/signin/public/identity_manager/account_capabilities.h"
sanjeetnd54f6f9f42023-08-23 17:33:3416#include "components/signin/public/identity_manager/identity_manager.h"
Chuong Ho9a1e5fb2024-03-11 11:30:3517#include "components/signin/public/identity_manager/tribool.h"
Jeffrey Youngf6ef8902023-10-11 19:39:3118#include "services/network/public/cpp/shared_url_loader_factory.h"
sanjeetnd54f6f9f42023-08-23 17:33:3419
Maksim Sisov66fc6902024-12-12 07:02:4120#if BUILDFLAG(IS_CHROMEOS)
Xinglong Luan93d670f2024-04-12 02:30:4921#include "chromeos/constants/chromeos_features.h" // nogncheck
22#include "components/manta/mahi_provider.h"
23#include "components/manta/orca_provider.h"
Callistus Tanfa29be92024-10-08 01:13:3724#include "components/manta/scanner_provider.h"
Xinglong Luan93d670f2024-04-12 02:30:4925#include "components/manta/snapper_provider.h"
Nayeem Jahan Rafi42c80992024-10-06 19:33:2026#include "components/manta/walrus_provider.h"
Maksim Sisov66fc6902024-12-12 07:02:4127#endif // BUILDFLAG(IS_CHROMEOS)
Xinglong Luan93d670f2024-04-12 02:30:4928
sanjeetnd54f6f9f42023-08-23 17:33:3429namespace manta {
30
Chuong Ho9a1e5fb2024-03-11 11:30:3531namespace {
32
33FeatureSupportStatus ConvertToMantaFeatureSupportStatus(signin::Tribool value) {
34 switch (value) {
35 case signin::Tribool::kUnknown:
36 return FeatureSupportStatus::kUnknown;
37 case signin::Tribool::kTrue:
38 return FeatureSupportStatus::kSupported;
39 case signin::Tribool::kFalse:
40 return FeatureSupportStatus::kUnsupported;
41 }
42}
43
44} // namespace
45
Jeffrey Youngf6ef8902023-10-11 19:39:3146MantaService::MantaService(
47 scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory,
Xinglong Luan013939e2024-04-02 05:06:1048 signin::IdentityManager* identity_manager,
Xinglong Luan04d05f12024-04-08 00:23:5649 bool is_demo_mode,
Jacob Francis65df7072024-05-22 19:08:2950 bool is_otr_profile,
Xinglong Luan93d670f2024-04-12 02:30:4951 const std::string& chrome_version,
Xinglong Luan321e8672024-06-12 04:29:5552 const version_info::Channel chrome_channel,
Xinglong Luan93d670f2024-04-12 02:30:4953 const std::string& locale)
Jeffrey Youngf6ef8902023-10-11 19:39:3154 : shared_url_loader_factory_(shared_url_loader_factory),
Xinglong Luan013939e2024-04-02 05:06:1055 identity_manager_(identity_manager),
Xinglong Luan04d05f12024-04-08 00:23:5656 is_demo_mode_(is_demo_mode),
Jacob Francis65df7072024-05-22 19:08:2957 is_otr_profile_(is_otr_profile),
Xinglong Luan93d670f2024-04-12 02:30:4958 chrome_version_(chrome_version),
Xinglong Luan321e8672024-06-12 04:29:5559 chrome_channel_(chrome_channel),
Xinglong Luan93d670f2024-04-12 02:30:4960 locale_(locale) {}
Jeffrey Youngf6ef8902023-10-11 19:39:3161
62MantaService::~MantaService() = default;
sanjeetnd54f6f9f42023-08-23 17:33:3463
Chuong Ho9a1e5fb2024-03-11 11:30:3564FeatureSupportStatus MantaService::SupportsOrca() {
Xinglong Luan013939e2024-04-02 05:06:1065 if (is_demo_mode_) {
66 return FeatureSupportStatus::kSupported;
67 }
Erica Lee37231672024-05-23 18:15:4268 return CanAccessMantaFeaturesWithoutMinorRestrictions();
69}
Xinglong Luan013939e2024-04-02 05:06:1070
Erica Lee37231672024-05-23 18:15:4271FeatureSupportStatus
72MantaService::CanAccessMantaFeaturesWithoutMinorRestrictions() {
Chuong Ho9a1e5fb2024-03-11 11:30:3573 if (identity_manager_ == nullptr) {
74 return FeatureSupportStatus::kUnknown;
75 }
76
77 const auto account_id =
78 identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin);
79
80 if (account_id.empty()) {
81 return FeatureSupportStatus::kUnknown;
82 }
83
84 const AccountInfo extended_account_info =
85 identity_manager_->FindExtendedAccountInfoByAccountId(account_id);
86
Erica Lee37231672024-05-23 18:15:4287 // Fetches and uses the shared account capability for manta service.
Chuong Ho9a1e5fb2024-03-11 11:30:3588 return ConvertToMantaFeatureSupportStatus(
89 extended_account_info.capabilities.can_use_manta_service());
90}
91
Jacob Francis65df7072024-05-22 19:08:2992std::unique_ptr<AnchovyProvider> MantaService::CreateAnchovyProvider() {
Xinglong Luan321e8672024-06-12 04:29:5593 // Anchovy Provider supports API Key Requests for OTR profiles and doesn't
94 // requires a valid identity_manager.
95 const ProviderParams provider_params = {/*use_api_key=*/is_otr_profile_,
96 chrome_version_, chrome_channel_,
97 locale_};
98
Jacob Francis65df7072024-05-22 19:08:2999 return std::make_unique<AnchovyProvider>(shared_url_loader_factory_,
Xinglong Luan321e8672024-06-12 04:29:55100 identity_manager_, provider_params);
Jacob Francis65df7072024-05-22 19:08:29101}
102
Maksim Sisov66fc6902024-12-12 07:02:41103#if BUILDFLAG(IS_CHROMEOS)
Andrew Moylan22a6d8f12024-03-20 12:16:05104
Xinglong Luanacb2f9b2023-09-05 23:47:13105std::unique_ptr<OrcaProvider> MantaService::CreateOrcaProvider() {
Jeffrey Youngf6ef8902023-10-11 19:39:31106 if (!identity_manager_) {
107 return nullptr;
108 }
Xinglong Luan321e8672024-06-12 04:29:55109 const ProviderParams provider_params = {
Thanh Nguyen52fe7162024-10-29 00:44:52110 /*use_api_key=*/is_demo_mode_, chrome_version_, chrome_channel_, locale_};
Xinglong Luan321e8672024-06-12 04:29:55111 return std::make_unique<OrcaProvider>(shared_url_loader_factory_,
112 identity_manager_, provider_params);
Xinglong Luanacb2f9b2023-09-05 23:47:13113}
114
Callistus Tanfa29be92024-10-08 01:13:37115std::unique_ptr<ScannerProvider> MantaService::CreateScannerProvider() {
116 if (!identity_manager_) {
117 return nullptr;
118 }
Thanh Nguyen52fe7162024-10-29 00:44:52119 const ProviderParams provider_params = {
120 /*use_api_key=*/is_demo_mode_, chrome_version_, chrome_channel_, locale_};
Callistus Tanfa29be92024-10-08 01:13:37121 return std::make_unique<ScannerProvider>(shared_url_loader_factory_,
122 identity_manager_, provider_params);
123}
124
sanjeetnd54f6f9f42023-08-23 17:33:34125std::unique_ptr<SnapperProvider> MantaService::CreateSnapperProvider() {
Jeffrey Youngf6ef8902023-10-11 19:39:31126 if (!identity_manager_) {
127 return nullptr;
128 }
Thanh Nguyen52fe7162024-10-29 00:44:52129 const ProviderParams provider_params = {
130 /*use_api_key=*/is_demo_mode_, chrome_version_, chrome_channel_, locale_};
Jeffrey Youngf6ef8902023-10-11 19:39:31131 return std::make_unique<SnapperProvider>(shared_url_loader_factory_,
Xinglong Luan321e8672024-06-12 04:29:55132 identity_manager_, provider_params);
Jeffrey Youngf6ef8902023-10-11 19:39:31133}
sanjeetnd54f6f9f42023-08-23 17:33:34134
Xinglong Luandfad4132024-02-25 23:02:56135std::unique_ptr<MahiProvider> MantaService::CreateMahiProvider() {
136 if (!identity_manager_) {
137 return nullptr;
138 }
Thanh Nguyen52fe7162024-10-29 00:44:52139 const ProviderParams provider_params = {
140 /*use_api_key=*/is_demo_mode_, chrome_version_, chrome_channel_, locale_};
Xinglong Luandfad4132024-02-25 23:02:56141 return std::make_unique<MahiProvider>(shared_url_loader_factory_,
Xinglong Luan321e8672024-06-12 04:29:55142 identity_manager_, provider_params);
Xinglong Luandfad4132024-02-25 23:02:56143}
144
Nayeem Jahan Rafi42c80992024-10-06 19:33:20145std::unique_ptr<WalrusProvider> MantaService::CreateWalrusProvider() {
146 if (!identity_manager_) {
147 return nullptr;
148 }
Thanh Nguyen52fe7162024-10-29 00:44:52149 const ProviderParams provider_params = {
150 /*use_api_key=*/is_demo_mode_, chrome_version_, chrome_channel_, locale_};
Nayeem Jahan Rafi42c80992024-10-06 19:33:20151 return std::make_unique<WalrusProvider>(shared_url_loader_factory_,
152 identity_manager_, provider_params);
153}
154
Maksim Sisov66fc6902024-12-12 07:02:41155#endif // BUILDFLAG(IS_CHROMEOS)
Andrew Moylan22a6d8f12024-03-20 12:16:05156
Jeffrey Youngf6ef8902023-10-11 19:39:31157void MantaService::Shutdown() {
158 identity_manager_ = nullptr;
sanjeetnd54f6f9f42023-08-23 17:33:34159}
160
161} // namespace manta