url_request_rewrite_type_converters_unittest.cc 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. // Copyright 2019 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 "fuchsia_web/webengine/browser/url_request_rewrite_type_converters.h"
  5. #include <lib/fidl/cpp/binding.h>
  6. #include "base/run_loop.h"
  7. #include "base/test/bind.h"
  8. #include "fuchsia_web/common/test/url_request_rewrite_test_util.h"
  9. #include "testing/gtest/include/gtest/gtest.h"
  10. namespace {
  11. url_rewrite::mojom::UrlRequestRewriteRulesPtr ConvertFuchsiaRulesToMojom(
  12. fuchsia::web::UrlRequestRewrite rewrite) {
  13. std::vector<fuchsia::web::UrlRequestRewrite> rewrites;
  14. rewrites.push_back(std::move(rewrite));
  15. fuchsia::web::UrlRequestRewriteRule rule;
  16. rule.set_rewrites(std::move(rewrites));
  17. std::vector<fuchsia::web::UrlRequestRewriteRule> rules;
  18. rules.push_back(std::move(rule));
  19. return mojo::ConvertTo<url_rewrite::mojom::UrlRequestRewriteRulesPtr>(
  20. std::move(rules));
  21. }
  22. } // namespace
  23. // Tests AddHeaders rewrites are properly converted to their Mojo equivalent.
  24. TEST(UrlRequestRewriteTypeConvertersTest, ConvertAddHeader) {
  25. url_rewrite::mojom::UrlRequestRewriteRulesPtr rules =
  26. ConvertFuchsiaRulesToMojom(CreateRewriteAddHeaders("Test", "Value"));
  27. ASSERT_EQ(rules->rules.size(), 1u);
  28. ASSERT_FALSE(rules->rules[0]->hosts_filter);
  29. ASSERT_FALSE(rules->rules[0]->schemes_filter);
  30. ASSERT_EQ(rules->rules[0]->actions.size(), 1u);
  31. ASSERT_TRUE(rules->rules[0]->actions[0]->is_add_headers());
  32. const std::vector<url_rewrite::mojom::UrlHeaderPtr>& headers =
  33. rules->rules[0]->actions[0]->get_add_headers()->headers;
  34. ASSERT_EQ(headers.size(), 1u);
  35. ASSERT_EQ(headers[0]->name, "Test");
  36. ASSERT_EQ(headers[0]->value, "Value");
  37. }
  38. // Tests RemoveHeader rewrites are properly converted to their Mojo equivalent.
  39. TEST(UrlRequestRewriteTypeConvertersTest, ConvertRemoveHeader) {
  40. url_rewrite::mojom::UrlRequestRewriteRulesPtr rules =
  41. ConvertFuchsiaRulesToMojom(
  42. CreateRewriteRemoveHeader(absl::make_optional("Test"), "Header"));
  43. ASSERT_EQ(rules->rules.size(), 1u);
  44. ASSERT_FALSE(rules->rules[0]->hosts_filter);
  45. ASSERT_FALSE(rules->rules[0]->schemes_filter);
  46. ASSERT_EQ(rules->rules[0]->actions.size(), 1u);
  47. ASSERT_TRUE(rules->rules[0]->actions[0]->is_remove_header());
  48. const url_rewrite::mojom::UrlRequestRewriteRemoveHeaderPtr& remove_header1 =
  49. rules->rules[0]->actions[0]->get_remove_header();
  50. ASSERT_TRUE(remove_header1->query_pattern);
  51. ASSERT_EQ(remove_header1->query_pattern.value().compare("Test"), 0);
  52. ASSERT_EQ(remove_header1->header_name.compare("Header"), 0);
  53. // Create a RemoveHeader rewrite with no pattern.
  54. rules = ConvertFuchsiaRulesToMojom(
  55. CreateRewriteRemoveHeader(absl::nullopt, "Header"));
  56. ASSERT_EQ(rules->rules.size(), 1u);
  57. ASSERT_FALSE(rules->rules[0]->hosts_filter);
  58. ASSERT_FALSE(rules->rules[0]->schemes_filter);
  59. ASSERT_EQ(rules->rules[0]->actions.size(), 1u);
  60. ASSERT_TRUE(rules->rules[0]->actions[0]->is_remove_header());
  61. const url_rewrite::mojom::UrlRequestRewriteRemoveHeaderPtr& remove_header2 =
  62. rules->rules[0]->actions[0]->get_remove_header();
  63. ASSERT_FALSE(remove_header2->query_pattern);
  64. ASSERT_EQ(remove_header2->header_name.compare("Header"), 0);
  65. }
  66. // Tests SubstituteQueryPattern rewrites are properly converted to their Mojo
  67. // equivalent.
  68. TEST(UrlRequestRewriteTypeConvertersTest, ConvertSubstituteQueryPattern) {
  69. url_rewrite::mojom::UrlRequestRewriteRulesPtr rules =
  70. ConvertFuchsiaRulesToMojom(
  71. CreateRewriteSubstituteQueryPattern("Pattern", "Substitution"));
  72. ASSERT_EQ(rules->rules.size(), 1u);
  73. ASSERT_FALSE(rules->rules[0]->hosts_filter);
  74. ASSERT_FALSE(rules->rules[0]->schemes_filter);
  75. ASSERT_EQ(rules->rules[0]->actions.size(), 1u);
  76. ASSERT_TRUE(rules->rules[0]->actions[0]->is_substitute_query_pattern());
  77. const url_rewrite::mojom::UrlRequestRewriteSubstituteQueryPatternPtr&
  78. substitute_query_pattern =
  79. rules->rules[0]->actions[0]->get_substitute_query_pattern();
  80. ASSERT_EQ(substitute_query_pattern->pattern.compare("Pattern"), 0);
  81. ASSERT_EQ(substitute_query_pattern->substitution.compare("Substitution"), 0);
  82. }
  83. // Tests ReplaceUrl rewrites are properly converted to their Mojo equivalent.
  84. TEST(UrlRequestRewriteTypeConvertersTest, ConvertReplaceUrl) {
  85. GURL url("http://site.xyz");
  86. url_rewrite::mojom::UrlRequestRewriteRulesPtr rules =
  87. ConvertFuchsiaRulesToMojom(
  88. CreateRewriteReplaceUrl("/something", url.spec()));
  89. ASSERT_EQ(rules->rules.size(), 1u);
  90. ASSERT_FALSE(rules->rules[0]->hosts_filter);
  91. ASSERT_FALSE(rules->rules[0]->schemes_filter);
  92. ASSERT_EQ(rules->rules[0]->actions.size(), 1u);
  93. ASSERT_TRUE(rules->rules[0]->actions[0]->is_replace_url());
  94. const url_rewrite::mojom::UrlRequestRewriteReplaceUrlPtr& replace_url =
  95. rules->rules[0]->actions[0]->get_replace_url();
  96. ASSERT_EQ(replace_url->url_ends_with.compare("/something"), 0);
  97. ASSERT_EQ(replace_url->new_url.spec().compare(url.spec()), 0);
  98. }
  99. // Tests AppendToQuery rewrites are properly converted to their Mojo equivalent.
  100. TEST(UrlRequestRewriteTypeConvertersTest, ConvertAppendToQuery) {
  101. url_rewrite::mojom::UrlRequestRewriteRulesPtr rules =
  102. ConvertFuchsiaRulesToMojom(CreateRewriteAppendToQuery("foo=bar&foo"));
  103. ASSERT_EQ(rules->rules.size(), 1u);
  104. ASSERT_FALSE(rules->rules[0]->hosts_filter);
  105. ASSERT_FALSE(rules->rules[0]->schemes_filter);
  106. ASSERT_EQ(rules->rules[0]->actions.size(), 1u);
  107. ASSERT_TRUE(rules->rules[0]->actions[0]->is_append_to_query());
  108. const url_rewrite::mojom::UrlRequestRewriteAppendToQueryPtr& append_to_query =
  109. rules->rules[0]->actions[0]->get_append_to_query();
  110. ASSERT_EQ(append_to_query->query.compare("foo=bar&foo"), 0);
  111. }
  112. // Tests host names containing non-ASCII characters are properly converted.
  113. TEST(UrlRequestRewriteTypeConvertersTest, ConvertInternationalHostName) {
  114. const char kNonAsciiHostName[] = "t\u00E8st.net";
  115. const char kNonAsciiHostNameWithWildcard[] = "*.t\u00E8st.net";
  116. std::vector<fuchsia::web::UrlRequestRewrite> rewrites;
  117. rewrites.push_back(CreateRewriteAddHeaders("Test", "Value"));
  118. fuchsia::web::UrlRequestRewriteRule rule;
  119. rule.set_rewrites(std::move(rewrites));
  120. rule.set_hosts_filter({kNonAsciiHostName, kNonAsciiHostNameWithWildcard});
  121. std::vector<fuchsia::web::UrlRequestRewriteRule> fidl_rules;
  122. fidl_rules.push_back(std::move(rule));
  123. url_rewrite::mojom::UrlRequestRewriteRulesPtr rules =
  124. mojo::ConvertTo<url_rewrite::mojom::UrlRequestRewriteRulesPtr>(
  125. std::move(fidl_rules));
  126. ASSERT_EQ(rules->rules.size(), 1u);
  127. ASSERT_TRUE(rules->rules[0]->hosts_filter);
  128. ASSERT_EQ(rules->rules[0]->hosts_filter.value().size(), 2u);
  129. EXPECT_EQ(rules->rules[0]->hosts_filter.value()[0].compare("xn--tst-6la.net"),
  130. 0);
  131. EXPECT_EQ(
  132. rules->rules[0]->hosts_filter.value()[1].compare("*.xn--tst-6la.net"), 0);
  133. }