url_request_rewrite_rules_validation_unittest.cc 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/url_rewrite/browser/url_request_rewrite_rules_validation.h"
  5. #include "base/run_loop.h"
  6. #include "base/strings/string_piece.h"
  7. #include "testing/gtest/include/gtest/gtest.h"
  8. namespace url_rewrite {
  9. namespace {
  10. mojom::UrlRequestActionPtr CreateRewriteAddHeaders(
  11. base::StringPiece header_name,
  12. base::StringPiece header_value) {
  13. auto add_headers = mojom::UrlRequestRewriteAddHeaders::New();
  14. add_headers->headers.push_back(mojom::UrlHeader::New(
  15. std::string(header_name), std::string(header_value)));
  16. return mojom::UrlRequestAction::NewAddHeaders(std::move(add_headers));
  17. }
  18. mojom::UrlRequestActionPtr CreateRewriteRemoveHeader(
  19. absl::optional<base::StringPiece> query_pattern,
  20. base::StringPiece header_name) {
  21. auto remove_header = mojom::UrlRequestRewriteRemoveHeader::New();
  22. if (query_pattern)
  23. remove_header->query_pattern.emplace(std::string(*query_pattern));
  24. remove_header->header_name = std::string(header_name);
  25. return mojom::UrlRequestAction::NewRemoveHeader(std::move(remove_header));
  26. }
  27. mojom::UrlRequestActionPtr CreateRewriteSubstituteQueryPattern(
  28. base::StringPiece pattern,
  29. base::StringPiece substitution) {
  30. auto substitute_query_pattern =
  31. mojom::UrlRequestRewriteSubstituteQueryPattern::New();
  32. substitute_query_pattern->pattern = std::string(pattern);
  33. substitute_query_pattern->substitution = std::string(substitution);
  34. return mojom::UrlRequestAction::NewSubstituteQueryPattern(
  35. std::move(substitute_query_pattern));
  36. }
  37. mojom::UrlRequestActionPtr CreateRewriteReplaceUrl(
  38. base::StringPiece url_ends_with,
  39. base::StringPiece new_url) {
  40. auto replace_url = mojom::UrlRequestRewriteReplaceUrl::New();
  41. replace_url->url_ends_with = std::string(url_ends_with);
  42. replace_url->new_url = GURL(new_url);
  43. return mojom::UrlRequestAction::NewReplaceUrl(std::move(replace_url));
  44. }
  45. mojom::UrlRequestActionPtr CreateRewriteAppendToQuery(base::StringPiece query) {
  46. auto append_to_query = mojom::UrlRequestRewriteAppendToQuery::New();
  47. append_to_query->query = std::string(query);
  48. return mojom::UrlRequestAction::NewAppendToQuery(std::move(append_to_query));
  49. }
  50. bool ValidateRulesFromAction(mojom::UrlRequestActionPtr action) {
  51. auto rule = mojom::UrlRequestRule::New();
  52. rule->actions.emplace_back(std::move(action));
  53. mojom::UrlRequestRewriteRulesPtr rules = mojom::UrlRequestRewriteRules::New();
  54. rules->rules.push_back(std::move(rule));
  55. return ValidateRules(rules.get());
  56. }
  57. } // namespace
  58. // Tests AddHeaders rewrites are properly converted to their Mojo equivalent.
  59. TEST(UrlRequestRewriteRulesValidationTest, ValidateAddHeaders) {
  60. EXPECT_TRUE(
  61. ValidateRulesFromAction(CreateRewriteAddHeaders("Test", "Value")));
  62. // Invalid AddHeaders header name.
  63. EXPECT_FALSE(
  64. ValidateRulesFromAction(CreateRewriteAddHeaders("Te\nst1", "Value")));
  65. // Invalid AddHeaders header value.
  66. EXPECT_FALSE(
  67. ValidateRulesFromAction(CreateRewriteAddHeaders("Test1", "Val\nue")));
  68. // Empty AddHeaders.
  69. EXPECT_FALSE(ValidateRulesFromAction(mojom::UrlRequestAction::NewAddHeaders(
  70. mojom::UrlRequestRewriteAddHeaders::New())));
  71. }
  72. // Tests RemoveHeader rewrites are properly converted to their Mojo equivalent.
  73. TEST(UrlRequestRewriteRulesValidationTest, ValidateRemoveHeader) {
  74. EXPECT_TRUE(ValidateRulesFromAction(
  75. CreateRewriteRemoveHeader(absl::make_optional("Test"), "Header")));
  76. // Create a RemoveHeader action with no pattern.
  77. EXPECT_TRUE(ValidateRulesFromAction(
  78. CreateRewriteRemoveHeader(absl::nullopt, "Header")));
  79. // Invalid RemoveHeader header name.
  80. EXPECT_FALSE(
  81. ValidateRulesFromAction(CreateRewriteRemoveHeader("Query", "Head\ner")));
  82. // Empty RemoveHeader.
  83. EXPECT_FALSE(ValidateRulesFromAction(mojom::UrlRequestAction::NewRemoveHeader(
  84. mojom::UrlRequestRewriteRemoveHeader::New())));
  85. }
  86. // Tests SubstituteQueryPattern rewrites are properly converted to their Mojo
  87. // equivalent.
  88. TEST(UrlRequestRewriteRulesValidationTest, ValidateSubstituteQueryPattern) {
  89. EXPECT_TRUE(ValidateRulesFromAction(
  90. CreateRewriteSubstituteQueryPattern("Pattern", "Substitution")));
  91. EXPECT_FALSE(ValidateRulesFromAction(
  92. mojom::UrlRequestAction::NewSubstituteQueryPattern(
  93. mojom::UrlRequestRewriteSubstituteQueryPattern::New())));
  94. }
  95. // Tests ReplaceUrl rewrites are properly converted to their Mojo equivalent.
  96. TEST(UrlRequestRewriteRulesValidationTest, ValidateReplaceUrl) {
  97. GURL url("http://site.xyz");
  98. EXPECT_TRUE(ValidateRulesFromAction(
  99. CreateRewriteReplaceUrl("/something", url.spec())));
  100. // Invalid ReplaceUrl url_ends_with.
  101. EXPECT_FALSE(ValidateRulesFromAction(
  102. CreateRewriteReplaceUrl("some%00thing", GURL("http://site.xyz").spec())));
  103. // Invalid ReplaceUrl new_url.
  104. EXPECT_FALSE(ValidateRulesFromAction(
  105. CreateRewriteReplaceUrl("/something", "http:site:xyz")));
  106. // Empty ReplaceUrl.
  107. EXPECT_FALSE(ValidateRulesFromAction(mojom::UrlRequestAction::NewReplaceUrl(
  108. mojom::UrlRequestRewriteReplaceUrl::New())));
  109. }
  110. // Tests AppendToQuery rewrites are properly converted to their Mojo equivalent.
  111. TEST(UrlRequestRewriteRulesValidationTest, ValidateAppendToQuery) {
  112. EXPECT_TRUE(
  113. ValidateRulesFromAction(CreateRewriteAppendToQuery("foo=bar&foo")));
  114. EXPECT_FALSE(
  115. ValidateRulesFromAction(mojom::UrlRequestAction::NewAppendToQuery(
  116. mojom::UrlRequestRewriteAppendToQuery::New())));
  117. }
  118. // Tests validation is working as expected.
  119. TEST(UrlRequestRewriteRulesValidationTest, ValidateNullAction) {
  120. // Empty action.
  121. EXPECT_FALSE(ValidateRulesFromAction(nullptr));
  122. }
  123. TEST(UrlRequestRewriteRulesValidationTest, ValidateNullRules) {
  124. // Empty action.
  125. EXPECT_FALSE(ValidateRules(nullptr));
  126. }
  127. } // namespace url_rewrite