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