Index: chrome/browser/net/pref_proxy_config_service_unittest.cc |
diff --git a/chrome/browser/net/pref_proxy_config_service_unittest.cc b/chrome/browser/net/pref_proxy_config_service_unittest.cc |
index 75b6f82e09824025835b9319c59d6dcac0007b38..e1918872c9dec7ad3a9993b24f17431eadc76561 100644 |
--- a/chrome/browser/net/pref_proxy_config_service_unittest.cc |
+++ b/chrome/browser/net/pref_proxy_config_service_unittest.cc |
@@ -26,14 +26,17 @@ const char kFixedPacUrl[] = "http://chromium.org/fixed_pac_url"; |
// Testing proxy config service that allows us to fire notifications at will. |
class TestProxyConfigService : public net::ProxyConfigService { |
public: |
- explicit TestProxyConfigService(const net::ProxyConfig& config) |
- : config_(config) { |
- } |
+ TestProxyConfigService(const net::ProxyConfig& config, |
+ ConfigAvailability availability) |
+ : config_(config), |
+ availability_(availability) {} |
- void SetProxyConfig(const net::ProxyConfig config) { |
+ void SetProxyConfig(const net::ProxyConfig config, |
+ ConfigAvailability availability) { |
config_ = config; |
+ availability_ = availability; |
FOR_EACH_OBSERVER(net::ProxyConfigService::Observer, observers_, |
- OnProxyConfigChanged(config_)); |
+ OnProxyConfigChanged(config, availability)); |
} |
private: |
@@ -45,19 +48,23 @@ class TestProxyConfigService : public net::ProxyConfigService { |
observers_.RemoveObserver(observer); |
} |
- virtual bool GetLatestProxyConfig(net::ProxyConfig* config) { |
+ virtual net::ProxyConfigService::ConfigAvailability GetLatestProxyConfig( |
+ net::ProxyConfig* config) { |
*config = config_; |
- return true; |
+ return availability_; |
} |
net::ProxyConfig config_; |
+ ConfigAvailability availability_; |
ObserverList<net::ProxyConfigService::Observer, true> observers_; |
}; |
// A mock observer for capturing callbacks. |
class MockObserver : public net::ProxyConfigService::Observer { |
public: |
- MOCK_METHOD1(OnProxyConfigChanged, void(const net::ProxyConfig&)); |
+ MOCK_METHOD2(OnProxyConfigChanged, |
+ void(const net::ProxyConfig&, |
+ net::ProxyConfigService::ConfigAvailability)); |
}; |
template<typename TESTBASE> |
@@ -71,7 +78,9 @@ class PrefProxyConfigServiceTestBase : public TESTBASE { |
ASSERT_TRUE(pref_service); |
PrefProxyConfigService::RegisterPrefs(pref_service); |
fixed_config_.set_pac_url(GURL(kFixedPacUrl)); |
- delegate_service_ = new TestProxyConfigService(fixed_config_); |
+ delegate_service_ = |
+ new TestProxyConfigService(fixed_config_, |
+ net::ProxyConfigService::CONFIG_VALID); |
proxy_config_tracker_ = new PrefProxyConfigTracker(pref_service); |
proxy_config_service_.reset( |
new PrefProxyConfigService(proxy_config_tracker_.get(), |
@@ -108,7 +117,8 @@ class PrefProxyConfigServiceTest |
TEST_F(PrefProxyConfigServiceTest, BaseConfiguration) { |
net::ProxyConfig actual_config; |
- proxy_config_service_->GetLatestProxyConfig(&actual_config); |
+ EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, |
+ proxy_config_service_->GetLatestProxyConfig(&actual_config)); |
EXPECT_EQ(GURL(kFixedPacUrl), actual_config.pac_url()); |
} |
@@ -119,7 +129,8 @@ TEST_F(PrefProxyConfigServiceTest, DynamicPrefOverrides) { |
loop_.RunAllPending(); |
net::ProxyConfig actual_config; |
- proxy_config_service_->GetLatestProxyConfig(&actual_config); |
+ EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, |
+ proxy_config_service_->GetLatestProxyConfig(&actual_config)); |
EXPECT_FALSE(actual_config.auto_detect()); |
EXPECT_EQ(net::ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY, |
actual_config.proxy_rules().type); |
@@ -131,7 +142,8 @@ TEST_F(PrefProxyConfigServiceTest, DynamicPrefOverrides) { |
ProxyConfigDictionary::CreateAutoDetect()); |
loop_.RunAllPending(); |
- proxy_config_service_->GetLatestProxyConfig(&actual_config); |
+ EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, |
+ proxy_config_service_->GetLatestProxyConfig(&actual_config)); |
EXPECT_TRUE(actual_config.auto_detect()); |
} |
@@ -143,15 +155,17 @@ MATCHER_P(ProxyConfigMatches, config, "") { |
} |
TEST_F(PrefProxyConfigServiceTest, Observers) { |
+ const net::ProxyConfigService::ConfigAvailability CONFIG_VALID = |
+ net::ProxyConfigService::CONFIG_VALID; |
MockObserver observer; |
proxy_config_service_->AddObserver(&observer); |
// Firing the observers in the delegate should trigger a notification. |
net::ProxyConfig config2; |
config2.set_auto_detect(true); |
- EXPECT_CALL(observer, |
- OnProxyConfigChanged(ProxyConfigMatches(config2))).Times(1); |
- delegate_service_->SetProxyConfig(config2); |
+ EXPECT_CALL(observer, OnProxyConfigChanged(ProxyConfigMatches(config2), |
+ CONFIG_VALID)).Times(1); |
+ delegate_service_->SetProxyConfig(config2, CONFIG_VALID); |
loop_.RunAllPending(); |
Mock::VerifyAndClearExpectations(&observer); |
@@ -159,8 +173,8 @@ TEST_F(PrefProxyConfigServiceTest, Observers) { |
net::ProxyConfig pref_config; |
pref_config.set_pac_url(GURL(kFixedPacUrl)); |
- EXPECT_CALL(observer, |
- OnProxyConfigChanged(ProxyConfigMatches(pref_config))).Times(1); |
+ EXPECT_CALL(observer, OnProxyConfigChanged(ProxyConfigMatches(pref_config), |
+ CONFIG_VALID)).Times(1); |
pref_service_->SetManagedPref( |
prefs::kProxy, |
ProxyConfigDictionary::CreatePacScript(kFixedPacUrl)); |
@@ -170,15 +184,15 @@ TEST_F(PrefProxyConfigServiceTest, Observers) { |
// Since there are pref overrides, delegate changes should be ignored. |
net::ProxyConfig config3; |
config3.proxy_rules().ParseFromString("http=config3:80"); |
- EXPECT_CALL(observer, OnProxyConfigChanged(_)).Times(0); |
+ EXPECT_CALL(observer, OnProxyConfigChanged(_, _)).Times(0); |
fixed_config_.set_auto_detect(true); |
- delegate_service_->SetProxyConfig(config3); |
+ delegate_service_->SetProxyConfig(config3, CONFIG_VALID); |
loop_.RunAllPending(); |
Mock::VerifyAndClearExpectations(&observer); |
// Clear the override should switch back to the fixed configuration. |
- EXPECT_CALL(observer, |
- OnProxyConfigChanged(ProxyConfigMatches(config3))).Times(1); |
+ EXPECT_CALL(observer, OnProxyConfigChanged(ProxyConfigMatches(config3), |
+ CONFIG_VALID)).Times(1); |
pref_service_->RemoveManagedPref(prefs::kProxy); |
loop_.RunAllPending(); |
Mock::VerifyAndClearExpectations(&observer); |
@@ -186,11 +200,65 @@ TEST_F(PrefProxyConfigServiceTest, Observers) { |
// Delegate service notifications should show up again. |
net::ProxyConfig config4; |
config4.proxy_rules().ParseFromString("socks:config4"); |
+ EXPECT_CALL(observer, OnProxyConfigChanged(ProxyConfigMatches(config4), |
+ CONFIG_VALID)).Times(1); |
+ delegate_service_->SetProxyConfig(config4, CONFIG_VALID); |
+ loop_.RunAllPending(); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ |
+ proxy_config_service_->RemoveObserver(&observer); |
+} |
+ |
+TEST_F(PrefProxyConfigServiceTest, Fallback) { |
+ const net::ProxyConfigService::ConfigAvailability CONFIG_VALID = |
+ net::ProxyConfigService::CONFIG_VALID; |
+ MockObserver observer; |
+ net::ProxyConfig actual_config; |
+ delegate_service_->SetProxyConfig(net::ProxyConfig::CreateDirect(), |
+ net::ProxyConfigService::CONFIG_UNSET); |
+ proxy_config_service_->AddObserver(&observer); |
+ |
+ // Prepare test data. |
+ net::ProxyConfig recommended_config = net::ProxyConfig::CreateAutoDetect(); |
+ net::ProxyConfig user_config = |
+ net::ProxyConfig::CreateFromCustomPacURL(GURL(kFixedPacUrl)); |
+ |
+ // Set a recommended pref. |
+ EXPECT_CALL(observer, |
+ OnProxyConfigChanged(ProxyConfigMatches(recommended_config), |
+ CONFIG_VALID)).Times(1); |
+ pref_service_->SetRecommendedPref( |
+ prefs::kProxy, |
+ ProxyConfigDictionary::CreateAutoDetect()); |
+ loop_.RunAllPending(); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ EXPECT_EQ(CONFIG_VALID, |
+ proxy_config_service_->GetLatestProxyConfig(&actual_config)); |
+ EXPECT_THAT(actual_config, ProxyConfigMatches(recommended_config)); |
+ |
+ // Override in user prefs. |
+ EXPECT_CALL(observer, |
+ OnProxyConfigChanged(ProxyConfigMatches(user_config), |
+ CONFIG_VALID)).Times(1); |
+ pref_service_->SetManagedPref( |
+ prefs::kProxy, |
+ ProxyConfigDictionary::CreatePacScript(kFixedPacUrl)); |
+ loop_.RunAllPending(); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ EXPECT_EQ(CONFIG_VALID, |
+ proxy_config_service_->GetLatestProxyConfig(&actual_config)); |
+ EXPECT_THAT(actual_config, ProxyConfigMatches(user_config)); |
+ |
+ // Go back to recommended pref. |
EXPECT_CALL(observer, |
- OnProxyConfigChanged(ProxyConfigMatches(config4))).Times(1); |
- delegate_service_->SetProxyConfig(config4); |
+ OnProxyConfigChanged(ProxyConfigMatches(recommended_config), |
+ CONFIG_VALID)).Times(1); |
+ pref_service_->RemoveManagedPref(prefs::kProxy); |
loop_.RunAllPending(); |
Mock::VerifyAndClearExpectations(&observer); |
+ EXPECT_EQ(CONFIG_VALID, |
+ proxy_config_service_->GetLatestProxyConfig(&actual_config)); |
+ EXPECT_THAT(actual_config, ProxyConfigMatches(recommended_config)); |
proxy_config_service_->RemoveObserver(&observer); |
} |
@@ -257,7 +325,8 @@ class PrefProxyConfigServiceCommandLineTest |
TEST_P(PrefProxyConfigServiceCommandLineTest, CommandLine) { |
net::ProxyConfig config; |
- proxy_config_service_->GetLatestProxyConfig(&config); |
+ EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, |
+ proxy_config_service_->GetLatestProxyConfig(&config)); |
if (GetParam().is_null) { |
EXPECT_EQ(GURL(kFixedPacUrl), config.pac_url()); |