Index: chrome/browser/extensions/policy_handlers_unittest.cc |
diff --git a/chrome/browser/extensions/policy_handlers_unittest.cc b/chrome/browser/extensions/policy_handlers_unittest.cc |
index 1a0f91883a56a8cdff63972b164d936d40e599e9..f04375c635fd61dc2d9378689a65c8054bfcbaa3 100644 |
--- a/chrome/browser/extensions/policy_handlers_unittest.cc |
+++ b/chrome/browser/extensions/policy_handlers_unittest.cc |
@@ -5,6 +5,8 @@ |
#include <utility> |
#include "base/json/json_reader.h" |
+#include "base/strings/stringprintf.h" |
+#include "base/strings/utf_string_conversions.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" |
@@ -35,6 +37,12 @@ const char kTestManagementPolicy2[] = |
" \"installation_mode\": \"blocked\"," |
" }," |
"}"; |
+const char kTestManagementPolicy3[] = |
+ "{" |
+ " \"*\": {" |
+ " \"runtime_blocked_hosts\": [\"%s\"]" |
+ " }" |
+ "}"; |
TEST(ExtensionListPolicyHandlerTest, CheckPolicySettings) { |
base::ListValue list; |
@@ -283,6 +291,52 @@ TEST(ExtensionSettingsPolicyHandlerTest, CheckPolicySettings) { |
EXPECT_FALSE(errors.empty()); |
} |
+TEST(ExtensionSettingsPolicyHandlerTest, CheckPolicySettingsURL) { |
+ std::vector<std::string> good_urls = { |
+ "*://*.example.com", "*://example.com", "http://cat.example.com", |
+ "https://example.*", "*://*.example.*", "<all_urls>"}; |
+ |
+ // Invalid URLPattern or with a non-standard path |
+ std::vector<std::string> bad_urls = { |
+ "://*.example.com", "*://example.com/cat*", "*://example.com/", |
+ "*://*.example.com/*cat", "*://example.com/cat/*", "bad", |
+ "*://example.com/*"}; |
+ |
+ // Crafts and parses a ExtensionSettings policy to test URL parsing. |
+ auto URLParsesSuccessfully = [](std::string url) { |
+ std::string policy = |
+ base::StringPrintf(kTestManagementPolicy3, url.c_str()); |
+ std::string error; |
+ std::unique_ptr<base::Value> policy_value = |
+ base::JSONReader::ReadAndReturnError( |
+ policy, base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS, NULL, |
+ &error); |
+ if (!policy_value.get()) |
+ return false; |
+ |
+ 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, std::move(policy_value), |
+ nullptr); |
+ |
+ return handler.CheckPolicySettings(policy_map, &errors) && errors.empty(); |
+ |
+ }; |
+ |
+ for (std::string url : good_urls) { |
+ EXPECT_TRUE(URLParsesSuccessfully(url)) << url; |
+ } |
+ for (std::string url : bad_urls) { |
+ EXPECT_FALSE(URLParsesSuccessfully(url)) << url; |
+ } |
+} |
+ |
TEST(ExtensionSettingsPolicyHandlerTest, ApplyPolicySettings) { |
std::string error; |
std::unique_ptr<base::Value> policy_value = |