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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
// Copyright 2020 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/web_applications/preinstalled_app_install_features.h"
#include <string>
#include <string_view>
#include "base/auto_reset.h"
#include "base/feature_list.h"
#include "base/memory/raw_ref.h"
#include "build/build_config.h"
#if BUILDFLAG(IS_CHROMEOS)
#include "chrome/browser/enterprise/browser_management/management_service_factory.h"
#include "chromeos/constants/chromeos_features.h"
#include "components/policy/core/common/management/management_service.h"
#endif // BUILDFLAG(IS_CHROMEOS)
namespace web_app {
namespace {
constexpr const std::string_view kShippedPreinstalledAppInstallFeatures[] = {
// Enables installing the PWA version of the chrome os calculator instead of
// the deprecated chrome app.
"DefaultCalculatorWebApp",
// Enables migration of default installed GSuite apps over to their
// replacement web apps.
"MigrateDefaultChromeAppToWebAppsGSuite",
// Enables migration of default installed non-GSuite apps over to their
// replacement web apps.
"MigrateDefaultChromeAppToWebAppsNonGSuite",
// Enables installing the Messages app on unmanaged devices.
"MessagesPreinstall",
// Enables installing the Cursive device on managed stylus-enabled devices.
"CursiveManagedStylusPreinstall",
};
bool g_always_enabled_for_testing = false;
// A hard coded list of features available for externally installed apps to
// gate their installation on via their config file settings. See |kFeatureName|
// in preinstalled_web_app_utils.h.
//
// After a feature flag has been shipped and should be cleaned up, move it into
// kShippedPreinstalledAppInstallFeatures to ensure any external installation
// configs that reference it continue to see it as enabled.
constexpr const raw_ref<const base::Feature> kPreinstalledAppInstallFeatures[] =
{
#if BUILDFLAG(IS_CHROMEOS)
raw_ref(chromeos::features::kCloudGamingDevice),
raw_ref(chromeos::features::kGeminiAppPreinstall),
raw_ref(chromeos::features::kNotebookLmAppPreinstall),
#endif
};
} // namespace
#if BUILDFLAG(IS_CHROMEOS)
// Use `IsPreinstalledDocsSheetsSlidesDriveStandaloneTabbed` instead of checking
// this flag directly to correctly exclude managed devices.
BASE_FEATURE(kDocsSheetsSlidesDrivePreinstallStandaloneTabbed,
"DocsSheetsSlidesDrivePreinstallStandaloneTabbed",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS)
bool IsPreinstalledDocsSheetsSlidesDriveStandaloneTabbed(Profile& profile) {
#if BUILDFLAG(IS_CHROMEOS)
if (!base::FeatureList::IsEnabled(
kDocsSheetsSlidesDrivePreinstallStandaloneTabbed)) {
return false;
}
// Exclude managed devices.
if (policy::ManagementServiceFactory::GetForPlatform()->IsManaged()) {
return false;
}
// Exclude managed profiles.
if (policy::ManagementServiceFactory::GetForProfile(&profile)->IsManaged()) {
return false;
}
return true;
#else
return false;
#endif // BUILDFLAG(IS_CHROMEOS)
}
bool IsPreinstalledAppInstallFeatureEnabled(std::string_view feature_name) {
if (g_always_enabled_for_testing) {
return true;
}
for (std::string_view feature : kShippedPreinstalledAppInstallFeatures) {
if (feature == feature_name) {
return true;
}
}
for (const raw_ref<const base::Feature> feature :
kPreinstalledAppInstallFeatures) {
if (feature->name == feature_name) {
return base::FeatureList::IsEnabled(*feature);
}
}
return false;
}
base::AutoReset<bool>
SetPreinstalledAppInstallFeatureAlwaysEnabledForTesting() {
return base::AutoReset<bool>(&g_always_enabled_for_testing, true);
}
} // namespace web_app
|