15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_config_service_win.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_config.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_config_service_common_unittest.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ProxyConfigServiceWinTest, SetFromIEConfig) {
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Like WINHTTP_CURRENT_USER_IE_PROXY_CONFIG, but with const strings.
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  struct IEProxyConfig {
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    BOOL auto_detect;
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const wchar_t* auto_config_url;
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const wchar_t* proxy;
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const wchar_t* proxy_bypass;
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  };
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const struct {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Input.
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    IEProxyConfig ie_config;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Expected outputs (fields of the ProxyConfig).
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool auto_detect;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL pac_url;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ProxyRulesExpectation proxy_rules;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* proxy_bypass_list;  // newline separated
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } tests[] = {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Auto detect.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { // Input.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TRUE,  // fAutoDetect
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,  // lpszAutoConfigUrl
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,  // lpszProxy
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,  // lpszProxyBypass
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Expected result.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      true,                       // auto_detect
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(),                     // pac_url
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyRulesExpectation::Empty(),
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Valid PAC url
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { // Input.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        FALSE,                    // fAutoDetect
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        L"http://wpad/wpad.dat",  // lpszAutoConfigUrl
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,                     // lpszProxy
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,                     // lpszProxy_bypass
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Expected result.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      false,                         // auto_detect
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL("http://wpad/wpad.dat"),  // pac_url
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyRulesExpectation::Empty(),
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Invalid PAC url string.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { // Input.
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        FALSE,        // fAutoDetect
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        L"wpad.dat",  // lpszAutoConfigUrl
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,         // lpszProxy
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,         // lpszProxy_bypass
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Expected result.
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      false,                      // auto_detect
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(),                     // pac_url
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyRulesExpectation::Empty(),
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Single-host in proxy list.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { // Input.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        FALSE,              // fAutoDetect
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,               // lpszAutoConfigUrl
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        L"www.google.com",  // lpszProxy
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,               // lpszProxy_bypass
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Expected result.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      false,                                   // auto_detect
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(),                                  // pac_url
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyRulesExpectation::Single(
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "www.google.com:80",  // single proxy
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ""),                  // bypass rules
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Per-scheme proxy rules.
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { // Input.
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        FALSE,                                            // fAutoDetect
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,                                             // lpszAutoConfigUrl
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        L"http=www.google.com:80;https=www.foo.com:110",  // lpszProxy
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,                                             // lpszProxy_bypass
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Expected result.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      false,                                   // auto_detect
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(),                                  // pac_url
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyRulesExpectation::PerScheme(
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "www.google.com:80",  // http
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "www.foo.com:110",   // https
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "",                  // ftp
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ""),                 // bypass rules
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // SOCKS proxy configuration.
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { // Input.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        FALSE,                                            // fAutoDetect
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,                                             // lpszAutoConfigUrl
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        L"http=www.google.com:80;https=www.foo.com:110;"
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        L"ftp=ftpproxy:20;socks=foopy:130",               // lpszProxy
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,                                             // lpszProxy_bypass
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Expected result.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Note that "socks" is interprted as meaning "socks4", since that is how
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Internet Explorer applies the settings. For more details on this
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // policy, see:
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // http://code.google.com/p/chromium/issues/detail?id=55912#c2
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      false,                                   // auto_detect
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(),                                  // pac_url
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyRulesExpectation::PerSchemeWithSocks(
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "www.google.com:80",   // http
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "www.foo.com:110",     // https
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ftpproxy:20",         // ftp
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "socks4://foopy:130",  // socks
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ""),                   // bypass rules
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Bypass local names.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { // Input.
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TRUE,            // fAutoDetect
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,            // lpszAutoConfigUrl
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,            // lpszProxy
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        L"<local>",      // lpszProxy_bypass
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      true,                       // auto_detect
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(),                     // pac_url
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyRulesExpectation::EmptyWithBypass("<local>"),
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Bypass "google.com" and local names, using semicolon as delimiter
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // (ignoring white space).
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { // Input.
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TRUE,                         // fAutoDetect
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,                         // lpszAutoConfigUrl
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,                         // lpszProxy
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        L"<local> ; google.com",      // lpszProxy_bypass
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Expected result.
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      true,                       // auto_detect
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(),                     // pac_url
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyRulesExpectation::EmptyWithBypass("<local>,google.com"),
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Bypass "foo.com" and "google.com", using lines as delimiter.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { // Input.
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TRUE,                      // fAutoDetect
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,                      // lpszAutoConfigUrl
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,                      // lpszProxy
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        L"foo.com\r\ngoogle.com",  // lpszProxy_bypass
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Expected result.
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      true,                       // auto_detect
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(),                     // pac_url
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyRulesExpectation::EmptyWithBypass("foo.com,google.com"),
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Bypass "foo.com" and "google.com", using commas as delimiter.
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { // Input.
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TRUE,                      // fAutoDetect
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,                      // lpszAutoConfigUrl
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NULL,                      // lpszProxy
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        L"foo.com, google.com",    // lpszProxy_bypass
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Expected result.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      true,                       // auto_detect
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(),                     // pac_url
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyRulesExpectation::EmptyWithBypass("foo.com,google.com"),
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_config = {
2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        tests[i].ie_config.auto_detect,
2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        const_cast<wchar_t*>(tests[i].ie_config.auto_config_url),
2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        const_cast<wchar_t*>(tests[i].ie_config.proxy),
2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        const_cast<wchar_t*>(tests[i].ie_config.proxy_bypass)};
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ProxyConfig config;
2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ProxyConfigServiceWin::SetFromIEConfig(&config, ie_config);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(tests[i].auto_detect, config.auto_detect());
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(tests[i].pac_url, config.pac_url());
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules()));
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(PROXY_CONFIG_SOURCE_SYSTEM, config.source());
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
216