Policy: Add warning when too many hosts in ExtensionSettings policy
Screenshot: http://screen/X8kgtvykzPC
Bug: 992088
Change-Id: I49ed84f511e8d5498c8d247eb49c96609027cb23
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1752636
Reviewed-by: Finnur Thorarinsson <[email protected]>
Reviewed-by: Julian Pastarmov <[email protected]>
Commit-Queue: Yann Dago <[email protected]>
Cr-Commit-Position: refs/heads/master@{#688100}
diff --git a/chrome/browser/extensions/policy_handlers_unittest.cc b/chrome/browser/extensions/policy_handlers_unittest.cc
index 4dbb80f..51c8f0d 100644
--- a/chrome/browser/extensions/policy_handlers_unittest.cc
+++ b/chrome/browser/extensions/policy_handlers_unittest.cc
@@ -5,8 +5,11 @@
#include <utility>
#include "base/json/json_reader.h"
+#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
+#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
+#include "chrome/browser/extensions/extension_management_constants.h"
#include "chrome/browser/extensions/external_policy_loader.h"
#include "chrome/browser/extensions/policy_handlers.h"
#include "components/policy/core/browser/policy_error_map.h"
@@ -15,8 +18,10 @@
#include "components/policy/core/common/schema.h"
#include "components/policy/policy_constants.h"
#include "components/prefs/pref_value_map.h"
+#include "components/strings/grit/components_strings.h"
#include "extensions/browser/pref_names.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/l10n/l10n_util.h"
#if defined(OS_WIN)
#include "base/win/win_util.h"
@@ -371,6 +376,50 @@
EXPECT_FALSE(errors.empty());
}
+TEST(ExtensionSettingsPolicyHandlerTest, CheckPolicySettingsTooManyHosts) {
+ const char policy_template[] =
+ "{"
+ " \"*\": {"
+ " \"runtime_blocked_hosts\": [%s],"
+ " \"runtime_allowed_hosts\": [%s]"
+ " }"
+ "}";
+
+ std::string urls;
+ for (size_t i = 0; i < 101; ++i)
+ urls.append("\"*://example" + base::NumberToString(i) + ".com\",");
+
+ std::string policy =
+ base::StringPrintf(policy_template, urls.c_str(), urls.c_str());
+
+ std::string error;
+ auto policy_value = base::JSONReader::ReadAndReturnValueWithError(
+ policy, base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS);
+ policy::Schema chrome_schema =
+ policy::Schema::Wrap(policy::GetChromeSchemaData());
+ policy::PolicyMap policy_map;
+ policy::PolicyErrorMap errors;
+ ExtensionSettingsPolicyHandler handler(chrome_schema);
+
+ policy_map.Set(policy::key::kExtensionSettings,
+ policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
+ policy::POLICY_SOURCE_CLOUD,
+ policy_value.value.value().CreateDeepCopy(), nullptr);
+
+ EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
+ EXPECT_EQ(2u, errors.size());
+ auto error_str = errors.GetErrors(policy::key::kExtensionSettings);
+ auto expected_allowed = l10n_util::GetStringFUTF16(
+ IDS_POLICY_EXTENSION_SETTINGS_ORIGIN_LIMIT_WARNING,
+ base::NumberToString16(schema_constants::kMaxItemsURLPatternSet));
+ auto expected_blocked = l10n_util::GetStringFUTF16(
+ IDS_POLICY_EXTENSION_SETTINGS_ORIGIN_LIMIT_WARNING,
+ base::NumberToString16(schema_constants::kMaxItemsURLPatternSet));
+
+ EXPECT_TRUE(error_str.find(expected_allowed) != std::wstring::npos);
+ EXPECT_TRUE(error_str.find(expected_blocked) != std::wstring::npos);
+}
+
TEST(ExtensionSettingsPolicyHandlerTest, ApplyPolicySettings) {
// Mark as enterprise managed.
#if defined(OS_WIN)