blob: fe1dba34fb1c87bcb7e7e109ef41c85cd9a6479e [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/memory/scoped_ptr.h"
#include "base/prefs/pref_value_map.h"
#include "chrome/browser/policy/url_blacklist_policy_handler.h"
#include "chrome/common/pref_names.h"
#include "components/policy/core/browser/policy_error_map.h"
#include "components/policy/core/common/policy_map.h"
#include "grit/generated_resources.h"
#include "policy/policy_constants.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace policy {
namespace {
const char kTestDisabledScheme[] = "kTestDisabledScheme";
const char kTestBlacklistValue[] = "kTestBlacklistValue";
} // namespace
class URLBlacklistPolicyHandlerTest : public testing::Test {
protected:
void SetPolicy(const std::string& key, base::Value* value) {
policies_.Set(key, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, value, NULL);
}
bool CheckPolicy(const std::string& key, base::Value* value) {
SetPolicy(key, value);
return handler_.CheckPolicySettings(policies_, &errors_);
}
void ApplyPolicies() {
handler_.ApplyPolicySettings(policies_, &prefs_);
}
URLBlacklistPolicyHandler handler_;
PolicyErrorMap errors_;
PolicyMap policies_;
PrefValueMap prefs_;
};
TEST_F(URLBlacklistPolicyHandlerTest,
CheckPolicySettings_DisabledSchemesUnspecified) {
EXPECT_TRUE(CheckPolicy(key::kURLBlacklist, new base::ListValue));
EXPECT_EQ(0U, errors_.size());
}
TEST_F(URLBlacklistPolicyHandlerTest,
CheckPolicySettings_URLBlacklistUnspecified) {
EXPECT_TRUE(CheckPolicy(key::kDisabledSchemes, new base::ListValue));
EXPECT_EQ(0U, errors_.size());
}
TEST_F(URLBlacklistPolicyHandlerTest,
CheckPolicySettings_DisabledSchemesWrongType) {
// The policy expects a list. Give it a boolean.
EXPECT_TRUE(CheckPolicy(key::kDisabledSchemes,
base::Value::CreateBooleanValue(false)));
EXPECT_EQ(1U, errors_.size());
const std::string expected = key::kDisabledSchemes;
const std::string actual = errors_.begin()->first;
EXPECT_EQ(expected, actual);
}
TEST_F(URLBlacklistPolicyHandlerTest,
CheckPolicySettings_URLBlacklistWrongType) {
// The policy expects a list. Give it a boolean.
EXPECT_TRUE(CheckPolicy(key::kURLBlacklist,
base::Value::CreateBooleanValue(false)));
EXPECT_EQ(1U, errors_.size());
const std::string expected = key::kURLBlacklist;
const std::string actual = errors_.begin()->first;
EXPECT_EQ(expected, actual);
}
TEST_F(URLBlacklistPolicyHandlerTest, ApplyPolicySettings_NothingSpecified) {
ApplyPolicies();
EXPECT_FALSE(prefs_.GetValue(prefs::kUrlBlacklist, NULL));
}
TEST_F(URLBlacklistPolicyHandlerTest,
ApplyPolicySettings_DisabledSchemesWrongType) {
// The policy expects a list. Give it a boolean.
SetPolicy(key::kDisabledSchemes, base::Value::CreateBooleanValue(false));
ApplyPolicies();
EXPECT_FALSE(prefs_.GetValue(prefs::kUrlBlacklist, NULL));
}
TEST_F(URLBlacklistPolicyHandlerTest,
ApplyPolicySettings_URLBlacklistWrongType) {
// The policy expects a list. Give it a boolean.
SetPolicy(key::kURLBlacklist, base::Value::CreateBooleanValue(false));
ApplyPolicies();
EXPECT_FALSE(prefs_.GetValue(prefs::kUrlBlacklist, NULL));
}
TEST_F(URLBlacklistPolicyHandlerTest,
ApplyPolicySettings_DisabledSchemesEmpty) {
SetPolicy(key::kDisabledSchemes, new base::ListValue);
ApplyPolicies();
base::Value* out;
EXPECT_TRUE(prefs_.GetValue(prefs::kUrlBlacklist, &out));
base::ListValue* out_list;
EXPECT_TRUE(out->GetAsList(&out_list));
EXPECT_EQ(0U, out_list->GetSize());
}
TEST_F(URLBlacklistPolicyHandlerTest,
ApplyPolicySettings_URLBlacklistEmpty) {
SetPolicy(key::kURLBlacklist, new base::ListValue);
ApplyPolicies();
base::Value* out;
EXPECT_TRUE(prefs_.GetValue(prefs::kUrlBlacklist, &out));
base::ListValue* out_list;
EXPECT_TRUE(out->GetAsList(&out_list));
EXPECT_EQ(0U, out_list->GetSize());
}
TEST_F(URLBlacklistPolicyHandlerTest,
ApplyPolicySettings_DisabledSchemesWrongElementType) {
// The policy expects string-valued elements. Give it booleans.
scoped_ptr<base::ListValue> in(new base::ListValue);
in->AppendBoolean(false);
SetPolicy(key::kDisabledSchemes, in.release());
ApplyPolicies();
// The element should be skipped.
base::Value* out;
EXPECT_TRUE(prefs_.GetValue(prefs::kUrlBlacklist, &out));
base::ListValue* out_list;
EXPECT_TRUE(out->GetAsList(&out_list));
EXPECT_EQ(0U, out_list->GetSize());
}
TEST_F(URLBlacklistPolicyHandlerTest,
ApplyPolicySettings_URLBlacklistWrongElementType) {
// The policy expects string-valued elements. Give it booleans.
scoped_ptr<base::ListValue> in(new base::ListValue);
in->AppendBoolean(false);
SetPolicy(key::kURLBlacklist, in.release());
ApplyPolicies();
// The element should be skipped.
base::Value* out;
EXPECT_TRUE(prefs_.GetValue(prefs::kUrlBlacklist, &out));
base::ListValue* out_list;
EXPECT_TRUE(out->GetAsList(&out_list));
EXPECT_EQ(0U, out_list->GetSize());
}
TEST_F(URLBlacklistPolicyHandlerTest,
ApplyPolicySettings_DisabledSchemesSuccessful) {
scoped_ptr<base::ListValue> in_disabled_schemes(new base::ListValue);
in_disabled_schemes->AppendString(kTestDisabledScheme);
SetPolicy(key::kDisabledSchemes, in_disabled_schemes.release());
ApplyPolicies();
base::Value* out;
EXPECT_TRUE(prefs_.GetValue(prefs::kUrlBlacklist, &out));
base::ListValue* out_list;
EXPECT_TRUE(out->GetAsList(&out_list));
EXPECT_EQ(1U, out_list->GetSize());
std::string out_string;
EXPECT_TRUE(out_list->GetString(0U, &out_string));
EXPECT_EQ(kTestDisabledScheme + std::string("://*"), out_string);
}
TEST_F(URLBlacklistPolicyHandlerTest,
ApplyPolicySettings_URLBlacklistSuccessful) {
scoped_ptr<base::ListValue> in_url_blacklist(new base::ListValue);
in_url_blacklist->AppendString(kTestBlacklistValue);
SetPolicy(key::kURLBlacklist, in_url_blacklist.release());
ApplyPolicies();
base::Value* out;
EXPECT_TRUE(prefs_.GetValue(prefs::kUrlBlacklist, &out));
base::ListValue* out_list;
EXPECT_TRUE(out->GetAsList(&out_list));
EXPECT_EQ(1U, out_list->GetSize());
std::string out_string;
EXPECT_TRUE(out_list->GetString(0U, &out_string));
EXPECT_EQ(kTestBlacklistValue, out_string);
}
TEST_F(URLBlacklistPolicyHandlerTest, ApplyPolicySettings_MergeSuccessful) {
scoped_ptr<base::ListValue> in_disabled_schemes(new base::ListValue);
in_disabled_schemes->AppendString(kTestDisabledScheme);
SetPolicy(key::kDisabledSchemes, in_disabled_schemes.release());
scoped_ptr<base::ListValue> in_url_blacklist(new base::ListValue);
in_url_blacklist->AppendString(kTestBlacklistValue);
SetPolicy(key::kURLBlacklist, in_url_blacklist.release());
ApplyPolicies();
base::Value* out;
EXPECT_TRUE(prefs_.GetValue(prefs::kUrlBlacklist, &out));
base::ListValue* out_list;
EXPECT_TRUE(out->GetAsList(&out_list));
EXPECT_EQ(2U, out_list->GetSize());
std::string out1;
EXPECT_TRUE(out_list->GetString(0U, &out1));
EXPECT_EQ(kTestDisabledScheme + std::string("://*"), out1);
std::string out2;
EXPECT_TRUE(out_list->GetString(1U, &out2));
EXPECT_EQ(kTestBlacklistValue, out2);
}
} // namespace policy