Commit 750eddc5 authored by Patrick Monette's avatar Patrick Monette Committed by Commit Bot

Reland "Make the ThirdPartyModulesBlocking feature work on all Windows versions"

This is a reland of 66d17ca7

Original change's description:
> 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: Greg Thompson <grt@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#566516}

Change-Id: Ie4c6c3767af38efe50e42012aa5f65fb480fac56
Reviewed-on: https://chromium-review.googlesource.com/1099976Reviewed-by: default avatarGreg Thompson <grt@chromium.org>
Commit-Queue: Patrick Monette <pmonette@chromium.org>
Cr-Commit-Position: refs/heads/master@{#567242}
parent 5a766d54
......@@ -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());
......@@ -203,5 +199,5 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyBlockingBrowserTest,
ReadModuleBlacklistCache(module_blacklist_cache_path, &metadata,
&blacklisted_modules, &md5_digest));
EXPECT_EQ(1u, blacklisted_modules.size());
EXPECT_GE(blacklisted_modules.size(), 1);
}
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