| // Copyright (c) 2012 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 "net/proxy_resolution/proxy_config_service_win.h" |
| |
| #include "net/base/net_errors.h" |
| #include "net/proxy_resolution/proxy_config.h" |
| #include "net/proxy_resolution/proxy_config_service_common_unittest.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace net { |
| |
| TEST(ProxyConfigServiceWinTest, SetFromIEConfig) { |
| // Like WINHTTP_CURRENT_USER_IE_PROXY_CONFIG, but with const strings. |
| struct IEProxyConfig { |
| BOOL auto_detect; |
| const wchar_t* auto_config_url; |
| const wchar_t* proxy; |
| const wchar_t* proxy_bypass; |
| }; |
| const struct { |
| // Input. |
| IEProxyConfig ie_config; |
| |
| // Expected outputs (fields of the ProxyConfig). |
| bool auto_detect; |
| GURL pac_url; |
| ProxyRulesExpectation proxy_rules; |
| const char* proxy_bypass_list; // newline separated |
| } tests[] = { |
| // Auto detect. |
| { |
| { // Input. |
| TRUE, // fAutoDetect |
| NULL, // lpszAutoConfigUrl |
| NULL, // lpszProxy |
| NULL, // lpszProxyBypass |
| }, |
| |
| // Expected result. |
| true, // auto_detect |
| GURL(), // pac_url |
| ProxyRulesExpectation::Empty(), |
| }, |
| |
| // Valid PAC url |
| { |
| { // Input. |
| FALSE, // fAutoDetect |
| L"http://wpad/wpad.dat", // lpszAutoConfigUrl |
| NULL, // lpszProxy |
| NULL, // lpszProxy_bypass |
| }, |
| |
| // Expected result. |
| false, // auto_detect |
| GURL("http://wpad/wpad.dat"), // pac_url |
| ProxyRulesExpectation::Empty(), |
| }, |
| |
| // Invalid PAC url string. |
| { |
| { // Input. |
| FALSE, // fAutoDetect |
| L"wpad.dat", // lpszAutoConfigUrl |
| NULL, // lpszProxy |
| NULL, // lpszProxy_bypass |
| }, |
| |
| // Expected result. |
| false, // auto_detect |
| GURL(), // pac_url |
| ProxyRulesExpectation::Empty(), |
| }, |
| |
| // Single-host in proxy list. |
| { |
| { // Input. |
| FALSE, // fAutoDetect |
| NULL, // lpszAutoConfigUrl |
| L"www.google.com", // lpszProxy |
| NULL, // lpszProxy_bypass |
| }, |
| |
| // Expected result. |
| false, // auto_detect |
| GURL(), // pac_url |
| ProxyRulesExpectation::Single( |
| "www.google.com:80", // single proxy |
| ""), // bypass rules |
| }, |
| |
| // Per-scheme proxy rules. |
| { |
| { // Input. |
| FALSE, // fAutoDetect |
| NULL, // lpszAutoConfigUrl |
| L"http=www.google.com:80;https=www.foo.com:110", // lpszProxy |
| NULL, // lpszProxy_bypass |
| }, |
| |
| // Expected result. |
| false, // auto_detect |
| GURL(), // pac_url |
| ProxyRulesExpectation::PerScheme( |
| "www.google.com:80", // http |
| "www.foo.com:110", // https |
| "", // ftp |
| ""), // bypass rules |
| }, |
| |
| // SOCKS proxy configuration. |
| { |
| { // Input. |
| FALSE, // fAutoDetect |
| NULL, // lpszAutoConfigUrl |
| L"http=www.google.com:80;https=www.foo.com:110;" |
| L"ftp=ftpproxy:20;socks=foopy:130", // lpszProxy |
| NULL, // lpszProxy_bypass |
| }, |
| |
| // Expected result. |
| // Note that "socks" is interprted as meaning "socks4", since that is how |
| // Internet Explorer applies the settings. For more details on this |
| // policy, see: |
| // http://code.google.com/p/chromium/issues/detail?id=55912#c2 |
| false, // auto_detect |
| GURL(), // pac_url |
| ProxyRulesExpectation::PerSchemeWithSocks( |
| "www.google.com:80", // http |
| "www.foo.com:110", // https |
| "ftpproxy:20", // ftp |
| "socks4://foopy:130", // socks |
| ""), // bypass rules |
| }, |
| |
| // Bypass local names. |
| { |
| { // Input. |
| TRUE, // fAutoDetect |
| NULL, // lpszAutoConfigUrl |
| NULL, // lpszProxy |
| L"<local>", // lpszProxy_bypass |
| }, |
| |
| true, // auto_detect |
| GURL(), // pac_url |
| ProxyRulesExpectation::EmptyWithBypass("<local>"), |
| }, |
| |
| // Bypass "google.com" and local names, using semicolon as delimiter |
| // (ignoring white space). |
| { |
| { // Input. |
| TRUE, // fAutoDetect |
| NULL, // lpszAutoConfigUrl |
| NULL, // lpszProxy |
| L"<local> ; google.com", // lpszProxy_bypass |
| }, |
| |
| // Expected result. |
| true, // auto_detect |
| GURL(), // pac_url |
| ProxyRulesExpectation::EmptyWithBypass("<local>,google.com"), |
| }, |
| |
| // Bypass "foo.com" and "google.com", using lines as delimiter. |
| { |
| { // Input. |
| TRUE, // fAutoDetect |
| NULL, // lpszAutoConfigUrl |
| NULL, // lpszProxy |
| L"foo.com\r\ngoogle.com", // lpszProxy_bypass |
| }, |
| |
| // Expected result. |
| true, // auto_detect |
| GURL(), // pac_url |
| ProxyRulesExpectation::EmptyWithBypass("foo.com,google.com"), |
| }, |
| |
| // Bypass "foo.com" and "google.com", using commas as delimiter. |
| { |
| { // Input. |
| TRUE, // fAutoDetect |
| NULL, // lpszAutoConfigUrl |
| NULL, // lpszProxy |
| L"foo.com, google.com", // lpszProxy_bypass |
| }, |
| |
| // Expected result. |
| true, // auto_detect |
| GURL(), // pac_url |
| ProxyRulesExpectation::EmptyWithBypass("foo.com,google.com"), |
| }, |
| }; |
| |
| for (size_t i = 0; i < arraysize(tests); ++i) { |
| WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_config = { |
| tests[i].ie_config.auto_detect, |
| const_cast<wchar_t*>(tests[i].ie_config.auto_config_url), |
| const_cast<wchar_t*>(tests[i].ie_config.proxy), |
| const_cast<wchar_t*>(tests[i].ie_config.proxy_bypass)}; |
| ProxyConfig config; |
| ProxyConfigServiceWin::SetFromIEConfig(&config, ie_config); |
| |
| EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); |
| EXPECT_EQ(tests[i].pac_url, config.pac_url()); |
| EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); |
| } |
| } |
| |
| } // namespace net |