blob: d7338c7d6e0ff783f49ba9843dcb390c64760bd5 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/policy/model/management_status_providers_ios.h"
#import "build/build_config.h"
#import "components/enterprise/browser/controller/browser_dm_token_storage.h"
#import "components/policy/core/common/policy_namespace.h"
#import "components/policy/core/common/policy_service.h"
#import "ios/chrome/browser/policy/model/browser_policy_connector_ios.h"
#import "ios/chrome/browser/policy/model/profile_policy_connector.h"
#import "ios/chrome/browser/shared/model/application_context/application_context.h"
#import "ios/chrome/browser/shared/model/profile/profile_ios.h"
namespace policy {
namespace {
bool IsProfileManaged(ProfileIOS* profile) {
return profile && profile->GetPolicyConnector() &&
profile->GetPolicyConnector()->IsManaged();
}
} // namespace
BrowserCloudManagementStatusProvider::BrowserCloudManagementStatusProvider() =
default;
BrowserCloudManagementStatusProvider::~BrowserCloudManagementStatusProvider() =
default;
policy::EnterpriseManagementAuthority
BrowserCloudManagementStatusProvider::FetchAuthority() {
// A machine level user cloud policy manager is only created if the browser is
// managed by CBCM.
if (GetApplicationContext()
->GetBrowserPolicyConnector()
->machine_level_user_cloud_policy_manager() != nullptr) {
return policy::EnterpriseManagementAuthority::CLOUD_DOMAIN;
}
return policy::EnterpriseManagementAuthority::NONE;
}
LocalBrowserManagementStatusProvider::LocalBrowserManagementStatusProvider() =
default;
LocalBrowserManagementStatusProvider::~LocalBrowserManagementStatusProvider() =
default;
policy::EnterpriseManagementAuthority
LocalBrowserManagementStatusProvider::FetchAuthority() {
return GetApplicationContext() &&
GetApplicationContext()->GetBrowserPolicyConnector() &&
GetApplicationContext()
->GetBrowserPolicyConnector()
->HasMachineLevelPolicies()
? policy::EnterpriseManagementAuthority::COMPUTER_LOCAL
: policy::EnterpriseManagementAuthority::NONE;
}
LocalDomainBrowserManagementStatusProvider::
LocalDomainBrowserManagementStatusProvider() = default;
LocalDomainBrowserManagementStatusProvider::
~LocalDomainBrowserManagementStatusProvider() = default;
policy::EnterpriseManagementAuthority
LocalDomainBrowserManagementStatusProvider::FetchAuthority() {
auto result = policy::EnterpriseManagementAuthority::NONE;
if (GetApplicationContext()
->GetBrowserPolicyConnector()
->HasMachineLevelPolicies()) {
result = policy::EnterpriseManagementAuthority::COMPUTER_LOCAL;
}
return result;
}
ProfileCloudManagementStatusProvider::ProfileCloudManagementStatusProvider(
ProfileIOS* profile)
: profile_(profile) {}
ProfileCloudManagementStatusProvider::~ProfileCloudManagementStatusProvider() =
default;
policy::EnterpriseManagementAuthority
ProfileCloudManagementStatusProvider::FetchAuthority() {
if (IsProfileManaged(profile_)) {
return policy::EnterpriseManagementAuthority::CLOUD;
}
return policy::EnterpriseManagementAuthority::NONE;
}
LocalTestPolicyUserManagementProvider::LocalTestPolicyUserManagementProvider(
ProfileIOS* profile)
: profile_(profile) {}
LocalTestPolicyUserManagementProvider::
~LocalTestPolicyUserManagementProvider() = default;
policy::EnterpriseManagementAuthority
LocalTestPolicyUserManagementProvider::FetchAuthority() {
if (!profile_->GetPolicyConnector()->IsUsingLocalTestPolicyProvider()) {
return policy::EnterpriseManagementAuthority::NONE;
}
for (const auto& [_, entry] :
profile_->GetPolicyConnector()->GetPolicyService()->GetPolicies(
policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME,
std::string()))) {
if (entry.scope == policy::POLICY_SCOPE_USER &&
entry.source == policy::POLICY_SOURCE_CLOUD) {
return policy::EnterpriseManagementAuthority::CLOUD;
}
}
return policy::EnterpriseManagementAuthority::NONE;
}
LocalTestPolicyBrowserManagementProvider::
LocalTestPolicyBrowserManagementProvider(ProfileIOS* profile)
: profile_(profile) {}
LocalTestPolicyBrowserManagementProvider::
~LocalTestPolicyBrowserManagementProvider() = default;
policy::EnterpriseManagementAuthority
LocalTestPolicyBrowserManagementProvider::FetchAuthority() {
if (!profile_->GetPolicyConnector()->IsUsingLocalTestPolicyProvider()) {
return policy::EnterpriseManagementAuthority::NONE;
}
for (const auto& [_, entry] :
profile_->GetPolicyConnector()->GetPolicyService()->GetPolicies(
policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME,
std::string()))) {
if (entry.scope == policy::POLICY_SCOPE_MACHINE &&
entry.source == policy::POLICY_SOURCE_CLOUD) {
return policy::EnterpriseManagementAuthority::CLOUD_DOMAIN;
}
if (entry.scope == policy::POLICY_SCOPE_MACHINE &&
entry.source == policy::POLICY_SOURCE_PLATFORM) {
return policy::EnterpriseManagementAuthority::DOMAIN_LOCAL;
}
}
return policy::EnterpriseManagementAuthority::NONE;
}
} // namespace policy