Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(389)

Side by Side Diff: chrome/browser/net/pref_proxy_config_tracker_unittest.cc

Issue 8102019: redesign and reimplement proxy config service and tracker, revise proxy ui on cros (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/net/pref_proxy_config_service.h" 5 #include "chrome/browser/net/pref_proxy_config_tracker.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/file_path.h" 8 #include "base/file_path.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "chrome/browser/net/chrome_url_request_context.h" 10 #include "chrome/browser/net/chrome_url_request_context.h"
11 #include "chrome/browser/prefs/pref_service_mock_builder.h" 11 #include "chrome/browser/prefs/pref_service_mock_builder.h"
12 #include "chrome/browser/prefs/proxy_config_dictionary.h" 12 #include "chrome/browser/prefs/proxy_config_dictionary.h"
13 #include "chrome/common/chrome_switches.h" 13 #include "chrome/common/chrome_switches.h"
14 #include "chrome/common/pref_names.h" 14 #include "chrome/common/pref_names.h"
15 #include "chrome/test/base/testing_pref_service.h" 15 #include "chrome/test/base/testing_pref_service.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 63
64 // A mock observer for capturing callbacks. 64 // A mock observer for capturing callbacks.
65 class MockObserver : public net::ProxyConfigService::Observer { 65 class MockObserver : public net::ProxyConfigService::Observer {
66 public: 66 public:
67 MOCK_METHOD2(OnProxyConfigChanged, 67 MOCK_METHOD2(OnProxyConfigChanged,
68 void(const net::ProxyConfig&, 68 void(const net::ProxyConfig&,
69 net::ProxyConfigService::ConfigAvailability)); 69 net::ProxyConfigService::ConfigAvailability));
70 }; 70 };
71 71
72 template<typename TESTBASE> 72 template<typename TESTBASE>
73 class PrefProxyConfigServiceTestBase : public TESTBASE { 73 class PrefProxyConfigTrackerTestBase : public TESTBASE {
74 protected: 74 protected:
75 PrefProxyConfigServiceTestBase() 75 PrefProxyConfigTrackerTestBase()
76 : ui_thread_(BrowserThread::UI, &loop_), 76 : ui_thread_(BrowserThread::UI, &loop_),
77 io_thread_(BrowserThread::IO, &loop_) {} 77 io_thread_(BrowserThread::IO, &loop_) {}
78 78
79 virtual void Init(PrefService* pref_service) { 79 virtual void Init(PrefService* pref_service) {
80 ASSERT_TRUE(pref_service); 80 ASSERT_TRUE(pref_service);
81 PrefProxyConfigService::RegisterPrefs(pref_service); 81 PrefProxyConfigTracker::RegisterPrefs(pref_service);
82 fixed_config_.set_pac_url(GURL(kFixedPacUrl)); 82 fixed_config_.set_pac_url(GURL(kFixedPacUrl));
83 delegate_service_ = 83 delegate_service_ =
84 new TestProxyConfigService(fixed_config_, 84 new TestProxyConfigService(fixed_config_,
85 net::ProxyConfigService::CONFIG_VALID); 85 net::ProxyConfigService::CONFIG_VALID);
86 proxy_config_tracker_ = new PrefProxyConfigTracker(pref_service);
87 proxy_config_service_.reset( 86 proxy_config_service_.reset(
88 new PrefProxyConfigService(proxy_config_tracker_.get(), 87 new ChromeProxyConfigService(delegate_service_));
89 delegate_service_)); 88 proxy_config_tracker_.reset(new PrefProxyConfigTracker(pref_service));
89 proxy_config_tracker_->SetChromeProxyConfigService(
90 proxy_config_service_.get());
91 // SetChromeProxyConfigService triggers update of initial prefs proxy
92 // config by tracker to chrome proxy config service, so flush all pending
93 // tasks so that tests start fresh.
94 loop_.RunAllPending();
90 } 95 }
91 96
92 virtual void TearDown() { 97 virtual void TearDown() {
93 proxy_config_tracker_->DetachFromPrefService(); 98 proxy_config_tracker_->DetachFromPrefService();
94 loop_.RunAllPending(); 99 loop_.RunAllPending();
100 proxy_config_tracker_.reset();
95 proxy_config_service_.reset(); 101 proxy_config_service_.reset();
96 } 102 }
97 103
98 MessageLoop loop_; 104 MessageLoop loop_;
99 TestProxyConfigService* delegate_service_; // weak 105 TestProxyConfigService* delegate_service_; // weak
100 scoped_ptr<PrefProxyConfigService> proxy_config_service_; 106 scoped_ptr<ChromeProxyConfigService> proxy_config_service_;
101 net::ProxyConfig fixed_config_; 107 net::ProxyConfig fixed_config_;
102 108
103 private: 109 private:
104 scoped_refptr<PrefProxyConfigTracker> proxy_config_tracker_; 110 scoped_ptr<PrefProxyConfigTracker> proxy_config_tracker_;
105 BrowserThread ui_thread_; 111 BrowserThread ui_thread_;
106 BrowserThread io_thread_; 112 BrowserThread io_thread_;
107 }; 113 };
108 114
109 class PrefProxyConfigServiceTest 115 class PrefProxyConfigTrackerTest
110 : public PrefProxyConfigServiceTestBase<testing::Test> { 116 : public PrefProxyConfigTrackerTestBase<testing::Test> {
111 protected: 117 protected:
112 virtual void SetUp() { 118 virtual void SetUp() {
113 pref_service_.reset(new TestingPrefService()); 119 pref_service_.reset(new TestingPrefService());
114 Init(pref_service_.get()); 120 Init(pref_service_.get());
115 } 121 }
116 122
117 scoped_ptr<TestingPrefService> pref_service_; 123 scoped_ptr<TestingPrefService> pref_service_;
118 }; 124 };
119 125
120 TEST_F(PrefProxyConfigServiceTest, BaseConfiguration) { 126 TEST_F(PrefProxyConfigTrackerTest, BaseConfiguration) {
121 net::ProxyConfig actual_config; 127 net::ProxyConfig actual_config;
122 EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, 128 EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID,
123 proxy_config_service_->GetLatestProxyConfig(&actual_config)); 129 proxy_config_service_->GetLatestProxyConfig(&actual_config));
124 EXPECT_EQ(GURL(kFixedPacUrl), actual_config.pac_url()); 130 EXPECT_EQ(GURL(kFixedPacUrl), actual_config.pac_url());
125 } 131 }
126 132
127 TEST_F(PrefProxyConfigServiceTest, DynamicPrefOverrides) { 133 TEST_F(PrefProxyConfigTrackerTest, DynamicPrefOverrides) {
128 pref_service_->SetManagedPref( 134 pref_service_->SetManagedPref(
129 prefs::kProxy, 135 prefs::kProxy,
130 ProxyConfigDictionary::CreateFixedServers("http://example.com:3128", "")); 136 ProxyConfigDictionary::CreateFixedServers("http://example.com:3128", ""));
131 loop_.RunAllPending(); 137 loop_.RunAllPending();
132 138
133 net::ProxyConfig actual_config; 139 net::ProxyConfig actual_config;
134 EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, 140 EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID,
135 proxy_config_service_->GetLatestProxyConfig(&actual_config)); 141 proxy_config_service_->GetLatestProxyConfig(&actual_config));
136 EXPECT_FALSE(actual_config.auto_detect()); 142 EXPECT_FALSE(actual_config.auto_detect());
137 EXPECT_EQ(net::ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY, 143 EXPECT_EQ(net::ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY,
(...skipping 11 matching lines...) Expand all
149 EXPECT_TRUE(actual_config.auto_detect()); 155 EXPECT_TRUE(actual_config.auto_detect());
150 } 156 }
151 157
152 // Compares proxy configurations, but allows different identifiers. 158 // Compares proxy configurations, but allows different identifiers.
153 MATCHER_P(ProxyConfigMatches, config, "") { 159 MATCHER_P(ProxyConfigMatches, config, "") {
154 net::ProxyConfig reference(config); 160 net::ProxyConfig reference(config);
155 reference.set_id(arg.id()); 161 reference.set_id(arg.id());
156 return reference.Equals(arg); 162 return reference.Equals(arg);
157 } 163 }
158 164
159 TEST_F(PrefProxyConfigServiceTest, Observers) { 165 TEST_F(PrefProxyConfigTrackerTest, Observers) {
160 const net::ProxyConfigService::ConfigAvailability CONFIG_VALID = 166 const net::ProxyConfigService::ConfigAvailability CONFIG_VALID =
161 net::ProxyConfigService::CONFIG_VALID; 167 net::ProxyConfigService::CONFIG_VALID;
162 MockObserver observer; 168 MockObserver observer;
163 proxy_config_service_->AddObserver(&observer); 169 proxy_config_service_->AddObserver(&observer);
164 170
165 // Firing the observers in the delegate should trigger a notification. 171 // Firing the observers in the delegate should trigger a notification.
166 net::ProxyConfig config2; 172 net::ProxyConfig config2;
167 config2.set_auto_detect(true); 173 config2.set_auto_detect(true);
168 EXPECT_CALL(observer, OnProxyConfigChanged(ProxyConfigMatches(config2), 174 EXPECT_CALL(observer, OnProxyConfigChanged(ProxyConfigMatches(config2),
169 CONFIG_VALID)).Times(1); 175 CONFIG_VALID)).Times(1);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 config4.proxy_rules().ParseFromString("socks:config4"); 210 config4.proxy_rules().ParseFromString("socks:config4");
205 EXPECT_CALL(observer, OnProxyConfigChanged(ProxyConfigMatches(config4), 211 EXPECT_CALL(observer, OnProxyConfigChanged(ProxyConfigMatches(config4),
206 CONFIG_VALID)).Times(1); 212 CONFIG_VALID)).Times(1);
207 delegate_service_->SetProxyConfig(config4, CONFIG_VALID); 213 delegate_service_->SetProxyConfig(config4, CONFIG_VALID);
208 loop_.RunAllPending(); 214 loop_.RunAllPending();
209 Mock::VerifyAndClearExpectations(&observer); 215 Mock::VerifyAndClearExpectations(&observer);
210 216
211 proxy_config_service_->RemoveObserver(&observer); 217 proxy_config_service_->RemoveObserver(&observer);
212 } 218 }
213 219
214 TEST_F(PrefProxyConfigServiceTest, Fallback) { 220 TEST_F(PrefProxyConfigTrackerTest, Fallback) {
215 const net::ProxyConfigService::ConfigAvailability CONFIG_VALID = 221 const net::ProxyConfigService::ConfigAvailability CONFIG_VALID =
216 net::ProxyConfigService::CONFIG_VALID; 222 net::ProxyConfigService::CONFIG_VALID;
217 MockObserver observer; 223 MockObserver observer;
218 net::ProxyConfig actual_config; 224 net::ProxyConfig actual_config;
219 delegate_service_->SetProxyConfig(net::ProxyConfig::CreateDirect(), 225 delegate_service_->SetProxyConfig(net::ProxyConfig::CreateDirect(),
220 net::ProxyConfigService::CONFIG_UNSET); 226 net::ProxyConfigService::CONFIG_UNSET);
221 proxy_config_service_->AddObserver(&observer); 227 proxy_config_service_->AddObserver(&observer);
222 228
223 // Prepare test data. 229 // Prepare test data.
224 net::ProxyConfig recommended_config = net::ProxyConfig::CreateAutoDetect(); 230 net::ProxyConfig recommended_config = net::ProxyConfig::CreateAutoDetect();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 pref_service_->RemoveManagedPref(prefs::kProxy); 264 pref_service_->RemoveManagedPref(prefs::kProxy);
259 loop_.RunAllPending(); 265 loop_.RunAllPending();
260 Mock::VerifyAndClearExpectations(&observer); 266 Mock::VerifyAndClearExpectations(&observer);
261 EXPECT_EQ(CONFIG_VALID, 267 EXPECT_EQ(CONFIG_VALID,
262 proxy_config_service_->GetLatestProxyConfig(&actual_config)); 268 proxy_config_service_->GetLatestProxyConfig(&actual_config));
263 EXPECT_TRUE(actual_config.Equals(recommended_config)); 269 EXPECT_TRUE(actual_config.Equals(recommended_config));
264 270
265 proxy_config_service_->RemoveObserver(&observer); 271 proxy_config_service_->RemoveObserver(&observer);
266 } 272 }
267 273
268 TEST_F(PrefProxyConfigServiceTest, ExplicitSystemSettings) { 274 TEST_F(PrefProxyConfigTrackerTest, ExplicitSystemSettings) {
269 pref_service_->SetRecommendedPref( 275 pref_service_->SetRecommendedPref(
270 prefs::kProxy, 276 prefs::kProxy,
271 ProxyConfigDictionary::CreateAutoDetect()); 277 ProxyConfigDictionary::CreateAutoDetect());
272 pref_service_->SetUserPref( 278 pref_service_->SetUserPref(
273 prefs::kProxy, 279 prefs::kProxy,
274 ProxyConfigDictionary::CreateSystem()); 280 ProxyConfigDictionary::CreateSystem());
275 loop_.RunAllPending(); 281 loop_.RunAllPending();
276 282
277 // Test if we actually use the system setting, which is |kFixedPacUrl|. 283 // Test if we actually use the system setting, which is |kFixedPacUrl|.
278 net::ProxyConfig actual_config; 284 net::ProxyConfig actual_config;
(...skipping 29 matching lines...) Expand all
308 bool is_null; 314 bool is_null;
309 bool auto_detect; 315 bool auto_detect;
310 GURL pac_url; 316 GURL pac_url;
311 net::ProxyRulesExpectation proxy_rules; 317 net::ProxyRulesExpectation proxy_rules;
312 }; 318 };
313 319
314 void PrintTo(const CommandLineTestParams& params, std::ostream* os) { 320 void PrintTo(const CommandLineTestParams& params, std::ostream* os) {
315 *os << params.description; 321 *os << params.description;
316 } 322 }
317 323
318 class PrefProxyConfigServiceCommandLineTest 324 class PrefProxyConfigTrackerCommandLineTest
319 : public PrefProxyConfigServiceTestBase< 325 : public PrefProxyConfigTrackerTestBase<
320 testing::TestWithParam<CommandLineTestParams> > { 326 testing::TestWithParam<CommandLineTestParams> > {
321 protected: 327 protected:
322 PrefProxyConfigServiceCommandLineTest() 328 PrefProxyConfigTrackerCommandLineTest()
323 : command_line_(CommandLine::NO_PROGRAM) {} 329 : command_line_(CommandLine::NO_PROGRAM) {}
324 330
325 virtual void SetUp() { 331 virtual void SetUp() {
326 for (size_t i = 0; i < arraysize(GetParam().switches); i++) { 332 for (size_t i = 0; i < arraysize(GetParam().switches); i++) {
327 const char* name = GetParam().switches[i].name; 333 const char* name = GetParam().switches[i].name;
328 const char* value = GetParam().switches[i].value; 334 const char* value = GetParam().switches[i].value;
329 if (name && value) 335 if (name && value)
330 command_line_.AppendSwitchASCII(name, value); 336 command_line_.AppendSwitchASCII(name, value);
331 else if (name) 337 else if (name)
332 command_line_.AppendSwitch(name); 338 command_line_.AppendSwitch(name);
333 } 339 }
334 pref_service_.reset( 340 pref_service_.reset(
335 PrefServiceMockBuilder().WithCommandLine(&command_line_).Create()); 341 PrefServiceMockBuilder().WithCommandLine(&command_line_).Create());
336 Init(pref_service_.get()); 342 Init(pref_service_.get());
337 } 343 }
338 344
339 private: 345 private:
340 CommandLine command_line_; 346 CommandLine command_line_;
341 scoped_ptr<PrefService> pref_service_; 347 scoped_ptr<PrefService> pref_service_;
342 }; 348 };
343 349
344 TEST_P(PrefProxyConfigServiceCommandLineTest, CommandLine) { 350 TEST_P(PrefProxyConfigTrackerCommandLineTest, CommandLine) {
345 net::ProxyConfig config; 351 net::ProxyConfig config;
346 EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID, 352 EXPECT_EQ(net::ProxyConfigService::CONFIG_VALID,
347 proxy_config_service_->GetLatestProxyConfig(&config)); 353 proxy_config_service_->GetLatestProxyConfig(&config));
348 354
349 if (GetParam().is_null) { 355 if (GetParam().is_null) {
350 EXPECT_EQ(GURL(kFixedPacUrl), config.pac_url()); 356 EXPECT_EQ(GURL(kFixedPacUrl), config.pac_url());
351 } else { 357 } else {
352 EXPECT_NE(GURL(kFixedPacUrl), config.pac_url()); 358 EXPECT_NE(GURL(kFixedPacUrl), config.pac_url());
353 EXPECT_EQ(GetParam().auto_detect, config.auto_detect()); 359 EXPECT_EQ(GetParam().auto_detect, config.auto_detect());
354 EXPECT_EQ(GetParam().pac_url, config.pac_url()); 360 EXPECT_EQ(GetParam().pac_url, config.pac_url());
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 }, 466 },
461 // Expected result 467 // Expected result
462 false, // is_null 468 false, // is_null
463 true, // auto_detect 469 true, // auto_detect
464 GURL(), // pac_url 470 GURL(), // pac_url
465 net::ProxyRulesExpectation::Empty(), 471 net::ProxyRulesExpectation::Empty(),
466 }, 472 },
467 }; 473 };
468 474
469 INSTANTIATE_TEST_CASE_P( 475 INSTANTIATE_TEST_CASE_P(
470 PrefProxyConfigServiceCommandLineTestInstance, 476 PrefProxyConfigTrackerCommandLineTestInstance,
471 PrefProxyConfigServiceCommandLineTest, 477 PrefProxyConfigTrackerCommandLineTest,
472 testing::ValuesIn(kCommandLineTestParams)); 478 testing::ValuesIn(kCommandLineTestParams));
473 479
474 } // namespace 480 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698