Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / net / proxy / proxy_config_service_win_unittest.cc
1 // Copyright (c) 2012 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/proxy/proxy_config_service_win.h"
6
7 #include "net/base/net_errors.h"
8 #include "net/proxy/proxy_config.h"
9 #include "net/proxy/proxy_config_service_common_unittest.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace net {
13
14 TEST(ProxyConfigServiceWinTest, SetFromIEConfig) {
15   // Like WINHTTP_CURRENT_USER_IE_PROXY_CONFIG, but with const strings.
16   struct IEProxyConfig {
17     BOOL auto_detect;
18     const wchar_t* auto_config_url;
19     const wchar_t* proxy;
20     const wchar_t* proxy_bypass;
21   };
22   const struct {
23     // Input.
24     IEProxyConfig ie_config;
25
26     // Expected outputs (fields of the ProxyConfig).
27     bool auto_detect;
28     GURL pac_url;
29     ProxyRulesExpectation proxy_rules;
30     const char* proxy_bypass_list;  // newline separated
31   } tests[] = {
32     // Auto detect.
33     {
34       { // Input.
35         TRUE,  // fAutoDetect
36         NULL,  // lpszAutoConfigUrl
37         NULL,  // lpszProxy
38         NULL,  // lpszProxyBypass
39       },
40
41       // Expected result.
42       true,                       // auto_detect
43       GURL(),                     // pac_url
44       ProxyRulesExpectation::Empty(),
45     },
46
47     // Valid PAC url
48     {
49       { // Input.
50         FALSE,                    // fAutoDetect
51         L"http://wpad/wpad.dat",  // lpszAutoConfigUrl
52         NULL,                     // lpszProxy
53         NULL,                     // lpszProxy_bypass
54       },
55
56       // Expected result.
57       false,                         // auto_detect
58       GURL("http://wpad/wpad.dat"),  // pac_url
59       ProxyRulesExpectation::Empty(),
60     },
61
62     // Invalid PAC url string.
63     {
64       { // Input.
65         FALSE,        // fAutoDetect
66         L"wpad.dat",  // lpszAutoConfigUrl
67         NULL,         // lpszProxy
68         NULL,         // lpszProxy_bypass
69       },
70
71       // Expected result.
72       false,                      // auto_detect
73       GURL(),                     // pac_url
74       ProxyRulesExpectation::Empty(),
75     },
76
77     // Single-host in proxy list.
78     {
79       { // Input.
80         FALSE,              // fAutoDetect
81         NULL,               // lpszAutoConfigUrl
82         L"www.google.com",  // lpszProxy
83         NULL,               // lpszProxy_bypass
84       },
85
86       // Expected result.
87       false,                                   // auto_detect
88       GURL(),                                  // pac_url
89       ProxyRulesExpectation::Single(
90           "www.google.com:80",  // single proxy
91           ""),                  // bypass rules
92     },
93
94     // Per-scheme proxy rules.
95     {
96       { // Input.
97         FALSE,                                            // fAutoDetect
98         NULL,                                             // lpszAutoConfigUrl
99         L"http=www.google.com:80;https=www.foo.com:110",  // lpszProxy
100         NULL,                                             // lpszProxy_bypass
101       },
102
103       // Expected result.
104       false,                                   // auto_detect
105       GURL(),                                  // pac_url
106       ProxyRulesExpectation::PerScheme(
107           "www.google.com:80",  // http
108           "www.foo.com:110",   // https
109           "",                  // ftp
110           ""),                 // bypass rules
111     },
112
113     // SOCKS proxy configuration.
114     {
115       { // Input.
116         FALSE,                                            // fAutoDetect
117         NULL,                                             // lpszAutoConfigUrl
118         L"http=www.google.com:80;https=www.foo.com:110;"
119         L"ftp=ftpproxy:20;socks=foopy:130",               // lpszProxy
120         NULL,                                             // lpszProxy_bypass
121       },
122
123       // Expected result.
124       // Note that "socks" is interprted as meaning "socks4", since that is how
125       // Internet Explorer applies the settings. For more details on this
126       // policy, see:
127       // http://code.google.com/p/chromium/issues/detail?id=55912#c2
128       false,                                   // auto_detect
129       GURL(),                                  // pac_url
130       ProxyRulesExpectation::PerSchemeWithSocks(
131           "www.google.com:80",   // http
132           "www.foo.com:110",     // https
133           "ftpproxy:20",         // ftp
134           "socks4://foopy:130",  // socks
135           ""),                   // bypass rules
136     },
137
138     // Bypass local names.
139     {
140       { // Input.
141         TRUE,            // fAutoDetect
142         NULL,            // lpszAutoConfigUrl
143         NULL,            // lpszProxy
144         L"<local>",      // lpszProxy_bypass
145       },
146
147       true,                       // auto_detect
148       GURL(),                     // pac_url
149       ProxyRulesExpectation::EmptyWithBypass("<local>"),
150     },
151
152     // Bypass "google.com" and local names, using semicolon as delimiter
153     // (ignoring white space).
154     {
155       { // Input.
156         TRUE,                         // fAutoDetect
157         NULL,                         // lpszAutoConfigUrl
158         NULL,                         // lpszProxy
159         L"<local> ; google.com",      // lpszProxy_bypass
160       },
161
162       // Expected result.
163       true,                       // auto_detect
164       GURL(),                     // pac_url
165       ProxyRulesExpectation::EmptyWithBypass("<local>,google.com"),
166     },
167
168     // Bypass "foo.com" and "google.com", using lines as delimiter.
169     {
170       { // Input.
171         TRUE,                      // fAutoDetect
172         NULL,                      // lpszAutoConfigUrl
173         NULL,                      // lpszProxy
174         L"foo.com\r\ngoogle.com",  // lpszProxy_bypass
175       },
176
177       // Expected result.
178       true,                       // auto_detect
179       GURL(),                     // pac_url
180       ProxyRulesExpectation::EmptyWithBypass("foo.com,google.com"),
181     },
182
183     // Bypass "foo.com" and "google.com", using commas as delimiter.
184     {
185       { // Input.
186         TRUE,                      // fAutoDetect
187         NULL,                      // lpszAutoConfigUrl
188         NULL,                      // lpszProxy
189         L"foo.com, google.com",    // lpszProxy_bypass
190       },
191
192       // Expected result.
193       true,                       // auto_detect
194       GURL(),                     // pac_url
195       ProxyRulesExpectation::EmptyWithBypass("foo.com,google.com"),
196     },
197   };
198
199   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
200     WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_config = {
201         tests[i].ie_config.auto_detect,
202         const_cast<wchar_t*>(tests[i].ie_config.auto_config_url),
203         const_cast<wchar_t*>(tests[i].ie_config.proxy),
204         const_cast<wchar_t*>(tests[i].ie_config.proxy_bypass)};
205     ProxyConfig config;
206     ProxyConfigServiceWin::SetFromIEConfig(&config, ie_config);
207
208     EXPECT_EQ(tests[i].auto_detect, config.auto_detect());
209     EXPECT_EQ(tests[i].pac_url, config.pac_url());
210     EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules()));
211     EXPECT_EQ(PROXY_CONFIG_SOURCE_SYSTEM, config.source());
212   }
213 }
214
215 }  // namespace net