blob: 5253fe6ecdc97168900a6891ba8957a86ebc28f4 [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"
Xinglong Luan04d05f12024-04-08 00:23:5612#include "build/chromeos_buildflags.h"
Chuong Ho9a1e5fb2024-03-11 11:30:3513#include "components/account_id/account_id.h"
Jacob Francise38e2962024-06-11 02:49:3414#include "components/manta/anchovy/anchovy_provider.h"
Lauren Commeignesbf6f8f92024-06-07 06:26:4515#include "components/manta/sparky/system_info_delegate.h"
Chuong Ho9a1e5fb2024-03-11 11:30:3516#include "components/signin/public/identity_manager/account_capabilities.h"
sanjeetnd54f6f9f42023-08-23 17:33:3417#include "components/signin/public/identity_manager/identity_manager.h"
Chuong Ho9a1e5fb2024-03-11 11:30:3518#include "components/signin/public/identity_manager/tribool.h"
Jeffrey Youngf6ef8902023-10-11 19:39:3119#include "services/network/public/cpp/shared_url_loader_factory.h"
sanjeetnd54f6f9f42023-08-23 17:33:3420
Xinglong Luan93d670f2024-04-12 02:30:4921#if BUILDFLAG(IS_CHROMEOS_ASH)
22#include "chromeos/constants/chromeos_features.h" // nogncheck
23#include "components/manta/mahi_provider.h"
24#include "components/manta/orca_provider.h"
25#include "components/manta/snapper_provider.h"
Lauren Commeignesa5748c192024-05-07 06:51:4426#include "components/manta/sparky/sparky_provider.h"
Xinglong Luan93d670f2024-04-12 02:30:4927#endif // BUILDFLAG(IS_CHROMEOS_ASH)
28
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
Chuong Ho30c8ef32024-05-10 17:35:1244#if BUILDFLAG(IS_CHROMEOS_ASH)
45
46constexpr auto kAllowedLanguagesForAddingLocaleToRequest =
47 base::MakeFixedFlatSet<std::string_view>({"de", "en", "en-GB", "fr", "ja"});
48
49bool ShouldIncludeLocaleInRequest(std::string_view locale) {
50 return chromeos::features::IsOrcaUseL10nStringsEnabled() ||
51 (chromeos::features::IsOrcaInternationalizeEnabled() &&
52 base::Contains(kAllowedLanguagesForAddingLocaleToRequest, locale));
53}
54
55#endif // BUILDFLAG(IS_CHROMEOS_ASH)
56
Chuong Ho9a1e5fb2024-03-11 11:30:3557} // namespace
58
Jeffrey Youngf6ef8902023-10-11 19:39:3159MantaService::MantaService(
60 scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory,
Xinglong Luan013939e2024-04-02 05:06:1061 signin::IdentityManager* identity_manager,
Xinglong Luan04d05f12024-04-08 00:23:5662 bool is_demo_mode,
Jacob Francis65df7072024-05-22 19:08:2963 bool is_otr_profile,
Xinglong Luan93d670f2024-04-12 02:30:4964 const std::string& chrome_version,
65 const std::string& locale)
Jeffrey Youngf6ef8902023-10-11 19:39:3166 : shared_url_loader_factory_(shared_url_loader_factory),
Xinglong Luan013939e2024-04-02 05:06:1067 identity_manager_(identity_manager),
Xinglong Luan04d05f12024-04-08 00:23:5668 is_demo_mode_(is_demo_mode),
Jacob Francis65df7072024-05-22 19:08:2969 is_otr_profile_(is_otr_profile),
Xinglong Luan93d670f2024-04-12 02:30:4970 chrome_version_(chrome_version),
71 locale_(locale) {}
Jeffrey Youngf6ef8902023-10-11 19:39:3172
73MantaService::~MantaService() = default;
sanjeetnd54f6f9f42023-08-23 17:33:3474
Chuong Ho9a1e5fb2024-03-11 11:30:3575FeatureSupportStatus MantaService::SupportsOrca() {
Xinglong Luan013939e2024-04-02 05:06:1076 if (is_demo_mode_) {
77 return FeatureSupportStatus::kSupported;
78 }
Erica Lee37231672024-05-23 18:15:4279 return CanAccessMantaFeaturesWithoutMinorRestrictions();
80}
Xinglong Luan013939e2024-04-02 05:06:1081
Erica Lee37231672024-05-23 18:15:4282FeatureSupportStatus
83MantaService::CanAccessMantaFeaturesWithoutMinorRestrictions() {
Chuong Ho9a1e5fb2024-03-11 11:30:3584 if (identity_manager_ == nullptr) {
85 return FeatureSupportStatus::kUnknown;
86 }
87
88 const auto account_id =
89 identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin);
90
91 if (account_id.empty()) {
92 return FeatureSupportStatus::kUnknown;
93 }
94
95 const AccountInfo extended_account_info =
96 identity_manager_->FindExtendedAccountInfoByAccountId(account_id);
97
Erica Lee37231672024-05-23 18:15:4298 // Fetches and uses the shared account capability for manta service.
Chuong Ho9a1e5fb2024-03-11 11:30:3599 return ConvertToMantaFeatureSupportStatus(
100 extended_account_info.capabilities.can_use_manta_service());
101}
102
Jacob Francis65df7072024-05-22 19:08:29103std::unique_ptr<AnchovyProvider> MantaService::CreateAnchovyProvider() {
104 if (!identity_manager_) {
105 // Anchovy Provider supports API Key Requests.
106 return std::make_unique<AnchovyProvider>(shared_url_loader_factory_,
107 nullptr, is_otr_profile_,
108 chrome_version_, locale_);
109 }
110 return std::make_unique<AnchovyProvider>(shared_url_loader_factory_,
111 identity_manager_, is_otr_profile_,
112 chrome_version_, locale_);
113}
114
Andrew Moylan22a6d8f12024-03-20 12:16:05115#if BUILDFLAG(IS_CHROMEOS_ASH)
116
Xinglong Luanacb2f9b2023-09-05 23:47:13117std::unique_ptr<OrcaProvider> MantaService::CreateOrcaProvider() {
Jeffrey Youngf6ef8902023-10-11 19:39:31118 if (!identity_manager_) {
119 return nullptr;
120 }
Xinglong Luan93d670f2024-04-12 02:30:49121 return std::make_unique<OrcaProvider>(
122 shared_url_loader_factory_, identity_manager_, is_demo_mode_,
123 chrome_version_,
124 /*locale=*/
Chuong Ho30c8ef32024-05-10 17:35:12125 ShouldIncludeLocaleInRequest(locale_) ? locale_ : std::string());
Xinglong Luanacb2f9b2023-09-05 23:47:13126}
127
sanjeetnd54f6f9f42023-08-23 17:33:34128std::unique_ptr<SnapperProvider> MantaService::CreateSnapperProvider() {
Jeffrey Youngf6ef8902023-10-11 19:39:31129 if (!identity_manager_) {
130 return nullptr;
131 }
132 return std::make_unique<SnapperProvider>(shared_url_loader_factory_,
Xinglong Luan04d05f12024-04-08 00:23:56133 identity_manager_, is_demo_mode_,
134 chrome_version_);
Jeffrey Youngf6ef8902023-10-11 19:39:31135}
sanjeetnd54f6f9f42023-08-23 17:33:34136
Xinglong Luandfad4132024-02-25 23:02:56137std::unique_ptr<MahiProvider> MantaService::CreateMahiProvider() {
138 if (!identity_manager_) {
139 return nullptr;
140 }
141 return std::make_unique<MahiProvider>(shared_url_loader_factory_,
Xinglong Luan04d05f12024-04-08 00:23:56142 identity_manager_, is_demo_mode_,
143 chrome_version_);
Xinglong Luandfad4132024-02-25 23:02:56144}
145
Lauren Commeignesa5748c192024-05-07 06:51:44146std::unique_ptr<SparkyProvider> MantaService::CreateSparkyProvider(
Lauren Commeignesbf6f8f92024-06-07 06:26:45147 std::unique_ptr<SparkyDelegate> sparky_delegate,
148 std::unique_ptr<SystemInfoDelegate> system_info_delegate) {
149 if (!identity_manager_ || !sparky_delegate || !system_info_delegate) {
Lauren Commeignesa5748c192024-05-07 06:51:44150 return nullptr;
151 }
152 return std::make_unique<SparkyProvider>(
153 shared_url_loader_factory_, identity_manager_, is_demo_mode_,
Lauren Commeignesbf6f8f92024-06-07 06:26:45154 chrome_version_, std::move(sparky_delegate),
155 std::move(system_info_delegate));
Lauren Commeignesa5748c192024-05-07 06:51:44156}
157
Andrew Moylan22a6d8f12024-03-20 12:16:05158#endif // BUILDFLAG(IS_CHROMEOS_ASH)
159
Jeffrey Youngf6ef8902023-10-11 19:39:31160void MantaService::Shutdown() {
161 identity_manager_ = nullptr;
sanjeetnd54f6f9f42023-08-23 17:33:34162}
163
164} // namespace manta