blob: 8de20d0e8e463d786513ec84af8da38aa34e3ce9 [file] [log] [blame]
// Copyright (c) 2011 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 "components/content_settings/core/browser/content_settings_utils.h"
#include <stddef.h>
#include <string>
#include "base/stl_util.h"
#include "components/content_settings/core/test/content_settings_test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace content_settings {
namespace {
const char* const kContentSettingNames[] = {
"default",
"allow",
"block",
"ask",
"session_only",
"detect_important_content",
};
static_assert(base::size(kContentSettingNames) == CONTENT_SETTING_NUM_SETTINGS,
"kContentSettingNames has an unexpected number of elements");
} // namespace
TEST(ContentSettingsUtilsTest, ParsePatternString) {
PatternPair pattern_pair;
pattern_pair = ParsePatternString(std::string());
EXPECT_FALSE(pattern_pair.first.IsValid());
EXPECT_FALSE(pattern_pair.second.IsValid());
pattern_pair = ParsePatternString(",");
EXPECT_FALSE(pattern_pair.first.IsValid());
EXPECT_FALSE(pattern_pair.second.IsValid());
pattern_pair = ParsePatternString("http://www.foo.com");
EXPECT_TRUE(pattern_pair.first.IsValid());
EXPECT_EQ(pattern_pair.second, ContentSettingsPattern::Wildcard());
// This inconsistency is to recover from some broken code.
pattern_pair = ParsePatternString("http://www.foo.com,");
EXPECT_TRUE(pattern_pair.first.IsValid());
EXPECT_FALSE(pattern_pair.second.IsValid());
pattern_pair = ParsePatternString("http://www.foo.com,http://www.bar.com");
EXPECT_TRUE(pattern_pair.first.IsValid());
EXPECT_TRUE(pattern_pair.second.IsValid());
pattern_pair = ParsePatternString("http://www.foo.com,http://www.bar.com,");
EXPECT_FALSE(pattern_pair.first.IsValid());
EXPECT_FALSE(pattern_pair.second.IsValid());
pattern_pair = ParsePatternString(
"http://www.foo.com,http://www.bar.com,http://www.error.com");
EXPECT_FALSE(pattern_pair.first.IsValid());
EXPECT_FALSE(pattern_pair.second.IsValid());
}
TEST(ContentSettingsUtilsTest, ContentSettingsStringMap) {
std::string setting_string =
ContentSettingToString(CONTENT_SETTING_NUM_SETTINGS);
EXPECT_TRUE(setting_string.empty());
for (size_t i = 0; i < base::size(kContentSettingNames); ++i) {
ContentSetting setting = static_cast<ContentSetting>(i);
setting_string = ContentSettingToString(setting);
EXPECT_EQ(kContentSettingNames[i], setting_string);
ContentSetting converted_setting;
EXPECT_TRUE(
ContentSettingFromString(kContentSettingNames[i], &converted_setting));
EXPECT_EQ(setting, converted_setting);
}
}
TEST(ContentSettingsUtilsTest, IsMorePermissive) {
EXPECT_TRUE(IsMorePermissive(
CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK));
EXPECT_TRUE(IsMorePermissive(
CONTENT_SETTING_ALLOW, CONTENT_SETTING_ASK));
EXPECT_TRUE(IsMorePermissive(
CONTENT_SETTING_ALLOW, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT));
EXPECT_TRUE(IsMorePermissive(
CONTENT_SETTING_ALLOW, CONTENT_SETTING_SESSION_ONLY));
EXPECT_TRUE(IsMorePermissive(
CONTENT_SETTING_SESSION_ONLY, CONTENT_SETTING_ASK));
EXPECT_TRUE(IsMorePermissive(
CONTENT_SETTING_SESSION_ONLY, CONTENT_SETTING_BLOCK));
EXPECT_TRUE(IsMorePermissive(
CONTENT_SETTING_DETECT_IMPORTANT_CONTENT, CONTENT_SETTING_ASK));
EXPECT_TRUE(IsMorePermissive(
CONTENT_SETTING_DETECT_IMPORTANT_CONTENT, CONTENT_SETTING_BLOCK));
EXPECT_TRUE(IsMorePermissive(CONTENT_SETTING_ASK, CONTENT_SETTING_BLOCK));
EXPECT_FALSE(IsMorePermissive(
CONTENT_SETTING_BLOCK, CONTENT_SETTING_ALLOW));
EXPECT_FALSE(IsMorePermissive(
CONTENT_SETTING_BLOCK, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT));
EXPECT_FALSE(IsMorePermissive(
CONTENT_SETTING_BLOCK, CONTENT_SETTING_SESSION_ONLY));
EXPECT_FALSE(IsMorePermissive(CONTENT_SETTING_BLOCK, CONTENT_SETTING_ASK));
EXPECT_FALSE(IsMorePermissive(
CONTENT_SETTING_ASK, CONTENT_SETTING_ALLOW));
EXPECT_FALSE(IsMorePermissive(
CONTENT_SETTING_ASK, CONTENT_SETTING_SESSION_ONLY));
EXPECT_FALSE(IsMorePermissive(
CONTENT_SETTING_ASK, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT));
EXPECT_FALSE(IsMorePermissive(
CONTENT_SETTING_SESSION_ONLY, CONTENT_SETTING_ALLOW));
EXPECT_FALSE(IsMorePermissive(
CONTENT_SETTING_DETECT_IMPORTANT_CONTENT, CONTENT_SETTING_ALLOW));
EXPECT_FALSE(IsMorePermissive(
CONTENT_SETTING_ALLOW, CONTENT_SETTING_ALLOW));
// Check that all possible ContentSettings except CONTENT_SETTING_DEFAULT are
// handled.
for (int i = 1; i < CONTENT_SETTING_NUM_SETTINGS; ++i) {
auto s = static_cast<ContentSetting>(i);
EXPECT_FALSE(IsMorePermissive(s, s));
}
}
} // namespace content_settings