1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/mahi/mahi_availability.h"
#include "ash/constants/generative_ai_country_restrictions.h"
#include "base/command_line.h"
#include "base/containers/fixed_flat_set.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/manta/manta_service_factory.h"
#include "chrome/browser/policy/profile_policy_connector.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chromeos/ash/components/demo_mode/utils/demo_session_utils.h"
#include "chromeos/constants/chromeos_features.h"
#include "chromeos/constants/chromeos_switches.h"
#include "components/manta/features.h"
#include "components/manta/manta_service.h"
#include "components/user_manager/user_manager.h"
#include "components/variations/service/variations_service.h"
namespace ash::mahi_availability {
std::optional<bool> CanUseMahiService() {
if (!manta::features::IsMantaServiceEnabled()) {
return false;
}
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
chromeos::switches::kMahiRestrictionsOverride)) {
return true;
}
if (!ash::demo_mode::IsDeviceInDemoMode()) {
if (!user_manager::UserManager::IsInitialized() ||
!user_manager::UserManager::Get()->IsUserLoggedIn()) {
return false;
}
Profile* profile = ProfileManager::GetActiveUserProfile();
if (!profile) {
return false;
}
// Controls for managed users.
if (profile->GetProfilePolicyConnector()->IsManaged() &&
!chromeos::features::IsMahiManagedEnabled()) {
return false;
}
// Guest session is not allowed when not in demo mode.
if (profile->IsGuestSession()) {
return false;
}
// MantaService might not be available in tests.
if (manta::MantaService* service =
manta::MantaServiceFactory::GetForProfile(profile);
service) {
switch (service->CanAccessMantaFeaturesWithoutMinorRestrictions()) {
case manta::FeatureSupportStatus::kSupported:
break;
case manta::FeatureSupportStatus::kUnsupported:
return false;
case manta::FeatureSupportStatus::kUnknown:
return std::nullopt;
}
}
}
const std::string country_code =
(g_browser_process != nullptr &&
g_browser_process->variations_service() != nullptr)
? g_browser_process->variations_service()->GetLatestCountry()
: std::string();
return IsGenerativeAiAllowedForCountry(country_code);
}
std::optional<bool> IsMahiAvailable() {
if (!chromeos::features::IsMahiEnabled()) {
return false;
}
return CanUseMahiService();
}
bool IsPompanoAvailable() {
return chromeos::features::IsPompanoEnabled() && IsMahiAvailable();
}
} // namespace ash::mahi_availability
|