blob: dd946fc5702df9a5b31f6cda5c4d1aa4d37d6036 [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/supervised_user/core/common/features.h"
#include <string>
#include "base/check.h"
#include "base/check_op.h"
#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
#include "base/strings/string_util.h"
#include "base/system/sys_info.h"
#include "build/android_buildflags.h"
#include "build/branding_buildflags.h"
#include "build/build_config.h"
namespace supervised_user {
// Enables local parent approvals for the blocked website on the Family Link
// user's device.
BASE_FEATURE(kLocalWebApprovals, base::FEATURE_ENABLED_BY_DEFAULT);
// TODO(crbug.com/391799078): Support local web approval for subframes on
// Desktop.
BASE_FEATURE(kAllowSubframeLocalWebApprovals,
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT);
#else
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_IOS) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
BUILDFLAG(IS_WIN)
const int kLocalWebApprovalBottomSheetLoadTimeoutDefaultValueMs = 5000;
const base::FeatureParam<int> kLocalWebApprovalBottomSheetLoadTimeoutMs{
&kLocalWebApprovals, /*name=*/"LocalWebApprovalBottomSheetLoadTimeoutMs",
kLocalWebApprovalBottomSheetLoadTimeoutDefaultValueMs};
#endif // BUILDFLAG(IS_IOS) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) ||
// BUILDFLAG(IS_WIN)
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN)
BASE_FEATURE(kEnableLocalWebApprovalErrorDialog,
base::FEATURE_ENABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN)
BASE_FEATURE(kLocalWebApprovalsWidgetSupportsUrlPayload,
"PacpWidgetSupportsUrlPayload",
base::FEATURE_ENABLED_BY_DEFAULT);
// TODO(crbug.com/435635774): Release the interstitial v3 in all platforms.
BASE_FEATURE(kSupervisedUserBlockInterstitialV3,
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) || \
BUILDFLAG(IS_IOS)
base::FEATURE_ENABLED_BY_DEFAULT);
#else
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) ||
// BUILDFLAG(IS_IOS)
bool IsGoogleBrandedBuild() {
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
return true;
#else
return false;
#endif
}
bool IsBlockInterstitialV3Enabled() {
return base::FeatureList::IsEnabled(kSupervisedUserBlockInterstitialV3);
}
bool IsLocalWebApprovalsEnabled() {
// TODO(crbug.com/1272462, b/261729051):
// Move this logic to SupervisedUserService, once it's migrated to
// components, and de-release the intended usage of
// WebsiteParentApproval::IsLocalApprovalSupported for Android.
#if BUILDFLAG(IS_ANDROID)
return base::FeatureList::IsEnabled(kLocalWebApprovals) &&
IsGoogleBrandedBuild();
#else
return base::FeatureList::IsEnabled(kLocalWebApprovals);
#endif
}
bool IsLocalWebApprovalsEnabledForSubframes() {
return base::FeatureList::IsEnabled(kAllowSubframeLocalWebApprovals);
}
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
BASE_FEATURE(kEnableSupervisedUserVersionSignOutDialog,
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kAllowNonFamilyLinkUrlFilterMode,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kPropagateDeviceContentFiltersToSupervisedUser,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSupervisedUserBrowserContentFiltersKillSwitch,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSupervisedUserSearchContentFiltersKillSwitch,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSupervisedUserClearDeviceContentFiltersPrefsOnStartup,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kSupervisedUserInterstitialWithoutApprovals,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSupervisedUserLocalSupervisionPreview,
base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<std::string>
kSupervisedUserLocalSupervisionPreviewBuildVersionMajor{
&kSupervisedUserLocalSupervisionPreview, "build_version_major", "BP41"};
namespace {
bool PlatformSupportsLocalSupervision() {
int32_t major, minor, bugfix;
base::SysInfo::OperatingSystemVersionNumbers(&major, &minor, &bugfix);
bool supported_by_os = (major == 16 && minor >= 1) || major > 16;
bool supported_by_build = base::StartsWith(
base::SysInfo::GetAndroidBuildID(),
kSupervisedUserLocalSupervisionPreviewBuildVersionMajor.Get(),
base::CompareCase::SENSITIVE);
return supported_by_os || supported_by_build;
}
bool IsLocalSupervisionEnabled() {
return PlatformSupportsLocalSupervision() &&
base::FeatureList::IsEnabled(kSupervisedUserLocalSupervisionPreview);
}
} // namespace
bool UseLocalSupervision() {
return IsLocalSupervisionEnabled() ||
base::FeatureList::IsEnabled(
kPropagateDeviceContentFiltersToSupervisedUser);
}
bool UseInterstitialForLocalSupervision() {
return IsLocalSupervisionEnabled() ||
base::FeatureList::IsEnabled(
kSupervisedUserInterstitialWithoutApprovals);
}
bool ClassifyUrlWithoutCredentialsForLocalSupervision() {
return IsLocalSupervisionEnabled() ||
base::FeatureList::IsEnabled(kAllowNonFamilyLinkUrlFilterMode);
}
#endif
} // namespace supervised_user