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