OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include "base/macros.h" | 7 #include "base/macros.h" |
8 #include "base/strings/utf_string_conversions.h" | |
8 #include "chrome/browser/ui/login/login_handler.h" | 9 #include "chrome/browser/ui/login/login_handler.h" |
9 #include "net/base/auth.h" | 10 #include "net/base/auth.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
11 #include "url/gurl.h" | 12 #include "url/gurl.h" |
12 | 13 |
13 TEST(LoginPromptTest, GetSignonRealm) { | 14 namespace { |
15 | |
16 const char kHttpUrl[] = "http://example.com/foo/bar"; | |
17 const char kBasicAuthScheme[] = "Basic"; | |
18 const char kFooRealm[] = "Foo"; | |
19 const char kInsecureProxy[] = "Your connection to this site is not private."; | |
20 | |
21 enum TargetType { PROXY, SERVER }; | |
22 | |
23 struct TestCase { | |
meacer
2016/06/16 01:12:15
const?
asanka
2016/06/16 16:25:47
Done.
| |
24 const char* const request_url; | |
25 struct { | |
26 TargetType target_type; | |
27 const char* const scheme; | |
28 const char* const realm; | |
29 const char* const challenger; | |
30 } auth_info; | |
31 struct { | |
32 const char* const authority; | |
33 const char* const explanation; | |
34 const char* const signon_realm; | |
35 } expected; | |
36 } kTestCases[]{ | |
37 // Insecure proxy | |
38 {kHttpUrl, | |
39 {PROXY, kBasicAuthScheme, kFooRealm, "http://example.com"}, | |
40 {"The proxy http://example.com requires a username and password.", | |
41 kInsecureProxy, "example.com:80/Foo"}}, | |
42 | |
43 // Insecure proxy on non-standard port | |
44 {kHttpUrl, | |
45 {PROXY, kBasicAuthScheme, kFooRealm, "http://example.com:8009"}, | |
46 {"The proxy http://example.com:8009 requires a username and password.", | |
47 kInsecureProxy, "example.com:8009/Foo"}}, | |
48 | |
49 // Secure proxy | |
50 {kHttpUrl, | |
51 {PROXY, kBasicAuthScheme, kFooRealm, "https://example.com"}, | |
52 {"The proxy https://example.com requires a username and password.", "", | |
53 "example.com:443/Foo"}}, | |
54 | |
55 // Secure proxy on non-standard port | |
56 {kHttpUrl, | |
57 {PROXY, kBasicAuthScheme, kFooRealm, "https://example.com:446"}, | |
58 {"The proxy https://example.com:446 requires a username and password.", "", | |
59 "example.com:446/Foo"}}, | |
60 | |
61 // localhost | |
62 {kHttpUrl, | |
63 {PROXY, kBasicAuthScheme, kFooRealm, "http://localhost:7323"}, | |
64 {"The proxy http://localhost:7323 requires a username and password.", "", | |
65 "localhost:7323/Foo"}}, | |
66 | |
67 // Secure server | |
68 {"https://www.nowhere.org/dir/index.html", | |
69 {SERVER, kBasicAuthScheme, kFooRealm, nullptr}, | |
70 {"https://www.nowhere.org requires a username and password.", "", | |
71 "https://www.nowhere.org/Foo"}}, | |
72 | |
73 // URL uses default port. | |
74 {"https://www.nowhere.org:443/dir/index.html", | |
75 {SERVER, kBasicAuthScheme, kFooRealm, nullptr}, | |
76 {"https://www.nowhere.org requires a username and password.", "", | |
77 "https://www.nowhere.org/Foo"}}, | |
78 | |
79 // URL uses non-default port. | |
80 {"https://www.nowhere.org:8443/dir/index.html", | |
81 {SERVER, kBasicAuthScheme, kFooRealm, nullptr}, | |
82 {"https://www.nowhere.org:8443 requires a username and password.", "", | |
83 "https://www.nowhere.org:8443/Foo"}}, | |
84 | |
85 // URL has no trailing slash. | |
86 {"https://www.nowhere.org", | |
87 {SERVER, kBasicAuthScheme, kFooRealm, nullptr}, | |
88 {"https://www.nowhere.org requires a username and password.", "", | |
89 "https://www.nowhere.org/Foo"}}, | |
90 | |
91 // username:password | |
92 {"https://foo:bar@www.nowhere.org/dir/index.html", | |
93 {SERVER, kBasicAuthScheme, kFooRealm, nullptr}, | |
94 {"https://www.nowhere.org requires a username and password.", "", | |
95 "https://www.nowhere.org/Foo"}}, | |
96 | |
97 // query | |
98 {"https://www.nowhere.org/dir/index.html?id=965362", | |
99 {SERVER, kBasicAuthScheme, kFooRealm, nullptr}, | |
100 {"https://www.nowhere.org requires a username and password.", "", | |
101 "https://www.nowhere.org/Foo"}}, | |
102 | |
103 // reference | |
104 {"https://www.nowhere.org/dir/index.html#toc", | |
105 {SERVER, kBasicAuthScheme, kFooRealm, nullptr}, | |
106 {"https://www.nowhere.org requires a username and password.", "", | |
107 "https://www.nowhere.org/Foo"}}, | |
108 }; | |
109 | |
110 } // namespace | |
111 | |
112 TEST(LoginHandlerTest, Outputs) { | |
meacer
2016/06/16 01:12:15
nit: rename to DialogStringsAndRealm?
asanka
2016/06/16 16:25:47
Done.
| |
14 scoped_refptr<net::AuthChallengeInfo> auth_info = new net::AuthChallengeInfo; | 113 scoped_refptr<net::AuthChallengeInfo> auth_info = new net::AuthChallengeInfo; |
15 auth_info->is_proxy = false; // server auth | 114 for (const auto& test_case : kTestCases) { |
16 // auth_info->host is intentionally left empty. | 115 GURL request_url(test_case.request_url); |
17 auth_info->scheme = "Basic"; | 116 auth_info->is_proxy = test_case.auth_info.target_type == PROXY; |
18 auth_info->realm = "WallyWorld"; | 117 auth_info->scheme = test_case.auth_info.scheme; |
118 auth_info->realm = test_case.auth_info.realm; | |
119 auth_info->challenger = url::Origin( | |
120 test_case.auth_info.challenger ? GURL(test_case.auth_info.challenger) | |
121 : request_url); | |
19 | 122 |
20 std::string url[] = { | 123 SCOPED_TRACE(::testing::Message() |
21 "https://www.nowhere.org/dir/index.html", | 124 << "request_url:" << test_case.request_url |
22 "https://www.nowhere.org:443/dir/index.html", // default port | 125 << " auth_info: { is_proxy:" << auth_info->is_proxy |
23 "https://www.nowhere.org:8443/dir/index.html", // non-default port | 126 << " scheme:'" << auth_info->scheme << "' realm:'" |
24 "https://www.nowhere.org", // no trailing slash | 127 << auth_info->realm << "' challenger:'" |
25 "https://foo:bar@www.nowhere.org/dir/index.html", // username:password | 128 << auth_info->challenger.Serialize() << "' }"); |
26 "https://www.nowhere.org/dir/index.html?id=965362", // query | 129 base::string16 authority; |
27 "https://www.nowhere.org/dir/index.html#toc", // reference | 130 base::string16 explanation; |
28 }; | |
29 | 131 |
30 std::string expected[] = { | 132 LoginHandler::GetDialogStrings(request_url, *auth_info, &authority, |
31 "https://www.nowhere.org/WallyWorld", | 133 &explanation); |
32 "https://www.nowhere.org/WallyWorld", | 134 EXPECT_STREQ(test_case.expected.authority, |
33 "https://www.nowhere.org:8443/WallyWorld", | 135 base::UTF16ToASCII(authority).c_str()); |
34 "https://www.nowhere.org/WallyWorld", | 136 EXPECT_STREQ(test_case.expected.explanation, |
35 "https://www.nowhere.org/WallyWorld", | 137 base::UTF16ToASCII(explanation).c_str()); |
36 "https://www.nowhere.org/WallyWorld", | |
37 "https://www.nowhere.org/WallyWorld" | |
38 }; | |
39 | 138 |
40 for (size_t i = 0; i < arraysize(url); i++) { | 139 EXPECT_STREQ(test_case.expected.signon_realm, |
41 std::string key = GetSignonRealm(GURL(url[i]), *auth_info.get()); | 140 LoginHandler::GetSignonRealm(request_url, *auth_info).c_str()); |
42 EXPECT_EQ(expected[i], key); | |
43 } | 141 } |
44 } | 142 } |
OLD | NEW |