url_security_manager_unittest.cc 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // Copyright (c) 2010 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 "net/http/url_security_manager.h"
  5. #include <utility>
  6. #include "net/base/net_errors.h"
  7. #include "net/http/http_auth_filter.h"
  8. #include "testing/gtest/include/gtest/gtest.h"
  9. #include "url/gurl.h"
  10. #include "url/scheme_host_port.h"
  11. namespace net {
  12. namespace {
  13. struct TestData {
  14. const char* const scheme_host_port;
  15. bool succeds_in_windows_default;
  16. bool succeeds_in_allowlist;
  17. };
  18. const char kTestAuthAllowlist[] = "*example.com,*foobar.com,baz";
  19. // Under Windows the following will be allowed by default:
  20. // localhost
  21. // host names without a period.
  22. // In Posix systems (or on Windows if an allowlist is specified explicitly),
  23. // everything depends on the allowlist.
  24. const TestData kTestDataList[] = {
  25. { "http://localhost", true, false },
  26. { "http://bat", true, false },
  27. { "http://www.example.com", false, true },
  28. { "http://example.com", false, true },
  29. { "http://foobar.com", false, true },
  30. { "http://boo.foobar.com", false, true },
  31. { "http://baz", true, true },
  32. { "http://www.exampl.com", false, false },
  33. { "http://example.org", false, false },
  34. { "http://foobar.net", false, false },
  35. { "http://boo.fubar.com", false, false },
  36. };
  37. } // namespace
  38. TEST(URLSecurityManager, UseDefaultCredentials) {
  39. auto auth_filter =
  40. std::make_unique<HttpAuthFilterAllowlist>(kTestAuthAllowlist);
  41. ASSERT_TRUE(auth_filter);
  42. // The URL security manager takes ownership of |auth_filter|.
  43. std::unique_ptr<URLSecurityManager> url_security_manager(
  44. URLSecurityManager::Create());
  45. url_security_manager->SetDefaultAllowlist(std::move(auth_filter));
  46. ASSERT_TRUE(url_security_manager.get());
  47. for (size_t i = 0; i < std::size(kTestDataList); ++i) {
  48. url::SchemeHostPort scheme_host_port(
  49. GURL(kTestDataList[i].scheme_host_port));
  50. bool can_use_default =
  51. url_security_manager->CanUseDefaultCredentials(scheme_host_port);
  52. EXPECT_EQ(kTestDataList[i].succeeds_in_allowlist, can_use_default)
  53. << " Run: " << i << " scheme_host_port: '"
  54. << scheme_host_port.Serialize() << "'";
  55. }
  56. }
  57. TEST(URLSecurityManager, CanDelegate) {
  58. auto auth_filter =
  59. std::make_unique<HttpAuthFilterAllowlist>(kTestAuthAllowlist);
  60. ASSERT_TRUE(auth_filter);
  61. // The URL security manager takes ownership of |auth_filter|.
  62. std::unique_ptr<URLSecurityManager> url_security_manager(
  63. URLSecurityManager::Create());
  64. url_security_manager->SetDelegateAllowlist(std::move(auth_filter));
  65. ASSERT_TRUE(url_security_manager.get());
  66. for (size_t i = 0; i < std::size(kTestDataList); ++i) {
  67. url::SchemeHostPort scheme_host_port(
  68. GURL(kTestDataList[i].scheme_host_port));
  69. bool can_delegate = url_security_manager->CanDelegate(scheme_host_port);
  70. EXPECT_EQ(kTestDataList[i].succeeds_in_allowlist, can_delegate)
  71. << " Run: " << i << " scheme_host_port: '"
  72. << scheme_host_port.Serialize() << "'";
  73. }
  74. }
  75. TEST(URLSecurityManager, CanDelegate_NoAllowlist) {
  76. // Nothing can delegate in this case.
  77. std::unique_ptr<URLSecurityManager> url_security_manager(
  78. URLSecurityManager::Create());
  79. ASSERT_TRUE(url_security_manager.get());
  80. for (const auto& test : kTestDataList) {
  81. url::SchemeHostPort scheme_host_port(GURL(test.scheme_host_port));
  82. bool can_delegate = url_security_manager->CanDelegate(scheme_host_port);
  83. EXPECT_FALSE(can_delegate);
  84. }
  85. }
  86. } // namespace net