| Index: components/subresource_filter/core/common/test_ruleset_creator.cc
|
| diff --git a/components/subresource_filter/core/common/test_ruleset_creator.cc b/components/subresource_filter/core/common/test_ruleset_creator.cc
|
| index 51f482458c57b7213c205e194ee55f02041f918a..7be15cb74bd2c59846d7714b53d8e49078f072b8 100644
|
| --- a/components/subresource_filter/core/common/test_ruleset_creator.cc
|
| +++ b/components/subresource_filter/core/common/test_ruleset_creator.cc
|
| @@ -15,6 +15,9 @@ namespace subresource_filter {
|
|
|
| namespace {
|
|
|
| +// The methods below assume that char and uint8_t are interchangeable.
|
| +static_assert(CHAR_BIT == 8, "Assumed char was 8 bits.");
|
| +
|
| proto::UrlRule CreateSuffixRule(base::StringPiece suffix) {
|
| proto::UrlRule rule;
|
| rule.set_semantics(proto::RULE_SEMANTICS_BLACKLIST);
|
| @@ -27,45 +30,81 @@ proto::UrlRule CreateSuffixRule(base::StringPiece suffix) {
|
| return rule;
|
| }
|
|
|
| +std::vector<uint8_t> SerializeUnindexedRulesetWithSingleRule(
|
| + const proto::UrlRule& rule) {
|
| + std::vector<uint8_t> ruleset_contents;
|
| + std::string serialized_rule;
|
| + rule.SerializeToString(&serialized_rule);
|
| + const uint8_t* data =
|
| + reinterpret_cast<const uint8_t*>(serialized_rule.data());
|
| + return std::vector<uint8_t>(data, data + serialized_rule.size());
|
| +}
|
| +
|
| +std::vector<uint8_t> SerializeIndexedRulesetWithSingleRule(
|
| + const proto::UrlRule& rule) {
|
| + RulesetIndexer indexer;
|
| + EXPECT_TRUE(indexer.AddUrlRule(rule));
|
| + indexer.Finish();
|
| + return std::vector<uint8_t>(indexer.data(), indexer.data() + indexer.size());
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace testing {
|
|
|
| +// TestRuleset -----------------------------------------------------------------
|
| +
|
| +TestRuleset::TestRuleset() = default;
|
| +TestRuleset::~TestRuleset() = default;
|
| +
|
| +// static
|
| +base::File TestRuleset::Open(const TestRuleset& ruleset) {
|
| + base::File file;
|
| + file.Initialize(ruleset.path, base::File::FLAG_OPEN | base::File::FLAG_READ |
|
| + base::File::FLAG_SHARE_DELETE);
|
| + return file;
|
| +}
|
| +
|
| +// TestRulesetPair -------------------------------------------------------------
|
| +
|
| +TestRulesetPair::TestRulesetPair() = default;
|
| +TestRulesetPair::~TestRulesetPair() = default;
|
| +
|
| +// TestRulesetCreator ----------------------------------------------------------
|
| +
|
| TestRulesetCreator::TestRulesetCreator() = default;
|
| TestRulesetCreator::~TestRulesetCreator() = default;
|
|
|
| void TestRulesetCreator::CreateRulesetToDisallowURLsWithPathSuffix(
|
| base::StringPiece suffix,
|
| - std::vector<uint8_t>* buffer) {
|
| - RulesetIndexer indexer;
|
| - ASSERT_TRUE(indexer.AddUrlRule(CreateSuffixRule(suffix)));
|
| - indexer.Finish();
|
| - buffer->assign(indexer.data(), indexer.data() + indexer.size());
|
| + TestRulesetPair* test_ruleset_pair) {
|
| + DCHECK(test_ruleset_pair);
|
| + proto::UrlRule suffix_rule = CreateSuffixRule(suffix);
|
| + ASSERT_NO_FATAL_FAILURE(CreateTestRulesetFromContents(
|
| + SerializeUnindexedRulesetWithSingleRule(suffix_rule),
|
| + &test_ruleset_pair->unindexed));
|
| + ASSERT_NO_FATAL_FAILURE(CreateTestRulesetFromContents(
|
| + SerializeIndexedRulesetWithSingleRule(suffix_rule),
|
| + &test_ruleset_pair->indexed));
|
| }
|
|
|
| -void TestRulesetCreator::CreateRulesetFileToDisallowURLsWithPathSuffix(
|
| - base::StringPiece suffix,
|
| - base::File* ruleset_file) {
|
| - DCHECK(ruleset_file);
|
| +void TestRulesetCreator::CreateTestRulesetFromContents(
|
| + std::vector<uint8_t> ruleset_contents,
|
| + TestRuleset* ruleset) {
|
| + DCHECK(ruleset);
|
| ASSERT_TRUE(scoped_temp_dir_.IsValid() ||
|
| scoped_temp_dir_.CreateUniqueTempDir());
|
| - base::FilePath unique_temp_path = scoped_temp_dir_.path().AppendASCII(
|
| - base::IntToString(next_ruleset_version_++));
|
| -
|
| - std::vector<uint8_t> ruleset;
|
| - ASSERT_NO_FATAL_FAILURE(
|
| - CreateRulesetToDisallowURLsWithPathSuffix(suffix, &ruleset));
|
| -
|
| - int ruleset_size = base::checked_cast<int>(ruleset.size());
|
| - static_assert(CHAR_BIT == 8, "Assumed char was 8 bits.");
|
| - ASSERT_EQ(ruleset_size,
|
| - base::WriteFile(unique_temp_path,
|
| - reinterpret_cast<const char*>(ruleset.data()),
|
| - ruleset_size));
|
| -
|
| - ruleset_file->Initialize(unique_temp_path, base::File::FLAG_OPEN |
|
| - base::File::FLAG_READ |
|
| - base::File::FLAG_SHARE_DELETE);
|
| + base::FilePath path = scoped_temp_dir_.path().AppendASCII(
|
| + base::IntToString(next_unique_file_suffix++));
|
| +
|
| + int ruleset_size_as_int = base::checked_cast<int>(ruleset_contents.size());
|
| + int num_bytes_written = base::WriteFile(
|
| + path, reinterpret_cast<const char*>(ruleset_contents.data()),
|
| + ruleset_size_as_int);
|
| + ASSERT_EQ(ruleset_size_as_int, num_bytes_written);
|
| +
|
| + ruleset->path = path;
|
| + ruleset->contents = std::move(ruleset_contents);
|
| }
|
|
|
| } // namespace testing
|
|
|