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" 129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/testing_pref_service.h" 145e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/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() { 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DBusThreadManager::Initialize(); 219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NetworkHandler::Initialize(); 220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 221868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetUpNetwork(); 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 223868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) PrefProxyConfigTrackerImpl::RegisterPrefs(pref_service_.registry()); 224ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 2257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Create a ProxyConfigServiceImpl like for the system request context. 2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch config_service_impl_.reset( 2277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new ProxyConfigServiceImpl(NULL, // no profile prefs 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch &pref_service_)); 229ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch proxy_config_service_ = 230ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch config_service_impl_->CreateTrackingProxyConfigService( 231ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<net::ProxyConfigService>()); 232ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 233ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // CreateTrackingProxyConfigService triggers update of initial prefs proxy 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // config by tracker to chrome proxy config service, so flush all pending 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // tasks so that tests start fresh. 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void SetUpNetwork() { 240868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ShillProfileClient::TestInterface* profile_test = 241868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface(); 242868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ShillServiceClient::TestInterface* service_test = 243868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); 244868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 245a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Process any pending notifications before clearing services. 246a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) loop_.RunUntilIdle(); 247868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) service_test->ClearServices(); 248868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 249868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Sends a notification about the added profile. 250868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) profile_test->AddProfile(kUserProfilePath, "user_hash"); 251868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_test->AddService("/service/stub_wifi2", 253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "stub_wifi2" /* guid */, 254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "wifi2_PSK", 25568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeWifi, shill::kStateOnline, 25646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) true /* visible */); 257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_test->AddService(kUserProfilePath, "/service/stub_wifi2"); 258868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 259868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) loop_.RunUntilIdle(); 260868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 261868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) config_service_impl_->DetachFromPrefService(); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) config_service_impl_.reset(); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config_service_.reset(); 267868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NetworkHandler::Shutdown(); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DBusThreadManager::Shutdown(); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void InitConfigWithTestInput(const Input& input, 272868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue* result) { 273868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue* new_config = NULL; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (input.mode) { 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case MK_MODE(DIRECT): 276868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_config = ProxyConfigDictionary::CreateDirect(); 277868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case MK_MODE(AUTO_DETECT): 279868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_config = ProxyConfigDictionary::CreateAutoDetect(); 280868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case MK_MODE(PAC_SCRIPT): 282868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_config = 283868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ProxyConfigDictionary::CreatePacScript(input.pac_url, false); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 285868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case MK_MODE(SINGLE_PROXY): 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case MK_MODE(PROXY_PER_SCHEME): 287868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_config = 288868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ProxyConfigDictionary::CreateFixedServers(input.server, 289868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) input.bypass_rules); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 292868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) result->Swap(new_config); 293868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) delete new_config; 294868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 295868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 296868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void SetConfig(base::DictionaryValue* pref_proxy_config_dict) { 297868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string proxy_config; 298868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (pref_proxy_config_dict) 299868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::JSONWriter::Write(pref_proxy_config_dict, &proxy_config); 300868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 301868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NetworkStateHandler* network_state_handler = 302868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NetworkHandler::Get()->network_state_handler(); 303868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const NetworkState* network = network_state_handler->DefaultNetwork(); 304868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(network); 305868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface()-> 306868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetServiceProperty(network->path(), 30768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kProxyConfigProperty, 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::StringValue(proxy_config)); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Synchronously gets the latest proxy config. 312868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void SyncGetLatestProxyConfig(net::ProxyConfig* config) { 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *config = net::ProxyConfig(); 314868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Let message loop process all messages. This will run 315868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // ChromeProxyConfigService::UpdateProxyConfig, which is posted on IO from 316868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // PrefProxyConfigTrackerImpl::OnProxyConfigChanged. 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 318868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) net::ProxyConfigService::ConfigAvailability availability = 319868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) proxy_config_service_->GetLatestProxyConfig(config); 320868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 321868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, availability); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop loop_; 325ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<net::ProxyConfigService> proxy_config_service_; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ProxyConfigServiceImpl> config_service_impl_; 327868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestingPrefServiceSimple pref_service_; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedTestDeviceSettingsService test_device_settings_service_; 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedTestCrosSettings test_cros_settings_; 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread io_thread_; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceImplTest, NetworkProxy) { 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, 339868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) tests[i].description.c_str())); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 341868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue test_config; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitConfigWithTestInput(tests[i].input, &test_config); 343868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetConfig(&test_config); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyConfig config; 346868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&config); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(tests[i].pac_url, config.pac_url()); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceImplTest, DynamicPrefsOverride) { 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Groupings of 3 test inputs to use for managed, recommended and network 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // proxies respectively. Only valid and non-direct test inputs are used. 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t proxies[][3] = { 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1, 2, 4, }, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1, 4, 2, }, 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4, 2, 1, }, 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2, 1, 4, }, 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2, 4, 5, }, 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2, 5, 4, }, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5, 4, 2, }, 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4, 2, 5, }, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4, 5, 6, }, 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4, 6, 5, }, 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6, 5, 4, }, 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5, 4, 6, }, 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5, 6, 7, }, 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5, 7, 6, }, 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7, 6, 5, }, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6, 5, 7, }, 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6, 7, 8, }, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6, 8, 7, }, 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 8, 7, 6, }, 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7, 6, 8, }, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(proxies); ++i) { 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestParams& managed_params = tests[proxies[i][0]]; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestParams& recommended_params = tests[proxies[i][1]]; 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestParams& network_params = tests[proxies[i][2]]; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SCOPED_TRACE(base::StringPrintf( 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Test[%" PRIuS "] managed=[%s], recommended=[%s], network=[%s]", i, 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) managed_params.description.c_str(), 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) recommended_params.description.c_str(), 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_params.description.c_str())); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 390868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue managed_config; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitConfigWithTestInput(managed_params.input, &managed_config); 392868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue recommended_config; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitConfigWithTestInput(recommended_params.input, &recommended_config); 394868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue network_config; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitConfigWithTestInput(network_params.input, &network_config); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Managed proxy pref should take effect over recommended proxy and 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // non-existent network proxy. 399868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetConfig(NULL); 400868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) pref_service_.SetManagedPref(prefs::kProxy, managed_config.DeepCopy()); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_.SetRecommendedPref(prefs::kProxy, 402868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) recommended_config.DeepCopy()); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyConfig actual_config; 404868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&actual_config); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(managed_params.auto_detect, actual_config.auto_detect()); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(managed_params.pac_url, actual_config.pac_url()); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(managed_params.proxy_rules.Matches( 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_config.proxy_rules())); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Recommended proxy pref should take effect when managed proxy pref is 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // removed. 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_.RemoveManagedPref(prefs::kProxy); 413868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&actual_config); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(recommended_params.auto_detect, actual_config.auto_detect()); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(recommended_params.pac_url, actual_config.pac_url()); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(recommended_params.proxy_rules.Matches( 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_config.proxy_rules())); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Network proxy should take take effect over recommended proxy pref. 420868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetConfig(&network_config); 421868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&actual_config); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(network_params.auto_detect, actual_config.auto_detect()); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(network_params.pac_url, actual_config.pac_url()); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(network_params.proxy_rules.Matches( 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_config.proxy_rules())); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Managed proxy pref should take effect over network proxy. 428868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) pref_service_.SetManagedPref(prefs::kProxy, managed_config.DeepCopy()); 429868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&actual_config); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(managed_params.auto_detect, actual_config.auto_detect()); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(managed_params.pac_url, actual_config.pac_url()); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(managed_params.proxy_rules.Matches( 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_config.proxy_rules())); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Network proxy should take effect over recommended proxy pref when managed 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // proxy pref is removed. 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_.RemoveManagedPref(prefs::kProxy); 438868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&actual_config); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(network_params.auto_detect, actual_config.auto_detect()); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(network_params.pac_url, actual_config.pac_url()); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(network_params.proxy_rules.Matches( 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_config.proxy_rules())); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removing recommended proxy pref should have no effect on network proxy. 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_.RemoveRecommendedPref(prefs::kProxy); 446868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncGetLatestProxyConfig(&actual_config); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(network_params.auto_detect, actual_config.auto_detect()); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(network_params.pac_url, actual_config.pac_url()); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(network_params.proxy_rules.Matches( 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_config.proxy_rules())); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 455