proxy_config_service_impl_unittest.cc revision 868fa2fe829687343ffae624259930155e16dbd8
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 "chrome/browser/chromeos/proxy_config_service_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/format_macros.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/json/json_writer.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/testing_pref_service.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stringprintf.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/ui_proxy_config.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/dbus/shill_profile_client.h" 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/dbus/shill_service_client.h" 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/network/network_handler.h" 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/network/network_state.h" 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/network/network_state_handler.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_config_service_common_unittest.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)struct Input { 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) UIProxyConfig::Mode mode; 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string pac_url; 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string server; 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string bypass_rules; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Builds an identifier for each test in an array. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_DESC(desc) base::StringPrintf("at line %d <%s>", __LINE__, desc) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Shortcuts to declare enums within chromeos's ProxyConfig. 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MK_MODE(mode) UIProxyConfig::MODE_##mode 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Inspired from net/proxy/proxy_config_service_linux_unittest.cc. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const struct TestParams { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Short description to identify the test 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string description; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Input input; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected outputs from fields of net::ProxyConfig (via IO). 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool auto_detect; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL pac_url; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyRulesExpectation proxy_rules; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} tests[] = { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 0 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_DESC("No proxying"), 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Input. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MK_MODE(DIRECT), // mode 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected result. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, // auto_detect 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(), // pac_url 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyRulesExpectation::Empty(), // proxy_rules 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 1 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_DESC("Auto detect"), 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Input. 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MK_MODE(AUTO_DETECT), // mode 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected result. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, // auto_detect 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(), // pac_url 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyRulesExpectation::Empty(), // proxy_rules 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 2 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_DESC("Valid PAC URL"), 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Input. 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MK_MODE(PAC_SCRIPT), // mode 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://wpad/wpad.dat", // pac_url 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected result. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, // auto_detect 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://wpad/wpad.dat"), // pac_url 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyRulesExpectation::Empty(), // proxy_rules 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 3 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_DESC("Invalid PAC URL"), 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Input. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MK_MODE(PAC_SCRIPT), // mode 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "wpad.dat", // pac_url 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected result. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, // auto_detect 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(), // pac_url 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyRulesExpectation::Empty(), // proxy_rules 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_DESC("Single-host in proxy list"), 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Input. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MK_MODE(SINGLE_PROXY), // mode 120868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "", // pac_url 121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "www.google.com", // server 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected result. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, // auto_detect 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(), // pac_url 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyRulesExpectation::Single( // proxy_rules 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.google.com:80", // single proxy 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<local>"), // bypass rules 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 5 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_DESC("Single-host, different port"), 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Input. 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MK_MODE(SINGLE_PROXY), // mode 137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "", // pac_url 138868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "www.google.com:99", // server 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected result. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, // auto_detect 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(), // pac_url 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyRulesExpectation::Single( // proxy_rules 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.google.com:99", // single 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<local>"), // bypass rules 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 6 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_DESC("Tolerate a scheme"), 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Input. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MK_MODE(SINGLE_PROXY), // mode 154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "", // pac_url 155868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "http://www.google.com:99", // server 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected result. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, // auto_detect 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(), // pac_url 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyRulesExpectation::Single( // proxy_rules 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.google.com:99", // single proxy 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<local>"), // bypass rules 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 7 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_DESC("Per-scheme proxy rules"), 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Input. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MK_MODE(PROXY_PER_SCHEME), // mode 171868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "", // pac_url 172868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "http=www.google.com:80;https=https://www.foo.com:110;" 173868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "ftp=ftp.foo.com:121;socks=socks5://socks.com:888", // server 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected result. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, // auto_detect 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(), // pac_url 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyRulesExpectation::PerSchemeWithSocks( // proxy_rules 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.google.com:80", // http 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://www.foo.com:110", // https 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ftp.foo.com:121", // ftp 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "socks5://socks.com:888", // fallback proxy 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<local>"), // bypass rules 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 8 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_DESC("Bypass rules"), 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Input. 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MK_MODE(SINGLE_PROXY), // mode 192868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "", // pac_url 193868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "www.google.com", // server 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "*.google.com, *foo.com:99, 1.2.3.4:22, 127.0.0.1/8", // bypass_rules 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected result. 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, // auto_detect 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(), // pac_url 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyRulesExpectation::Single( // proxy_rules 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.google.com:80", // single proxy 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // bypass_rules 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "*.google.com,*foo.com:99,1.2.3.4:22,127.0.0.1/8,<local>"), 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; // tests 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)const char* kUserProfilePath = "user_profile"; 208868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace 210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 211868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class ProxyConfigServiceImplTest : public testing::Test { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 213868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ProxyConfigServiceImplTest() 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui_thread_(BrowserThread::UI, &loop_), 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_thread_(BrowserThread::IO, &loop_) {} 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void SetUp() { 218868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DBusThreadManager::InitializeWithStub(); 219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NetworkHandler::Initialize(); 220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 221868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetUpNetwork(); 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 223868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) PrefProxyConfigTrackerImpl::RegisterPrefs(pref_service_.registry()); 224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ProxyConfigServiceImpl::RegisterPrefs(pref_service_.registry()); 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy_config_service_.reset(new ChromeProxyConfigService(NULL)); 226868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) config_service_impl_.reset(new ProxyConfigServiceImpl(&pref_service_)); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) config_service_impl_->SetChromeProxyConfigService( 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config_service_.get()); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SetChromeProxyConfigService triggers update of initial prefs proxy 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // config by tracker to chrome proxy config service, so flush all pending 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // tasks so that tests start fresh. 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void SetUpNetwork() { 236868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ShillProfileClient::TestInterface* profile_test = 237868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface(); 238868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ShillServiceClient::TestInterface* service_test = 239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); 240868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 241868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) service_test->ClearServices(); 242868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 243868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Sends a notification about the added profile. 244868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) profile_test->AddProfile(kUserProfilePath, "user_hash"); 245868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 246868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) service_test->AddService("stub_wifi2", "wifi2_PSK", 247868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) flimflam::kTypeWifi, flimflam::kStateOnline, 248868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) true /* add to watchlist */); 249868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) service_test->SetServiceProperty("stub_wifi2", 250868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) flimflam::kGuidProperty, 251868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::StringValue("stub_wifi2")); 252868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) service_test->SetServiceProperty("stub_wifi2", 253868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) flimflam::kProfileProperty, 254868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::StringValue(kUserProfilePath)); 255868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) profile_test->AddService("stub_wifi2"); 256868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 257868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) loop_.RunUntilIdle(); 258868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 259868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) config_service_impl_->DetachFromPrefService(); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) config_service_impl_.reset(); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config_service_.reset(); 265868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NetworkHandler::Shutdown(); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DBusThreadManager::Shutdown(); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 269868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void InitConfigWithTestInput(const Input& input, 270868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue* result) { 271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue* new_config = NULL; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (input.mode) { 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case MK_MODE(DIRECT): 274868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_config = ProxyConfigDictionary::CreateDirect(); 275868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case MK_MODE(AUTO_DETECT): 277868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_config = ProxyConfigDictionary::CreateAutoDetect(); 278868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case MK_MODE(PAC_SCRIPT): 280868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_config = 281868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ProxyConfigDictionary::CreatePacScript(input.pac_url, false); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 283868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case MK_MODE(SINGLE_PROXY): 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case MK_MODE(PROXY_PER_SCHEME): 285868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_config = 286868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ProxyConfigDictionary::CreateFixedServers(input.server, 287868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) input.bypass_rules); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 290868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) result->Swap(new_config); 291868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) delete new_config; 292868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 293868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 294868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void SetConfig(base::DictionaryValue* pref_proxy_config_dict) { 295868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string proxy_config; 296868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (pref_proxy_config_dict) 297868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::JSONWriter::Write(pref_proxy_config_dict, &proxy_config); 298868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 299868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NetworkStateHandler* network_state_handler = 300868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NetworkHandler::Get()->network_state_handler(); 301868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const NetworkState* network = network_state_handler->DefaultNetwork(); 302868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(network); 303868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface()-> 304868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetServiceProperty(network->path(), 305868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) flimflam::kProxyConfigProperty, 306868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) StringValue(proxy_config)); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Synchronously gets the latest proxy config. 310868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void SyncGetLatestProxyConfig(net::ProxyConfig* config) { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *config = net::ProxyConfig(); 312868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Let message loop process all messages. This will run 313868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // ChromeProxyConfigService::UpdateProxyConfig, which is posted on IO from 314868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // PrefProxyConfigTrackerImpl::OnProxyConfigChanged. 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 316868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) net::ProxyConfigService::ConfigAvailability availability = 317868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) proxy_config_service_->GetLatestProxyConfig(config); 318868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 319868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, availability); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop loop_; 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ChromeProxyConfigService> proxy_config_service_; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ProxyConfigServiceImpl> config_service_impl_; 325868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestingPrefServiceSimple pref_service_; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedTestDeviceSettingsService test_device_settings_service_; 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedTestCrosSettings test_cros_settings_; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread io_thread_; 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceImplTest, NetworkProxy) { 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, 337868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) tests[i].description.c_str())); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 339868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue test_config; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitConfigWithTestInput(tests[i].input, &test_config); 341868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetConfig(&test_config); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyConfig config; 344868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&config); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(tests[i].pac_url, config.pac_url()); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceImplTest, DynamicPrefsOverride) { 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Groupings of 3 test inputs to use for managed, recommended and network 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // proxies respectively. Only valid and non-direct test inputs are used. 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t proxies[][3] = { 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1, 2, 4, }, 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1, 4, 2, }, 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4, 2, 1, }, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2, 1, 4, }, 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2, 4, 5, }, 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2, 5, 4, }, 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5, 4, 2, }, 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4, 2, 5, }, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4, 5, 6, }, 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4, 6, 5, }, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6, 5, 4, }, 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5, 4, 6, }, 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5, 6, 7, }, 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5, 7, 6, }, 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7, 6, 5, }, 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6, 5, 7, }, 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6, 7, 8, }, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6, 8, 7, }, 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 8, 7, 6, }, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7, 6, 8, }, 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(proxies); ++i) { 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestParams& managed_params = tests[proxies[i][0]]; 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestParams& recommended_params = tests[proxies[i][1]]; 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestParams& network_params = tests[proxies[i][2]]; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SCOPED_TRACE(base::StringPrintf( 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Test[%" PRIuS "] managed=[%s], recommended=[%s], network=[%s]", i, 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) managed_params.description.c_str(), 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) recommended_params.description.c_str(), 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_params.description.c_str())); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 388868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue managed_config; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitConfigWithTestInput(managed_params.input, &managed_config); 390868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue recommended_config; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitConfigWithTestInput(recommended_params.input, &recommended_config); 392868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue network_config; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitConfigWithTestInput(network_params.input, &network_config); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Managed proxy pref should take effect over recommended proxy and 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // non-existent network proxy. 397868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetConfig(NULL); 398868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) pref_service_.SetManagedPref(prefs::kProxy, managed_config.DeepCopy()); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_.SetRecommendedPref(prefs::kProxy, 400868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) recommended_config.DeepCopy()); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyConfig actual_config; 402868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&actual_config); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(managed_params.auto_detect, actual_config.auto_detect()); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(managed_params.pac_url, actual_config.pac_url()); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(managed_params.proxy_rules.Matches( 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_config.proxy_rules())); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Recommended proxy pref should take effect when managed proxy pref is 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // removed. 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_.RemoveManagedPref(prefs::kProxy); 411868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&actual_config); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(recommended_params.auto_detect, actual_config.auto_detect()); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(recommended_params.pac_url, actual_config.pac_url()); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(recommended_params.proxy_rules.Matches( 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_config.proxy_rules())); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Network proxy should take take effect over recommended proxy pref. 418868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetConfig(&network_config); 419868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&actual_config); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(network_params.auto_detect, actual_config.auto_detect()); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(network_params.pac_url, actual_config.pac_url()); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(network_params.proxy_rules.Matches( 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_config.proxy_rules())); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Managed proxy pref should take effect over network proxy. 426868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) pref_service_.SetManagedPref(prefs::kProxy, managed_config.DeepCopy()); 427868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&actual_config); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(managed_params.auto_detect, actual_config.auto_detect()); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(managed_params.pac_url, actual_config.pac_url()); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(managed_params.proxy_rules.Matches( 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_config.proxy_rules())); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Network proxy should take effect over recommended proxy pref when managed 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // proxy pref is removed. 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_.RemoveManagedPref(prefs::kProxy); 436868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&actual_config); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(network_params.auto_detect, actual_config.auto_detect()); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(network_params.pac_url, actual_config.pac_url()); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(network_params.proxy_rules.Matches( 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_config.proxy_rules())); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removing recommended proxy pref should have no effect on network proxy. 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_.RemoveRecommendedPref(prefs::kProxy); 444868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&actual_config); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(network_params.auto_detect, actual_config.auto_detect()); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(network_params.pac_url, actual_config.pac_url()); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(network_params.proxy_rules.Matches( 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_config.proxy_rules())); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 453