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

Side by Side Diff: net/proxy/proxy_service_unittest.cc

Issue 126303: Add a "LoadLog*" parameter to transactions, hostresolver, clientsocketpool. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: sync again Created 11 years, 4 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
« no previous file with comments | « net/proxy/proxy_service.cc ('k') | net/socket/client_socket_handle.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 <vector> 5 #include <vector>
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "googleurl/src/gurl.h" 9 #include "googleurl/src/gurl.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 }; 85 };
86 86
87 TEST(ProxyServiceTest, Direct) { 87 TEST(ProxyServiceTest, Direct) {
88 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 88 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
89 ProxyService service(new MockProxyConfigService, resolver); 89 ProxyService service(new MockProxyConfigService, resolver);
90 90
91 GURL url("http://www.google.com/"); 91 GURL url("http://www.google.com/");
92 92
93 ProxyInfo info; 93 ProxyInfo info;
94 TestCompletionCallback callback; 94 TestCompletionCallback callback;
95 int rv = service.ResolveProxy(url, &info, &callback, NULL); 95 int rv = service.ResolveProxy(NULL, url, &info, &callback, NULL);
96 EXPECT_EQ(OK, rv); 96 EXPECT_EQ(OK, rv);
97 EXPECT_TRUE(resolver->pending_requests().empty()); 97 EXPECT_TRUE(resolver->pending_requests().empty());
98 98
99 EXPECT_TRUE(info.is_direct()); 99 EXPECT_TRUE(info.is_direct());
100 } 100 }
101 101
102 TEST(ProxyServiceTest, PAC) { 102 TEST(ProxyServiceTest, PAC) {
103 MockProxyConfigService* config_service = 103 MockProxyConfigService* config_service =
104 new MockProxyConfigService("http://foopy/proxy.pac"); 104 new MockProxyConfigService("http://foopy/proxy.pac");
105 105
106 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 106 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
107 107
108 ProxyService service(config_service, resolver); 108 ProxyService service(config_service, resolver);
109 109
110 GURL url("http://www.google.com/"); 110 GURL url("http://www.google.com/");
111 111
112 ProxyInfo info; 112 ProxyInfo info;
113 TestCompletionCallback callback; 113 TestCompletionCallback callback;
114 int rv = service.ResolveProxy(url, &info, &callback, NULL); 114 int rv = service.ResolveProxy(NULL, url, &info, &callback, NULL);
115 EXPECT_EQ(ERR_IO_PENDING, rv); 115 EXPECT_EQ(ERR_IO_PENDING, rv);
116 116
117 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 117 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
118 resolver->pending_set_pac_script_request()->pac_url()); 118 resolver->pending_set_pac_script_request()->pac_url());
119 resolver->pending_set_pac_script_request()->CompleteNow(OK); 119 resolver->pending_set_pac_script_request()->CompleteNow(OK);
120 120
121 ASSERT_EQ(1u, resolver->pending_requests().size()); 121 ASSERT_EQ(1u, resolver->pending_requests().size());
122 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 122 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
123 123
124 // Set the result in proxy resolver. 124 // Set the result in proxy resolver.
(...skipping 12 matching lines...) Expand all
137 new MockProxyConfigService("http://foopy/proxy.pac"); 137 new MockProxyConfigService("http://foopy/proxy.pac");
138 138
139 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 139 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
140 140
141 ProxyService service(config_service, resolver); 141 ProxyService service(config_service, resolver);
142 142
143 GURL url("http://username:password@www.google.com/?ref#hash#hash"); 143 GURL url("http://username:password@www.google.com/?ref#hash#hash");
144 144
145 ProxyInfo info; 145 ProxyInfo info;
146 TestCompletionCallback callback; 146 TestCompletionCallback callback;
147 int rv = service.ResolveProxy(url, &info, &callback, NULL); 147 int rv = service.ResolveProxy(NULL, url, &info, &callback, NULL);
148 EXPECT_EQ(ERR_IO_PENDING, rv); 148 EXPECT_EQ(ERR_IO_PENDING, rv);
149 149
150 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 150 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
151 resolver->pending_set_pac_script_request()->pac_url()); 151 resolver->pending_set_pac_script_request()->pac_url());
152 resolver->pending_set_pac_script_request()->CompleteNow(OK); 152 resolver->pending_set_pac_script_request()->CompleteNow(OK);
153 153
154 ASSERT_EQ(1u, resolver->pending_requests().size()); 154 ASSERT_EQ(1u, resolver->pending_requests().size());
155 // The URL should have been simplified, stripping the username/password/hash. 155 // The URL should have been simplified, stripping the username/password/hash.
156 EXPECT_EQ(GURL("http://www.google.com/?ref"), 156 EXPECT_EQ(GURL("http://www.google.com/?ref"),
157 resolver->pending_requests()[0]->url()); 157 resolver->pending_requests()[0]->url());
158 158
159 // We end here without ever completing the request -- destruction of 159 // We end here without ever completing the request -- destruction of
160 // ProxyService will cancel the outstanding request. 160 // ProxyService will cancel the outstanding request.
161 } 161 }
162 162
163 TEST(ProxyServiceTest, PAC_FailoverToDirect) { 163 TEST(ProxyServiceTest, PAC_FailoverToDirect) {
164 MockProxyConfigService* config_service = 164 MockProxyConfigService* config_service =
165 new MockProxyConfigService("http://foopy/proxy.pac"); 165 new MockProxyConfigService("http://foopy/proxy.pac");
166 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 166 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
167 167
168 ProxyService service(config_service, resolver); 168 ProxyService service(config_service, resolver);
169 169
170 GURL url("http://www.google.com/"); 170 GURL url("http://www.google.com/");
171 171
172 ProxyInfo info; 172 ProxyInfo info;
173 TestCompletionCallback callback1; 173 TestCompletionCallback callback1;
174 int rv = service.ResolveProxy(url, &info, &callback1, NULL); 174 int rv = service.ResolveProxy(NULL, url, &info, &callback1, NULL);
175 EXPECT_EQ(ERR_IO_PENDING, rv); 175 EXPECT_EQ(ERR_IO_PENDING, rv);
176 176
177 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 177 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
178 resolver->pending_set_pac_script_request()->pac_url()); 178 resolver->pending_set_pac_script_request()->pac_url());
179 resolver->pending_set_pac_script_request()->CompleteNow(OK); 179 resolver->pending_set_pac_script_request()->CompleteNow(OK);
180 180
181 ASSERT_EQ(1u, resolver->pending_requests().size()); 181 ASSERT_EQ(1u, resolver->pending_requests().size());
182 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 182 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
183 183
184 // Set the result in proxy resolver. 184 // Set the result in proxy resolver.
185 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); 185 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy:8080");
186 resolver->pending_requests()[0]->CompleteNow(OK); 186 resolver->pending_requests()[0]->CompleteNow(OK);
187 187
188 EXPECT_EQ(OK, callback1.WaitForResult()); 188 EXPECT_EQ(OK, callback1.WaitForResult());
189 EXPECT_FALSE(info.is_direct()); 189 EXPECT_FALSE(info.is_direct());
190 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); 190 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI());
191 191
192 // Now, imagine that connecting to foopy:8080 fails. 192 // Now, imagine that connecting to foopy:8080 fails.
193 TestCompletionCallback callback2; 193 TestCompletionCallback callback2;
194 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL); 194 rv = service.ReconsiderProxyAfterError(NULL, url, &info, &callback2, NULL);
195 EXPECT_EQ(OK, rv); 195 EXPECT_EQ(OK, rv);
196 EXPECT_TRUE(info.is_direct()); 196 EXPECT_TRUE(info.is_direct());
197 } 197 }
198 198
199 TEST(ProxyServiceTest, ProxyResolverFails) { 199 TEST(ProxyServiceTest, ProxyResolverFails) {
200 // Test what happens when the ProxyResolver fails (this could represent 200 // Test what happens when the ProxyResolver fails (this could represent
201 // a failure to download the PAC script in the case of ProxyResolvers which 201 // a failure to download the PAC script in the case of ProxyResolvers which
202 // do the fetch internally.) 202 // do the fetch internally.)
203 // TODO(eroman): change this comment. 203 // TODO(eroman): change this comment.
204 204
205 MockProxyConfigService* config_service = 205 MockProxyConfigService* config_service =
206 new MockProxyConfigService("http://foopy/proxy.pac"); 206 new MockProxyConfigService("http://foopy/proxy.pac");
207 207
208 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 208 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
209 209
210 ProxyService service(config_service, resolver); 210 ProxyService service(config_service, resolver);
211 211
212 // Start first resolve request. 212 // Start first resolve request.
213 GURL url("http://www.google.com/"); 213 GURL url("http://www.google.com/");
214 ProxyInfo info; 214 ProxyInfo info;
215 TestCompletionCallback callback1; 215 TestCompletionCallback callback1;
216 int rv = service.ResolveProxy(url, &info, &callback1, NULL); 216 int rv = service.ResolveProxy(NULL, url, &info, &callback1, NULL);
217 EXPECT_EQ(ERR_IO_PENDING, rv); 217 EXPECT_EQ(ERR_IO_PENDING, rv);
218 218
219 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 219 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
220 resolver->pending_set_pac_script_request()->pac_url()); 220 resolver->pending_set_pac_script_request()->pac_url());
221 resolver->pending_set_pac_script_request()->CompleteNow(OK); 221 resolver->pending_set_pac_script_request()->CompleteNow(OK);
222 222
223 ASSERT_EQ(1u, resolver->pending_requests().size()); 223 ASSERT_EQ(1u, resolver->pending_requests().size());
224 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 224 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
225 225
226 // Fail the first resolve request in MockAsyncProxyResolver. 226 // Fail the first resolve request in MockAsyncProxyResolver.
227 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); 227 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED);
228 228
229 EXPECT_EQ(ERR_FAILED, callback1.WaitForResult()); 229 EXPECT_EQ(ERR_FAILED, callback1.WaitForResult());
230 230
231 // The second resolve request will automatically select direct connect, 231 // The second resolve request will automatically select direct connect,
232 // because it has cached the configuration as being bad. 232 // because it has cached the configuration as being bad.
233 TestCompletionCallback callback2; 233 TestCompletionCallback callback2;
234 rv = service.ResolveProxy(url, &info, &callback2, NULL); 234 rv = service.ResolveProxy(NULL, url, &info, &callback2, NULL);
235 EXPECT_EQ(OK, rv); 235 EXPECT_EQ(OK, rv);
236 EXPECT_TRUE(info.is_direct()); 236 EXPECT_TRUE(info.is_direct());
237 EXPECT_TRUE(resolver->pending_requests().empty()); 237 EXPECT_TRUE(resolver->pending_requests().empty());
238 238
239 // But, if that fails, then we should give the proxy config another shot 239 // But, if that fails, then we should give the proxy config another shot
240 // since we have never tried it with this URL before. 240 // since we have never tried it with this URL before.
241 TestCompletionCallback callback3; 241 TestCompletionCallback callback3;
242 rv = service.ReconsiderProxyAfterError(url, &info, &callback3, NULL); 242 rv = service.ReconsiderProxyAfterError(NULL, url, &info, &callback3, NULL);
243 EXPECT_EQ(ERR_IO_PENDING, rv); 243 EXPECT_EQ(ERR_IO_PENDING, rv);
244 244
245 ASSERT_EQ(1u, resolver->pending_requests().size()); 245 ASSERT_EQ(1u, resolver->pending_requests().size());
246 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 246 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
247 247
248 // Set the result in proxy resolver. 248 // Set the result in proxy resolver.
249 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); 249 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080");
250 resolver->pending_requests()[0]->CompleteNow(OK); 250 resolver->pending_requests()[0]->CompleteNow(OK);
251 251
252 EXPECT_EQ(OK, callback3.WaitForResult()); 252 EXPECT_EQ(OK, callback3.WaitForResult());
(...skipping 10 matching lines...) Expand all
263 263
264 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 264 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
265 265
266 ProxyService service(config_service, resolver); 266 ProxyService service(config_service, resolver);
267 267
268 GURL url("http://www.google.com/"); 268 GURL url("http://www.google.com/");
269 269
270 // Get the proxy information. 270 // Get the proxy information.
271 ProxyInfo info; 271 ProxyInfo info;
272 TestCompletionCallback callback1; 272 TestCompletionCallback callback1;
273 int rv = service.ResolveProxy(url, &info, &callback1, NULL); 273 int rv = service.ResolveProxy(NULL, url, &info, &callback1, NULL);
274 EXPECT_EQ(ERR_IO_PENDING, rv); 274 EXPECT_EQ(ERR_IO_PENDING, rv);
275 275
276 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 276 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
277 resolver->pending_set_pac_script_request()->pac_url()); 277 resolver->pending_set_pac_script_request()->pac_url());
278 resolver->pending_set_pac_script_request()->CompleteNow(OK); 278 resolver->pending_set_pac_script_request()->CompleteNow(OK);
279 279
280 ASSERT_EQ(1u, resolver->pending_requests().size()); 280 ASSERT_EQ(1u, resolver->pending_requests().size());
281 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 281 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
282 282
283 // Set the result in proxy resolver. 283 // Set the result in proxy resolver.
284 resolver->pending_requests()[0]->results()->UseNamedProxy( 284 resolver->pending_requests()[0]->results()->UseNamedProxy(
285 "foopy1:8080;foopy2:9090"); 285 "foopy1:8080;foopy2:9090");
286 resolver->pending_requests()[0]->CompleteNow(OK); 286 resolver->pending_requests()[0]->CompleteNow(OK);
287 287
288 // The first item is valid. 288 // The first item is valid.
289 EXPECT_EQ(OK, callback1.WaitForResult()); 289 EXPECT_EQ(OK, callback1.WaitForResult());
290 EXPECT_FALSE(info.is_direct()); 290 EXPECT_FALSE(info.is_direct());
291 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 291 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
292 292
293 // Fake an error on the proxy. 293 // Fake an error on the proxy.
294 TestCompletionCallback callback2; 294 TestCompletionCallback callback2;
295 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL); 295 rv = service.ReconsiderProxyAfterError(NULL, url, &info, &callback2, NULL);
296 EXPECT_EQ(OK, rv); 296 EXPECT_EQ(OK, rv);
297 297
298 // The second proxy should be specified. 298 // The second proxy should be specified.
299 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 299 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
300 300
301 TestCompletionCallback callback3; 301 TestCompletionCallback callback3;
302 rv = service.ResolveProxy(url, &info, &callback3, NULL); 302 rv = service.ResolveProxy(NULL, url, &info, &callback3, NULL);
303 EXPECT_EQ(ERR_IO_PENDING, rv); 303 EXPECT_EQ(ERR_IO_PENDING, rv);
304 304
305 ASSERT_EQ(1u, resolver->pending_requests().size()); 305 ASSERT_EQ(1u, resolver->pending_requests().size());
306 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 306 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
307 307
308 // Set the result in proxy resolver -- the second result is already known 308 // Set the result in proxy resolver -- the second result is already known
309 // to be bad. 309 // to be bad.
310 resolver->pending_requests()[0]->results()->UseNamedProxy( 310 resolver->pending_requests()[0]->results()->UseNamedProxy(
311 "foopy3:7070;foopy1:8080;foopy2:9090"); 311 "foopy3:7070;foopy1:8080;foopy2:9090");
312 resolver->pending_requests()[0]->CompleteNow(OK); 312 resolver->pending_requests()[0]->CompleteNow(OK);
313 313
314 EXPECT_EQ(OK, callback3.WaitForResult()); 314 EXPECT_EQ(OK, callback3.WaitForResult());
315 EXPECT_FALSE(info.is_direct()); 315 EXPECT_FALSE(info.is_direct());
316 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); 316 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI());
317 317
318 // We fake another error. It should now try the third one. 318 // We fake another error. It should now try the third one.
319 TestCompletionCallback callback4; 319 TestCompletionCallback callback4;
320 rv = service.ReconsiderProxyAfterError(url, &info, &callback4, NULL); 320 rv = service.ReconsiderProxyAfterError(NULL, url, &info, &callback4, NULL);
321 EXPECT_EQ(OK, rv); 321 EXPECT_EQ(OK, rv);
322 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 322 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
323 323
324 // Fake another error, the last proxy is gone, the list should now be empty. 324 // Fake another error, the last proxy is gone, the list should now be empty.
325 TestCompletionCallback callback5; 325 TestCompletionCallback callback5;
326 rv = service.ReconsiderProxyAfterError(url, &info, &callback5, NULL); 326 rv = service.ReconsiderProxyAfterError(NULL, url, &info, &callback5, NULL);
327 EXPECT_EQ(OK, rv); // We try direct. 327 EXPECT_EQ(OK, rv); // We try direct.
328 EXPECT_TRUE(info.is_direct()); 328 EXPECT_TRUE(info.is_direct());
329 329
330 // If it fails again, we don't have anything else to try. 330 // If it fails again, we don't have anything else to try.
331 TestCompletionCallback callback6; 331 TestCompletionCallback callback6;
332 rv = service.ReconsiderProxyAfterError(url, &info, &callback6, NULL); 332 rv = service.ReconsiderProxyAfterError(NULL, url, &info, &callback6, NULL);
333 EXPECT_EQ(ERR_FAILED, rv); 333 EXPECT_EQ(ERR_FAILED, rv);
334 334
335 // TODO(nsylvain): Test that the proxy can be retried after the delay. 335 // TODO(nsylvain): Test that the proxy can be retried after the delay.
336 } 336 }
337 337
338 TEST(ProxyServiceTest, ProxyFallback_NewSettings) { 338 TEST(ProxyServiceTest, ProxyFallback_NewSettings) {
339 // Test proxy failover when new settings are available. 339 // Test proxy failover when new settings are available.
340 340
341 MockProxyConfigService* config_service = 341 MockProxyConfigService* config_service =
342 new MockProxyConfigService("http://foopy/proxy.pac"); 342 new MockProxyConfigService("http://foopy/proxy.pac");
343 343
344 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 344 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
345 345
346 ProxyService service(config_service, resolver); 346 ProxyService service(config_service, resolver);
347 347
348 GURL url("http://www.google.com/"); 348 GURL url("http://www.google.com/");
349 349
350 // Get the proxy information. 350 // Get the proxy information.
351 ProxyInfo info; 351 ProxyInfo info;
352 TestCompletionCallback callback1; 352 TestCompletionCallback callback1;
353 int rv = service.ResolveProxy(url, &info, &callback1, NULL); 353 int rv = service.ResolveProxy(NULL, url, &info, &callback1, NULL);
354 EXPECT_EQ(ERR_IO_PENDING, rv); 354 EXPECT_EQ(ERR_IO_PENDING, rv);
355 355
356 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 356 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
357 resolver->pending_set_pac_script_request()->pac_url()); 357 resolver->pending_set_pac_script_request()->pac_url());
358 resolver->pending_set_pac_script_request()->CompleteNow(OK); 358 resolver->pending_set_pac_script_request()->CompleteNow(OK);
359 359
360 ASSERT_EQ(1u, resolver->pending_requests().size()); 360 ASSERT_EQ(1u, resolver->pending_requests().size());
361 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 361 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
362 362
363 // Set the result in proxy resolver. 363 // Set the result in proxy resolver.
364 resolver->pending_requests()[0]->results()->UseNamedProxy( 364 resolver->pending_requests()[0]->results()->UseNamedProxy(
365 "foopy1:8080;foopy2:9090"); 365 "foopy1:8080;foopy2:9090");
366 resolver->pending_requests()[0]->CompleteNow(OK); 366 resolver->pending_requests()[0]->CompleteNow(OK);
367 367
368 // The first item is valid. 368 // The first item is valid.
369 EXPECT_EQ(OK, callback1.WaitForResult()); 369 EXPECT_EQ(OK, callback1.WaitForResult());
370 EXPECT_FALSE(info.is_direct()); 370 EXPECT_FALSE(info.is_direct());
371 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 371 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
372 372
373 // Fake an error on the proxy, and also a new configuration on the proxy. 373 // Fake an error on the proxy, and also a new configuration on the proxy.
374 config_service->config = ProxyConfig(); 374 config_service->config = ProxyConfig();
375 config_service->config.pac_url = GURL("http://foopy-new/proxy.pac"); 375 config_service->config.pac_url = GURL("http://foopy-new/proxy.pac");
376 376
377 TestCompletionCallback callback2; 377 TestCompletionCallback callback2;
378 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL); 378 rv = service.ReconsiderProxyAfterError(NULL, url, &info, &callback2, NULL);
379 EXPECT_EQ(ERR_IO_PENDING, rv); 379 EXPECT_EQ(ERR_IO_PENDING, rv);
380 380
381 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), 381 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"),
382 resolver->pending_set_pac_script_request()->pac_url()); 382 resolver->pending_set_pac_script_request()->pac_url());
383 resolver->pending_set_pac_script_request()->CompleteNow(OK); 383 resolver->pending_set_pac_script_request()->CompleteNow(OK);
384 384
385 ASSERT_EQ(1u, resolver->pending_requests().size()); 385 ASSERT_EQ(1u, resolver->pending_requests().size());
386 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 386 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
387 387
388 resolver->pending_requests()[0]->results()->UseNamedProxy( 388 resolver->pending_requests()[0]->results()->UseNamedProxy(
389 "foopy1:8080;foopy2:9090"); 389 "foopy1:8080;foopy2:9090");
390 resolver->pending_requests()[0]->CompleteNow(OK); 390 resolver->pending_requests()[0]->CompleteNow(OK);
391 391
392 // The first proxy is still there since the configuration changed. 392 // The first proxy is still there since the configuration changed.
393 EXPECT_EQ(OK, callback2.WaitForResult()); 393 EXPECT_EQ(OK, callback2.WaitForResult());
394 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 394 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
395 395
396 // We fake another error. It should now ignore the first one. 396 // We fake another error. It should now ignore the first one.
397 TestCompletionCallback callback3; 397 TestCompletionCallback callback3;
398 rv = service.ReconsiderProxyAfterError(url, &info, &callback3, NULL); 398 rv = service.ReconsiderProxyAfterError(NULL, url, &info, &callback3, NULL);
399 EXPECT_EQ(OK, rv); 399 EXPECT_EQ(OK, rv);
400 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 400 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
401 401
402 // We simulate a new configuration. 402 // We simulate a new configuration.
403 config_service->config = ProxyConfig(); 403 config_service->config = ProxyConfig();
404 config_service->config.pac_url = GURL("http://foopy-new2/proxy.pac"); 404 config_service->config.pac_url = GURL("http://foopy-new2/proxy.pac");
405 405
406 // We fake another error. It should go back to the first proxy. 406 // We fake another error. It should go back to the first proxy.
407 TestCompletionCallback callback4; 407 TestCompletionCallback callback4;
408 rv = service.ReconsiderProxyAfterError(url, &info, &callback4, NULL); 408 rv = service.ReconsiderProxyAfterError(NULL, url, &info, &callback4, NULL);
409 EXPECT_EQ(ERR_IO_PENDING, rv); 409 EXPECT_EQ(ERR_IO_PENDING, rv);
410 410
411 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), 411 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"),
412 resolver->pending_set_pac_script_request()->pac_url()); 412 resolver->pending_set_pac_script_request()->pac_url());
413 resolver->pending_set_pac_script_request()->CompleteNow(OK); 413 resolver->pending_set_pac_script_request()->CompleteNow(OK);
414 414
415 ASSERT_EQ(1u, resolver->pending_requests().size()); 415 ASSERT_EQ(1u, resolver->pending_requests().size());
416 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 416 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
417 417
418 resolver->pending_requests()[0]->results()->UseNamedProxy( 418 resolver->pending_requests()[0]->results()->UseNamedProxy(
(...skipping 12 matching lines...) Expand all
431 431
432 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 432 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
433 433
434 ProxyService service(config_service, resolver); 434 ProxyService service(config_service, resolver);
435 435
436 GURL url("http://www.google.com/"); 436 GURL url("http://www.google.com/");
437 437
438 // Get the proxy information. 438 // Get the proxy information.
439 ProxyInfo info; 439 ProxyInfo info;
440 TestCompletionCallback callback1; 440 TestCompletionCallback callback1;
441 int rv = service.ResolveProxy(url, &info, &callback1, NULL); 441 int rv = service.ResolveProxy(NULL, url, &info, &callback1, NULL);
442 EXPECT_EQ(ERR_IO_PENDING, rv); 442 EXPECT_EQ(ERR_IO_PENDING, rv);
443 443
444 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 444 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
445 resolver->pending_set_pac_script_request()->pac_url()); 445 resolver->pending_set_pac_script_request()->pac_url());
446 resolver->pending_set_pac_script_request()->CompleteNow(OK); 446 resolver->pending_set_pac_script_request()->CompleteNow(OK);
447 ASSERT_EQ(1u, resolver->pending_requests().size()); 447 ASSERT_EQ(1u, resolver->pending_requests().size());
448 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 448 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
449 449
450 resolver->pending_requests()[0]->results()->UseNamedProxy( 450 resolver->pending_requests()[0]->results()->UseNamedProxy(
451 "foopy1:8080;foopy2:9090"); 451 "foopy1:8080;foopy2:9090");
452 resolver->pending_requests()[0]->CompleteNow(OK); 452 resolver->pending_requests()[0]->CompleteNow(OK);
453 453
454 // The first item is valid. 454 // The first item is valid.
455 EXPECT_EQ(OK, callback1.WaitForResult()); 455 EXPECT_EQ(OK, callback1.WaitForResult());
456 EXPECT_FALSE(info.is_direct()); 456 EXPECT_FALSE(info.is_direct());
457 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 457 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
458 458
459 // Fake a proxy error. 459 // Fake a proxy error.
460 TestCompletionCallback callback2; 460 TestCompletionCallback callback2;
461 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL); 461 rv = service.ReconsiderProxyAfterError(NULL, url, &info, &callback2, NULL);
462 EXPECT_EQ(OK, rv); 462 EXPECT_EQ(OK, rv);
463 463
464 // The first proxy is ignored, and the second one is selected. 464 // The first proxy is ignored, and the second one is selected.
465 EXPECT_FALSE(info.is_direct()); 465 EXPECT_FALSE(info.is_direct());
466 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 466 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
467 467
468 // Fake a PAC failure. 468 // Fake a PAC failure.
469 ProxyInfo info2; 469 ProxyInfo info2;
470 TestCompletionCallback callback3; 470 TestCompletionCallback callback3;
471 rv = service.ResolveProxy(url, &info2, &callback3, NULL); 471 rv = service.ResolveProxy(NULL, url, &info2, &callback3, NULL);
472 EXPECT_EQ(ERR_IO_PENDING, rv); 472 EXPECT_EQ(ERR_IO_PENDING, rv);
473 473
474 ASSERT_EQ(1u, resolver->pending_requests().size()); 474 ASSERT_EQ(1u, resolver->pending_requests().size());
475 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 475 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
476 476
477 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); 477 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED);
478 478
479 // No proxy servers are returned. It's a direct connection. 479 // No proxy servers are returned. It's a direct connection.
480 EXPECT_EQ(ERR_FAILED, callback3.WaitForResult()); 480 EXPECT_EQ(ERR_FAILED, callback3.WaitForResult());
481 EXPECT_TRUE(info2.is_direct()); 481 EXPECT_TRUE(info2.is_direct());
482 482
483 // The PAC will now be fixed and will return a proxy server. 483 // The PAC will now be fixed and will return a proxy server.
484 // It should also clear the list of bad proxies. 484 // It should also clear the list of bad proxies.
485 485
486 // Try to resolve, it will still return "direct" because we have no reason 486 // Try to resolve, it will still return "direct" because we have no reason
487 // to check the config since everything works. 487 // to check the config since everything works.
488 ProxyInfo info3; 488 ProxyInfo info3;
489 TestCompletionCallback callback4; 489 TestCompletionCallback callback4;
490 rv = service.ResolveProxy(url, &info3, &callback4, NULL); 490 rv = service.ResolveProxy(NULL, url, &info3, &callback4, NULL);
491 EXPECT_EQ(OK, rv); 491 EXPECT_EQ(OK, rv);
492 EXPECT_TRUE(info3.is_direct()); 492 EXPECT_TRUE(info3.is_direct());
493 493
494 // But if the direct connection fails, we check if the ProxyInfo tried to 494 // But if the direct connection fails, we check if the ProxyInfo tried to
495 // resolve the proxy before, and if not (like in this case), we give the 495 // resolve the proxy before, and if not (like in this case), we give the
496 // PAC another try. 496 // PAC another try.
497 TestCompletionCallback callback5; 497 TestCompletionCallback callback5;
498 rv = service.ReconsiderProxyAfterError(url, &info3, &callback5, NULL); 498 rv = service.ReconsiderProxyAfterError(NULL, url, &info3, &callback5, NULL);
499 EXPECT_EQ(ERR_IO_PENDING, rv); 499 EXPECT_EQ(ERR_IO_PENDING, rv);
500 500
501 ASSERT_EQ(1u, resolver->pending_requests().size()); 501 ASSERT_EQ(1u, resolver->pending_requests().size());
502 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 502 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
503 503
504 resolver->pending_requests()[0]->results()->UseNamedProxy( 504 resolver->pending_requests()[0]->results()->UseNamedProxy(
505 "foopy1:8080;foopy2:9090"); 505 "foopy1:8080;foopy2:9090");
506 resolver->pending_requests()[0]->CompleteNow(OK); 506 resolver->pending_requests()[0]->CompleteNow(OK);
507 507
508 // The first proxy is still there since the list of bad proxies got cleared. 508 // The first proxy is still there since the list of bad proxies got cleared.
(...skipping 10 matching lines...) Expand all
519 config.proxy_rules.ParseFromString("foopy1:8080;foopy2:9090"); 519 config.proxy_rules.ParseFromString("foopy1:8080;foopy2:9090");
520 config.auto_detect = false; 520 config.auto_detect = false;
521 config.proxy_bypass_local_names = true; 521 config.proxy_bypass_local_names = true;
522 522
523 { 523 {
524 ProxyService service(new MockProxyConfigService(config), 524 ProxyService service(new MockProxyConfigService(config),
525 new MockAsyncProxyResolver()); 525 new MockAsyncProxyResolver());
526 GURL url("http://www.google.com/"); 526 GURL url("http://www.google.com/");
527 // Get the proxy information. 527 // Get the proxy information.
528 TestCompletionCallback callback; 528 TestCompletionCallback callback;
529 int rv = service.ResolveProxy(url, &info, &callback, NULL); 529 int rv = service.ResolveProxy(NULL, url, &info, &callback, NULL);
530 EXPECT_EQ(OK, rv); 530 EXPECT_EQ(OK, rv);
531 EXPECT_FALSE(info.is_direct()); 531 EXPECT_FALSE(info.is_direct());
532 } 532 }
533 533
534 { 534 {
535 ProxyService service(new MockProxyConfigService(config), 535 ProxyService service(new MockProxyConfigService(config),
536 new MockAsyncProxyResolver()); 536 new MockAsyncProxyResolver());
537 GURL test_url("http://local"); 537 GURL test_url("http://local");
538 TestCompletionCallback callback; 538 TestCompletionCallback callback;
539 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 539 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
540 EXPECT_EQ(OK, rv); 540 EXPECT_EQ(OK, rv);
541 EXPECT_TRUE(info.is_direct()); 541 EXPECT_TRUE(info.is_direct());
542 } 542 }
543 543
544 config.proxy_bypass.clear(); 544 config.proxy_bypass.clear();
545 config.proxy_bypass.push_back("*.org"); 545 config.proxy_bypass.push_back("*.org");
546 config.proxy_bypass_local_names = true; 546 config.proxy_bypass_local_names = true;
547 { 547 {
548 ProxyService service(new MockProxyConfigService(config), 548 ProxyService service(new MockProxyConfigService(config),
549 new MockAsyncProxyResolver); 549 new MockAsyncProxyResolver);
550 GURL test_url("http://www.webkit.org"); 550 GURL test_url("http://www.webkit.org");
551 TestCompletionCallback callback; 551 TestCompletionCallback callback;
552 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 552 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
553 EXPECT_EQ(OK, rv); 553 EXPECT_EQ(OK, rv);
554 EXPECT_TRUE(info.is_direct()); 554 EXPECT_TRUE(info.is_direct());
555 } 555 }
556 556
557 config.proxy_bypass.clear(); 557 config.proxy_bypass.clear();
558 config.proxy_bypass.push_back("*.org"); 558 config.proxy_bypass.push_back("*.org");
559 config.proxy_bypass.push_back("7*"); 559 config.proxy_bypass.push_back("7*");
560 config.proxy_bypass_local_names = true; 560 config.proxy_bypass_local_names = true;
561 { 561 {
562 ProxyService service(new MockProxyConfigService(config), 562 ProxyService service(new MockProxyConfigService(config),
563 new MockAsyncProxyResolver); 563 new MockAsyncProxyResolver);
564 GURL test_url("http://74.125.19.147"); 564 GURL test_url("http://74.125.19.147");
565 TestCompletionCallback callback; 565 TestCompletionCallback callback;
566 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 566 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
567 EXPECT_EQ(OK, rv); 567 EXPECT_EQ(OK, rv);
568 EXPECT_TRUE(info.is_direct()); 568 EXPECT_TRUE(info.is_direct());
569 } 569 }
570 570
571 config.proxy_bypass.clear(); 571 config.proxy_bypass.clear();
572 config.proxy_bypass.push_back("*.org"); 572 config.proxy_bypass.push_back("*.org");
573 config.proxy_bypass_local_names = true; 573 config.proxy_bypass_local_names = true;
574 { 574 {
575 ProxyService service(new MockProxyConfigService(config), 575 ProxyService service(new MockProxyConfigService(config),
576 new MockAsyncProxyResolver); 576 new MockAsyncProxyResolver);
577 GURL test_url("http://www.msn.com"); 577 GURL test_url("http://www.msn.com");
578 TestCompletionCallback callback; 578 TestCompletionCallback callback;
579 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 579 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
580 EXPECT_EQ(OK, rv); 580 EXPECT_EQ(OK, rv);
581 EXPECT_FALSE(info.is_direct()); 581 EXPECT_FALSE(info.is_direct());
582 } 582 }
583 583
584 config.proxy_bypass.clear(); 584 config.proxy_bypass.clear();
585 config.proxy_bypass.push_back("*.MSN.COM"); 585 config.proxy_bypass.push_back("*.MSN.COM");
586 config.proxy_bypass_local_names = true; 586 config.proxy_bypass_local_names = true;
587 { 587 {
588 ProxyService service(new MockProxyConfigService(config), 588 ProxyService service(new MockProxyConfigService(config),
589 new MockAsyncProxyResolver); 589 new MockAsyncProxyResolver);
590 GURL test_url("http://www.msnbc.msn.com"); 590 GURL test_url("http://www.msnbc.msn.com");
591 TestCompletionCallback callback; 591 TestCompletionCallback callback;
592 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 592 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
593 EXPECT_EQ(OK, rv); 593 EXPECT_EQ(OK, rv);
594 EXPECT_TRUE(info.is_direct()); 594 EXPECT_TRUE(info.is_direct());
595 } 595 }
596 596
597 config.proxy_bypass.clear(); 597 config.proxy_bypass.clear();
598 config.proxy_bypass.push_back("*.msn.com"); 598 config.proxy_bypass.push_back("*.msn.com");
599 config.proxy_bypass_local_names = true; 599 config.proxy_bypass_local_names = true;
600 { 600 {
601 ProxyService service(new MockProxyConfigService(config), 601 ProxyService service(new MockProxyConfigService(config),
602 new MockAsyncProxyResolver); 602 new MockAsyncProxyResolver);
603 GURL test_url("HTTP://WWW.MSNBC.MSN.COM"); 603 GURL test_url("HTTP://WWW.MSNBC.MSN.COM");
604 TestCompletionCallback callback; 604 TestCompletionCallback callback;
605 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 605 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
606 EXPECT_EQ(OK, rv); 606 EXPECT_EQ(OK, rv);
607 EXPECT_TRUE(info.is_direct()); 607 EXPECT_TRUE(info.is_direct());
608 } 608 }
609 } 609 }
610 610
611 TEST(ProxyServiceTest, ProxyBypassListWithPorts) { 611 TEST(ProxyServiceTest, ProxyBypassListWithPorts) {
612 // Test port specification in bypass list entries. 612 // Test port specification in bypass list entries.
613 ProxyInfo info; 613 ProxyInfo info;
614 ProxyConfig config; 614 ProxyConfig config;
615 config.proxy_rules.ParseFromString("foopy1:8080;foopy2:9090"); 615 config.proxy_rules.ParseFromString("foopy1:8080;foopy2:9090");
616 config.auto_detect = false; 616 config.auto_detect = false;
617 config.proxy_bypass_local_names = false; 617 config.proxy_bypass_local_names = false;
618 618
619 config.proxy_bypass.clear(); 619 config.proxy_bypass.clear();
620 config.proxy_bypass.push_back("*.example.com:99"); 620 config.proxy_bypass.push_back("*.example.com:99");
621 { 621 {
622 ProxyService service(new MockProxyConfigService(config), 622 ProxyService service(new MockProxyConfigService(config),
623 new MockAsyncProxyResolver); 623 new MockAsyncProxyResolver);
624 { 624 {
625 GURL test_url("http://www.example.com:99"); 625 GURL test_url("http://www.example.com:99");
626 TestCompletionCallback callback; 626 TestCompletionCallback callback;
627 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 627 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
628 EXPECT_EQ(OK, rv); 628 EXPECT_EQ(OK, rv);
629 EXPECT_TRUE(info.is_direct()); 629 EXPECT_TRUE(info.is_direct());
630 } 630 }
631 { 631 {
632 GURL test_url("http://www.example.com:100"); 632 GURL test_url("http://www.example.com:100");
633 TestCompletionCallback callback; 633 TestCompletionCallback callback;
634 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 634 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
635 EXPECT_EQ(OK, rv); 635 EXPECT_EQ(OK, rv);
636 EXPECT_FALSE(info.is_direct()); 636 EXPECT_FALSE(info.is_direct());
637 } 637 }
638 { 638 {
639 GURL test_url("http://www.example.com"); 639 GURL test_url("http://www.example.com");
640 TestCompletionCallback callback; 640 TestCompletionCallback callback;
641 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 641 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
642 EXPECT_EQ(OK, rv); 642 EXPECT_EQ(OK, rv);
643 EXPECT_FALSE(info.is_direct()); 643 EXPECT_FALSE(info.is_direct());
644 } 644 }
645 } 645 }
646 646
647 config.proxy_bypass.clear(); 647 config.proxy_bypass.clear();
648 config.proxy_bypass.push_back("*.example.com:80"); 648 config.proxy_bypass.push_back("*.example.com:80");
649 { 649 {
650 ProxyService service(new MockProxyConfigService(config), 650 ProxyService service(new MockProxyConfigService(config),
651 new MockAsyncProxyResolver); 651 new MockAsyncProxyResolver);
652 GURL test_url("http://www.example.com"); 652 GURL test_url("http://www.example.com");
653 TestCompletionCallback callback; 653 TestCompletionCallback callback;
654 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 654 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
655 EXPECT_EQ(OK, rv); 655 EXPECT_EQ(OK, rv);
656 EXPECT_TRUE(info.is_direct()); 656 EXPECT_TRUE(info.is_direct());
657 } 657 }
658 658
659 config.proxy_bypass.clear(); 659 config.proxy_bypass.clear();
660 config.proxy_bypass.push_back("*.example.com"); 660 config.proxy_bypass.push_back("*.example.com");
661 { 661 {
662 ProxyService service(new MockProxyConfigService(config), 662 ProxyService service(new MockProxyConfigService(config),
663 new MockAsyncProxyResolver); 663 new MockAsyncProxyResolver);
664 GURL test_url("http://www.example.com:99"); 664 GURL test_url("http://www.example.com:99");
665 TestCompletionCallback callback; 665 TestCompletionCallback callback;
666 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 666 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
667 EXPECT_EQ(OK, rv); 667 EXPECT_EQ(OK, rv);
668 EXPECT_TRUE(info.is_direct()); 668 EXPECT_TRUE(info.is_direct());
669 } 669 }
670 670
671 // IPv6 with port. 671 // IPv6 with port.
672 config.proxy_bypass.clear(); 672 config.proxy_bypass.clear();
673 config.proxy_bypass.push_back("[3ffe:2a00:100:7031::1]:99"); 673 config.proxy_bypass.push_back("[3ffe:2a00:100:7031::1]:99");
674 { 674 {
675 ProxyService service(new MockProxyConfigService(config), 675 ProxyService service(new MockProxyConfigService(config),
676 new MockAsyncProxyResolver); 676 new MockAsyncProxyResolver);
677 { 677 {
678 GURL test_url("http://[3ffe:2a00:100:7031::1]:99/"); 678 GURL test_url("http://[3ffe:2a00:100:7031::1]:99/");
679 TestCompletionCallback callback; 679 TestCompletionCallback callback;
680 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 680 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
681 EXPECT_EQ(OK, rv); 681 EXPECT_EQ(OK, rv);
682 EXPECT_TRUE(info.is_direct()); 682 EXPECT_TRUE(info.is_direct());
683 } 683 }
684 { 684 {
685 GURL test_url("http://[3ffe:2a00:100:7031::1]/"); 685 GURL test_url("http://[3ffe:2a00:100:7031::1]/");
686 TestCompletionCallback callback; 686 TestCompletionCallback callback;
687 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 687 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
688 EXPECT_EQ(OK, rv); 688 EXPECT_EQ(OK, rv);
689 EXPECT_FALSE(info.is_direct()); 689 EXPECT_FALSE(info.is_direct());
690 } 690 }
691 } 691 }
692 692
693 // IPv6 without port. The bypass entry ought to work without the 693 // IPv6 without port. The bypass entry ought to work without the
694 // brackets, but the bypass matching logic in ProxyService is 694 // brackets, but the bypass matching logic in ProxyService is
695 // currently limited. 695 // currently limited.
696 config.proxy_bypass.clear(); 696 config.proxy_bypass.clear();
697 config.proxy_bypass.push_back("[3ffe:2a00:100:7031::1]"); 697 config.proxy_bypass.push_back("[3ffe:2a00:100:7031::1]");
698 { 698 {
699 ProxyService service(new MockProxyConfigService(config), 699 ProxyService service(new MockProxyConfigService(config),
700 new MockAsyncProxyResolver); 700 new MockAsyncProxyResolver);
701 { 701 {
702 GURL test_url("http://[3ffe:2a00:100:7031::1]:99/"); 702 GURL test_url("http://[3ffe:2a00:100:7031::1]:99/");
703 TestCompletionCallback callback; 703 TestCompletionCallback callback;
704 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 704 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
705 EXPECT_EQ(OK, rv); 705 EXPECT_EQ(OK, rv);
706 EXPECT_TRUE(info.is_direct()); 706 EXPECT_TRUE(info.is_direct());
707 } 707 }
708 { 708 {
709 GURL test_url("http://[3ffe:2a00:100:7031::1]/"); 709 GURL test_url("http://[3ffe:2a00:100:7031::1]/");
710 TestCompletionCallback callback; 710 TestCompletionCallback callback;
711 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 711 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
712 EXPECT_EQ(OK, rv); 712 EXPECT_EQ(OK, rv);
713 EXPECT_TRUE(info.is_direct()); 713 EXPECT_TRUE(info.is_direct());
714 } 714 }
715 } 715 }
716 } 716 }
717 717
718 TEST(ProxyServiceTest, PerProtocolProxyTests) { 718 TEST(ProxyServiceTest, PerProtocolProxyTests) {
719 ProxyConfig config; 719 ProxyConfig config;
720 config.proxy_rules.ParseFromString("http=foopy1:8080;https=foopy2:8080"); 720 config.proxy_rules.ParseFromString("http=foopy1:8080;https=foopy2:8080");
721 config.auto_detect = false; 721 config.auto_detect = false;
722 { 722 {
723 ProxyService service(new MockProxyConfigService(config), 723 ProxyService service(new MockProxyConfigService(config),
724 new MockAsyncProxyResolver); 724 new MockAsyncProxyResolver);
725 GURL test_url("http://www.msn.com"); 725 GURL test_url("http://www.msn.com");
726 ProxyInfo info; 726 ProxyInfo info;
727 TestCompletionCallback callback; 727 TestCompletionCallback callback;
728 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 728 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
729 EXPECT_EQ(OK, rv); 729 EXPECT_EQ(OK, rv);
730 EXPECT_FALSE(info.is_direct()); 730 EXPECT_FALSE(info.is_direct());
731 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 731 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
732 } 732 }
733 { 733 {
734 ProxyService service(new MockProxyConfigService(config), 734 ProxyService service(new MockProxyConfigService(config),
735 new MockAsyncProxyResolver); 735 new MockAsyncProxyResolver);
736 GURL test_url("ftp://ftp.google.com"); 736 GURL test_url("ftp://ftp.google.com");
737 ProxyInfo info; 737 ProxyInfo info;
738 TestCompletionCallback callback; 738 TestCompletionCallback callback;
739 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 739 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
740 EXPECT_EQ(OK, rv); 740 EXPECT_EQ(OK, rv);
741 EXPECT_TRUE(info.is_direct()); 741 EXPECT_TRUE(info.is_direct());
742 EXPECT_EQ("direct://", info.proxy_server().ToURI()); 742 EXPECT_EQ("direct://", info.proxy_server().ToURI());
743 } 743 }
744 { 744 {
745 ProxyService service(new MockProxyConfigService(config), 745 ProxyService service(new MockProxyConfigService(config),
746 new MockAsyncProxyResolver); 746 new MockAsyncProxyResolver);
747 GURL test_url("https://webbranch.techcu.com"); 747 GURL test_url("https://webbranch.techcu.com");
748 ProxyInfo info; 748 ProxyInfo info;
749 TestCompletionCallback callback; 749 TestCompletionCallback callback;
750 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 750 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
751 EXPECT_EQ(OK, rv); 751 EXPECT_EQ(OK, rv);
752 EXPECT_FALSE(info.is_direct()); 752 EXPECT_FALSE(info.is_direct());
753 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); 753 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI());
754 } 754 }
755 { 755 {
756 config.proxy_rules.ParseFromString("foopy1:8080"); 756 config.proxy_rules.ParseFromString("foopy1:8080");
757 ProxyService service(new MockProxyConfigService(config), 757 ProxyService service(new MockProxyConfigService(config),
758 new MockAsyncProxyResolver); 758 new MockAsyncProxyResolver);
759 GURL test_url("http://www.microsoft.com"); 759 GURL test_url("http://www.microsoft.com");
760 ProxyInfo info; 760 ProxyInfo info;
761 TestCompletionCallback callback; 761 TestCompletionCallback callback;
762 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 762 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
763 EXPECT_EQ(OK, rv); 763 EXPECT_EQ(OK, rv);
764 EXPECT_FALSE(info.is_direct()); 764 EXPECT_FALSE(info.is_direct());
765 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 765 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
766 } 766 }
767 } 767 }
768 768
769 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries 769 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries
770 // fall back to the SOCKS proxy. 770 // fall back to the SOCKS proxy.
771 TEST(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { 771 TEST(ProxyServiceTest, DefaultProxyFallbackToSOCKS) {
772 ProxyConfig config; 772 ProxyConfig config;
773 config.proxy_rules.ParseFromString("http=foopy1:8080;socks=foopy2:1080"); 773 config.proxy_rules.ParseFromString("http=foopy1:8080;socks=foopy2:1080");
774 config.auto_detect = false; 774 config.auto_detect = false;
775 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, 775 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
776 config.proxy_rules.type); 776 config.proxy_rules.type);
777 777
778 { 778 {
779 ProxyService service(new MockProxyConfigService(config), 779 ProxyService service(new MockProxyConfigService(config),
780 new MockAsyncProxyResolver); 780 new MockAsyncProxyResolver);
781 GURL test_url("http://www.msn.com"); 781 GURL test_url("http://www.msn.com");
782 ProxyInfo info; 782 ProxyInfo info;
783 TestCompletionCallback callback; 783 TestCompletionCallback callback;
784 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 784 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
785 EXPECT_EQ(OK, rv); 785 EXPECT_EQ(OK, rv);
786 EXPECT_FALSE(info.is_direct()); 786 EXPECT_FALSE(info.is_direct());
787 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 787 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
788 } 788 }
789 { 789 {
790 ProxyService service(new MockProxyConfigService(config), 790 ProxyService service(new MockProxyConfigService(config),
791 new MockAsyncProxyResolver); 791 new MockAsyncProxyResolver);
792 GURL test_url("ftp://ftp.google.com"); 792 GURL test_url("ftp://ftp.google.com");
793 ProxyInfo info; 793 ProxyInfo info;
794 TestCompletionCallback callback; 794 TestCompletionCallback callback;
795 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 795 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
796 EXPECT_EQ(OK, rv); 796 EXPECT_EQ(OK, rv);
797 EXPECT_FALSE(info.is_direct()); 797 EXPECT_FALSE(info.is_direct());
798 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); 798 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI());
799 } 799 }
800 { 800 {
801 ProxyService service(new MockProxyConfigService(config), 801 ProxyService service(new MockProxyConfigService(config),
802 new MockAsyncProxyResolver); 802 new MockAsyncProxyResolver);
803 GURL test_url("https://webbranch.techcu.com"); 803 GURL test_url("https://webbranch.techcu.com");
804 ProxyInfo info; 804 ProxyInfo info;
805 TestCompletionCallback callback; 805 TestCompletionCallback callback;
806 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 806 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
807 EXPECT_EQ(OK, rv); 807 EXPECT_EQ(OK, rv);
808 EXPECT_FALSE(info.is_direct()); 808 EXPECT_FALSE(info.is_direct());
809 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); 809 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI());
810 } 810 }
811 { 811 {
812 ProxyService service(new MockProxyConfigService(config), 812 ProxyService service(new MockProxyConfigService(config),
813 new MockAsyncProxyResolver); 813 new MockAsyncProxyResolver);
814 GURL test_url("unknown://www.microsoft.com"); 814 GURL test_url("unknown://www.microsoft.com");
815 ProxyInfo info; 815 ProxyInfo info;
816 TestCompletionCallback callback; 816 TestCompletionCallback callback;
817 int rv = service.ResolveProxy(test_url, &info, &callback, NULL); 817 int rv = service.ResolveProxy(NULL, test_url, &info, &callback, NULL);
818 EXPECT_EQ(OK, rv); 818 EXPECT_EQ(OK, rv);
819 EXPECT_FALSE(info.is_direct()); 819 EXPECT_FALSE(info.is_direct());
820 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); 820 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI());
821 } 821 }
822 } 822 }
823 823
824 // Test cancellation of an in-progress request. 824 // Test cancellation of an in-progress request.
825 TEST(ProxyServiceTest, CancelInProgressRequest) { 825 TEST(ProxyServiceTest, CancelInProgressRequest) {
826 MockProxyConfigService* config_service = 826 MockProxyConfigService* config_service =
827 new MockProxyConfigService("http://foopy/proxy.pac"); 827 new MockProxyConfigService("http://foopy/proxy.pac");
828 828
829 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 829 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
830 830
831 ProxyService service(config_service, resolver); 831 ProxyService service(config_service, resolver);
832 832
833 // Start 3 requests. 833 // Start 3 requests.
834 834
835 ProxyInfo info1; 835 ProxyInfo info1;
836 TestCompletionCallback callback1; 836 TestCompletionCallback callback1;
837 int rv = service.ResolveProxy( 837 int rv = service.ResolveProxy(
838 GURL("http://request1"), &info1, &callback1, NULL); 838 NULL, GURL("http://request1"), &info1, &callback1, NULL);
839 EXPECT_EQ(ERR_IO_PENDING, rv); 839 EXPECT_EQ(ERR_IO_PENDING, rv);
840 840
841 // Nothing has been sent to the proxy resolver yet, since the proxy 841 // Nothing has been sent to the proxy resolver yet, since the proxy
842 // resolver has not been configured yet. 842 // resolver has not been configured yet.
843 ASSERT_EQ(0u, resolver->pending_requests().size()); 843 ASSERT_EQ(0u, resolver->pending_requests().size());
844 844
845 // Successfully initialize the PAC script. 845 // Successfully initialize the PAC script.
846 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 846 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
847 resolver->pending_set_pac_script_request()->pac_url()); 847 resolver->pending_set_pac_script_request()->pac_url());
848 resolver->pending_set_pac_script_request()->CompleteNow(OK); 848 resolver->pending_set_pac_script_request()->CompleteNow(OK);
849 849
850 ASSERT_EQ(1u, resolver->pending_requests().size()); 850 ASSERT_EQ(1u, resolver->pending_requests().size());
851 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url()); 851 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url());
852 852
853 ProxyInfo info2; 853 ProxyInfo info2;
854 TestCompletionCallback callback2; 854 TestCompletionCallback callback2;
855 ProxyService::PacRequest* request2; 855 ProxyService::PacRequest* request2;
856 rv = service.ResolveProxy( 856 rv = service.ResolveProxy(
857 GURL("http://request2"), &info2, &callback2, &request2); 857 NULL, GURL("http://request2"), &info2, &callback2, &request2);
858 EXPECT_EQ(ERR_IO_PENDING, rv); 858 EXPECT_EQ(ERR_IO_PENDING, rv);
859 ASSERT_EQ(2u, resolver->pending_requests().size()); 859 ASSERT_EQ(2u, resolver->pending_requests().size());
860 EXPECT_EQ(GURL("http://request2"), resolver->pending_requests()[1]->url()); 860 EXPECT_EQ(GURL("http://request2"), resolver->pending_requests()[1]->url());
861 861
862 ProxyInfo info3; 862 ProxyInfo info3;
863 TestCompletionCallback callback3; 863 TestCompletionCallback callback3;
864 rv = service.ResolveProxy( 864 rv = service.ResolveProxy(
865 GURL("http://request3"), &info3, &callback3, NULL); 865 NULL, GURL("http://request3"), &info3, &callback3, NULL);
866 EXPECT_EQ(ERR_IO_PENDING, rv); 866 EXPECT_EQ(ERR_IO_PENDING, rv);
867 ASSERT_EQ(3u, resolver->pending_requests().size()); 867 ASSERT_EQ(3u, resolver->pending_requests().size());
868 EXPECT_EQ(GURL("http://request3"), resolver->pending_requests()[2]->url()); 868 EXPECT_EQ(GURL("http://request3"), resolver->pending_requests()[2]->url());
869 869
870 // Cancel the second request 870 // Cancel the second request
871 service.CancelPacRequest(request2); 871 service.CancelPacRequest(request2);
872 872
873 ASSERT_EQ(2u, resolver->pending_requests().size()); 873 ASSERT_EQ(2u, resolver->pending_requests().size());
874 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url()); 874 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url());
875 EXPECT_EQ(GURL("http://request3"), resolver->pending_requests()[1]->url()); 875 EXPECT_EQ(GURL("http://request3"), resolver->pending_requests()[1]->url());
(...skipping 29 matching lines...) Expand all
905 ProxyService service(config_service, resolver); 905 ProxyService service(config_service, resolver);
906 906
907 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 907 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
908 service.SetProxyScriptFetcher(fetcher); 908 service.SetProxyScriptFetcher(fetcher);
909 909
910 // Start 3 requests. 910 // Start 3 requests.
911 911
912 ProxyInfo info1; 912 ProxyInfo info1;
913 TestCompletionCallback callback1; 913 TestCompletionCallback callback1;
914 int rv = service.ResolveProxy( 914 int rv = service.ResolveProxy(
915 GURL("http://request1"), &info1, &callback1, NULL); 915 NULL, GURL("http://request1"), &info1, &callback1, NULL);
916 EXPECT_EQ(ERR_IO_PENDING, rv); 916 EXPECT_EQ(ERR_IO_PENDING, rv);
917 917
918 // The first request should have triggered download of PAC script. 918 // The first request should have triggered download of PAC script.
919 EXPECT_TRUE(fetcher->has_pending_request()); 919 EXPECT_TRUE(fetcher->has_pending_request());
920 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 920 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
921 921
922 ProxyInfo info2; 922 ProxyInfo info2;
923 TestCompletionCallback callback2; 923 TestCompletionCallback callback2;
924 rv = service.ResolveProxy( 924 rv = service.ResolveProxy(
925 GURL("http://request2"), &info2, &callback2, NULL); 925 NULL, GURL("http://request2"), &info2, &callback2, NULL);
926 EXPECT_EQ(ERR_IO_PENDING, rv); 926 EXPECT_EQ(ERR_IO_PENDING, rv);
927 927
928 ProxyInfo info3; 928 ProxyInfo info3;
929 TestCompletionCallback callback3; 929 TestCompletionCallback callback3;
930 rv = service.ResolveProxy( 930 rv = service.ResolveProxy(
931 GURL("http://request3"), &info3, &callback3, NULL); 931 NULL, GURL("http://request3"), &info3, &callback3, NULL);
932 EXPECT_EQ(ERR_IO_PENDING, rv); 932 EXPECT_EQ(ERR_IO_PENDING, rv);
933 933
934 // Nothing has been sent to the resolver yet. 934 // Nothing has been sent to the resolver yet.
935 EXPECT_TRUE(resolver->pending_requests().empty()); 935 EXPECT_TRUE(resolver->pending_requests().empty());
936 936
937 // At this point the ProxyService should be waiting for the 937 // At this point the ProxyService should be waiting for the
938 // ProxyScriptFetcher to invoke its completion callback, notifying it of 938 // ProxyScriptFetcher to invoke its completion callback, notifying it of
939 // PAC script download completion. 939 // PAC script download completion.
940 fetcher->NotifyFetchCompletion(OK, "pac-v1"); 940 fetcher->NotifyFetchCompletion(OK, "pac-v1");
941 941
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 ProxyService service(config_service, resolver); 983 ProxyService service(config_service, resolver);
984 984
985 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 985 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
986 service.SetProxyScriptFetcher(fetcher); 986 service.SetProxyScriptFetcher(fetcher);
987 987
988 // Start 3 requests. 988 // Start 3 requests.
989 ProxyInfo info1; 989 ProxyInfo info1;
990 TestCompletionCallback callback1; 990 TestCompletionCallback callback1;
991 ProxyService::PacRequest* request1; 991 ProxyService::PacRequest* request1;
992 int rv = service.ResolveProxy( 992 int rv = service.ResolveProxy(
993 GURL("http://request1"), &info1, &callback1, &request1); 993 NULL, GURL("http://request1"), &info1, &callback1, &request1);
994 EXPECT_EQ(ERR_IO_PENDING, rv); 994 EXPECT_EQ(ERR_IO_PENDING, rv);
995 995
996 // The first request should have triggered download of PAC script. 996 // The first request should have triggered download of PAC script.
997 EXPECT_TRUE(fetcher->has_pending_request()); 997 EXPECT_TRUE(fetcher->has_pending_request());
998 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 998 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
999 999
1000 ProxyInfo info2; 1000 ProxyInfo info2;
1001 TestCompletionCallback callback2; 1001 TestCompletionCallback callback2;
1002 ProxyService::PacRequest* request2; 1002 ProxyService::PacRequest* request2;
1003 rv = service.ResolveProxy( 1003 rv = service.ResolveProxy(
1004 GURL("http://request2"), &info2, &callback2, &request2); 1004 NULL, GURL("http://request2"), &info2, &callback2, &request2);
1005 EXPECT_EQ(ERR_IO_PENDING, rv); 1005 EXPECT_EQ(ERR_IO_PENDING, rv);
1006 1006
1007 ProxyInfo info3; 1007 ProxyInfo info3;
1008 TestCompletionCallback callback3; 1008 TestCompletionCallback callback3;
1009 rv = service.ResolveProxy( 1009 rv = service.ResolveProxy(
1010 GURL("http://request3"), &info3, &callback3, NULL); 1010 NULL, GURL("http://request3"), &info3, &callback3, NULL);
1011 EXPECT_EQ(ERR_IO_PENDING, rv); 1011 EXPECT_EQ(ERR_IO_PENDING, rv);
1012 1012
1013 // Nothing has been sent to the resolver yet. 1013 // Nothing has been sent to the resolver yet.
1014 EXPECT_TRUE(resolver->pending_requests().empty()); 1014 EXPECT_TRUE(resolver->pending_requests().empty());
1015 1015
1016 // Cancel the first 2 requests. 1016 // Cancel the first 2 requests.
1017 service.CancelPacRequest(request1); 1017 service.CancelPacRequest(request1);
1018 service.CancelPacRequest(request2); 1018 service.CancelPacRequest(request2);
1019 1019
1020 // At this point the ProxyService should be waiting for the 1020 // At this point the ProxyService should be waiting for the
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 ProxyService service(config_service, resolver); 1056 ProxyService service(config_service, resolver);
1057 1057
1058 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 1058 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
1059 service.SetProxyScriptFetcher(fetcher); 1059 service.SetProxyScriptFetcher(fetcher);
1060 1060
1061 // Start 2 requests. 1061 // Start 2 requests.
1062 1062
1063 ProxyInfo info1; 1063 ProxyInfo info1;
1064 TestCompletionCallback callback1; 1064 TestCompletionCallback callback1;
1065 int rv = service.ResolveProxy( 1065 int rv = service.ResolveProxy(
1066 GURL("http://request1"), &info1, &callback1, NULL); 1066 NULL, GURL("http://request1"), &info1, &callback1, NULL);
1067 EXPECT_EQ(ERR_IO_PENDING, rv); 1067 EXPECT_EQ(ERR_IO_PENDING, rv);
1068 1068
1069 ProxyInfo info2; 1069 ProxyInfo info2;
1070 TestCompletionCallback callback2; 1070 TestCompletionCallback callback2;
1071 ProxyService::PacRequest* request2; 1071 ProxyService::PacRequest* request2;
1072 rv = service.ResolveProxy( 1072 rv = service.ResolveProxy(
1073 GURL("http://request2"), &info2, &callback2, &request2); 1073 NULL, GURL("http://request2"), &info2, &callback2, &request2);
1074 EXPECT_EQ(ERR_IO_PENDING, rv); 1074 EXPECT_EQ(ERR_IO_PENDING, rv);
1075 1075
1076 // Check that nothing has been sent to the proxy resolver yet. 1076 // Check that nothing has been sent to the proxy resolver yet.
1077 ASSERT_EQ(0u, resolver->pending_requests().size()); 1077 ASSERT_EQ(0u, resolver->pending_requests().size());
1078 1078
1079 // It should be trying to auto-detect first -- FAIL the autodetect during 1079 // It should be trying to auto-detect first -- FAIL the autodetect during
1080 // the script download. 1080 // the script download.
1081 EXPECT_TRUE(fetcher->has_pending_request()); 1081 EXPECT_TRUE(fetcher->has_pending_request());
1082 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 1082 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
1083 fetcher->NotifyFetchCompletion(ERR_FAILED, ""); 1083 fetcher->NotifyFetchCompletion(ERR_FAILED, "");
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1126 ProxyService service(config_service, resolver); 1126 ProxyService service(config_service, resolver);
1127 1127
1128 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 1128 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
1129 service.SetProxyScriptFetcher(fetcher); 1129 service.SetProxyScriptFetcher(fetcher);
1130 1130
1131 // Start 2 requests. 1131 // Start 2 requests.
1132 1132
1133 ProxyInfo info1; 1133 ProxyInfo info1;
1134 TestCompletionCallback callback1; 1134 TestCompletionCallback callback1;
1135 int rv = service.ResolveProxy( 1135 int rv = service.ResolveProxy(
1136 GURL("http://request1"), &info1, &callback1, NULL); 1136 NULL, GURL("http://request1"), &info1, &callback1, NULL);
1137 EXPECT_EQ(ERR_IO_PENDING, rv); 1137 EXPECT_EQ(ERR_IO_PENDING, rv);
1138 1138
1139 ProxyInfo info2; 1139 ProxyInfo info2;
1140 TestCompletionCallback callback2; 1140 TestCompletionCallback callback2;
1141 ProxyService::PacRequest* request2; 1141 ProxyService::PacRequest* request2;
1142 rv = service.ResolveProxy( 1142 rv = service.ResolveProxy(
1143 GURL("http://request2"), &info2, &callback2, &request2); 1143 NULL, GURL("http://request2"), &info2, &callback2, &request2);
1144 EXPECT_EQ(ERR_IO_PENDING, rv); 1144 EXPECT_EQ(ERR_IO_PENDING, rv);
1145 1145
1146 // Check that nothing has been sent to the proxy resolver yet. 1146 // Check that nothing has been sent to the proxy resolver yet.
1147 ASSERT_EQ(0u, resolver->pending_requests().size()); 1147 ASSERT_EQ(0u, resolver->pending_requests().size());
1148 1148
1149 // It should be trying to auto-detect first -- succeed the download. 1149 // It should be trying to auto-detect first -- succeed the download.
1150 EXPECT_TRUE(fetcher->has_pending_request()); 1150 EXPECT_TRUE(fetcher->has_pending_request());
1151 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 1151 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
1152 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); 1152 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents");
1153 1153
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1201 ProxyService service(config_service, resolver); 1201 ProxyService service(config_service, resolver);
1202 1202
1203 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 1203 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
1204 service.SetProxyScriptFetcher(fetcher); 1204 service.SetProxyScriptFetcher(fetcher);
1205 1205
1206 // Start 2 requests. 1206 // Start 2 requests.
1207 1207
1208 ProxyInfo info1; 1208 ProxyInfo info1;
1209 TestCompletionCallback callback1; 1209 TestCompletionCallback callback1;
1210 int rv = service.ResolveProxy( 1210 int rv = service.ResolveProxy(
1211 GURL("http://request1"), &info1, &callback1, NULL); 1211 NULL, GURL("http://request1"), &info1, &callback1, NULL);
1212 EXPECT_EQ(ERR_IO_PENDING, rv); 1212 EXPECT_EQ(ERR_IO_PENDING, rv);
1213 1213
1214 ProxyInfo info2; 1214 ProxyInfo info2;
1215 TestCompletionCallback callback2; 1215 TestCompletionCallback callback2;
1216 ProxyService::PacRequest* request2; 1216 ProxyService::PacRequest* request2;
1217 rv = service.ResolveProxy( 1217 rv = service.ResolveProxy(
1218 GURL("http://request2"), &info2, &callback2, &request2); 1218 NULL, GURL("http://request2"), &info2, &callback2, &request2);
1219 EXPECT_EQ(ERR_IO_PENDING, rv); 1219 EXPECT_EQ(ERR_IO_PENDING, rv);
1220 1220
1221 // Check that nothing has been sent to the proxy resolver yet. 1221 // Check that nothing has been sent to the proxy resolver yet.
1222 ASSERT_EQ(0u, resolver->pending_requests().size()); 1222 ASSERT_EQ(0u, resolver->pending_requests().size());
1223 1223
1224 // It should be trying to auto-detect first -- fail the download. 1224 // It should be trying to auto-detect first -- fail the download.
1225 EXPECT_TRUE(fetcher->has_pending_request()); 1225 EXPECT_TRUE(fetcher->has_pending_request());
1226 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 1226 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
1227 fetcher->NotifyFetchCompletion(ERR_FAILED, ""); 1227 fetcher->NotifyFetchCompletion(ERR_FAILED, "");
1228 1228
(...skipping 29 matching lines...) Expand all
1258 ProxyService service(config_service, resolver); 1258 ProxyService service(config_service, resolver);
1259 1259
1260 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 1260 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
1261 service.SetProxyScriptFetcher(fetcher); 1261 service.SetProxyScriptFetcher(fetcher);
1262 1262
1263 // Start 1 requests. 1263 // Start 1 requests.
1264 1264
1265 ProxyInfo info1; 1265 ProxyInfo info1;
1266 TestCompletionCallback callback1; 1266 TestCompletionCallback callback1;
1267 int rv = service.ResolveProxy( 1267 int rv = service.ResolveProxy(
1268 GURL("http://www.google.com"), &info1, &callback1, NULL); 1268 NULL, GURL("http://www.google.com"), &info1, &callback1, NULL);
1269 EXPECT_EQ(ERR_IO_PENDING, rv); 1269 EXPECT_EQ(ERR_IO_PENDING, rv);
1270 1270
1271 // Check that nothing has been sent to the proxy resolver yet. 1271 // Check that nothing has been sent to the proxy resolver yet.
1272 ASSERT_EQ(0u, resolver->pending_requests().size()); 1272 ASSERT_EQ(0u, resolver->pending_requests().size());
1273 1273
1274 // It should be trying to auto-detect first -- succeed the download. 1274 // It should be trying to auto-detect first -- succeed the download.
1275 EXPECT_TRUE(fetcher->has_pending_request()); 1275 EXPECT_TRUE(fetcher->has_pending_request());
1276 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 1276 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
1277 fetcher->NotifyFetchCompletion(OK, "auto-detect"); 1277 fetcher->NotifyFetchCompletion(OK, "auto-detect");
1278 1278
(...skipping 10 matching lines...) Expand all
1289 resolver->pending_requests()[0]->CompleteNow(OK); 1289 resolver->pending_requests()[0]->CompleteNow(OK);
1290 1290
1291 // Verify that request ran as expected. 1291 // Verify that request ran as expected.
1292 EXPECT_EQ(OK, callback1.WaitForResult()); 1292 EXPECT_EQ(OK, callback1.WaitForResult());
1293 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 1293 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
1294 1294
1295 // Start another request, it should pickup the bypass item. 1295 // Start another request, it should pickup the bypass item.
1296 ProxyInfo info2; 1296 ProxyInfo info2;
1297 TestCompletionCallback callback2; 1297 TestCompletionCallback callback2;
1298 rv = service.ResolveProxy( 1298 rv = service.ResolveProxy(
1299 GURL("http://www.google.com"), &info2, &callback2, NULL); 1299 NULL, GURL("http://www.google.com"), &info2, &callback2, NULL);
1300 EXPECT_EQ(ERR_IO_PENDING, rv); 1300 EXPECT_EQ(ERR_IO_PENDING, rv);
1301 1301
1302 ASSERT_EQ(1u, resolver->pending_requests().size()); 1302 ASSERT_EQ(1u, resolver->pending_requests().size());
1303 EXPECT_EQ(GURL("http://www.google.com"), 1303 EXPECT_EQ(GURL("http://www.google.com"),
1304 resolver->pending_requests()[0]->url()); 1304 resolver->pending_requests()[0]->url());
1305 1305
1306 // Complete the pending request. 1306 // Complete the pending request.
1307 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80"); 1307 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80");
1308 resolver->pending_requests()[0]->CompleteNow(OK); 1308 resolver->pending_requests()[0]->CompleteNow(OK);
1309 1309
1310 EXPECT_EQ(OK, callback2.WaitForResult()); 1310 EXPECT_EQ(OK, callback2.WaitForResult());
1311 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 1311 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
1312 } 1312 }
1313 1313
1314 TEST(ProxyServiceTest, ResetProxyConfigService) { 1314 TEST(ProxyServiceTest, ResetProxyConfigService) {
1315 ProxyConfig config1; 1315 ProxyConfig config1;
1316 config1.proxy_rules.ParseFromString("foopy1:8080"); 1316 config1.proxy_rules.ParseFromString("foopy1:8080");
1317 config1.auto_detect = false; 1317 config1.auto_detect = false;
1318 ProxyService service(new MockProxyConfigService(config1), 1318 ProxyService service(new MockProxyConfigService(config1),
1319 new MockAsyncProxyResolverExpectsBytes); 1319 new MockAsyncProxyResolverExpectsBytes);
1320 1320
1321 ProxyInfo info; 1321 ProxyInfo info;
1322 TestCompletionCallback callback1; 1322 TestCompletionCallback callback1;
1323 int rv = service.ResolveProxy( 1323 int rv = service.ResolveProxy(
1324 GURL("http://request1"), &info, &callback1, NULL); 1324 NULL, GURL("http://request1"), &info, &callback1, NULL);
1325 EXPECT_EQ(OK, rv); 1325 EXPECT_EQ(OK, rv);
1326 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1326 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1327 1327
1328 ProxyConfig config2; 1328 ProxyConfig config2;
1329 config2.proxy_rules.ParseFromString("foopy2:8080"); 1329 config2.proxy_rules.ParseFromString("foopy2:8080");
1330 config2.auto_detect = false; 1330 config2.auto_detect = false;
1331 service.ResetConfigService(new MockProxyConfigService(config2)); 1331 service.ResetConfigService(new MockProxyConfigService(config2));
1332 TestCompletionCallback callback2; 1332 TestCompletionCallback callback2;
1333 rv = service.ResolveProxy(GURL("http://request2"), &info, &callback2, NULL); 1333 rv = service.ResolveProxy(
1334 NULL, GURL("http://request2"), &info, &callback2, NULL);
1334 EXPECT_EQ(OK, rv); 1335 EXPECT_EQ(OK, rv);
1335 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); 1336 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI());
1336 } 1337 }
1337 1338
1338 TEST(ProxyServiceTest, IsLocalName) { 1339 TEST(ProxyServiceTest, IsLocalName) {
1339 const struct { 1340 const struct {
1340 const char* url; 1341 const char* url;
1341 bool expected_is_local; 1342 bool expected_is_local;
1342 } tests[] = { 1343 } tests[] = {
1343 // Single-component hostnames are considered local. 1344 // Single-component hostnames are considered local.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1387 1388
1388 MockProxyConfigService* config_service = new MockProxyConfigService(config); 1389 MockProxyConfigService* config_service = new MockProxyConfigService(config);
1389 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 1390 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
1390 ProxyService service(config_service, resolver); 1391 ProxyService service(config_service, resolver);
1391 1392
1392 // Start 1 requests. 1393 // Start 1 requests.
1393 1394
1394 ProxyInfo info1; 1395 ProxyInfo info1;
1395 TestCompletionCallback callback1; 1396 TestCompletionCallback callback1;
1396 int rv = service.ResolveProxy( 1397 int rv = service.ResolveProxy(
1397 GURL("http://www.google.com"), &info1, &callback1, NULL); 1398 NULL, GURL("http://www.google.com"), &info1, &callback1, NULL);
1398 EXPECT_EQ(ERR_IO_PENDING, rv); 1399 EXPECT_EQ(ERR_IO_PENDING, rv);
1399 1400
1400 // Check that nothing has been sent to the proxy resolver yet. 1401 // Check that nothing has been sent to the proxy resolver yet.
1401 ASSERT_EQ(0u, resolver->pending_requests().size()); 1402 ASSERT_EQ(0u, resolver->pending_requests().size());
1402 1403
1403 // Fail the setting of autodetect script. 1404 // Fail the setting of autodetect script.
1404 EXPECT_EQ(GURL(), resolver->pending_set_pac_script_request()->pac_url()); 1405 EXPECT_EQ(GURL(), resolver->pending_set_pac_script_request()->pac_url());
1405 resolver->pending_set_pac_script_request()->CompleteNow(ERR_FAILED); 1406 resolver->pending_set_pac_script_request()->CompleteNow(ERR_FAILED);
1406 1407
1407 // Verify that request ran as expected -- should have fallen back to direct. 1408 // Verify that request ran as expected -- should have fallen back to direct.
1408 EXPECT_EQ(OK, callback1.WaitForResult()); 1409 EXPECT_EQ(OK, callback1.WaitForResult());
1409 EXPECT_TRUE(info1.is_direct()); 1410 EXPECT_TRUE(info1.is_direct());
1410 1411
1411 // Force the ProxyService to pull down a new proxy configuration. 1412 // Force the ProxyService to pull down a new proxy configuration.
1412 // (Even though the configuration isn't old/bad). 1413 // (Even though the configuration isn't old/bad).
1413 service.UpdateConfig(); 1414 service.UpdateConfig();
1414 1415
1415 // Start another request -- the effective configuration has not 1416 // Start another request -- the effective configuration has not
1416 // changed, so we shouldn't re-run the autodetect step. 1417 // changed, so we shouldn't re-run the autodetect step.
1417 // Rather, it should complete synchronously as direct-connect. 1418 // Rather, it should complete synchronously as direct-connect.
1418 ProxyInfo info2; 1419 ProxyInfo info2;
1419 TestCompletionCallback callback2; 1420 TestCompletionCallback callback2;
1420 rv = service.ResolveProxy( 1421 rv = service.ResolveProxy(
1421 GURL("http://www.google.com"), &info2, &callback2, NULL); 1422 NULL, GURL("http://www.google.com"), &info2, &callback2, NULL);
1422 EXPECT_EQ(OK, rv); 1423 EXPECT_EQ(OK, rv);
1423 1424
1424 EXPECT_TRUE(info2.is_direct()); 1425 EXPECT_TRUE(info2.is_direct());
1425 } 1426 }
1426 1427
1427 // Test that when going from a configuration that required PAC to one 1428 // Test that when going from a configuration that required PAC to one
1428 // that does NOT, we unset the variable |should_use_proxy_resolver_|. 1429 // that does NOT, we unset the variable |should_use_proxy_resolver_|.
1429 TEST(ProxyServiceTest, UpdateConfigFromPACToDirect) { 1430 TEST(ProxyServiceTest, UpdateConfigFromPACToDirect) {
1430 ProxyConfig config; 1431 ProxyConfig config;
1431 config.auto_detect = true; 1432 config.auto_detect = true;
1432 1433
1433 MockProxyConfigService* config_service = new MockProxyConfigService(config); 1434 MockProxyConfigService* config_service = new MockProxyConfigService(config);
1434 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 1435 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
1435 ProxyService service(config_service, resolver); 1436 ProxyService service(config_service, resolver);
1436 1437
1437 // Start 1 request. 1438 // Start 1 request.
1438 1439
1439 ProxyInfo info1; 1440 ProxyInfo info1;
1440 TestCompletionCallback callback1; 1441 TestCompletionCallback callback1;
1441 int rv = service.ResolveProxy( 1442 int rv = service.ResolveProxy(
1442 GURL("http://www.google.com"), &info1, &callback1, NULL); 1443 NULL, GURL("http://www.google.com"), &info1, &callback1, NULL);
1443 EXPECT_EQ(ERR_IO_PENDING, rv); 1444 EXPECT_EQ(ERR_IO_PENDING, rv);
1444 1445
1445 // Check that nothing has been sent to the proxy resolver yet. 1446 // Check that nothing has been sent to the proxy resolver yet.
1446 ASSERT_EQ(0u, resolver->pending_requests().size()); 1447 ASSERT_EQ(0u, resolver->pending_requests().size());
1447 1448
1448 // Successfully set the autodetect script. 1449 // Successfully set the autodetect script.
1449 EXPECT_EQ(GURL(), resolver->pending_set_pac_script_request()->pac_url()); 1450 EXPECT_EQ(GURL(), resolver->pending_set_pac_script_request()->pac_url());
1450 resolver->pending_set_pac_script_request()->CompleteNow(OK); 1451 resolver->pending_set_pac_script_request()->CompleteNow(OK);
1451 1452
1452 // Complete the pending request. 1453 // Complete the pending request.
(...skipping 11 matching lines...) Expand all
1464 // This new configuration no longer has auto_detect set, so 1465 // This new configuration no longer has auto_detect set, so
1465 // requests should complete synchronously now as direct-connect. 1466 // requests should complete synchronously now as direct-connect.
1466 config.auto_detect = false; 1467 config.auto_detect = false;
1467 config_service->config = config; 1468 config_service->config = config;
1468 service.UpdateConfig(); 1469 service.UpdateConfig();
1469 1470
1470 // Start another request -- the effective configuration has changed. 1471 // Start another request -- the effective configuration has changed.
1471 ProxyInfo info2; 1472 ProxyInfo info2;
1472 TestCompletionCallback callback2; 1473 TestCompletionCallback callback2;
1473 rv = service.ResolveProxy( 1474 rv = service.ResolveProxy(
1474 GURL("http://www.google.com"), &info2, &callback2, NULL); 1475 NULL, GURL("http://www.google.com"), &info2, &callback2, NULL);
1475 EXPECT_EQ(OK, rv); 1476 EXPECT_EQ(OK, rv);
1476 1477
1477 EXPECT_TRUE(info2.is_direct()); 1478 EXPECT_TRUE(info2.is_direct());
1478 } 1479 }
1479 1480
1480 } // namespace net 1481 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_service.cc ('k') | net/socket/client_socket_handle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698