Commit aae86bf6 authored by Owen Min's avatar Owen Min Committed by Commit Bot

Only hide future policies on Stable and Beta channel.

All policies on the platform with future_on flag will be ignored by
default unless they are whitelisted by EnableExperimentalPolicies.

However, this restriction doesn't have to apply to the Dev, Canary and
Chromium build because they are used for development and testing anyway.

Also whitelist in browser test in case they need to be ran with branded
browser.

Bug: 1067190
Change-Id: I139208115657f698e9c94921827db686f3ac346c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2225289Reviewed-by: default avatarJulian Pastarmov <pastarmovj@chromium.org>
Reviewed-by: default avatarRohit Rao <rohitrao@chromium.org>
Reviewed-by: default avatarChangwan Ryu <changwan@chromium.org>
Commit-Queue: Owen Min <zmin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#776193}
parent 92468fa3
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
#include "components/policy/core/browser/url_blacklist_policy_handler.h" #include "components/policy/core/browser/url_blacklist_policy_handler.h"
#include "components/policy/core/common/policy_pref_names.h" #include "components/policy/core/common/policy_pref_names.h"
#include "components/policy/policy_constants.h" #include "components/policy/policy_constants.h"
#include "components/version_info/android/channel_getter.h"
#include "components/version_info/channel.h"
#include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_context_getter.h"
namespace android_webview { namespace android_webview {
...@@ -32,10 +34,13 @@ const policy::PolicyDetails* GetChromePolicyDetails(const std::string& policy) { ...@@ -32,10 +34,13 @@ const policy::PolicyDetails* GetChromePolicyDetails(const std::string& policy) {
// to the associated preferences. // to the associated preferences.
std::unique_ptr<policy::ConfigurationPolicyHandlerList> BuildHandlerList( std::unique_ptr<policy::ConfigurationPolicyHandlerList> BuildHandlerList(
const policy::Schema& chrome_schema) { const policy::Schema& chrome_schema) {
version_info::Channel channel = version_info::android::GetChannel();
std::unique_ptr<policy::ConfigurationPolicyHandlerList> handlers( std::unique_ptr<policy::ConfigurationPolicyHandlerList> handlers(
new policy::ConfigurationPolicyHandlerList( new policy::ConfigurationPolicyHandlerList(
base::BindRepeating(&PopulatePolicyHandlerParameters), base::BindRepeating(&PopulatePolicyHandlerParameters),
base::BindRepeating(&GetChromePolicyDetails))); base::BindRepeating(&GetChromePolicyDetails),
channel != version_info::Channel::STABLE &&
channel != version_info::Channel::BETA));
// URL Filtering // URL Filtering
handlers->AddHandler(std::make_unique<policy::SimplePolicyHandler>( handlers->AddHandler(std::make_unique<policy::SimplePolicyHandler>(
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <vector> #include <vector>
#include "base/bind.h" #include "base/bind.h"
#include "base/command_line.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "base/values.h" #include "base/values.h"
...@@ -37,6 +38,7 @@ ...@@ -37,6 +38,7 @@
#include "chrome/browser/spellchecker/spellcheck_language_policy_handler.h" #include "chrome/browser/spellchecker/spellcheck_language_policy_handler.h"
#include "chrome/browser/ssl/secure_origin_policy_handler.h" #include "chrome/browser/ssl/secure_origin_policy_handler.h"
#include "chrome/common/buildflags.h" #include "chrome/common/buildflags.h"
#include "chrome/common/channel_info.h"
#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "chromeos/services/assistant/public/cpp/assistant_prefs.h" #include "chromeos/services/assistant/public/cpp/assistant_prefs.h"
...@@ -83,6 +85,8 @@ ...@@ -83,6 +85,8 @@
#include "components/unified_consent/pref_names.h" #include "components/unified_consent/pref_names.h"
#include "components/variations/pref_names.h" #include "components/variations/pref_names.h"
#include "components/variations/service/variations_service.h" #include "components/variations/service/variations_service.h"
#include "components/version_info/channel.h"
#include "content/public/common/content_switches.h"
#include "extensions/buildflags/buildflags.h" #include "extensions/buildflags/buildflags.h"
#include "media/media_buildflags.h" #include "media/media_buildflags.h"
#include "ppapi/buildflags/buildflags.h" #include "ppapi/buildflags/buildflags.h"
...@@ -1311,6 +1315,16 @@ void GetDeprecatedFeaturesMap( ...@@ -1311,6 +1315,16 @@ void GetDeprecatedFeaturesMap(
// re-enable them. // re-enable them.
} }
// Future policies are not supported on Stable and Beta by default.
bool AreFuturePoliciesSupported() {
// Enable future policies for branded browser tests.
if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kTestType))
return true;
version_info::Channel channel = chrome::GetChannel();
return channel != version_info::Channel::STABLE &&
channel != version_info::Channel::BETA;
}
} // namespace } // namespace
void PopulatePolicyHandlerParameters(PolicyHandlerParameters* parameters) { void PopulatePolicyHandlerParameters(PolicyHandlerParameters* parameters) {
...@@ -1329,7 +1343,7 @@ std::unique_ptr<ConfigurationPolicyHandlerList> BuildHandlerList( ...@@ -1329,7 +1343,7 @@ std::unique_ptr<ConfigurationPolicyHandlerList> BuildHandlerList(
std::unique_ptr<ConfigurationPolicyHandlerList> handlers( std::unique_ptr<ConfigurationPolicyHandlerList> handlers(
new ConfigurationPolicyHandlerList( new ConfigurationPolicyHandlerList(
base::Bind(&PopulatePolicyHandlerParameters), base::Bind(&PopulatePolicyHandlerParameters),
base::Bind(&GetChromePolicyDetails))); base::Bind(&GetChromePolicyDetails), AreFuturePoliciesSupported()));
for (size_t i = 0; i < base::size(kSimplePolicyMap); ++i) { for (size_t i = 0; i < base::size(kSimplePolicyMap); ++i) {
handlers->AddHandler(std::make_unique<SimplePolicyHandler>( handlers->AddHandler(std::make_unique<SimplePolicyHandler>(
kSimplePolicyMap[i].policy_name, kSimplePolicyMap[i].preference_path, kSimplePolicyMap[i].policy_name, kSimplePolicyMap[i].preference_path,
......
...@@ -24,9 +24,11 @@ const char kPolicyCommentPrefix[] = "_comment"; ...@@ -24,9 +24,11 @@ const char kPolicyCommentPrefix[] = "_comment";
ConfigurationPolicyHandlerList::ConfigurationPolicyHandlerList( ConfigurationPolicyHandlerList::ConfigurationPolicyHandlerList(
const PopulatePolicyHandlerParametersCallback& parameters_callback, const PopulatePolicyHandlerParametersCallback& parameters_callback,
const GetChromePolicyDetailsCallback& details_callback) const GetChromePolicyDetailsCallback& details_callback,
bool allow_future_policies)
: parameters_callback_(parameters_callback), : parameters_callback_(parameters_callback),
details_callback_(details_callback) {} details_callback_(details_callback),
allow_future_policies_(allow_future_policies) {}
ConfigurationPolicyHandlerList::~ConfigurationPolicyHandlerList() { ConfigurationPolicyHandlerList::~ConfigurationPolicyHandlerList() {
} }
...@@ -47,11 +49,11 @@ void ConfigurationPolicyHandlerList::ApplyPolicySettings( ...@@ -47,11 +49,11 @@ void ConfigurationPolicyHandlerList::ApplyPolicySettings(
// TODO(aberent): split into two functions. // TODO(aberent): split into two functions.
// TODO(crbug.com/1076560): Returns filtered out future policies for better // TODO(crbug.com/1076560): Returns filtered out future policies for better
// user interface. // user interface.
// TODO(crbug.com/1076560): Provides a way to all whitelist experimental
// policies in Canary/Dev and test.
std::unique_ptr<PolicyMap> filtered_policies = policies.DeepCopy(); std::unique_ptr<PolicyMap> filtered_policies = policies.DeepCopy();
base::flat_set<std::string> enabled_future_policies = base::flat_set<std::string> enabled_future_policies =
ValueToStringSet(policies.GetValue(key::kEnableExperimentalPolicies)); allow_future_policies_ ? base::flat_set<std::string>()
: ValueToStringSet(policies.GetValue(
key::kEnableExperimentalPolicies));
filtered_policies->EraseMatching(base::BindRepeating( filtered_policies->EraseMatching(base::BindRepeating(
&ConfigurationPolicyHandlerList::FilterOutUnsupportedPolicies, &ConfigurationPolicyHandlerList::FilterOutUnsupportedPolicies,
base::Unretained(this), enabled_future_policies)); base::Unretained(this), enabled_future_policies));
...@@ -123,7 +125,7 @@ bool ConfigurationPolicyHandlerList::IsFuturePolicy( ...@@ -123,7 +125,7 @@ bool ConfigurationPolicyHandlerList::IsFuturePolicy(
const base::flat_set<std::string>& enabled_future_policies, const base::flat_set<std::string>& enabled_future_policies,
const PolicyDetails& policy_details, const PolicyDetails& policy_details,
const PolicyMap::const_iterator iter) const { const PolicyMap::const_iterator iter) const {
return policy_details.is_future && return !allow_future_policies_ && policy_details.is_future &&
!enabled_future_policies.contains(iter->first); !enabled_future_policies.contains(iter->first);
} }
......
...@@ -37,7 +37,8 @@ class POLICY_EXPORT ConfigurationPolicyHandlerList { ...@@ -37,7 +37,8 @@ class POLICY_EXPORT ConfigurationPolicyHandlerList {
explicit ConfigurationPolicyHandlerList( explicit ConfigurationPolicyHandlerList(
const PopulatePolicyHandlerParametersCallback& parameters_callback, const PopulatePolicyHandlerParametersCallback& parameters_callback,
const GetChromePolicyDetailsCallback& details_callback); const GetChromePolicyDetailsCallback& details_callback,
bool allow_future_policies);
~ConfigurationPolicyHandlerList(); ~ConfigurationPolicyHandlerList();
// Adds a policy handler to the list. // Adds a policy handler to the list.
...@@ -73,6 +74,8 @@ class POLICY_EXPORT ConfigurationPolicyHandlerList { ...@@ -73,6 +74,8 @@ class POLICY_EXPORT ConfigurationPolicyHandlerList {
const PopulatePolicyHandlerParametersCallback parameters_callback_; const PopulatePolicyHandlerParametersCallback parameters_callback_;
const GetChromePolicyDetailsCallback details_callback_; const GetChromePolicyDetailsCallback details_callback_;
bool allow_future_policies_ = false;
DISALLOW_COPY_AND_ASSIGN(ConfigurationPolicyHandlerList); DISALLOW_COPY_AND_ASSIGN(ConfigurationPolicyHandlerList);
}; };
......
...@@ -52,6 +52,8 @@ class StubPolicyHandler : public ConfigurationPolicyHandler { ...@@ -52,6 +52,8 @@ class StubPolicyHandler : public ConfigurationPolicyHandler {
class ConfigurationPolicyHandlerListTest : public ::testing::Test { class ConfigurationPolicyHandlerListTest : public ::testing::Test {
public: public:
void SetUp() override { CreateHandlerList(); }
void AddSimplePolicy() { void AddSimplePolicy() {
AddPolicy(kPolicyName, /* is_cloud */ true, AddPolicy(kPolicyName, /* is_cloud */ true,
std::make_unique<base::Value>(kPolicyValue)); std::make_unique<base::Value>(kPolicyValue));
...@@ -66,14 +68,24 @@ class ConfigurationPolicyHandlerListTest : public ::testing::Test { ...@@ -66,14 +68,24 @@ class ConfigurationPolicyHandlerListTest : public ::testing::Test {
: PolicySource::POLICY_SOURCE_PLATFORM, : PolicySource::POLICY_SOURCE_PLATFORM,
std::move(value), nullptr); std::move(value), nullptr);
if (policy_name != key::kEnableExperimentalPolicies) { if (policy_name != key::kEnableExperimentalPolicies) {
handler_list_.AddHandler( handler_list_->AddHandler(
std::make_unique<StubPolicyHandler>(policy_name)); std::make_unique<StubPolicyHandler>(policy_name));
} }
} }
void ApplySettings() { void ApplySettings() {
handler_list_.ApplyPolicySettings(policies_, &prefs_, &errors_, handler_list_->ApplyPolicySettings(policies_, &prefs_, &errors_,
&deprecated_policies_); &deprecated_policies_);
}
void CreateHandlerList(bool allow_all_future_policies = false) {
handler_list_ = std::make_unique<ConfigurationPolicyHandlerList>(
ConfigurationPolicyHandlerList::
PopulatePolicyHandlerParametersCallback(),
base::BindRepeating(
&ConfigurationPolicyHandlerListTest::GetPolicyDetails,
base::Unretained(this)),
allow_all_future_policies);
} }
PrefValueMap* prefs() { return &prefs_; } PrefValueMap* prefs() { return &prefs_; }
...@@ -108,10 +120,7 @@ class ConfigurationPolicyHandlerListTest : public ::testing::Test { ...@@ -108,10 +120,7 @@ class ConfigurationPolicyHandlerListTest : public ::testing::Test {
DeprecatedPoliciesSet deprecated_policies_; DeprecatedPoliciesSet deprecated_policies_;
PolicyDetails details_{false, false, false, 0, 0, {}}; PolicyDetails details_{false, false, false, 0, 0, {}};
ConfigurationPolicyHandlerList handler_list_{ std::unique_ptr<ConfigurationPolicyHandlerList> handler_list_;
ConfigurationPolicyHandlerList::PopulatePolicyHandlerParametersCallback(),
base::BindRepeating(&ConfigurationPolicyHandlerListTest::GetPolicyDetails,
base::Unretained(this))};
}; };
TEST_F(ConfigurationPolicyHandlerListTest, ApplySettingsWithNormalPolicy) { TEST_F(ConfigurationPolicyHandlerListTest, ApplySettingsWithNormalPolicy) {
...@@ -150,6 +159,16 @@ TEST_F(ConfigurationPolicyHandlerListTest, ApplySettingsWithFuturePolicy) { ...@@ -150,6 +159,16 @@ TEST_F(ConfigurationPolicyHandlerListTest, ApplySettingsWithFuturePolicy) {
VerifyPolicyAndPref(kPolicyName, /* in_pref */ true); VerifyPolicyAndPref(kPolicyName, /* in_pref */ true);
} }
TEST_F(ConfigurationPolicyHandlerListTest,
ApplySettingsWithoutFutureFilterPolicy) {
CreateHandlerList(true);
AddSimplePolicy();
details()->is_future = true;
ApplySettings();
VerifyPolicyAndPref(kPolicyName, /* in_pref */ true);
}
// Device platform policy will be fitered out. // Device platform policy will be fitered out.
TEST_F(ConfigurationPolicyHandlerListTest, TEST_F(ConfigurationPolicyHandlerListTest,
ApplySettingsWithPlatformDevicePolicy) { ApplySettingsWithPlatformDevicePolicy) {
......
...@@ -25,7 +25,8 @@ ConfigurationPolicyPrefStoreTest::ConfigurationPolicyPrefStoreTest() ...@@ -25,7 +25,8 @@ ConfigurationPolicyPrefStoreTest::ConfigurationPolicyPrefStoreTest()
: handler_list_(base::BindRepeating(&ConfigurationPolicyPrefStoreTest:: : handler_list_(base::BindRepeating(&ConfigurationPolicyPrefStoreTest::
PopulatePolicyHandlerParameters, PopulatePolicyHandlerParameters,
base::Unretained(this)), base::Unretained(this)),
GetChromePolicyDetailsCallback()) { GetChromePolicyDetailsCallback(),
/* allow_all_future_policies*/ true) {
EXPECT_CALL(provider_, IsInitializationComplete(_)) EXPECT_CALL(provider_, IsInitializationComplete(_))
.WillRepeatedly(Return(false)); .WillRepeatedly(Return(false));
provider_.Init(); provider_.Init();
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include "components/update_client/configurator.h" #include "components/update_client/configurator.h"
#include "components/update_client/update_query_params.h" #include "components/update_client/update_query_params.h"
#include "components/variations/service/variations_service.h" #include "components/variations/service/variations_service.h"
#include "components/version_info/channel.h"
#include "ios/chrome/app/tests_hook.h" #include "ios/chrome/app/tests_hook.h"
#include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/application_context.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
...@@ -422,8 +423,11 @@ BrowserPolicyConnectorIOS* ApplicationContextImpl::GetBrowserPolicyConnector() { ...@@ -422,8 +423,11 @@ BrowserPolicyConnectorIOS* ApplicationContextImpl::GetBrowserPolicyConnector() {
// BrowserPolicyConnector::OnResourceBundleCreated() will need to be added // BrowserPolicyConnector::OnResourceBundleCreated() will need to be added
// later in the startup sequence, after the ResourceBundle is initialized. // later in the startup sequence, after the ResourceBundle is initialized.
DCHECK(ui::ResourceBundle::HasSharedInstance()); DCHECK(ui::ResourceBundle::HasSharedInstance());
version_info::Channel channel = ::GetChannel();
browser_policy_connector_ = std::make_unique<BrowserPolicyConnectorIOS>( browser_policy_connector_ = std::make_unique<BrowserPolicyConnectorIOS>(
base::Bind(&BuildPolicyHandlerList)); base::Bind(&BuildPolicyHandlerList,
channel != version_info::Channel::STABLE &&
channel != version_info::Channel::BETA));
// Install a mock platform policy provider, if running under EG2 and one // Install a mock platform policy provider, if running under EG2 and one
// is supplied. // is supplied.
......
...@@ -13,7 +13,10 @@ class Schema; ...@@ -13,7 +13,10 @@ class Schema;
} // namespace policy } // namespace policy
// Builds a policy handler list. // Builds a policy handler list.
// All un-released policies will be ignored by default unless
// |allow_future_policies| is True.
std::unique_ptr<policy::ConfigurationPolicyHandlerList> BuildPolicyHandlerList( std::unique_ptr<policy::ConfigurationPolicyHandlerList> BuildPolicyHandlerList(
bool allow_future_policies,
const policy::Schema& chrome_schema); const policy::Schema& chrome_schema);
#endif // IOS_CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_HANDLER_LIST_FACTORY_H_ #endif // IOS_CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_HANDLER_LIST_FACTORY_H_
...@@ -77,12 +77,13 @@ void PopulatePolicyHandlerParameters( ...@@ -77,12 +77,13 @@ void PopulatePolicyHandlerParameters(
} // namespace } // namespace
std::unique_ptr<policy::ConfigurationPolicyHandlerList> BuildPolicyHandlerList( std::unique_ptr<policy::ConfigurationPolicyHandlerList> BuildPolicyHandlerList(
bool allow_future_policies,
const policy::Schema& chrome_schema) { const policy::Schema& chrome_schema) {
DCHECK(IsEnterprisePolicyEnabled()); DCHECK(IsEnterprisePolicyEnabled());
std::unique_ptr<policy::ConfigurationPolicyHandlerList> handlers = std::unique_ptr<policy::ConfigurationPolicyHandlerList> handlers =
std::make_unique<policy::ConfigurationPolicyHandlerList>( std::make_unique<policy::ConfigurationPolicyHandlerList>(
base::Bind(&PopulatePolicyHandlerParameters), base::Bind(&PopulatePolicyHandlerParameters),
base::Bind(&policy::GetChromePolicyDetails)); base::Bind(&policy::GetChromePolicyDetails), allow_future_policies);
// Check the feature flag before adding handlers to the list. // Check the feature flag before adding handlers to the list.
if (!ShouldInstallEnterprisePolicyHandlers()) { if (!ShouldInstallEnterprisePolicyHandlers()) {
......
...@@ -21,7 +21,7 @@ EnterprisePolicyTestHelper::EnterprisePolicyTestHelper( ...@@ -21,7 +21,7 @@ EnterprisePolicyTestHelper::EnterprisePolicyTestHelper(
// Create a BrowserPolicyConnectorIOS, install the mock policy // Create a BrowserPolicyConnectorIOS, install the mock policy
// provider, and hook up Local State. // provider, and hook up Local State.
browser_policy_connector_ = std::make_unique<BrowserPolicyConnectorIOS>( browser_policy_connector_ = std::make_unique<BrowserPolicyConnectorIOS>(
base::Bind(&BuildPolicyHandlerList)); base::Bind(&BuildPolicyHandlerList, /* allow_future_policies= */ true));
browser_policy_connector_->SetPolicyProviderForTesting(&policy_provider_); browser_policy_connector_->SetPolicyProviderForTesting(&policy_provider_);
scoped_refptr<PrefRegistrySimple> local_state_registry( scoped_refptr<PrefRegistrySimple> local_state_registry(
......
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