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