Commit 66d17ca7 authored by Patrick Monette's avatar Patrick Monette Committed by Commit Bot

Make the ThirdPartyModulesBlocking feature work on all Windows versions

Change-Id: I0118d26fe9b7f11f2608dd66c10418e210393733
Reviewed-on: https://chromium-review.googlesource.com/1083842
Commit-Queue: Patrick Monette <pmonette@chromium.org>
Reviewed-by: default avatarGreg Thompson <grt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#566516}
parent fb43e0f4
......@@ -8,14 +8,18 @@
#include <utility>
#include "base/bind.h"
#include "base/feature_list.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "base/win/registry.h"
#include "base/win/windows_version.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/conflicts/module_database_win.h"
#include "chrome/browser/conflicts/module_info_util_win.h"
#include "chrome/browser/conflicts/module_info_win.h"
#include "chrome/browser/conflicts/module_list_filter_win.h"
#include "chrome/browser/conflicts/third_party_metrics_recorder_win.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/pref_names.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h"
......@@ -223,8 +227,11 @@ void IncompatibleApplicationsUpdater::RegisterLocalStatePrefs(
// static
bool IncompatibleApplicationsUpdater::IsWarningEnabled() {
return ModuleDatabase::GetInstance() &&
ModuleDatabase::GetInstance()->third_party_conflicts_manager();
return base::win::GetVersion() >= base::win::VERSION_WIN10 &&
base::FeatureList::IsEnabled(features::kModuleDatabase) &&
ModuleDatabase::IsThirdPartyBlockingPolicyEnabled() &&
base::FeatureList::IsEnabled(
features::kIncompatibleApplicationsWarning);
}
// static
......
......@@ -49,8 +49,8 @@ class IncompatibleApplicationsUpdater : public ModuleDatabaseObserver {
static void RegisterLocalStatePrefs(PrefRegistrySimple* registry);
// Returns true if the tracking of incompatible applications is enabled. The
// return value will not change throughout the lifetime of the process.
// Returns true if the tracking of incompatible applications is enabled. Note
// that this is a Windows 10+ feature only.
static bool IsWarningEnabled();
// Returns true if the cache contains at least one incompatible application.
......
......@@ -10,7 +10,6 @@
#include "base/bind.h"
#include "base/files/file_path.h"
#include "base/location.h"
#include "base/win/windows_version.h"
#include "chrome/browser/conflicts/module_database_observer_win.h"
#if defined(GOOGLE_CHROME_BUILD)
......@@ -288,10 +287,12 @@ void ModuleDatabase::NotifyLoadedModules(ModuleDatabaseObserver* observer) {
#if defined(GOOGLE_CHROME_BUILD)
void ModuleDatabase::MaybeInitializeThirdPartyConflictsManager() {
if (base::win::GetVersion() >= base::win::VERSION_WIN10 &&
IsThirdPartyBlockingPolicyEnabled() &&
base::FeatureList::IsEnabled(
features::kIncompatibleApplicationsWarning)) {
if (!IsThirdPartyBlockingPolicyEnabled())
return;
if (base::FeatureList::IsEnabled(
features::kIncompatibleApplicationsWarning) ||
base::FeatureList::IsEnabled(features::kThirdPartyModulesBlocking)) {
third_party_conflicts_manager_ =
std::make_unique<ThirdPartyConflictsManager>(this);
AddObserver(third_party_conflicts_manager_.get());
......
......@@ -118,13 +118,14 @@ class ModuleDatabase {
#if defined(GOOGLE_CHROME_BUILD)
static void RegisterLocalStatePrefs(PrefRegistrySimple* registry);
// Returns true if the ThirdPartyBlocking policy is enabled. This can only
// return false if it is disabled via admin policy.
// Returns false if third-party modules blocking is disabled via
// administrative policy.
static bool IsThirdPartyBlockingPolicyEnabled();
// Accessor for the third party conflicts manager. This is exposed so that the
// manager can be wired up to the ThirdPartyModuleListComponentInstaller.
// Returns null if the tracking of incompatible applications is disabled.
// Returns null if both the tracking of incompatible applications and the
// blocking of third-party modules are disabled.
ThirdPartyConflictsManager* third_party_conflicts_manager() {
return third_party_conflicts_manager_.get();
}
......@@ -178,12 +179,11 @@ class ModuleDatabase {
void NotifyLoadedModules(ModuleDatabaseObserver* observer);
#if defined(GOOGLE_CHROME_BUILD)
// Initializes the ThirdPartyConflictsManager, which controls the warning of
// incompatible applications that injects into Chrome and the blocking of
// third-party modules.
// The manager is not initialized if it is disabled via a base::Feature or a
// group policy. Note that it is also not initialized on Windows version
// 8.1 and less.
// Initializes the ThirdPartyConflictsManager, which controls showing warnings
// for incompatible applications that inject into Chrome and the blocking of
// third-party modules. The manager is only initialized if either or both of
// the ThirdPartyModulesBlocking and IncompatibleApplicationsWarning features
// are enabled.
void MaybeInitializeThirdPartyConflictsManager();
void OnThirdPartyBlockingPolicyChanged();
......
......@@ -13,7 +13,6 @@
#include "base/scoped_native_library.h"
#include "base/test/scoped_feature_list.h"
#include "base/test/test_reg_util_win.h"
#include "base/win/windows_version.h"
#include "chrome/browser/conflicts/incompatible_applications_updater_win.h"
#include "chrome/browser/conflicts/module_blacklist_cache_updater_win.h"
#include "chrome/browser/conflicts/module_blacklist_cache_util_win.h"
......@@ -159,9 +158,6 @@ class ThirdPartyBlockingBrowserTest : public InProcessBrowserTest {
// browser launch.
IN_PROC_BROWSER_TEST_F(ThirdPartyBlockingBrowserTest,
CreateModuleBlacklistCache) {
if (base::win::GetVersion() < base::win::VERSION_WIN10)
return;
base::FilePath module_list_path;
ASSERT_NO_FATAL_FAILURE(CreateModuleList(&module_list_path));
ASSERT_FALSE(module_list_path.empty());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment