1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// found in the LICENSE file. 4201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 5201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/net/pref_proxy_config_service.h" 6201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 7201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "base/command_line.h" 8201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "base/file_path.h" 9201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/net/chrome_url_request_context.h" 1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/prefs/pref_service_mock_builder.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/prefs/proxy_config_dictionary.h" 12201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/common/chrome_switches.h" 13201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/common/pref_names.h" 14201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/test/testing_pref_service.h" 15201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "net/proxy/proxy_config_service_common_unittest.h" 16201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "testing/gmock/include/gmock/gmock.h" 17201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 18201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 19201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochusing testing::_; 20201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochusing testing::Mock; 21201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 22201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochnamespace { 23201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 24201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochconst char kFixedPacUrl[] = "http://chromium.org/fixed_pac_url"; 25201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 26201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Testing proxy config service that allows us to fire notifications at will. 27201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass TestProxyConfigService : public net::ProxyConfigService { 28201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public: 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TestProxyConfigService(const net::ProxyConfig& config, 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ConfigAvailability availability) 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : config_(config), 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen availability_(availability) {} 33201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetProxyConfig(const net::ProxyConfig config, 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ConfigAvailability availability) { 36201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch config_ = config; 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen availability_ = availability; 38201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch FOR_EACH_OBSERVER(net::ProxyConfigService::Observer, observers_, 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OnProxyConfigChanged(config, availability)); 40201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 42201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private: 43201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void AddObserver(net::ProxyConfigService::Observer* observer) { 44201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch observers_.AddObserver(observer); 45201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void RemoveObserver(net::ProxyConfigService::Observer* observer) { 48201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch observers_.RemoveObserver(observer); 49201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 50201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual net::ProxyConfigService::ConfigAvailability GetLatestProxyConfig( 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::ProxyConfig* config) { 53201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch *config = config_; 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return availability_; 55201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 56201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 57201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyConfig config_; 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ConfigAvailability availability_; 59201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ObserverList<net::ProxyConfigService::Observer, true> observers_; 60201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 61201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 62201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// A mock observer for capturing callbacks. 63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass MockObserver : public net::ProxyConfigService::Observer { 64201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public: 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MOCK_METHOD2(OnProxyConfigChanged, 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void(const net::ProxyConfig&, 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::ProxyConfigService::ConfigAvailability)); 68201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 69201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 70201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochtemplate<typename TESTBASE> 71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass PrefProxyConfigServiceTestBase : public TESTBASE { 72201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch protected: 73201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch PrefProxyConfigServiceTestBase() 74201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch : ui_thread_(BrowserThread::UI, &loop_), 75201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch io_thread_(BrowserThread::IO, &loop_) {} 76201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 7721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void Init(PrefService* pref_service) { 7821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(pref_service); 79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen PrefProxyConfigService::RegisterPrefs(pref_service); 80201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch fixed_config_.set_pac_url(GURL(kFixedPacUrl)); 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delegate_service_ = 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new TestProxyConfigService(fixed_config_, 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::ProxyConfigService::CONFIG_VALID); 8421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen proxy_config_tracker_ = new PrefProxyConfigTracker(pref_service); 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch proxy_config_service_.reset( 86201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch new PrefProxyConfigService(proxy_config_tracker_.get(), 87201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch delegate_service_)); 88201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 89201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 90201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void TearDown() { 91201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch proxy_config_tracker_->DetachFromPrefService(); 92201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch loop_.RunAllPending(); 93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch proxy_config_service_.reset(); 94201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 95201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 96201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch MessageLoop loop_; 97201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TestProxyConfigService* delegate_service_; // weak 98201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch scoped_ptr<PrefProxyConfigService> proxy_config_service_; 99201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyConfig fixed_config_; 100201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 101201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private: 102201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch scoped_refptr<PrefProxyConfigTracker> proxy_config_tracker_; 103201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch BrowserThread ui_thread_; 104201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch BrowserThread io_thread_; 105201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 106201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 107201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass PrefProxyConfigServiceTest 108201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch : public PrefProxyConfigServiceTestBase<testing::Test> { 109201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch protected: 110201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void SetUp() { 11121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen pref_service_.reset(new TestingPrefService()); 11221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen Init(pref_service_.get()); 113201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 11421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 11521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_ptr<TestingPrefService> pref_service_; 116201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 117201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 118201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochTEST_F(PrefProxyConfigServiceTest, BaseConfiguration) { 119201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyConfig actual_config; 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxy_config_service_->GetLatestProxyConfig(&actual_config)); 122201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(GURL(kFixedPacUrl), actual_config.pac_url()); 123201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 124201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 125201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochTEST_F(PrefProxyConfigServiceTest, DynamicPrefOverrides) { 126201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch pref_service_->SetManagedPref( 12772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen prefs::kProxy, 12872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ProxyConfigDictionary::CreateFixedServers("http://example.com:3128", "")); 129201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch loop_.RunAllPending(); 130201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 131201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyConfig actual_config; 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxy_config_service_->GetLatestProxyConfig(&actual_config)); 134201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(actual_config.auto_detect()); 135201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(net::ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY, 136201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch actual_config.proxy_rules().type); 137201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(actual_config.proxy_rules().single_proxy, 138201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyServer::FromURI("http://example.com:3128", 139201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyServer::SCHEME_HTTP)); 140201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 14172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen pref_service_->SetManagedPref(prefs::kProxy, 14272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ProxyConfigDictionary::CreateAutoDetect()); 143201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch loop_.RunAllPending(); 144201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxy_config_service_->GetLatestProxyConfig(&actual_config)); 147201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(actual_config.auto_detect()); 148201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 149201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 150201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Compares proxy configurations, but allows different identifiers. 151201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochMATCHER_P(ProxyConfigMatches, config, "") { 152201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyConfig reference(config); 153201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reference.set_id(arg.id()); 154201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return reference.Equals(arg); 155201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 156201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 157201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochTEST_F(PrefProxyConfigServiceTest, Observers) { 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const net::ProxyConfigService::ConfigAvailability CONFIG_VALID = 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::ProxyConfigService::CONFIG_VALID; 160201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch MockObserver observer; 161201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch proxy_config_service_->AddObserver(&observer); 162201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 163201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Firing the observers in the delegate should trigger a notification. 164201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyConfig config2; 165201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch config2.set_auto_detect(true); 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(observer, OnProxyConfigChanged(ProxyConfigMatches(config2), 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CONFIG_VALID)).Times(1); 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delegate_service_->SetProxyConfig(config2, CONFIG_VALID); 169201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch loop_.RunAllPending(); 170201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Mock::VerifyAndClearExpectations(&observer); 171201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 172201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Override configuration, this should trigger a notification. 173201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyConfig pref_config; 174201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch pref_config.set_pac_url(GURL(kFixedPacUrl)); 17521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(observer, OnProxyConfigChanged(ProxyConfigMatches(pref_config), 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CONFIG_VALID)).Times(1); 17821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen pref_service_->SetManagedPref( 17972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen prefs::kProxy, 18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ProxyConfigDictionary::CreatePacScript(kFixedPacUrl)); 181201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch loop_.RunAllPending(); 182201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Mock::VerifyAndClearExpectations(&observer); 183201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 184201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Since there are pref overrides, delegate changes should be ignored. 185201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyConfig config3; 186201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch config3.proxy_rules().ParseFromString("http=config3:80"); 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(observer, OnProxyConfigChanged(_, _)).Times(0); 188201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch fixed_config_.set_auto_detect(true); 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delegate_service_->SetProxyConfig(config3, CONFIG_VALID); 190201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch loop_.RunAllPending(); 191201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Mock::VerifyAndClearExpectations(&observer); 192201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 193201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Clear the override should switch back to the fixed configuration. 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(observer, OnProxyConfigChanged(ProxyConfigMatches(config3), 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CONFIG_VALID)).Times(1); 19672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen pref_service_->RemoveManagedPref(prefs::kProxy); 197201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch loop_.RunAllPending(); 198201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Mock::VerifyAndClearExpectations(&observer); 199201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 200201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Delegate service notifications should show up again. 201201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyConfig config4; 202201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch config4.proxy_rules().ParseFromString("socks:config4"); 203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(observer, OnProxyConfigChanged(ProxyConfigMatches(config4), 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CONFIG_VALID)).Times(1); 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delegate_service_->SetProxyConfig(config4, CONFIG_VALID); 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen loop_.RunAllPending(); 207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Mock::VerifyAndClearExpectations(&observer); 208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxy_config_service_->RemoveObserver(&observer); 210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(PrefProxyConfigServiceTest, Fallback) { 213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const net::ProxyConfigService::ConfigAvailability CONFIG_VALID = 214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::ProxyConfigService::CONFIG_VALID; 215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MockObserver observer; 216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::ProxyConfig actual_config; 217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delegate_service_->SetProxyConfig(net::ProxyConfig::CreateDirect(), 218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::ProxyConfigService::CONFIG_UNSET); 219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxy_config_service_->AddObserver(&observer); 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Prepare test data. 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::ProxyConfig recommended_config = net::ProxyConfig::CreateAutoDetect(); 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::ProxyConfig user_config = 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::ProxyConfig::CreateFromCustomPacURL(GURL(kFixedPacUrl)); 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Set a recommended pref. 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(observer, 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OnProxyConfigChanged(ProxyConfigMatches(recommended_config), 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CONFIG_VALID)).Times(1); 230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pref_service_->SetRecommendedPref( 231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen prefs::kProxy, 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProxyConfigDictionary::CreateAutoDetect()); 233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen loop_.RunAllPending(); 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Mock::VerifyAndClearExpectations(&observer); 235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(CONFIG_VALID, 236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxy_config_service_->GetLatestProxyConfig(&actual_config)); 237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(actual_config.Equals(recommended_config)); 238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Override in user prefs. 240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(observer, 241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OnProxyConfigChanged(ProxyConfigMatches(user_config), 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CONFIG_VALID)).Times(1); 243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pref_service_->SetManagedPref( 244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen prefs::kProxy, 245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProxyConfigDictionary::CreatePacScript(kFixedPacUrl)); 246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen loop_.RunAllPending(); 247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Mock::VerifyAndClearExpectations(&observer); 248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(CONFIG_VALID, 249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxy_config_service_->GetLatestProxyConfig(&actual_config)); 250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(actual_config.Equals(user_config)); 251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Go back to recommended pref. 253201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_CALL(observer, 254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OnProxyConfigChanged(ProxyConfigMatches(recommended_config), 255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CONFIG_VALID)).Times(1); 256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pref_service_->RemoveManagedPref(prefs::kProxy); 257201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch loop_.RunAllPending(); 258201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Mock::VerifyAndClearExpectations(&observer); 259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(CONFIG_VALID, 260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxy_config_service_->GetLatestProxyConfig(&actual_config)); 261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(actual_config.Equals(recommended_config)); 262201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 263201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch proxy_config_service_->RemoveObserver(&observer); 264201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 265201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 266201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Test parameter object for testing command line proxy configuration. 267201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochstruct CommandLineTestParams { 268201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Explicit assignment operator, so testing::TestWithParam works with MSVC. 269201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch CommandLineTestParams& operator=(const CommandLineTestParams& other) { 270201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch description = other.description; 271201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch for (unsigned int i = 0; i < arraysize(switches); i++) 272201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch switches[i] = other.switches[i]; 273201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch is_null = other.is_null; 274201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch auto_detect = other.auto_detect; 275201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch pac_url = other.pac_url; 276201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch proxy_rules = other.proxy_rules; 277201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return *this; 278201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 279201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 280201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Short description to identify the test. 281201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const char* description; 282201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 283201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The command line to build a ProxyConfig from. 284201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch struct SwitchValue { 285201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const char* name; 286201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const char* value; 287201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } switches[2]; 288201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 289201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Expected outputs (fields of the ProxyConfig). 290201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool is_null; 291201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool auto_detect; 292201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL pac_url; 293201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyRulesExpectation proxy_rules; 294201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 295201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 296201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid PrintTo(const CommandLineTestParams& params, std::ostream* os) { 297201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch *os << params.description; 298201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 299201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 300201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass PrefProxyConfigServiceCommandLineTest 301201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch : public PrefProxyConfigServiceTestBase< 302201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch testing::TestWithParam<CommandLineTestParams> > { 303201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch protected: 304201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch PrefProxyConfigServiceCommandLineTest() 305201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch : command_line_(CommandLine::NO_PROGRAM) {} 306201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 307201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void SetUp() { 308201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch for (size_t i = 0; i < arraysize(GetParam().switches); i++) { 309201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const char* name = GetParam().switches[i].name; 310201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const char* value = GetParam().switches[i].value; 311201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (name && value) 312201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch command_line_.AppendSwitchASCII(name, value); 313201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch else if (name) 314201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch command_line_.AppendSwitch(name); 315201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 31621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen pref_service_.reset( 31721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen PrefServiceMockBuilder().WithCommandLine(&command_line_).Create()); 31821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen Init(pref_service_.get()); 319201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 320201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 321201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private: 322201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch CommandLine command_line_; 32321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_ptr<PrefService> pref_service_; 324201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 325201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 326201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochTEST_P(PrefProxyConfigServiceCommandLineTest, CommandLine) { 327201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyConfig config; 328ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, 329ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen proxy_config_service_->GetLatestProxyConfig(&config)); 330201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 331201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (GetParam().is_null) { 332201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(GURL(kFixedPacUrl), config.pac_url()); 333201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } else { 334201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_NE(GURL(kFixedPacUrl), config.pac_url()); 335201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(GetParam().auto_detect, config.auto_detect()); 336201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(GetParam().pac_url, config.pac_url()); 337201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(GetParam().proxy_rules.Matches(config.proxy_rules())); 338201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 339201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 340201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 341201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochstatic const CommandLineTestParams kCommandLineTestParams[] = { 342201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 343201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Empty command line", 344201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Input 345201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { }, 346201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Expected result 347201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch true, // is_null 348201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // auto_detect 349201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL(), // pac_url 350201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyRulesExpectation::Empty(), 351201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 352201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 353201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "No proxy", 354201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Input 355201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 356201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { switches::kNoProxyServer, NULL }, 357201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 358201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Expected result 359201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // is_null 360201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // auto_detect 361201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL(), // pac_url 362201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyRulesExpectation::Empty(), 363201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 364201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 365201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "No proxy with extra parameters.", 366201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Input 367201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 368201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { switches::kNoProxyServer, NULL }, 369201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { switches::kProxyServer, "http://proxy:8888" }, 370201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 371201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Expected result 372201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // is_null 373201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // auto_detect 374201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL(), // pac_url 375201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyRulesExpectation::Empty(), 376201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 377201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 378201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Single proxy.", 379201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Input 380201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 381201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { switches::kProxyServer, "http://proxy:8888" }, 382201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 383201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Expected result 384201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // is_null 385201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // auto_detect 386201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL(), // pac_url 387201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyRulesExpectation::Single( 388201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "proxy:8888", // single proxy 389201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ""), // bypass rules 390201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 391201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 392201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Per scheme proxy.", 393201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Input 394201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 395201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { switches::kProxyServer, "http=httpproxy:8888;ftp=ftpproxy:8889" }, 396201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 397201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Expected result 398201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // is_null 399201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // auto_detect 400201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL(), // pac_url 401201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyRulesExpectation::PerScheme( 402201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "httpproxy:8888", // http 403201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "", // https 404201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "ftpproxy:8889", // ftp 405201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ""), // bypass rules 406201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 407201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 408201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Per scheme proxy with bypass URLs.", 409201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Input 410201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 411201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { switches::kProxyServer, "http=httpproxy:8888;ftp=ftpproxy:8889" }, 412201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { switches::kProxyBypassList, 413201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8" }, 414201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 415201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Expected result 416201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // is_null 417201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // auto_detect 418201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL(), // pac_url 419201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyRulesExpectation::PerScheme( 420201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "httpproxy:8888", // http 421201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "", // https 422201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "ftpproxy:8889", // ftp 423201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "*.google.com,foo.com:99,1.2.3.4:22,127.0.0.1/8"), 424201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 425201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 42621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "Pac URL", 427201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Input 428201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 429201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { switches::kProxyPacUrl, "http://wpad/wpad.dat" }, 430201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 431201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Expected result 432201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // is_null 433201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // auto_detect 434201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL("http://wpad/wpad.dat"), // pac_url 43521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen net::ProxyRulesExpectation::Empty(), 436201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 437201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 438201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Autodetect", 439201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Input 440201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { 441201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch { switches::kProxyAutoDetect, NULL }, 442201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 443201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Expected result 444201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false, // is_null 445201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch true, // auto_detect 446201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL(), // pac_url 447201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch net::ProxyRulesExpectation::Empty(), 448201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 449201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 450201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 451201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochINSTANTIATE_TEST_CASE_P( 452201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch PrefProxyConfigServiceCommandLineTestInstance, 453201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch PrefProxyConfigServiceCommandLineTest, 454201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch testing::ValuesIn(kCommandLineTestParams)); 455201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 456201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} // namespace 457