| 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 =
|
|
|