| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/extensions/extension_checkup.h" |
| |
| #include "base/metrics/field_trial_params.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| #include "extensions/browser/extension_prefs.h" |
| #include "extensions/browser/extension_registry.h" |
| #include "extensions/browser/extension_system.h" |
| #include "extensions/browser/management_policy.h" |
| #include "extensions/common/extension_features.h" |
| #include "extensions/common/extension_set.h" |
| |
| using content::BrowserContext; |
| |
| namespace { |
| |
| bool ShouldShowExtensionsCheckup(content::BrowserContext* context) { |
| // Don't show the promo if the extensions checkup experiment isn't enabled. |
| if (!base::FeatureList::IsEnabled(extensions_features::kExtensionsCheckup)) { |
| return false; |
| } |
| |
| // Don't show promo if extensions are not enabled. |
| extensions::ExtensionService* extension_service = |
| extensions::ExtensionSystem::Get(context)->extension_service(); |
| if (!extension_service || !extension_service->extensions_enabled()) |
| return false; |
| |
| // Don't show the promo if there are no extensions installed. |
| std::unique_ptr<extensions::ExtensionSet> extension_set = |
| extensions::ExtensionRegistry::Get(context) |
| ->GenerateInstalledExtensionsSet(); |
| if (extension_set->is_empty()) |
| return false; |
| |
| // Check if users have non policy-installed extensions. If all the extensions |
| // are policy-installed (even if they can be disabled), then do not show the |
| // extensions checkup experiment. |
| for (const auto& extension : *extension_set) { |
| if (extension->is_extension() && |
| !extensions::Manifest::IsPolicyLocation(extension->location()) && |
| !extensions::Manifest::IsComponentLocation(extension->location()) && |
| !(extension->creation_flags() & |
| extensions::Extension::WAS_INSTALLED_BY_DEFAULT)) { |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| } // namespace |
| |
| namespace extensions { |
| |
| bool ShouldShowExtensionsCheckupOnStartup(content::BrowserContext* context) { |
| ExtensionPrefs* prefs = ExtensionPrefs::Get(context); |
| if (ShouldShowExtensionsCheckup(context) && |
| base::GetFieldTrialParamValueByFeature( |
| extensions_features::kExtensionsCheckup, |
| extensions_features::kExtensionsCheckupEntryPointParameter) == |
| extensions_features::kStartupEntryPoint && |
| !prefs->HasUserSeenExtensionsCheckupOnStartup()) { |
| return true; |
| } |
| return false; |
| } |
| |
| bool ShouldShowExtensionsCheckupPromo(content::BrowserContext* context) { |
| return ShouldShowExtensionsCheckup(context) && |
| base::GetFieldTrialParamValueByFeature( |
| extensions_features::kExtensionsCheckup, |
| extensions_features::kExtensionsCheckupEntryPointParameter) == |
| extensions_features::kNtpPromoEntryPoint; |
| } |
| |
| CheckupMessage GetCheckupMessageFocus() { |
| return static_cast<CheckupMessage>(base::GetFieldTrialParamByFeatureAsInt( |
| extensions_features::kExtensionsCheckup, |
| extensions_features::kExtensionsCheckupBannerMessageParameter, 2)); |
| } |
| |
| } // namespace extensions |