sanjeetnd | 54f6f9f4 | 2023-08-23 17:33:34 | [diff] [blame] | 1 | // 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 Young | 593d591 | 2023-10-17 15:18:27 | [diff] [blame] | 5 | #include "components/manta/manta_service.h" |
sanjeetnd | 54f6f9f4 | 2023-08-23 17:33:34 | [diff] [blame] | 6 | |
| 7 | #include <memory> |
| 8 | |
Chuong Ho | 30c8ef3 | 2024-05-10 17:35:12 | [diff] [blame] | 9 | #include "base/containers/contains.h" |
| 10 | #include "base/containers/fixed_flat_set.h" |
Jeffrey Young | f6ef890 | 2023-10-11 19:39:31 | [diff] [blame] | 11 | #include "base/memory/scoped_refptr.h" |
Chuong Ho | 9a1e5fb | 2024-03-11 11:30:35 | [diff] [blame] | 12 | #include "components/account_id/account_id.h" |
Jacob Francis | e38e296 | 2024-06-11 02:49:34 | [diff] [blame] | 13 | #include "components/manta/anchovy/anchovy_provider.h" |
Xinglong Luan | 321e867 | 2024-06-12 04:29:55 | [diff] [blame] | 14 | #include "components/manta/provider_params.h" |
Chuong Ho | 9a1e5fb | 2024-03-11 11:30:35 | [diff] [blame] | 15 | #include "components/signin/public/identity_manager/account_capabilities.h" |
sanjeetnd | 54f6f9f4 | 2023-08-23 17:33:34 | [diff] [blame] | 16 | #include "components/signin/public/identity_manager/identity_manager.h" |
Chuong Ho | 9a1e5fb | 2024-03-11 11:30:35 | [diff] [blame] | 17 | #include "components/signin/public/identity_manager/tribool.h" |
Jeffrey Young | f6ef890 | 2023-10-11 19:39:31 | [diff] [blame] | 18 | #include "services/network/public/cpp/shared_url_loader_factory.h" |
sanjeetnd | 54f6f9f4 | 2023-08-23 17:33:34 | [diff] [blame] | 19 | |
Maksim Sisov | 66fc690 | 2024-12-12 07:02:41 | [diff] [blame] | 20 | #if BUILDFLAG(IS_CHROMEOS) |
Xinglong Luan | 93d670f | 2024-04-12 02:30:49 | [diff] [blame] | 21 | #include "chromeos/constants/chromeos_features.h" // nogncheck |
| 22 | #include "components/manta/mahi_provider.h" |
| 23 | #include "components/manta/orca_provider.h" |
Callistus Tan | fa29be9 | 2024-10-08 01:13:37 | [diff] [blame] | 24 | #include "components/manta/scanner_provider.h" |
Xinglong Luan | 93d670f | 2024-04-12 02:30:49 | [diff] [blame] | 25 | #include "components/manta/snapper_provider.h" |
Nayeem Jahan Rafi | 42c8099 | 2024-10-06 19:33:20 | [diff] [blame] | 26 | #include "components/manta/walrus_provider.h" |
Maksim Sisov | 66fc690 | 2024-12-12 07:02:41 | [diff] [blame] | 27 | #endif // BUILDFLAG(IS_CHROMEOS) |
Xinglong Luan | 93d670f | 2024-04-12 02:30:49 | [diff] [blame] | 28 | |
sanjeetnd | 54f6f9f4 | 2023-08-23 17:33:34 | [diff] [blame] | 29 | namespace manta { |
| 30 | |
Chuong Ho | 9a1e5fb | 2024-03-11 11:30:35 | [diff] [blame] | 31 | namespace { |
| 32 | |
| 33 | FeatureSupportStatus 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 Young | f6ef890 | 2023-10-11 19:39:31 | [diff] [blame] | 46 | MantaService::MantaService( |
| 47 | scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory, |
Xinglong Luan | 013939e | 2024-04-02 05:06:10 | [diff] [blame] | 48 | signin::IdentityManager* identity_manager, |
Xinglong Luan | 04d05f1 | 2024-04-08 00:23:56 | [diff] [blame] | 49 | bool is_demo_mode, |
Jacob Francis | 65df707 | 2024-05-22 19:08:29 | [diff] [blame] | 50 | bool is_otr_profile, |
Xinglong Luan | 93d670f | 2024-04-12 02:30:49 | [diff] [blame] | 51 | const std::string& chrome_version, |
Xinglong Luan | 321e867 | 2024-06-12 04:29:55 | [diff] [blame] | 52 | const version_info::Channel chrome_channel, |
Xinglong Luan | 93d670f | 2024-04-12 02:30:49 | [diff] [blame] | 53 | const std::string& locale) |
Jeffrey Young | f6ef890 | 2023-10-11 19:39:31 | [diff] [blame] | 54 | : shared_url_loader_factory_(shared_url_loader_factory), |
Xinglong Luan | 013939e | 2024-04-02 05:06:10 | [diff] [blame] | 55 | identity_manager_(identity_manager), |
Xinglong Luan | 04d05f1 | 2024-04-08 00:23:56 | [diff] [blame] | 56 | is_demo_mode_(is_demo_mode), |
Jacob Francis | 65df707 | 2024-05-22 19:08:29 | [diff] [blame] | 57 | is_otr_profile_(is_otr_profile), |
Xinglong Luan | 93d670f | 2024-04-12 02:30:49 | [diff] [blame] | 58 | chrome_version_(chrome_version), |
Xinglong Luan | 321e867 | 2024-06-12 04:29:55 | [diff] [blame] | 59 | chrome_channel_(chrome_channel), |
Xinglong Luan | 93d670f | 2024-04-12 02:30:49 | [diff] [blame] | 60 | locale_(locale) {} |
Jeffrey Young | f6ef890 | 2023-10-11 19:39:31 | [diff] [blame] | 61 | |
| 62 | MantaService::~MantaService() = default; |
sanjeetnd | 54f6f9f4 | 2023-08-23 17:33:34 | [diff] [blame] | 63 | |
Chuong Ho | 9a1e5fb | 2024-03-11 11:30:35 | [diff] [blame] | 64 | FeatureSupportStatus MantaService::SupportsOrca() { |
Xinglong Luan | 013939e | 2024-04-02 05:06:10 | [diff] [blame] | 65 | if (is_demo_mode_) { |
| 66 | return FeatureSupportStatus::kSupported; |
| 67 | } |
Erica Lee | 3723167 | 2024-05-23 18:15:42 | [diff] [blame] | 68 | return CanAccessMantaFeaturesWithoutMinorRestrictions(); |
| 69 | } |
Xinglong Luan | 013939e | 2024-04-02 05:06:10 | [diff] [blame] | 70 | |
Erica Lee | 3723167 | 2024-05-23 18:15:42 | [diff] [blame] | 71 | FeatureSupportStatus |
| 72 | MantaService::CanAccessMantaFeaturesWithoutMinorRestrictions() { |
Chuong Ho | 9a1e5fb | 2024-03-11 11:30:35 | [diff] [blame] | 73 | 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 Lee | 3723167 | 2024-05-23 18:15:42 | [diff] [blame] | 87 | // Fetches and uses the shared account capability for manta service. |
Chuong Ho | 9a1e5fb | 2024-03-11 11:30:35 | [diff] [blame] | 88 | return ConvertToMantaFeatureSupportStatus( |
| 89 | extended_account_info.capabilities.can_use_manta_service()); |
| 90 | } |
| 91 | |
Jacob Francis | 65df707 | 2024-05-22 19:08:29 | [diff] [blame] | 92 | std::unique_ptr<AnchovyProvider> MantaService::CreateAnchovyProvider() { |
Xinglong Luan | 321e867 | 2024-06-12 04:29:55 | [diff] [blame] | 93 | // 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 Francis | 65df707 | 2024-05-22 19:08:29 | [diff] [blame] | 99 | return std::make_unique<AnchovyProvider>(shared_url_loader_factory_, |
Xinglong Luan | 321e867 | 2024-06-12 04:29:55 | [diff] [blame] | 100 | identity_manager_, provider_params); |
Jacob Francis | 65df707 | 2024-05-22 19:08:29 | [diff] [blame] | 101 | } |
| 102 | |
Maksim Sisov | 66fc690 | 2024-12-12 07:02:41 | [diff] [blame] | 103 | #if BUILDFLAG(IS_CHROMEOS) |
Andrew Moylan | 22a6d8f1 | 2024-03-20 12:16:05 | [diff] [blame] | 104 | |
Xinglong Luan | acb2f9b | 2023-09-05 23:47:13 | [diff] [blame] | 105 | std::unique_ptr<OrcaProvider> MantaService::CreateOrcaProvider() { |
Jeffrey Young | f6ef890 | 2023-10-11 19:39:31 | [diff] [blame] | 106 | if (!identity_manager_) { |
| 107 | return nullptr; |
| 108 | } |
Xinglong Luan | 321e867 | 2024-06-12 04:29:55 | [diff] [blame] | 109 | const ProviderParams provider_params = { |
Thanh Nguyen | 52fe716 | 2024-10-29 00:44:52 | [diff] [blame] | 110 | /*use_api_key=*/is_demo_mode_, chrome_version_, chrome_channel_, locale_}; |
Xinglong Luan | 321e867 | 2024-06-12 04:29:55 | [diff] [blame] | 111 | return std::make_unique<OrcaProvider>(shared_url_loader_factory_, |
| 112 | identity_manager_, provider_params); |
Xinglong Luan | acb2f9b | 2023-09-05 23:47:13 | [diff] [blame] | 113 | } |
| 114 | |
Callistus Tan | fa29be9 | 2024-10-08 01:13:37 | [diff] [blame] | 115 | std::unique_ptr<ScannerProvider> MantaService::CreateScannerProvider() { |
| 116 | if (!identity_manager_) { |
| 117 | return nullptr; |
| 118 | } |
Thanh Nguyen | 52fe716 | 2024-10-29 00:44:52 | [diff] [blame] | 119 | const ProviderParams provider_params = { |
| 120 | /*use_api_key=*/is_demo_mode_, chrome_version_, chrome_channel_, locale_}; |
Callistus Tan | fa29be9 | 2024-10-08 01:13:37 | [diff] [blame] | 121 | return std::make_unique<ScannerProvider>(shared_url_loader_factory_, |
| 122 | identity_manager_, provider_params); |
| 123 | } |
| 124 | |
sanjeetnd | 54f6f9f4 | 2023-08-23 17:33:34 | [diff] [blame] | 125 | std::unique_ptr<SnapperProvider> MantaService::CreateSnapperProvider() { |
Jeffrey Young | f6ef890 | 2023-10-11 19:39:31 | [diff] [blame] | 126 | if (!identity_manager_) { |
| 127 | return nullptr; |
| 128 | } |
Thanh Nguyen | 52fe716 | 2024-10-29 00:44:52 | [diff] [blame] | 129 | const ProviderParams provider_params = { |
| 130 | /*use_api_key=*/is_demo_mode_, chrome_version_, chrome_channel_, locale_}; |
Jeffrey Young | f6ef890 | 2023-10-11 19:39:31 | [diff] [blame] | 131 | return std::make_unique<SnapperProvider>(shared_url_loader_factory_, |
Xinglong Luan | 321e867 | 2024-06-12 04:29:55 | [diff] [blame] | 132 | identity_manager_, provider_params); |
Jeffrey Young | f6ef890 | 2023-10-11 19:39:31 | [diff] [blame] | 133 | } |
sanjeetnd | 54f6f9f4 | 2023-08-23 17:33:34 | [diff] [blame] | 134 | |
Xinglong Luan | dfad413 | 2024-02-25 23:02:56 | [diff] [blame] | 135 | std::unique_ptr<MahiProvider> MantaService::CreateMahiProvider() { |
| 136 | if (!identity_manager_) { |
| 137 | return nullptr; |
| 138 | } |
Thanh Nguyen | 52fe716 | 2024-10-29 00:44:52 | [diff] [blame] | 139 | const ProviderParams provider_params = { |
| 140 | /*use_api_key=*/is_demo_mode_, chrome_version_, chrome_channel_, locale_}; |
Xinglong Luan | dfad413 | 2024-02-25 23:02:56 | [diff] [blame] | 141 | return std::make_unique<MahiProvider>(shared_url_loader_factory_, |
Xinglong Luan | 321e867 | 2024-06-12 04:29:55 | [diff] [blame] | 142 | identity_manager_, provider_params); |
Xinglong Luan | dfad413 | 2024-02-25 23:02:56 | [diff] [blame] | 143 | } |
| 144 | |
Nayeem Jahan Rafi | 42c8099 | 2024-10-06 19:33:20 | [diff] [blame] | 145 | std::unique_ptr<WalrusProvider> MantaService::CreateWalrusProvider() { |
| 146 | if (!identity_manager_) { |
| 147 | return nullptr; |
| 148 | } |
Thanh Nguyen | 52fe716 | 2024-10-29 00:44:52 | [diff] [blame] | 149 | const ProviderParams provider_params = { |
| 150 | /*use_api_key=*/is_demo_mode_, chrome_version_, chrome_channel_, locale_}; |
Nayeem Jahan Rafi | 42c8099 | 2024-10-06 19:33:20 | [diff] [blame] | 151 | return std::make_unique<WalrusProvider>(shared_url_loader_factory_, |
| 152 | identity_manager_, provider_params); |
| 153 | } |
| 154 | |
Maksim Sisov | 66fc690 | 2024-12-12 07:02:41 | [diff] [blame] | 155 | #endif // BUILDFLAG(IS_CHROMEOS) |
Andrew Moylan | 22a6d8f1 | 2024-03-20 12:16:05 | [diff] [blame] | 156 | |
Jeffrey Young | f6ef890 | 2023-10-11 19:39:31 | [diff] [blame] | 157 | void MantaService::Shutdown() { |
| 158 | identity_manager_ = nullptr; |
sanjeetnd | 54f6f9f4 | 2023-08-23 17:33:34 | [diff] [blame] | 159 | } |
| 160 | |
| 161 | } // namespace manta |