123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- // Copyright 2019 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 "fuchsia_web/webengine/browser/url_request_rewrite_type_converters.h"
- #include <lib/fidl/cpp/binding.h>
- #include "base/run_loop.h"
- #include "base/test/bind.h"
- #include "fuchsia_web/common/test/url_request_rewrite_test_util.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace {
- url_rewrite::mojom::UrlRequestRewriteRulesPtr ConvertFuchsiaRulesToMojom(
- fuchsia::web::UrlRequestRewrite rewrite) {
- std::vector<fuchsia::web::UrlRequestRewrite> rewrites;
- rewrites.push_back(std::move(rewrite));
- fuchsia::web::UrlRequestRewriteRule rule;
- rule.set_rewrites(std::move(rewrites));
- std::vector<fuchsia::web::UrlRequestRewriteRule> rules;
- rules.push_back(std::move(rule));
- return mojo::ConvertTo<url_rewrite::mojom::UrlRequestRewriteRulesPtr>(
- std::move(rules));
- }
- } // namespace
- // Tests AddHeaders rewrites are properly converted to their Mojo equivalent.
- TEST(UrlRequestRewriteTypeConvertersTest, ConvertAddHeader) {
- url_rewrite::mojom::UrlRequestRewriteRulesPtr rules =
- ConvertFuchsiaRulesToMojom(CreateRewriteAddHeaders("Test", "Value"));
- ASSERT_EQ(rules->rules.size(), 1u);
- ASSERT_FALSE(rules->rules[0]->hosts_filter);
- ASSERT_FALSE(rules->rules[0]->schemes_filter);
- ASSERT_EQ(rules->rules[0]->actions.size(), 1u);
- ASSERT_TRUE(rules->rules[0]->actions[0]->is_add_headers());
- const std::vector<url_rewrite::mojom::UrlHeaderPtr>& headers =
- rules->rules[0]->actions[0]->get_add_headers()->headers;
- ASSERT_EQ(headers.size(), 1u);
- ASSERT_EQ(headers[0]->name, "Test");
- ASSERT_EQ(headers[0]->value, "Value");
- }
- // Tests RemoveHeader rewrites are properly converted to their Mojo equivalent.
- TEST(UrlRequestRewriteTypeConvertersTest, ConvertRemoveHeader) {
- url_rewrite::mojom::UrlRequestRewriteRulesPtr rules =
- ConvertFuchsiaRulesToMojom(
- CreateRewriteRemoveHeader(absl::make_optional("Test"), "Header"));
- ASSERT_EQ(rules->rules.size(), 1u);
- ASSERT_FALSE(rules->rules[0]->hosts_filter);
- ASSERT_FALSE(rules->rules[0]->schemes_filter);
- ASSERT_EQ(rules->rules[0]->actions.size(), 1u);
- ASSERT_TRUE(rules->rules[0]->actions[0]->is_remove_header());
- const url_rewrite::mojom::UrlRequestRewriteRemoveHeaderPtr& remove_header1 =
- rules->rules[0]->actions[0]->get_remove_header();
- ASSERT_TRUE(remove_header1->query_pattern);
- ASSERT_EQ(remove_header1->query_pattern.value().compare("Test"), 0);
- ASSERT_EQ(remove_header1->header_name.compare("Header"), 0);
- // Create a RemoveHeader rewrite with no pattern.
- rules = ConvertFuchsiaRulesToMojom(
- CreateRewriteRemoveHeader(absl::nullopt, "Header"));
- ASSERT_EQ(rules->rules.size(), 1u);
- ASSERT_FALSE(rules->rules[0]->hosts_filter);
- ASSERT_FALSE(rules->rules[0]->schemes_filter);
- ASSERT_EQ(rules->rules[0]->actions.size(), 1u);
- ASSERT_TRUE(rules->rules[0]->actions[0]->is_remove_header());
- const url_rewrite::mojom::UrlRequestRewriteRemoveHeaderPtr& remove_header2 =
- rules->rules[0]->actions[0]->get_remove_header();
- ASSERT_FALSE(remove_header2->query_pattern);
- ASSERT_EQ(remove_header2->header_name.compare("Header"), 0);
- }
- // Tests SubstituteQueryPattern rewrites are properly converted to their Mojo
- // equivalent.
- TEST(UrlRequestRewriteTypeConvertersTest, ConvertSubstituteQueryPattern) {
- url_rewrite::mojom::UrlRequestRewriteRulesPtr rules =
- ConvertFuchsiaRulesToMojom(
- CreateRewriteSubstituteQueryPattern("Pattern", "Substitution"));
- ASSERT_EQ(rules->rules.size(), 1u);
- ASSERT_FALSE(rules->rules[0]->hosts_filter);
- ASSERT_FALSE(rules->rules[0]->schemes_filter);
- ASSERT_EQ(rules->rules[0]->actions.size(), 1u);
- ASSERT_TRUE(rules->rules[0]->actions[0]->is_substitute_query_pattern());
- const url_rewrite::mojom::UrlRequestRewriteSubstituteQueryPatternPtr&
- substitute_query_pattern =
- rules->rules[0]->actions[0]->get_substitute_query_pattern();
- ASSERT_EQ(substitute_query_pattern->pattern.compare("Pattern"), 0);
- ASSERT_EQ(substitute_query_pattern->substitution.compare("Substitution"), 0);
- }
- // Tests ReplaceUrl rewrites are properly converted to their Mojo equivalent.
- TEST(UrlRequestRewriteTypeConvertersTest, ConvertReplaceUrl) {
- GURL url("http://site.xyz");
- url_rewrite::mojom::UrlRequestRewriteRulesPtr rules =
- ConvertFuchsiaRulesToMojom(
- CreateRewriteReplaceUrl("/something", url.spec()));
- ASSERT_EQ(rules->rules.size(), 1u);
- ASSERT_FALSE(rules->rules[0]->hosts_filter);
- ASSERT_FALSE(rules->rules[0]->schemes_filter);
- ASSERT_EQ(rules->rules[0]->actions.size(), 1u);
- ASSERT_TRUE(rules->rules[0]->actions[0]->is_replace_url());
- const url_rewrite::mojom::UrlRequestRewriteReplaceUrlPtr& replace_url =
- rules->rules[0]->actions[0]->get_replace_url();
- ASSERT_EQ(replace_url->url_ends_with.compare("/something"), 0);
- ASSERT_EQ(replace_url->new_url.spec().compare(url.spec()), 0);
- }
- // Tests AppendToQuery rewrites are properly converted to their Mojo equivalent.
- TEST(UrlRequestRewriteTypeConvertersTest, ConvertAppendToQuery) {
- url_rewrite::mojom::UrlRequestRewriteRulesPtr rules =
- ConvertFuchsiaRulesToMojom(CreateRewriteAppendToQuery("foo=bar&foo"));
- ASSERT_EQ(rules->rules.size(), 1u);
- ASSERT_FALSE(rules->rules[0]->hosts_filter);
- ASSERT_FALSE(rules->rules[0]->schemes_filter);
- ASSERT_EQ(rules->rules[0]->actions.size(), 1u);
- ASSERT_TRUE(rules->rules[0]->actions[0]->is_append_to_query());
- const url_rewrite::mojom::UrlRequestRewriteAppendToQueryPtr& append_to_query =
- rules->rules[0]->actions[0]->get_append_to_query();
- ASSERT_EQ(append_to_query->query.compare("foo=bar&foo"), 0);
- }
- // Tests host names containing non-ASCII characters are properly converted.
- TEST(UrlRequestRewriteTypeConvertersTest, ConvertInternationalHostName) {
- const char kNonAsciiHostName[] = "t\u00E8st.net";
- const char kNonAsciiHostNameWithWildcard[] = "*.t\u00E8st.net";
- std::vector<fuchsia::web::UrlRequestRewrite> rewrites;
- rewrites.push_back(CreateRewriteAddHeaders("Test", "Value"));
- fuchsia::web::UrlRequestRewriteRule rule;
- rule.set_rewrites(std::move(rewrites));
- rule.set_hosts_filter({kNonAsciiHostName, kNonAsciiHostNameWithWildcard});
- std::vector<fuchsia::web::UrlRequestRewriteRule> fidl_rules;
- fidl_rules.push_back(std::move(rule));
- url_rewrite::mojom::UrlRequestRewriteRulesPtr rules =
- mojo::ConvertTo<url_rewrite::mojom::UrlRequestRewriteRulesPtr>(
- std::move(fidl_rules));
- ASSERT_EQ(rules->rules.size(), 1u);
- ASSERT_TRUE(rules->rules[0]->hosts_filter);
- ASSERT_EQ(rules->rules[0]->hosts_filter.value().size(), 2u);
- EXPECT_EQ(rules->rules[0]->hosts_filter.value()[0].compare("xn--tst-6la.net"),
- 0);
- EXPECT_EQ(
- rules->rules[0]->hosts_filter.value()[1].compare("*.xn--tst-6la.net"), 0);
- }
|